ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggZGZhYjEyZi4uZWJhOWJmOSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTY2LDYgKzY2LDcgQEAKIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPgogTGVvbmlkIEkgQW5hbmlldiA8bGVvbmlkLmkuYW5hbmlldkBpbnRlbC5jb20+CiBMaW5hcyBWZXBzdGFzIDxsaW5hc0BhdXN0aW4uaWJtLmNvbT4KK01hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4KIE1hdHRoaWV1IENBU1RFVCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM2MmRjYjMuLjIzNTg4NDYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTY1MywxNCArMTY1MywxNCBAQAogUzogVVNBCiAKIE46IERhdmUgSm9uZXMKLUU6IGRhdmVqQGNvZGVtb25rZXkub3JnLnVrCitFOiBkYXZlakByZWRoYXQuY29tCiBXOiBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrCi1EOiB4ODYgZXJyYXRhL3NldHVwIG1haW50ZW5hbmNlLgotRDogQUdQR0FSVCBkcml2ZXIuCitEOiBBc3NvcnRlZCBWSUEgeDg2IHN1cHBvcnQuCitEOiAyLjUgQUdQR0FSVCBvdmVyaGF1bC4KIEQ6IENQVUZSRVEgbWFpbnRlbmFuY2UuCi1EOiBCYWNrcG9ydC9Gb3J3YXJkcG9ydCBtZXJnZSBtb25rZXkuCi1EOiBWYXJpb3VzIEphbml0b3Igd29yay4KLVM6IFVuaXRlZCBLaW5nZG9tCitEOiBGZWRvcmEga2VybmVsIG1haW50YWluZW5jZS4KK0Q6IE1pc2MvT3RoZXIuCitTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCiBOOiBNYXJ0aW4gSm9zZnNzb24KIEU6IGdhbmRhbGZAd2x1Zy53ZXN0Ym8uc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItdXNiLXVzYnRtYyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItdXNiLXVzYnRtYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTc1ZmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci11c2ItdXNidG1jCkBAIC0wLDAgKzEsNjIgQEAKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL2ludGVyZmFjZV9jYXBhYmlsaXRpZXMKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL2RldmljZV9jYXBhYmlsaXRpZXMKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGVzZSBmaWxlcyBzaG93IHRoZSB2YXJpb3VzIFVTQiBUTUMgY2FwYWJpbGl0aWVzIGFzIGRlc2NyaWJlZAorCQlieSB0aGUgZGV2aWNlIGl0c2VsZi4gIFRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBiaXRmaWVsZHMKKwkJY2FuIGJlIGZvdW5kIGluIHRoZSBVU0IgVE1DIGRvY3VtZW50cyBmcm9tIHRoZSBVU0ItSUYgZW50aXRsZWQKKwkJIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24KKwkJKFVTQlRNQykgUmV2aXNpb24gMS4wIiBzZWN0aW9uIDQuMi4xLjguCisKKwkJVGhlIGZpbGVzIGFyZSByZWFkIG9ubHkuCisKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovdXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL3VzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhlc2UgZmlsZXMgc2hvdyB0aGUgdmFyaW91cyBVU0IgVE1DIGNhcGFiaWxpdGllcyBhcyBkZXNjcmliZWQKKwkJYnkgdGhlIGRldmljZSBpdHNlbGYuICBUaGUgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgYml0ZmllbGRzCisJCWNhbiBiZSBmb3VuZCBpbiB0aGUgVVNCIFRNQyBkb2N1bWVudHMgZnJvbSB0aGUgVVNCLUlGIGVudGl0bGVkCisJCSJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcywgU3ViY2xhc3MKKwkJVVNCNDg4IFNwZWNpZmljYXRpb24gKFVTQlRNQy1VU0I0ODgpIFJldmlzaW9uIDEuMCIgc2VjdGlvbgorCQk0LjIuMi4KKworCQlUaGUgZmlsZXMgYXJlIHJlYWQgb25seS4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9UZXJtQ2hhcgorRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBpcyB0aGUgVGVybUNoYXIgdmFsdWUgdG8gYmUgc2VudCB0byB0aGUgVVNCIFRNQworCQlkZXZpY2UgYXMgZGVzY3JpYmVkIGJ5IHRoZSBkb2N1bWVudCwgIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QKKwkJYW5kIE1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24KKwkJKFVTQlRNQykgUmV2aXNpb24gMS4wIiBhcyBwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KKworCQlOb3RlIHRoYXQgdGhlIFRlcm1DaGFyRW5hYmxlZCBmaWxlIGRldGVybWluZXMgaWYgdGhpcyB2YWx1ZSBpcworCQlzZW50IHRvIHRoZSBkZXZpY2Ugb3Igbm90LgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL1Rlcm1DaGFyRW5hYmxlZAorRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBkZXRlcm1pbmVzIGlmIHRoZSBUZXJtQ2hhciBpcyB0byBiZSBzZW50IHRvIHRoZQorCQlkZXZpY2Ugb24gZXZlcnkgdHJhbnNhY3Rpb24gb3Igbm90LiAgRm9yIG1vcmUgZGV0YWlscyBhYm91dAorCQl0aGlzLCBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCwgIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kCisJCU1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24gKFVTQlRNQykgUmV2aXNpb24gMS4wIiBhcworCQlwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9hdXRvX2Fib3J0CitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGRldGVybWluZXMgaWYgdGhlIHRoZSB0cmFuc2FjdGlvbiBvZiB0aGUgVVNCIFRNQworCQlkZXZpY2UgaXMgdG8gYmUgYXV0b21hdGljYWxseSBhYm9ydGVkIGlmIHRoZXJlIGlzIGFueSBlcnJvci4KKwkJRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzLCBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCwKKwkJIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24KKwkJKFVTQlRNQykgUmV2aXNpb24gMS4wIiBhcyBwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgppbmRleCAxMWEzYzE2Li5kZjZjOGEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCkBAIC04NSwzICs4NSwxOSBAQAogVXNlcnM6CiAJCVBvd2VyVE9QIDxwb3dlckBidWdob3N0Lm9yZz4KIAkJaHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL3Bvd2VydG9wLworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZS88YnVzbnVtPi08ZGV2bnVtPi4uLjo8Y29uZmlnIG51bT4tPGludGVyZmFjZSBudW0+L3N1cHBvcnRzX2F1dG9zdXNwZW5kCitEYXRlOgkJSmFudWFyeSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjcKK0NvbnRhY3Q6CVNhcmFoIFNoYXJwIDxzYXJhaC5hLnNoYXJwQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIDEgaWYgdGhlIGludGVyZmFjZSBkcml2ZXIKKwkJZm9yIHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzIGF1dG9zdXNwZW5kLiAgSXQgYWxzbworCQlyZXR1cm5zIDEgaWYgbm8gZHJpdmVyIGhhcyBjbGFpbWVkIHRoaXMgaW50ZXJmYWNlLCBhcyBhbgorCQl1bmNsYWltZWQgaW50ZXJmYWNlIHdpbGwgbm90IHN0b3AgdGhlIGRldmljZSBmcm9tIGJlaW5nCisJCWF1dG9zdXNwZW5kZWQgaWYgYWxsIG90aGVyIGludGVyZmFjZSBkcml2ZXJzIGFyZSBpZGxlLgorCQlUaGUgZmlsZSByZXR1cm5zIDAgaWYgYXV0b3N1c3BlbmQgc3VwcG9ydCBoYXMgbm90IGJlZW4KKwkJYWRkZWQgdG8gdGhlIGRyaXZlci4KK1VzZXJzOgorCQlVU0IgUE0gdG9vbAorCQlnaXQ6Ly9naXQubW9ibGluLm9yZy91c2Vycy9zYXJhaC91c2ItcG0tdG9vbC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYi1kZXZpY2VzLXVzYnNldnNlZyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYi1kZXZpY2VzLXVzYnNldnNlZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjgzMGRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnCkBAIC0wLDAgKzEsNDMgQEAKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9wb3dlcmVkCitEYXRlOgkJQXVndXN0IDIwMDgKK0tlcm5lbCBWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CUhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoJQ29udHJvbHMgd2hldGhlciB0aGUgZGV2aWNlJ3MgZGlzcGxheSB3aWxsIHBvd2VyZWQuCisJCUEgdmFsdWUgb2YgMCBpcyBvZmYgYW5kIGEgbm9uLXplcm8gdmFsdWUgaXMgb24uCisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9tb2RlX21zYgorV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL21vZGVfbHNiCitEYXRlOgkJQXVndXN0IDIwMDgKK0tlcm5lbCBWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CUhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoJQ29udHJvbHMgdGhlIGRldmljZXMgZGlzcGxheSBtb2RlLgorCQlGb3IgYSA2IGNoYXJhY3RlciBkaXNwbGF5IHRoZSB2YWx1ZXMgYXJlCisJCQlNU0IgMHgwNjsgTFNCIDB4M0YsIGFuZAorCQlmb3IgYW4gOCBjaGFyYWN0ZXIgZGlzcGxheSB0aGUgdmFsdWVzIGFyZQorCQkJTVNCIDB4MDg7IExTQiAweEZGLgorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vdGV4dG1vZGUKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgd2F5IHRoZSBkZXZpY2UgaW50ZXJwcmV0cyBpdHMgdGV4dCBidWZmZXIuCisJCXJhdzoJZWFjaCBjaGFyYWN0ZXIgY29udHJvbHMgaXRzIHNlZ21lbnQgbWFudWFsbHkKKwkJaGV4OgllYWNoIGNoYXJhY3RlciBpcyBiZXR3ZWVuIDAtMTUKKwkJYXNjaWk6CWVhY2ggY2hhcmFjdGVyIGlzIGJldHdlZW4gJzAnLSc5JyBhbmQgJ0EnLSdGJy4KKworV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL3RleHQKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglUaGUgdGV4dCAob3IgZGF0YSkgZm9yIHRoZSBkZXZpY2UgdG8gZGlzcGxheQorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vZGVjaW1hbHMKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgZGVjaW1hbCBwbGFjZXMgb24gdGhlIGRldmljZS4KKwkJVG8gc2V0IHRoZSBudGggZGVjaW1hbCBwbGFjZSwgZ2l2ZSB0aGlzIGZpZWxkCisJCXRoZSB2YWx1ZSBvZiAxMCAqKiBuLiBBc3N1bWUgdGhpcyBmaWVsZCBoYXMKKwkJdGhlIHZhbHVlIGsgYW5kIGhhcyAxIG9yIG1vcmUgZGVjaW1hbCBwbGFjZXMgc2V0LAorCQl0byBzZXQgdGhlIG10aCBwbGFjZSAod2hlcmUgbSBpcyBub3QgYWxyZWFkeSBzZXQpLAorCQljaGFuZ2UgdGhpcyBmaWVsZHMgdmFsdWUgdG8gayArIDEwICoqIG0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCmluZGV4IGVhM2JjOTUuLjZlZjJmMDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKQEAgLTU1Nyw2ICs1NTcsOSBAQAogPC9wYXJhPgogCiAhRWRyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwogIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYwogCiA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1oYWNraW5nLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWhhY2tpbmcudG1wbAppbmRleCA0YzYzZTU4Li5hZTE1ZDU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWhhY2tpbmcudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWhhY2tpbmcudG1wbApAQCAtMTEwNSw3ICsxMTA1LDcgQEAKICAgICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+Ci0gICAgICBGdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzIChfX0ZVTkNUSU9OX18pLgorICAgICAgRnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncyAoX19mdW5jX18pLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQKaW5kZXggYTUxZjY5My4uMjU2ZGVmZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vTVNJLUhPV1RPLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQKQEAgLTIzNiwxMCArMjM2LDggQEAKIE1TSS1YIHN0cnVjdHVyZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIE1TSSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBQQ0kKIHN1YnN5c3RlbSwgbm90IGEgZGV2aWNlIGRyaXZlciwgdG8gbWFpbnRhaW4gZnVsbCBjb250cm9sIG9mIHRoZSBNU0ktWAogdGFibGUvTVNJLVggUEJBIChQZW5kaW5nIEJpdCBBcnJheSkgYW5kIE1NSU8gYWRkcmVzcyBzcGFjZSBvZiB0aGUgTVNJLVgKLXRhYmxlL01TSS1YIFBCQS4gIEEgZGV2aWNlIGRyaXZlciBpcyBwcm9oaWJpdGVkIGZyb20gcmVxdWVzdGluZyB0aGUgTU1JTwotYWRkcmVzcyBzcGFjZSBvZiB0aGUgTVNJLVggdGFibGUvTVNJLVggUEJBLiBPdGhlcndpc2UsIHRoZSBQQ0kgc3Vic3lzdGVtCi13aWxsIGZhaWwgZW5hYmxpbmcgTVNJLVggb24gaXRzIGhhcmR3YXJlIGRldmljZSB3aGVuIGl0IGNhbGxzIHRoZSBmdW5jdGlvbgotcGNpX2VuYWJsZV9tc2l4KCkuCit0YWJsZS9NU0ktWCBQQkEuICBBIGRldmljZSBkcml2ZXIgc2hvdWxkIG5vdCBhY2Nlc3MgdGhlIE1NSU8gYWRkcmVzcworc3BhY2Ugb2YgdGhlIE1TSS1YIHRhYmxlL01TSS1YIFBCQS4KIAogNS4zLjIgQVBJIHBjaV9lbmFibGVfbXNpeAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dAppbmRleCA4ZDRkYzYyLi5mZDQ5MDdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9wY2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUENJL3BjaS50eHQKQEAgLTE2Myw2ICsxNjMsMTAgQEAKIAlvIGNsYXNzIGFuZCBjbGFzc21hc2sgZmllbGRzIGRlZmF1bHQgdG8gMAogCW8gZHJpdmVyX2RhdGEgZGVmYXVsdHMgdG8gMFVMLgogCitOb3RlIHRoYXQgZHJpdmVyX2RhdGEgbXVzdCBtYXRjaCB0aGUgdmFsdWUgdXNlZCBieSBhbnkgb2YgdGhlIHBjaV9kZXZpY2VfaWQKK2VudHJpZXMgZGVmaW5lZCBpbiB0aGUgZHJpdmVyLiBUaGlzIG1ha2VzIHRoZSBkcml2ZXJfZGF0YSBmaWVsZCBtYW5kYXRvcnkKK2lmIGFsbCB0aGUgcGNpX2RldmljZV9pZCBlbnRyaWVzIGhhdmUgYSBub24temVybyBkcml2ZXJfZGF0YSB2YWx1ZS4KKwogT25jZSBhZGRlZCwgdGhlIGRyaXZlciBwcm9iZSByb3V0aW5lIHdpbGwgYmUgaW52b2tlZCBmb3IgYW55IHVuY2xhaW1lZAogUENJIGRldmljZXMgbGlzdGVkIGluIGl0cyAobmV3bHkgdXBkYXRlZCkgcGNpX2lkcyBsaXN0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9wY2llYWVyLWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL3BjaWVhZXItaG93dG8udHh0CmluZGV4IDE2YzI1MTIuLmRkZWIxNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUENJL3BjaWVhZXItaG93dG8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vUENJL3BjaWVhZXItaG93dG8udHh0CkBAIC0yMDMsMjIgKzIwMywxNyBAQAogCiAzLjMgaGVscGVyIGZ1bmN0aW9ucwogCi0zLjMuMSBpbnQgcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1wY2lfZmluZF9hZXJfY2FwYWJpbGl0eSBsb2NhdGVzIHRoZSBQQ0kgRXhwcmVzcyBBRVIgY2FwYWJpbGl0eQotaW4gdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHNwYWNlLiBJZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydAotUENJLUV4cHJlc3MgQUVSLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgotCi0zLjMuMiBpbnQgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKzMuMy4xIGludCBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBlbmFibGVzIHRoZSBkZXZpY2UgdG8gc2VuZCBlcnJvcgogbWVzc2FnZXMgdG8gcm9vdCBwb3J0IHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuIE5vdGUgdGhhdCBkZXZpY2VzCiBkb24ndCBlbmFibGUgdGhlIGVycm9yIHJlcG9ydGluZyBieSBkZWZhdWx0LCBzbyBkZXZpY2UgZHJpdmVycyBuZWVkCiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIGl0LgogCi0zLjMuMyBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CiszLjMuMiBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CiBwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBkaXNhYmxlcyB0aGUgZGV2aWNlIHRvIHNlbmQgZXJyb3IKIG1lc3NhZ2VzIHRvIHJvb3QgcG9ydCB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLgogCi0zLjMuNCBpbnQgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiszLjMuMyBpbnQgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiBwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyBjbGVhbnVwcyB0aGUgdW5jb3JyZWN0YWJsZQogZXJyb3Igc3RhdHVzIHJlZ2lzdGVyLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2Nncm91cHMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9mcmVlemVyLXN1YnN5c3RlbS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MGFiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0CkBAIC0wLDAgKzEsOTkgQEAKKwlUaGUgY2dyb3VwIGZyZWV6ZXIgaXMgdXNlZnVsIHRvIGJhdGNoIGpvYiBtYW5hZ2VtZW50IHN5c3RlbSB3aGljaCBzdGFydAorYW5kIHN0b3Agc2V0cyBvZiB0YXNrcyBpbiBvcmRlciB0byBzY2hlZHVsZSB0aGUgcmVzb3VyY2VzIG9mIGEgbWFjaGluZQorYWNjb3JkaW5nIHRvIHRoZSBkZXNpcmVzIG9mIGEgc3lzdGVtIGFkbWluaXN0cmF0b3IuIFRoaXMgc29ydCBvZiBwcm9ncmFtCitpcyBvZnRlbiB1c2VkIG9uIEhQQyBjbHVzdGVycyB0byBzY2hlZHVsZSBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXIgYXMgYQord2hvbGUuIFRoZSBjZ3JvdXAgZnJlZXplciB1c2VzIGNncm91cHMgdG8gZGVzY3JpYmUgdGhlIHNldCBvZiB0YXNrcyB0bworYmUgc3RhcnRlZC9zdG9wcGVkIGJ5IHRoZSBiYXRjaCBqb2IgbWFuYWdlbWVudCBzeXN0ZW0uIEl0IGFsc28gcHJvdmlkZXMKK2EgbWVhbnMgdG8gc3RhcnQgYW5kIHN0b3AgdGhlIHRhc2tzIGNvbXBvc2luZyB0aGUgam9iLgorCisJVGhlIGNncm91cCBmcmVlemVyIHdpbGwgYWxzbyBiZSB1c2VmdWwgZm9yIGNoZWNrcG9pbnRpbmcgcnVubmluZyBncm91cHMKK29mIHRhc2tzLiBUaGUgZnJlZXplciBhbGxvd3MgdGhlIGNoZWNrcG9pbnQgY29kZSB0byBvYnRhaW4gYSBjb25zaXN0ZW50CitpbWFnZSBvZiB0aGUgdGFza3MgYnkgYXR0ZW1wdGluZyB0byBmb3JjZSB0aGUgdGFza3MgaW4gYSBjZ3JvdXAgaW50byBhCitxdWllc2NlbnQgc3RhdGUuIE9uY2UgdGhlIHRhc2tzIGFyZSBxdWllc2NlbnQgYW5vdGhlciB0YXNrIGNhbgord2FsayAvcHJvYyBvciBpbnZva2UgYSBrZXJuZWwgaW50ZXJmYWNlIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK3F1aWVzY2VkIHRhc2tzLiBDaGVja3BvaW50ZWQgdGFza3MgY2FuIGJlIHJlc3RhcnRlZCBsYXRlciBzaG91bGQgYQorcmVjb3ZlcmFibGUgZXJyb3Igb2NjdXIuIFRoaXMgYWxzbyBhbGxvd3MgdGhlIGNoZWNrcG9pbnRlZCB0YXNrcyB0byBiZQorbWlncmF0ZWQgYmV0d2VlbiBub2RlcyBpbiBhIGNsdXN0ZXIgYnkgY29weWluZyB0aGUgZ2F0aGVyZWQgaW5mb3JtYXRpb24KK3RvIGFub3RoZXIgbm9kZSBhbmQgcmVzdGFydGluZyB0aGUgdGFza3MgdGhlcmUuCisKKwlTZXF1ZW5jZXMgb2YgU0lHU1RPUCBhbmQgU0lHQ09OVCBhcmUgbm90IGFsd2F5cyBzdWZmaWNpZW50IGZvciBzdG9wcGluZworYW5kIHJlc3VtaW5nIHRhc2tzIGluIHVzZXJzcGFjZS4gQm90aCBvZiB0aGVzZSBzaWduYWxzIGFyZSBvYnNlcnZhYmxlCitmcm9tIHdpdGhpbiB0aGUgdGFza3Mgd2Ugd2lzaCB0byBmcmVlemUuIFdoaWxlIFNJR1NUT1AgY2Fubm90IGJlIGNhdWdodCwKK2Jsb2NrZWQsIG9yIGlnbm9yZWQgaXQgY2FuIGJlIHNlZW4gYnkgd2FpdGluZyBvciBwdHJhY2luZyBwYXJlbnQgdGFza3MuCitTSUdDT05UIGlzIGVzcGVjaWFsbHkgdW5zdWl0YWJsZSBzaW5jZSBpdCBjYW4gYmUgY2F1Z2h0IGJ5IHRoZSB0YXNrLiBBbnkKK3Byb2dyYW1zIGRlc2lnbmVkIHRvIHdhdGNoIGZvciBTSUdTVE9QIGFuZCBTSUdDT05UIGNvdWxkIGJlIGJyb2tlbiBieQorYXR0ZW1wdGluZyB0byB1c2UgU0lHU1RPUCBhbmQgU0lHQ09OVCB0byBzdG9wIGFuZCByZXN1bWUgdGFza3MuIFdlIGNhbgorZGVtb25zdHJhdGUgdGhpcyBwcm9ibGVtIHVzaW5nIG5lc3RlZCBiYXNoIHNoZWxsczoKKworCSQgZWNobyAkJAorCTE2NjQ0CisJJCBiYXNoCisJJCBlY2hvICQkCisJMTY2OTAKKworCUZyb20gYSBzZWNvbmQsIHVucmVsYXRlZCBiYXNoIHNoZWxsOgorCSQga2lsbCAtU0lHU1RPUCAxNjY5MAorCSQga2lsbCAtU0lHQ09OVCAxNjk5MAorCisJPGF0IHRoaXMgcG9pbnQgMTY5OTAgZXhpdHMgYW5kIGNhdXNlcyAxNjY0NCB0byBleGl0IHRvbz4KKworCVRoaXMgaGFwcGVucyBiZWNhdXNlIGJhc2ggY2FuIG9ic2VydmUgYm90aCBzaWduYWxzIGFuZCBjaG9vc2UgaG93IGl0CityZXNwb25kcyB0byB0aGVtLgorCisJQW5vdGhlciBleGFtcGxlIG9mIGEgcHJvZ3JhbSB3aGljaCBjYXRjaGVzIGFuZCByZXNwb25kcyB0byB0aGVzZQorc2lnbmFscyBpcyBnZGIuIEluIGZhY3QgYW55IHByb2dyYW0gZGVzaWduZWQgdG8gdXNlIHB0cmFjZSBpcyBsaWtlbHkgdG8KK2hhdmUgYSBwcm9ibGVtIHdpdGggdGhpcyBtZXRob2Qgb2Ygc3RvcHBpbmcgYW5kIHJlc3VtaW5nIHRhc2tzLgorCisJIEluIGNvbnRyYXN0LCB0aGUgY2dyb3VwIGZyZWV6ZXIgdXNlcyB0aGUga2VybmVsIGZyZWV6ZXIgY29kZSB0bworcHJldmVudCB0aGUgZnJlZXplL3VuZnJlZXplIGN5Y2xlIGZyb20gYmVjb21pbmcgdmlzaWJsZSB0byB0aGUgdGFza3MKK2JlaW5nIGZyb3plbi4gVGhpcyBhbGxvd3MgdGhlIGJhc2ggZXhhbXBsZSBhYm92ZSBhbmQgZ2RiIHRvIHJ1biBhcworZXhwZWN0ZWQuCisKKwlUaGUgZnJlZXplciBzdWJzeXN0ZW0gaW4gdGhlIGNvbnRhaW5lciBmaWxlc3lzdGVtIGRlZmluZXMgYSBmaWxlIG5hbWVkCitmcmVlemVyLnN0YXRlLiBXcml0aW5nICJGUk9aRU4iIHRvIHRoZSBzdGF0ZSBmaWxlIHdpbGwgZnJlZXplIGFsbCB0YXNrcyBpbiB0aGUKK2Nncm91cC4gU3Vic2VxdWVudGx5IHdyaXRpbmcgIlRIQVdFRCIgd2lsbCB1bmZyZWV6ZSB0aGUgdGFza3MgaW4gdGhlIGNncm91cC4KK1JlYWRpbmcgd2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuCisKKyogRXhhbXBsZXMgb2YgdXNhZ2UgOgorCisgICAjIG1rZGlyIC9jb250YWluZXJzL2ZyZWV6ZXIKKyAgICMgbW91bnQgLXQgY2dyb3VwIC1vZnJlZXplciBmcmVlemVyICAvY29udGFpbmVycworICAgIyBta2RpciAvY29udGFpbmVycy8wCisgICAjIGVjaG8gJHNvbWVfcGlkID4gL2NvbnRhaW5lcnMvMC90YXNrcworCit0byBnZXQgc3RhdHVzIG9mIHRoZSBmcmVlemVyIHN1YnN5c3RlbSA6CisKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgVEhBV0VECisKK3RvIGZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlIGNvbnRhaW5lciA6CisKKyAgICMgZWNobyBGUk9aRU4gPiAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgRlJFRVpJTkcKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgRlJPWkVOCisKK3RvIHVuZnJlZXplIGFsbCB0YXNrcyBpbiB0aGUgY29udGFpbmVyIDoKKworICAgIyBlY2hvIFRIQVdFRCA+IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgIyBjYXQgL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICBUSEFXRUQKKworVGhpcyBpcyB0aGUgYmFzaWMgbWVjaGFuaXNtIHdoaWNoIHNob3VsZCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHVzZXIgc3BhY2UgdGFzaworaW4gYSBzaW1wbGUgc2NlbmFyaW8uCisKK0l0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBmcmVlemluZyBjYW4gYmUgaW5jb21wbGV0ZS4gSW4gdGhhdCBjYXNlIHdlIHJldHVybgorRUJVU1kuIFRoaXMgbWVhbnMgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBjZ3JvdXAgYXJlIGJ1c3kgZG9pbmcgc29tZXRoaW5nIHRoYXQKK3ByZXZlbnRzIHVzIGZyb20gY29tcGxldGVseSBmcmVlemluZyB0aGUgY2dyb3VwIGF0IHRoaXMgdGltZS4gQWZ0ZXIgRUJVU1ksCit0aGUgY2dyb3VwIHdpbGwgcmVtYWluIHBhcnRpYWxseSBmcm96ZW4gLS0gcmVmbGVjdGVkIGJ5IGZyZWV6ZXIuc3RhdGUgcmVwb3J0aW5nCisiRlJFRVpJTkciIHdoZW4gcmVhZC4gVGhlIHN0YXRlIHdpbGwgcmVtYWluICJGUkVFWklORyIgdW50aWwgb25lIG9mIHRoZXNlCit0aGluZ3MgaGFwcGVuczoKKworCTEpIFVzZXJzcGFjZSBjYW5jZWxzIHRoZSBmcmVlemluZyBvcGVyYXRpb24gYnkgd3JpdGluZyAiVEhBV0VEIiB0bworCQl0aGUgZnJlZXplci5zdGF0ZSBmaWxlCisJMikgVXNlcnNwYWNlIHJldHJpZXMgdGhlIGZyZWV6aW5nIG9wZXJhdGlvbiBieSB3cml0aW5nICJGUk9aRU4iIHRvCisJCXRoZSBmcmVlemVyLnN0YXRlIGZpbGUgKHdyaXRpbmcgIkZSRUVaSU5HIiBpcyBub3QgbGVnYWwKKwkJYW5kIHJldHVybnMgRUlPKQorCTMpIFRoZSB0YXNrcyB0aGF0IGJsb2NrZWQgdGhlIGNncm91cCBmcm9tIGVudGVyaW5nIHRoZSAiRlJPWkVOIgorCQlzdGF0ZSBkaXNhcHBlYXIgZnJvbSB0aGUgY2dyb3VwJ3Mgc2V0IG9mIHRhc2tzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0CmluZGV4IDliNTNkNTguLjFjMDc1NDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQKQEAgLTExMiwxNCArMTEyLDIyIEBACiAKIDIuMi4xIEFjY291bnRpbmcgZGV0YWlscwogCi1BbGwgbWFwcGVkIHBhZ2VzIChSU1MpIGFuZCB1bm1hcHBlZCB1c2VyIHBhZ2VzIChQYWdlIENhY2hlKSBhcmUgYWNjb3VudGVkLgotUlNTIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgdGhlIHRpbWUgb2YgcGFnZV9hZGRfKl9ybWFwKCkgdW5sZXNzIHRoZXkndmUgYWxyZWFkeQotYmVlbiBhY2NvdW50ZWQgZm9yIGVhcmxpZXIuIEEgZmlsZSBwYWdlIHdpbGwgYmUgYWNjb3VudGVkIGZvciBhcyBQYWdlIENhY2hlOwotaXQncyBtYXBwZWQgaW50byB0aGUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzLCBkdXBsaWNhdGUgYWNjb3VudGluZyBpcyBjYXJlZnVsbHkKLWF2b2lkZWQuIFBhZ2UgQ2FjaGUgcGFnZXMgYXJlIGFjY291bnRlZCBhdCB0aGUgdGltZSBvZiBhZGRfdG9fcGFnZV9jYWNoZSgpLgotVGhlIGNvcnJlc3BvbmRpbmcgcm91dGluZXMgdGhhdCByZW1vdmUgYSBwYWdlIGZyb20gdGhlIHBhZ2UgdGFibGVzIG9yIHJlbW92ZXMKLWEgcGFnZSBmcm9tIFBhZ2UgQ2FjaGUgaXMgdXNlZCB0byBkZWNyZW1lbnQgdGhlIGFjY291bnRpbmcgY291bnRlcnMgb2YgdGhlCi1jZ3JvdXAuCitBbGwgbWFwcGVkIGFub24gcGFnZXMgKFJTUykgYW5kIGNhY2hlIHBhZ2VzIChQYWdlIENhY2hlKSBhcmUgYWNjb3VudGVkLgorKHNvbWUgcGFnZXMgd2hpY2ggbmV2ZXIgYmUgcmVjbGFpbWFibGUgYW5kIHdpbGwgbm90IGJlIG9uIGdsb2JhbCBMUlUKKyBhcmUgbm90IGFjY291bnRlZC4gd2UganVzdCBhY2NvdW50cyBwYWdlcyB1bmRlciB1c3VhbCB2bSBtYW5hZ2VtZW50LikKKworUlNTIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgcGFnZV9mYXVsdCB1bmxlc3MgdGhleSd2ZSBhbHJlYWR5IGJlZW4gYWNjb3VudGVkCitmb3IgZWFybGllci4gQSBmaWxlIHBhZ2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yIGFzIFBhZ2UgQ2FjaGUgd2hlbiBpdCdzCitpbnNlcnRlZCBpbnRvIGlub2RlIChyYWRpeC10cmVlKS4gV2hpbGUgaXQncyBtYXBwZWQgaW50byB0aGUgcGFnZSB0YWJsZXMgb2YKK3Byb2Nlc3NlcywgZHVwbGljYXRlIGFjY291bnRpbmcgaXMgY2FyZWZ1bGx5IGF2b2lkZWQuCisKK0EgUlNTIHBhZ2UgaXMgdW5hY2NvdW50ZWQgd2hlbiBpdCdzIGZ1bGx5IHVubWFwcGVkLiBBIFBhZ2VDYWNoZSBwYWdlIGlzCit1bmFjY291bnRlZCB3aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHJhZGl4LXRyZWUuCisKK0F0IHBhZ2UgbWlncmF0aW9uLCBhY2NvdW50aW5nIGluZm9ybWF0aW9uIGlzIGtlcHQuCisKK05vdGU6IHdlIGp1c3QgYWNjb3VudCBwYWdlcy1vbi1scnUgYmVjYXVzZSBvdXIgcHVycG9zZSBpcyB0byBjb250cm9sIGFtb3VudAorb2YgdXNlZCBwYWdlcy4gbm90LW9uLWxydSBwYWdlcyBhcmUgdGVuZCB0byBiZSBvdXQtb2YtY29udHJvbCBmcm9tIHZtIHZpZXcuCiAKIDIuMyBTaGFyZWQgUGFnZSBBY2NvdW50aW5nCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CmluZGV4IDQ3ZTU2OGEuLjVjODZjMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApAQCAtNDgsNyArNDgsNyBAQAogam9iIHBsYWNlbWVudCBvbiBsYXJnZSBzeXN0ZW1zLgogCiBDcHVzZXRzIHVzZSB0aGUgZ2VuZXJpYyBjZ3JvdXAgc3Vic3lzdGVtIGRlc2NyaWJlZCBpbgotRG9jdW1lbnRhdGlvbi9jZ3JvdXAudHh0LgorRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0LgogCiBSZXF1ZXN0cyBieSBhIHRhc2ssIHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgyKSBzeXN0ZW0gY2FsbCB0bwogaW5jbHVkZSBDUFVzIGluIGl0cyBDUFUgYWZmaW5pdHkgbWFzaywgYW5kIHVzaW5nIHRoZSBtYmluZCgyKSBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CmluZGV4IDA1YzgwNjQuLjJiZTA4MjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dApAQCAtMjU3MSw2ICsyNTcxLDkgQEAKIAkJMTYwID0gL2Rldi91c2IvbGVnb3VzYnRvd2VyMAkxc3QgVVNCIExlZ290b3dlciBkZXZpY2UKIAkJICAgIC4uLgogCQkxNzUgPSAvZGV2L3VzYi9sZWdvdXNidG93ZXIxNQkxNnRoIFVTQiBMZWdvdG93ZXIgZGV2aWNlCisJCTE3NiA9IC9kZXYvdXNiL3VzYnRtYzEJRmlyc3QgVVNCIFRNQyBkZXZpY2UKKwkJICAgLi4uCisJCTE5MiA9IC9kZXYvdXNiL3VzYnRtYzE2CTE2dGggVVNCIFRNQyBkZXZpY2UKIAkJMjQwID0gL2Rldi91c2IvZGFidXNiMAlGaXJzdCBkYXVidXNiIGRldmljZQogCQkgICAgLi4uCiAJCTI0MyA9IC9kZXYvdXNiL2RhYnVzYjMJRm91cnRoIGRhYnVzYiBkZXZpY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDI5NWYyNmMuLjlkZDJhM2JiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTk2LDYgKzk2LDExIEBACiBlcnJvcnM9Y29udGludWUJCUtlZXAgZ29pbmcgb24gYSBmaWxlc3lzdGVtIGVycm9yLgogZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCiAKK2RhdGFfZXJyPWlnbm9yZSgqKQlKdXN0IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzCisJCQlpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgorZGF0YV9lcnI9YWJvcnQJCUFib3J0IHRoZSBqb3VybmFsIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIGZpbGUKKwkJCWRhdGEgYnVmZmVyIGluIG9yZGVyZWQgbW9kZS4KKwogZ3JwaWQJCQlHaXZlIG9iamVjdHMgdGhlIHNhbWUgZ3JvdXAgSUQgYXMgdGhlaXIgY3JlYXRvci4KIGJzZGdyb3VwcwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCBlYjE1NGVmLi4xNzRlYWZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTIsMTkgKzIsMjQgQEAKIEV4dDQgRmlsZXN5c3RlbQogPT09PT09PT09PT09PT09CiAKLVRoaXMgaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIGFuIGFkdmFuY2VkIGxldmVsCi1vZiB0aGUgZXh0MyBmaWxlc3lzdGVtIHdoaWNoIGluY29ycG9yYXRlcyBzY2FsYWJpbGl0eSBhbmQgcmVsaWFiaWxpdHkKLWVuaGFuY2VtZW50cyBmb3Igc3VwcG9ydGluZyBsYXJnZSBmaWxlc3lzdGVtcyAoNjQgYml0KSBpbiBrZWVwaW5nIHdpdGgKLWluY3JlYXNpbmcgZGlzayBjYXBhY2l0aWVzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGZlYXR1cmUgcmVxdWlyZW1lbnRzLgorRXh0NCBpcyBhbiBhbiBhZHZhbmNlZCBsZXZlbCBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtIHdoaWNoIGluY29ycG9yYXRlcworc2NhbGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5IGVuaGFuY2VtZW50cyBmb3Igc3VwcG9ydGluZyBsYXJnZSBmaWxlc3lzdGVtcworKDY0IGJpdCkgaW4ga2VlcGluZyB3aXRoIGluY3JlYXNpbmcgZGlzayBjYXBhY2l0aWVzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0CitmZWF0dXJlIHJlcXVpcmVtZW50cy4KIAotTWFpbGluZyBsaXN0OiBsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZworTWFpbGluZyBsaXN0OglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZworV2ViIHNpdGU6CWh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZwogCiAKIDEuIFF1aWNrIHVzYWdlIGluc3RydWN0aW9uczoKID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitOb3RlOiBNb3JlIGV4dGVuc2l2ZSBpbmZvcm1hdGlvbiBmb3IgZ2V0dGluZyBzdGFydGVkIHdpdGggZXh0NCBjYW4gYmUKKyAgICAgIGZvdW5kIGF0IHRoZSBleHQ0IHdpa2kgc2l0ZSBhdCB0aGUgVVJMOgorICAgICAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9FeHQ0X0hvd3RvCisKICAgLSBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlMmZzcHJvZ3MgKGFzIG9mIHRoaXMKLSAgICB3cml0aW5nIHZlcnNpb24gMS40MSkgZnJvbToKKyAgICB3cml0aW5nIHZlcnNpb24gMS40MS4zKSBmcm9tOgogCiAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MjQwNgogCQpAQCAtMzYsMTEgKzQxLDkgQEAKIAogICAgIAkjIG1rZTJmcyAtdCBleHQ0IC9kZXYvaGRhMQogCi0gICAgT3IgY29uZmlndXJlIGFuIGV4aXN0aW5nIGV4dDMgZmlsZXN5c3RlbSB0byBzdXBwb3J0IGV4dGVudHMgYW5kIHNldAotICAgIHRoZSB0ZXN0X2ZzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIG9rIGZvciBhbiBpbi1kZXZlbG9wbWVudAotICAgIGZpbGVzeXN0ZW0gdG8gdG91Y2ggdGhpcyBmaWxlc3lzdGVtOgorICAgIE9yIHRvIGNvbmZpZ3VyZSBhbiBleGlzdGluZyBleHQzIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydCBleHRlbnRzOiAKIAotCSMgdHVuZTJmcyAtTyBleHRlbnRzIC1FIHRlc3RfZnMgL2Rldi9oZGExCisJIyB0dW5lMmZzIC1PIGV4dGVudHMgL2Rldi9oZGExCiAKICAgICBJZiB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZCB3aXRoIDEyOCBieXRlIGlub2RlcywgaXQgY2FuIGJlCiAgICAgY29udmVydGVkIHRvIHVzZSAyNTYgYnl0ZSBmb3IgZ3JlYXRlciBlZmZpY2llbmN5IHZpYToKQEAgLTEwNCw4ICsxMDcsOCBAQAogVGhlIGJpZyBwZXJmb3JtYW5jZSB3aW4gd2lsbCBjb21lIHdpdGggbWJhbGxvYywgZGVsYWxsb2MgYW5kIGZsZXhfYmcKIGdyb3VwaW5nIG9mIGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlcy4gIFNvbWUgdGVzdCByZXN1bHRzIGF2YWlsYWJsZSBoZXJlOgogCi0gLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwNTMwL2Zmc2Itd3JpdGUtMi42LjI2LXJjMi5odG1sCi0gLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwNTMwL2Zmc2ItcmVhZHdyaXRlLTIuNi4yNi1yYzIuaHRtbAorIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDgxOC1mZnNiL2Zmc2Itd3JpdGUtMi42LjI3LXJjMS5odG1sCisgLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwODE4LWZmc2IvZmZzYi1yZWFkd3JpdGUtMi42LjI3LXJjMS5odG1sCiAKIDMuIE9wdGlvbnMKID09PT09PT09PT0KQEAgLTIxNCw5ICsyMTcsNiBAQAogYnNkZGYJCSgqKQlNYWtlICdkZicgYWN0IGxpa2UgQlNELgogbWluaXhkZgkJCU1ha2UgJ2RmJyBhY3QgbGlrZSBNaW5peC4KIAotY2hlY2s9bm9uZQkJRG9uJ3QgZG8gZXh0cmEgY2hlY2tpbmcgb2YgYml0bWFwcyBvbiBtb3VudC4KLW5vY2hlY2sKLQogZGVidWcJCQlFeHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc2VudCB0byBzeXNsb2cuCiAKIGVycm9ycz1yZW1vdW50LXJvKCopCVJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgpAQCAtMjUzLDggKzI1Myw2IEBACiAJCQkibm9iaCIgb3B0aW9uIHRyaWVzIHRvIGF2b2lkIGFzc29jaWF0aW5nIGJ1ZmZlcgogCQkJaGVhZHMgKHN1cHBvcnRlZCBvbmx5IGZvciAid3JpdGViYWNrIiBtb2RlKS4KIAotbWJhbGxvYwkJKCopCVVzZSB0aGUgbXVsdGlwbGUgYmxvY2sgYWxsb2NhdG9yIGZvciBibG9jayBhbGxvY2F0aW9uCi1ub21iYWxsb2MJCWRpc2FibGVkIG11bHRpcGxlIGJsb2NrIGFsbG9jYXRvciBmb3IgYmxvY2sgYWxsb2NhdGlvbi4KIHN0cmlwZT1uCQlOdW1iZXIgb2YgZmlsZXN5c3RlbSBibG9ja3MgdGhhdCBtYmFsbG9jIHdpbGwgdHJ5CiAJCQl0byB1c2UgZm9yIGFsbG9jYXRpb24gc2l6ZSBhbmQgYWxpZ25tZW50LiBGb3IgUkFJRDUvNgogCQkJc3lzdGVtcyB0aGlzIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGRhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGMwMzJiZjMuLmJjY2ViOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTM4NCwxNSArMTM4NCwxOCBAQAogZGlydHlfYmFja2dyb3VuZF9yYXRpbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLXRoZSBwZGZsdXNoIGJhY2tncm91bmQgd3JpdGViYWNrIGRhZW1vbiB3aWxsIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5IGRhdGEuCitDb250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkaXJ0eWFibGUgc3lzdGVtIG1lbW9yeSAoZnJlZSBwYWdlcyArIG1hcHBlZAorcGFnZXMgKyBmaWxlIGNhY2hlLCBub3QgaW5jbHVkaW5nIGxvY2tlZCBwYWdlcyBhbmQgSHVnZVBhZ2VzKSwgdGhlIG51bWJlciBvZgorcGFnZXMgYXQgd2hpY2ggdGhlIHBkZmx1c2ggYmFja2dyb3VuZCB3cml0ZWJhY2sgZGFlbW9uIHdpbGwgc3RhcnQgd3JpdGluZyBvdXQKK2RpcnR5IGRhdGEuCiAKIGRpcnR5X3JhdGlvCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLWEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5Ci1kYXRhLgorQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGlydHlhYmxlIHN5c3RlbSBtZW1vcnkgKGZyZWUgcGFnZXMgKyBtYXBwZWQKK3BhZ2VzICsgZmlsZSBjYWNoZSwgbm90IGluY2x1ZGluZyBsb2NrZWQgcGFnZXMgYW5kIEh1Z2VQYWdlcyksIHRoZSBudW1iZXIgb2YKK3BhZ2VzIGF0IHdoaWNoIGEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0Cit3cml0aW5nIG91dCBkaXJ0eSBkYXRhLgogCiBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDEyLDI0ICsyNDE1LDI5IEBACiBvZiBtZW1vcnkgdHlwZXMuIElmIGEgYml0IG9mIHRoZSBiaXRtYXNrIGlzIHNldCwgbWVtb3J5IHNlZ21lbnRzIG9mIHRoZQogY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC4KIAotVGhlIGZvbGxvd2luZyA0IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgorVGhlIGZvbGxvd2luZyA3IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogICAtIChiaXQgMCkgYW5vbnltb3VzIHByaXZhdGUgbWVtb3J5CiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeQogICAtIChiaXQgMikgZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDMpIGZpbGUtYmFja2VkIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDQpIEVMRiBoZWFkZXIgcGFnZXMgaW4gZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkgYXJlYXMgKGl0IGlzCiAgICAgICAgICAgICBlZmZlY3RpdmUgb25seSBpZiB0aGUgYml0IDIgaXMgY2xlYXJlZCkKKyAgLSAoYml0IDUpIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkKKyAgLSAoYml0IDYpIGh1Z2V0bGIgc2hhcmVkIG1lbW9yeQogCiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXMKICAgYXJlIGFsd2F5cyBkdW1wZWQgcmVnYXJkbGVzcyBvZiB0aGUgYml0bWFzayBzdGF0dXMuCiAKLURlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQotc2VnbWVudHMgYXJlIGR1bXBlZC4KKyAgTm90ZSBiaXQgMC00IGRvZXNuJ3QgZWZmZWN0IGFueSBodWdldGxiIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgYXJlIG9ubHkKKyAgZWZmZWN0ZWQgYnkgYml0IDUtNi4KKworRGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQorc2VnbWVudHMgYW5kIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYXJlIGR1bXBlZC4KIAogSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCwKLXdyaXRlIDEgdG8gdGhlIHByb2Nlc3MncyBwcm9jIGZpbGUuCit3cml0ZSAweDIxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlLgogCi0gICQgZWNobyAweDEgPiAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgorICAkIGVjaG8gMHgyMSA+IC9wcm9jLzEyMzQvY29yZWR1bXBfZmlsdGVyCiAKIFdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLCB0aGUgcHJvY2VzcyBpbmhlcml0cyB0aGUgYml0bWFzayBzdGF0dXMgZnJvbSBpdHMKIHBhcmVudC4gSXQgaXMgdXNlZnVsIHRvIHNldCB1cCBjb3JlZHVtcF9maWx0ZXIgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ViaWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CmluZGV4IDZhMGQ3MGEuLmRkODRlYTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CkBAIC04Niw2ICs4NiwxNSBAQAogZmFzdF91bm1vdW50CQlkbyBub3QgY29tbWl0IG9uIHVubW91bnQ7IHRoaXMgb3B0aW9uIG1ha2VzCiAJCQl1bm1vdW50IGZhc3RlciwgYnV0IHRoZSBuZXh0IG1vdW50IHNsb3dlcgogCQkJYmVjYXVzZSBvZiB0aGUgbmVlZCB0byByZXBsYXkgdGhlIGpvdXJuYWwuCitidWxrX3JlYWQJCXJlYWQgbW9yZSBpbiBvbmUgZ28gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgZmxhc2gKKwkJCW1lZGlhIHRoYXQgcmVhZCBmYXN0ZXIgc2VxdWVudGlhbGx5Citub19idWxrX3JlYWQgKCopCWRvIG5vdCBidWxrLXJlYWQKK25vX2Noa19kYXRhX2NyYwkJc2tpcCBjaGVja2luZyBvZiBDUkNzIG9uIGRhdGEgbm9kZXMgaW4gb3JkZXIgdG8KKwkJCWltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgb3B0aW9uIG9ubHkKKwkJCWlmIHRoZSBmbGFzaCBtZWRpYSBpcyBoaWdobHkgcmVsaWFibGUuIFRoZSBlZmZlY3QKKwkJCW9mIHRoaXMgb3B0aW9uIGlzIHRoYXQgY29ycnVwdGlvbiBvZiB0aGUgY29udGVudHMKKwkJCW9mIGEgZmlsZSBjYW4gZ28gdW5ub3RpY2VkLgorY2hrX2RhdGFfY3JjICgqKQlkbyBub3Qgc2tpcCBjaGVja2luZyBDUkNzIG9uIGRhdGEgbm9kZXMKIAogCiBRdWljayB1c2FnZSBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MCBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQxM2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDcwCkBAIC0wLDAgKzEsNzYgQEAKK0tlcm5lbCBkcml2ZXIgYWR0NzQ3MAorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDcwCisgICAgUHJlZml4OiAnYWR0NzQ3MCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MkMsIDB4MkUsIDB4MkYKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQorCitBdXRob3I6IERhcnJpY2sgSi4gV29uZworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURUNzQ3MCBjaGlwLiAgVGhlcmUgbWF5CitiZSBvdGhlciBjaGlwcyB0aGF0IGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KKworVGhlIEFEVDc0NzAgdXNlcyB0aGUgMi13aXJlIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggdGhlIFNNQnVzIDIuMAorc3BlY2lmaWNhdGlvbi4gVXNpbmcgYW4gYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVyIGl0IG1lYXN1cmVzIHVwIHRvIHRlbiAoMTApCitleHRlcm5hbCB0ZW1wZXJhdHVyZXMuIEl0IGhhcyBmb3VyICg0KSAxNi1iaXQgY291bnRlcnMgZm9yIG1lYXN1cmluZyBmYW4gc3BlZWQuCitUaGVyZSBhcmUgZm91ciAoNCkgUFdNIG91dHB1dHMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIGZhbiBzcGVlZC4KKworQSBzb3BoaXN0aWNhdGVkIGNvbnRyb2wgc3lzdGVtIGZvciB0aGUgUFdNIG91dHB1dHMgaXMgZGVzaWduZWQgaW50byB0aGUgQURUNzQ3MAordGhhdCBhbGxvd3MgZmFuIHNwZWVkIHRvIGJlIGFkanVzdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gYW55IG9mIHRoZSB0ZW4KK3RlbXBlcmF0dXJlIHNlbnNvcnMuIEVhY2ggUFdNIG91dHB1dCBpcyBpbmRpdmlkdWFsbHkgYWRqdXN0YWJsZSBhbmQKK3Byb2dyYW1tYWJsZS4gT25jZSBjb25maWd1cmVkLCB0aGUgQURUNzQ3MCB3aWxsIGFkanVzdCB0aGUgUFdNIG91dHB1dHMgaW4KK3Jlc3BvbnNlIHRvIHRoZSBtZWFzdXJlZCB0ZW1wZXJhdHVyZXMgd2l0aCBmdXJ0aGVyIGhvc3QgaW50ZXJ2ZW50aW9uLiAgVGhpcworZmVhdHVyZSBjYW4gYWxzbyBiZSBkaXNhYmxlZCBmb3IgbWFudWFsIGNvbnRyb2wgb2YgdGhlIFBXTSdzLgorCitFYWNoIG9mIHRoZSBtZWFzdXJlZCBpbnB1dHMgKHRlbXBlcmF0dXJlLCBmYW4gc3BlZWQpIGhhcyBjb3JyZXNwb25kaW5nIGhpZ2gvbG93CitsaW1pdCB2YWx1ZXMuIFRoZSBBRFQ3NDcwIHdpbGwgc2lnbmFsIGFuIEFMQVJNIGlmIGFueSBtZWFzdXJlZCB2YWx1ZSBleGNlZWRzCitlaXRoZXIgbGltaXQuCisKK1RoZSBBRFQ3NDcwIERPRVMgTk9UIHNhbXBsZSBhbGwgaW5wdXRzIGNvbnRpbnVvdXNseS4gIEEgc2luZ2xlIHBpbiBvbiB0aGUKK0FEVDc0NzAgaXMgY29ubmVjdGVkIHRvIGEgbXVsdGl0dWRlIG9mIHRoZXJtYWwgZGlvZGVzLCBidXQgdGhlIGNoaXAgbXVzdCBiZQoraW5zdHJ1Y3RlZCBleHBsaWNpdGx5IHRvIHJlYWQgdGhlIG11bHRpdHVkZSBvZiBkaW9kZXMuICBJZiB5b3Ugd2FudCB0byB1c2UKK2F1dG9tYXRpYyBmYW4gY29udHJvbCBtb2RlLCB5b3UgbXVzdCBtYW51YWxseSByZWFkIGFueSBvZiB0aGUgdGVtcGVyYXR1cmUKK3NlbnNvcnMgb3IgdGhlIGZhbiBjb250cm9sIGFsZ29yaXRobSB3aWxsIG5vdCBydW4uICBUaGUgY2hpcCBXSUxMIE5PVCBETyBUSElTCitBVVRPTUFUSUNBTExZOyB0aGlzIG11c3QgYmUgZG9uZSBmcm9tIHVzZXJzcGFjZS4gIFRoaXMgbWF5IGJlIGEgYnVnIGluIHRoZSBjaGlwCitkZXNpZ24sIGdpdmVuIHRoYXQgbWFueSBvdGhlciBBRCBjaGlwcyB0YWtlIGNhcmUgb2YgdGhpcy4gIFRoZSBkcml2ZXIgd2lsbCBub3QKK3JlYWQgdGhlIHJlZ2lzdGVycyBtb3JlIG9mdGVuIHRoYW4gb25jZSBldmVyeSA1IHNlY29uZHMuICBGdXJ0aGVyLAorY29uZmlndXJhdGlvbiBkYXRhIGlzIG9ubHkgcmVhZCBvbmNlIHBlciBtaW51dGUuCisKK1NwZWNpYWwgRmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEFEVDc0NzAgaGFzIGEgOC1iaXQgQURDIGFuZCBpcyBjYXBhYmxlIG9mIG1lYXN1cmluZyB0ZW1wZXJhdHVyZXMgd2l0aCAxCitkZWdDIHJlc29sdXRpb24uCisKK1RoZSBBbmFsb2cgRGV2aWNlcyBkYXRhc2hlZXQgaXMgdmVyeSBkZXRhaWxlZCBhbmQgZGVzY3JpYmVzIGEgcHJvY2VkdXJlIGZvcgorZGV0ZXJtaW5pbmcgYW4gb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXV0b21hdGljIFBXTSBjb250cm9sLgorCitDb25maWd1cmF0aW9uIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jlc2lkZXMgc3RhbmRhcmQgaW50ZXJmYWNlcyBkcml2ZXIgYWRkcyB0aGUgZm9sbG93aW5nOgorCisqIFBXTSBDb250cm9sCisKKyogcHdtI19hdXRvX3BvaW50MV9wd20gYW5kIHB3bSNfYXV0b19wb2ludDFfdGVtcCBhbmQKKyogcHdtI19hdXRvX3BvaW50Ml9wd20gYW5kIHB3bSNfYXV0b19wb2ludDJfdGVtcCAtCisKK3BvaW50MTogU2V0IHRoZSBwd20gc3BlZWQgYXQgYSBsb3dlciB0ZW1wZXJhdHVyZSBib3VuZC4KK3BvaW50MjogU2V0IHRoZSBwd20gc3BlZWQgYXQgYSBoaWdoZXIgdGVtcGVyYXR1cmUgYm91bmQuCisKK1RoZSBBRFQ3NDcwIHdpbGwgc2NhbGUgdGhlIHB3bSBiZXR3ZWVuIHRoZSBsb3dlciBhbmQgaGlnaGVyIHB3bSBzcGVlZCB3aGVuCit0aGUgdGVtcGVyYXR1cmUgaXMgYmV0d2VlbiB0aGUgdHdvIHRlbXBlcmF0dXJlIGJvdW5kYXJpZXMuICBQV00gdmFsdWVzIHJhbmdlCitmcm9tIDAgKG9mZikgdG8gMjU1IChmdWxsIHNwZWVkKS4gIEZhbiBzcGVlZCB3aWxsIGJlIHNldCB0byBtYXhpbXVtIHdoZW4gdGhlCit0ZW1wZXJhdHVyZSBzZW5zb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBQV00gY29udHJvbCBleGNlZWRzCitwd20jX2F1dG9fcG9pbnQyX3RlbXAuCisKK05vdGVzCistLS0tLQorCitBcyBzdGF0ZWQgYWJvdmUsIHRoZSB0ZW1wZXJhdHVyZSBpbnB1dHMgbXVzdCBiZSByZWFkIHBlcmlvZGljYWxseSBmcm9tCit1c2Vyc3BhY2UgaW4gb3JkZXIgZm9yIHRoZSBhdXRvbWF0aWMgcHdtIGFsZ29yaXRobSB0byBydW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKaW5kZXggMzQ5NmI3MC4uMDQyYzA0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NwpAQCAtMTM2LDEwICsxMzYsMTAgQEAKIFRoZSBJVDg3eHggb25seSB1cGRhdGVzIGl0cyB2YWx1ZXMgZWFjaCAxLjUgc2Vjb25kczsgcmVhZGluZyBpdCBtb3JlIG9mdGVuCiB3aWxsIGRvIG5vIGhhcm0sIGJ1dCB3aWxsIHJldHVybiAnb2xkJyB2YWx1ZXMuCiAKLVRvIGNoYW5nZSBzZW5zb3IgTiB0byBhIHRoZXJtaXN0b3IsICdlY2hvIDIgPiB0ZW1wTl90eXBlJyB3aGVyZSBOIGlzIDEsIDIsCitUbyBjaGFuZ2Ugc2Vuc29yIE4gdG8gYSB0aGVybWlzdG9yLCAnZWNobyA0ID4gdGVtcE5fdHlwZScgd2hlcmUgTiBpcyAxLCAyLAogb3IgMy4gVG8gY2hhbmdlIHNlbnNvciBOIHRvIGEgdGhlcm1hbCBkaW9kZSwgJ2VjaG8gMyA+IHRlbXBOX3R5cGUnLgogR2l2ZSAwIGZvciB1bnVzZWQgc2Vuc29yLiBBbnkgb3RoZXIgdmFsdWUgaXMgaW52YWxpZC4gVG8gY29uZmlndXJlIHRoaXMgYXQKLXN0YXJ0dXAsIGNvbnN1bHQgbG1fc2Vuc29ycydzIC9ldGMvc2Vuc29ycy5jb25mLiAoMiA9IHRoZXJtaXN0b3I7CitzdGFydHVwLCBjb25zdWx0IGxtX3NlbnNvcnMncyAvZXRjL3NlbnNvcnMuY29uZi4gKDQgPSB0aGVybWlzdG9yOwogMyA9IHRoZXJtYWwgZGlvZGUpCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1CmluZGV4IDZkNDFkYjcuLjQwMDYyMDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUKQEAgLTE2MywxNiArMTYzLDYgQEAKICogcHdtI19hdXRvX3B3bV9taW4gLSB0aGlzIHNwZWNpZmllcyB0aGUgUFdNIHZhbHVlIGZvciB0ZW1wI19hdXRvX3RlbXBfb2ZmCiAgICAgICAgICAgICAgICAgICAgICAgdGVtcGVyYXR1cmUuIChQV00gdmFsdWUgZnJvbSAwIHRvIDI1NSkKIAotKiBwd20jX2F1dG9fcHdtX2ZyZXEgLSBzZWxlY3QgYmFzZSBmcmVxdWVuY3kgb2YgUFdNIG91dHB1dC4gWW91IGNhbiBzZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgaW4gcmFuZ2Ugb2YgMTAuMCB0byA5NC4wIEh6IGluIC4xIEh6IHVuaXRzLgotCQkgICAgICAgKFZhbHVlcyAxMDAgdG8gOTQwKS4KLQotVGhlIHB3bSNfYXV0b19wd21fZnJlcSBjYW4gYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIDggdmFsdWVzLiBTZXR0aW5nIHRoZQotZnJlcXVlbmN5IHRvIGEgdmFsdWUgbm90IG9uIHRoaXMgbGlzdCwgd2lsbCByZXN1bHQgaW4gdGhlIG5leHQgaGlnaGVyIGZyZXF1ZW5jeQotYmVpbmcgc2VsZWN0ZWQuIFRoZSBhY3R1YWwgZGV2aWNlIGZyZXF1ZW5jeSBtYXkgdmFyeSBzbGlnaHRseSBmcm9tIHRoaXMKLXNwZWNpZmljYXRpb24gYXMgZGVzaWduZWQgYnkgdGhlIG1hbnVmYWN0dXJlci4gQ29uc3VsdCB0aGUgZGF0YXNoZWV0IGZvciBtb3JlCi1kZXRhaWxzLiAoUFdNIEZyZXF1ZW5jeSB2YWx1ZXM6ICAxMDAsIDE1MCwgMjMwLCAzMDAsIDM4MCwgNDcwLCA2MjAsIDk0MCkKLQogKiBwd20jX2F1dG9fcHdtX21pbmN0bCAtIHRoaXMgZmxhZ3Mgc2VsZWN0cyBmb3IgdGVtcCNfYXV0b190ZW1wX29mZiB0ZW1wZXJhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiYWhhdmlvdXIgb2YgZmFucy4gV3JpdGUgMSB0byBsZXQgZmFucyBzcGlubmluZyBhdAogCQkJIHB3bSNfYXV0b19wd21fbWluIG9yIHdyaXRlIDAgdG8gbGV0IHRoZW0gb2ZmLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3CmluZGV4IGVjMjdhYTEuLjZiNDdiNjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODcKQEAgLTY1LDExICs2NSwxMCBAQAogZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLgogCiBTb21lIGZ1bmN0aW9ucyBzaGFyZSBwaW5zLCBzbyBub3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lCi10aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIGFzc3VtZXMgdGhhdAotdGhlIEJJT1MgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIEluIHRoYXQgcmVzcGVjdCwgaXQgZGlmZmVycyBmcm9tCi10aGUgb3JpZ2luYWwgZHJpdmVyIChmcm9tIGxtX3NlbnNvcnMgZm9yIExpbnV4IDIuNCksIHdoaWNoIHdvdWxkIGZvcmNlIHRoZQotTE04NyB0byBhbiBhcmJpdHJhcnksIGNvbXBpbGUtdGltZSBjaG9zZW4gbW9kZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsCi1jaGlwc2V0IHdpcmluZy4KK3RpbWUuIFdoaWNoIGFyZSBkZXBlbmRzIG9uIHRoZSBoYXJkd2FyZSBzZXR1cC4gVGhpcyBkcml2ZXIgbm9ybWFsbHkKK2Fzc3VtZXMgdGhhdCBmaXJtd2FyZSBjb25maWd1cmVkIHRoZSBjaGlwIGNvcnJlY3RseS4gV2hlcmUgdGhpcyBpcyBub3QKK3RoZSBjYXNlLCBwbGF0Zm9ybSBjb2RlIG11c3Qgc2V0IHRoZSBJMkMgY2xpZW50J3MgcGxhdGZvcm1fZGF0YSB0byBwb2ludAordG8gYSB1OCB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBjaGFubmVsIHJlZ2lzdGVyLgogCiBGb3IgcmVmZXJlbmNlLCBoZXJlIGlzIHRoZSBsaXN0IG9mIGV4Y2x1c2l2ZSBmdW5jdGlvbnM6CiAgLSBpbjAraW41IChkZWZhdWx0KSBvciB0ZW1wMwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCmluZGV4IGFhNGEwZWMuLmUwZDUyMDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKQEAgLTExLDcgKzExLDcgQEAKICAgICBQcmVmaXg6ICdsbTk5JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNODkuaHRtbAorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNODkuaHRtbAogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05OQogICAgIFByZWZpeDogJ2xtOTknCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCkBAIC0yMSwxOCArMjEsMzIgQEAKICAgICBQcmVmaXg6ICdsbTg2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNODYuaHRtbAorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNODYuaHRtbAogICAqIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIKICAgICBQcmVmaXg6ICdhZG0xMDMyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3LmFuYWxvZy5jb20vZW4vcHJvZC8wLDI4NzcsQURNMTAzMiwwMC5odG1sCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURNMTAzMgogICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEKICAgICBQcmVmaXg6ICdhZHQ3NDYxJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3LmFuYWxvZy5jb20vZW4vcHJvZC8wLDI4NzcsQURUNzQ2MSwwMC5odG1sCi0gICAgTm90ZTogT25seSBpZiBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFEVDc0NjEKKyAgKiBNYXhpbSBNQVg2NjQ2CisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGQKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM0OTcKKyAgKiBNYXhpbSBNQVg2NjQ3CisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGUKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM0OTcKKyAgKiBNYXhpbSBNQVg2NjQ5CisgICAgUHJlZml4OiAnbWF4NjY0NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTWF4aW0gd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzM0OTcKICAgKiBNYXhpbSBNQVg2NjU3CiAgICAgUHJlZml4OiAnbWF4NjY1NycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKQEAgLTcwLDI1ICs4NCwyMSBAQAogCiBUaGUgTE05MCBpcyBhIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yLiBJdCBzZW5zZXMgaXRzIG93biB0ZW1wZXJhdHVyZSBhcwogd2VsbCBhcyB0aGUgdGVtcGVyYXR1cmUgb2YgdXAgdG8gb25lIGV4dGVybmFsIGRpb2RlLiBJdCBpcyBjb21wYXRpYmxlCi13aXRoIG1hbnkgb3RoZXIgZGV2aWNlcyBzdWNoIGFzIHRoZSBMTTg2LCB0aGUgTE04OSwgdGhlIExNOTksIHRoZSBBRE0xMDMyLAotdGhlIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksIE1BWDY2ODAgYW5kIHRoZSBNQVg2NjgxIGFsbCBvZiB3aGljaCBhcmUKLXN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KK3dpdGggbWFueSBvdGhlciBkZXZpY2VzLCBtYW55IG9mIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAKIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIE1BWDY2NTcsCiBNQVg2NjU4IGFuZCBNQVg2NjU5IHZhcmlhbnRzLiBUaGUgZXh0cmEgYWRkcmVzcyBhbmQgZmVhdHVyZXMgb2YgdGhlCiBNQVg2NjU5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBUaGUgTUFYNjY4MCBhbmQgTUFYNjY4MSBvbmx5CiBkaWZmZXIgaW4gdGhlaXIgcGlub3V0LCB0aGVyZWZvcmUgdGhleSBvYnZpb3VzbHkgY2FuJ3QgKGFuZCBkb24ndCBuZWVkIHRvKQotYmUgZGlzdGluZ3Vpc2hlZC4gQWRkaXRpb25hbGx5LCB0aGUgQURUNzQ2MSBpcyBzdXBwb3J0ZWQgaWYgZm91bmQgaW4KLUFETTEwMzIgY29tcGF0aWJpbGl0eSBtb2RlLgorYmUgZGlzdGluZ3Vpc2hlZC4KIAogVGhlIHNwZWNpZmljaXR5IG9mIHRoaXMgZmFtaWx5IG9mIGNoaXBzZXRzIG92ZXIgdGhlIEFETTEwMjEvTE04NAogZmFtaWx5IGlzIHRoYXQgaXQgZmVhdHVyZXMgY3JpdGljYWwgbGltaXRzIHdpdGggaHlzdGVyZXNpcywgYW5kIGFuCiBpbmNyZWFzZWQgcmVzb2x1dGlvbiBvZiB0aGUgcmVtb3RlIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50LgogCiBUaGUgZGlmZmVyZW50IGNoaXBzZXRzIG9mIHRoZSBmYW1pbHkgYXJlIG5vdCBzdHJpY3RseSBpZGVudGljYWwsIGFsdGhvdWdoCi12ZXJ5IHNpbWlsYXIuIFRoaXMgZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIGFueSBzcGVjaWZpYyBmZWF0dXJlIGZvciBub3csCi13aXRoIHRoZSBleGNlcHRpb24gb2YgU01CdXMgUEVDLiBGb3IgcmVmZXJlbmNlLCBoZXJlIGNvbWVzIGEgbm9uLWV4aGF1c3RpdmUKLWxpc3Qgb2Ygc3BlY2lmaWMgZmVhdHVyZXM6Cit2ZXJ5IHNpbWlsYXIuIEZvciByZWZlcmVuY2UsIGhlcmUgY29tZXMgYSBub24tZXhoYXVzdGl2ZSBsaXN0IG9mIHNwZWNpZmljCitmZWF0dXJlczoKIAogTE05MDoKICAgKiBGaWx0ZXIgYW5kIGFsZXJ0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYXQgMHhCRi4KQEAgLTExNCw5ICsxMjQsMTEgQEAKICAgKiBMb3dlciByZXNvbHV0aW9uIGZvciByZW1vdGUgdGVtcGVyYXR1cmUKIAogTUFYNjY1NyBhbmQgTUFYNjY1ODoKKyAgKiBCZXR0ZXIgbG9jYWwgcmVzb2x1dGlvbgogICAqIFJlbW90ZSBzZW5zb3IgdHlwZSBzZWxlY3Rpb24KIAogTUFYNjY1OToKKyAgKiBCZXR0ZXIgbG9jYWwgcmVzb2x1dGlvbgogICAqIFNlbGVjdGFibGUgYWRkcmVzcwogICAqIFNlY29uZCBjcml0aWNhbCB0ZW1wZXJhdHVyZSBsaW1pdAogICAqIFJlbW90ZSBzZW5zb3IgdHlwZSBzZWxlY3Rpb24KQEAgLTEyNyw3ICsxMzksOCBAQAogCiBBbGwgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBnaXZlbiBpbiBkZWdyZWVzIENlbHNpdXMuIFJlc29sdXRpb24KIGlzIDEuMCBkZWdyZWUgZm9yIHRoZSBsb2NhbCB0ZW1wZXJhdHVyZSwgMC4xMjUgZGVncmVlIGZvciB0aGUgcmVtb3RlCi10ZW1wZXJhdHVyZS4KK3RlbXBlcmF0dXJlLCBleGNlcHQgZm9yIHRoZSBNQVg2NjU3LCBNQVg2NjU4IGFuZCBNQVg2NjU5IHdoaWNoIGhhdmUgYQorcmVzb2x1dGlvbiBvZiAwLjEyNSBkZWdyZWUgZm9yIGJvdGggdGVtcGVyYXR1cmVzLgogCiBFYWNoIHNlbnNvciBoYXMgaXRzIG93biBoaWdoIGFuZCBsb3cgbGltaXRzLCBwbHVzIGEgY3JpdGljYWwgbGltaXQuCiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgcmVsYXRpdmUgaHlzdGVyZXNpcyB2YWx1ZSBjb21tb24gdG8gYm90aCBjcml0aWNhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwCmluZGV4IDg5YThmY2YuLmNiYWMzMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODczNjAKQEAgLTUsMTIgKzUsNyBAQAogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzM2MCwgUEM4NzM2MywgUEM4NzM2NCwgUEM4NzM2NSBhbmQgUEM4NzM2NgogICAgIFByZWZpeGVzOiAncGM4NzM2MCcsICdwYzg3MzYzJywgJ3BjODczNjQnLCAncGM4NzM2NScsICdwYzg3MzY2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCi0gICAgRGF0YXNoZWV0czoKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2MC5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjMuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzY0Lmh0bWwKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2NS5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjYuaHRtbAorICAgIERhdGFzaGVldHM6IE5vIGxvbmdlciBhdmFpbGFibGUKIAogQXV0aG9yczogSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNwppbmRleCA5YTA3MDhmLi5kMWViYmU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CkBAIC01LDcgKzUsNyBAQAogICAqIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzQyNwogICAgIFByZWZpeDogJ3BjODc0MjcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUsIGFkZHJlc3MgcmVhZCBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UKLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cud2luYm9uZC5jb20udHcvRS1XSU5CT05ESFRNL3BhcnRuZXIvYXBjXzAwNy5odG1sCisgICAgRGF0YXNoZWV0OiBObyBsb25nZXIgYXZhaWxhYmxlCiAKIEF1dGhvcjogSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZAppbmRleCA2ZjgwMGEwLi5jOTFlMGI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCkBAIC0zNTMsNyArMzUzLDcgQEAKIAogIyBQV00KIAotQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgKG1heSBhcHBseSB0byBvdGhlciBBc3VzCisqIEFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIChtYXkgYXBwbHkgdG8gb3RoZXIgQXN1cwogY2hpcHMgYXMgd2VsbCkgYnkgSmVhbiBEZWx2YXJlIGFzIG9mIDIwMDQtMDQtMDk6CiAKIEFTOTkxMjdGIHJldmlzaW9uIDIgc2VlbXMgdG8gaGF2ZSB0d28gUFdNIHJlZ2lzdGVycyBhdCAweDU5IGFuZCAweDVBLApAQCAtMzk2LDcgKzM5Niw3IEBACiBsb25nIGFzIHdlIGRvbid0IGtub3cgbW9yZSwgdGhlIHc4Mzc4MWQgZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIFBXTSBvbgogQVM5OTEyN0YgY2hpcHMgYXQgYWxsLgogCi1BZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiByZXYuMSBieSBIZWN0b3IgTWFydGluOgorKiBBZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiByZXYuMSBieSBIZWN0b3IgTWFydGluOgogCiBJJ3ZlIGJlZW4gZmlkZGxpbmcgYXJvdW5kIHdpdGggdGhlIChpbilmYW1vdXMgMHg1OSByZWdpc3RlciBhbmQKIGZvdW5kIG91dCB0aGUgZm9sbG93aW5nIHZhbHVlcyBkbyB3b3JrIGFzIGEgZm9ybSBvZiBjb2Fyc2UgcHdtOgpAQCAtNDE4LDMgKzQxOCwzNiBAQAogTXkgbW9ibyBpcyBhbiBBU1VTIEE3VjI2Ni1FLiBUaGlzIGJlaGF2aW9yIGlzIHNpbWlsYXIgdG8gd2hhdCBJIGdvdAogd2l0aCBzcGVlZGZhbiB1bmRlciBXaW5kb3dzLCB3aGVyZSAwLTE1JSB3b3VsZCBiZSBvZmYsIDE1LTJ4JSAoY2FuJ3QKIHJlbWVtYmVyIHRoZSBleGFjdCB2YWx1ZSkgd291bGQgYmUgNzAlIGFuZCBoaWdoZXIgd291bGQgYmUgZnVsbCBvbi4KKworKiBBZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiByZXYuMSBmcm9tIGxtLXNlbnNvcnMKKyAgdGlja2V0ICMyMzUwOgorCitJIGNvbmR1Y3RlZCBzb21lIGV4cGVyaW1lbnQgb24gQXN1cyBQM0ItRiBtb3RoZXJib2FyZCB3aXRoIEFTOTkxMjdGCisoVmVyLiAxKS4KKworSSBjb25maXJtIHRoYXQgMHg1OSByZWdpc3RlciBjb250cm9sIHRoZSBDUFVfRmFuIEhlYWRlciBvbiB0aGlzCittb3RoZXJib2FyZCwgYW5kIDB4NWEgcmVnaXN0ZXIgY29udHJvbCBQV1JfRmFuLgorCitJbiBvcmRlciB0byByZWR1Y2UgdGhlIGRlcGVuZGVuY3kgb2Ygc3BlY2lmaWMgZmFuLCB0aGUgbWVhc3VyZW1lbnQgaXMKK2NvbmR1Y3RlZCB3aXRoIGEgZGlnaXRhbCBzY29wZSB3aXRob3V0IGZhbiBjb25uZWN0ZWQuIEkgZm91bmQgb3V0IHRoYXQKK1AzQi1GIGFjdHVhbGx5IG91dHB1dCB2YXJpYWJsZSBEQyB2b2x0YWdlIG9uIGZhbiBoZWFkZXIgY2VudGVyIHBpbiwKK2xvb2tzIGxpa2UgUFdNIGlzIGZpbHRlcmVkIG9uIHRoaXMgbW90aGVyYm9hcmQuCisKK0hlcmUgYXJlIHNvbWUgb2YgbWVhc3VyZW1lbnRzOgorCisweDgwICAgICAyMCBtVgorMHg4MSAgICAgMjAgbVYKKzB4ODIgICAgMjMyIG1WCisweDgzICAgMS4yICBWCisweDg0ICAgMi4zMSBWCisweDg1ICAgMy40NCBWCisweDg2ICAgNC42MiBWCisweDg3ICAgNS44MSBWCisweDg4ICAgNy4wMSBWCis5eDg5ICAgOC4yMiBWCisweDhhICAgOS40MiBWCisweDhiICAxMC42ICBWCisweDhjICAxMS45ICBWCisweDhkICAxMi40ICBWCisweDhlICAxMi40ICBWCisweDhmICAxMi40ICBWCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKaW5kZXggYTY3ZDNiNy4uNTY2M2U0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZApAQCAtNTgsMjkgKzU4LDM1IEBACiBjdXJyZW50bHkgc2VsZWN0ZWQpLiBJZiB5b3Uga25vdyB0aGUgYWRkcmVzcyBvZiB0aGUgY2hpcCwgdXNlIGEgJ2ZvcmNlJwogcGFyYW1ldGVyOyB0aGlzIHdpbGwgcHV0IGl0IGludG8gYSBtb3JlIHdlbGwtYmVoYXZlZCBzdGF0ZSBmaXJzdC4KIAotVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIGZpdmUgZmFuIHJvdGF0aW9uIHNwZWVkCi1zZW5zb3JzLCBhbmQgdGVuIHZvbHRhZ2Ugc2Vuc29ycy4KK1RoZSBkcml2ZXIgaW1wbGVtZW50cyB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCB0ZW4gdm9sdGFnZSBzZW5zb3JzLAorZml2ZSBmYW4gcm90YXRpb24gc3BlZWQgc2Vuc29ycyBhbmQgbWFudWFsIFBXTSBjb250cm9sIG9mIGVhY2ggZmFuLgogCiBUZW1wZXJhdHVyZXMgYXJlIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcyAxCiBkZWdDIGZvciB0ZW1wMSBhbmQgMC41IGRlZ0MgZm9yIHRlbXAyIGFuZCB0ZW1wMy4gQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIHdoZW4KIHRoZSB0ZW1wZXJhdHVyZSBnZXRzIGhpZ2hlciB0aGFuIHRoZSBPdmVydGVtcGVyYXR1cmUgU2h1dGRvd24gdmFsdWU7IGl0IHN0YXlzCiBvbiB1bnRpbCB0aGUgdGVtcGVyYXR1cmUgZmFsbHMgYmVsb3cgdGhlIEh5c3RlcmVzaXMgdmFsdWUuCiAKK1ZvbHRhZ2Ugc2Vuc29ycyAoYWxzbyBrbm93biBhcyBJTiBzZW5zb3JzKSByZXBvcnQgdGhlaXIgdmFsdWVzIGluIG1pbGxpdm9sdHMuCitBbiBhbGFybSBpcyB0cmlnZ2VyZWQgaWYgdGhlIHZvbHRhZ2UgaGFzIGNyb3NzZWQgYSBwcm9ncmFtbWFibGUgbWluaW11bQorb3IgbWF4aW11bSBsaW1pdC4KKwogRmFuIHJvdGF0aW9uIHNwZWVkcyBhcmUgcmVwb3J0ZWQgaW4gUlBNIChyb3RhdGlvbnMgcGVyIG1pbnV0ZSkuIEFuIGFsYXJtIGlzCiB0cmlnZ2VyZWQgaWYgdGhlIHJvdGF0aW9uIHNwZWVkIGhhcyBkcm9wcGVkIGJlbG93IGEgcHJvZ3JhbW1hYmxlIGxpbWl0LiBGYW4KIHJlYWRpbmdzIGNhbiBiZSBkaXZpZGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIGRpdmlkZXIgKDEsIDIsIDQsIDgsIDE2LAogMzIsIDY0IG9yIDEyOCBmb3IgYWxsIGZhbnMpIHRvIGdpdmUgdGhlIHJlYWRpbmdzIG1vcmUgcmFuZ2Ugb3IgYWNjdXJhY3kuCiAKLVZvbHRhZ2Ugc2Vuc29ycyAoYWxzbyBrbm93biBhcyBJTiBzZW5zb3JzKSByZXBvcnQgdGhlaXIgdmFsdWVzIGluIG1pbGxpdm9sdHMuCi1BbiBhbGFybSBpcyB0cmlnZ2VyZWQgaWYgdGhlIHZvbHRhZ2UgaGFzIGNyb3NzZWQgYSBwcm9ncmFtbWFibGUgbWluaW11bQotb3IgbWF4aW11bSBsaW1pdC4KK0VhY2ggZmFuIGNvbnRyb2xsZWQgaXMgY29udHJvbGxlZCBieSBQV00uIFRoZSBQV00gZHV0eSBjeWNsZSBjYW4gYmUgcmVhZCBhbmQKK3NldCBmb3IgZWFjaCBmYW4gc2VwYXJhdGVseS4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMCAoc3RvcCkgdG8gMjU1IChmdWxsKS4KK1BXTSAxLTMgc3VwcG9ydCBUaGVybWFsIENydWlzZSBtb2RlLCBpbiB3aGljaCB0aGUgUFdNcyBhcmUgYXV0b21hdGljYWxseQorcmVndWxhdGVkIHRvIGtlZXAgcmVzcGVjdGl2ZWx5IHRlbXAgMS0zIGF0IGEgY2VydGFpbiB0YXJnZXQgdGVtcGVyYXR1cmUuCitTZWUgYmVsb3cgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3lzZnMtaW50ZXJmYWNlLgogCiBUaGUgdzgzNzkxZCBoYXMgYSBnbG9iYWwgYml0IHVzZWQgdG8gZW5hYmxlIGJlZXBpbmcgZnJvbSB0aGUgc3BlYWtlciB3aGVuIGFuCiBhbGFybSBpcyB0cmlnZ2VyZWQgYXMgd2VsbCBhcyBhIGJpdG1hc2sgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGJlZXAgZm9yCiBzcGVjaWZpYyBhbGFybXMuIFlvdSBuZWVkIGJvdGggdGhlIGdsb2JhbCBiZWVwIGVuYWJsZSBiaXQgYW5kIHRoZQogY29ycmVzcG9uZGluZyBiZWVwIGJpdCB0byBiZSBvbiBmb3IgYSB0cmlnZ2VyZWQgYWxhcm0gdG8gc291bmQgYSBiZWVwLgogCi1UaGUgc3lzZnMgaW50ZXJmYWNlIHRvIHRoZSBnbG9hYmFsIGVuYWJsZSBpcyB2aWEgdGhlIHN5c2ZzIGJlZXBfZW5hYmxlIGZpbGUuCitUaGUgc3lzZnMgaW50ZXJmYWNlIHRvIHRoZSBnbG9iYWwgZW5hYmxlIGlzIHZpYSB0aGUgc3lzZnMgYmVlcF9lbmFibGUgZmlsZS4KIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBib3RoIGxlZ2FjeSBhbmQgbmV3IGNvZGUuCiAKIFRoZSBzeXNmcyBpbnRlcmZhY2UgdG8gdGhlIGJlZXAgYml0bWFzayBoYXMgbWlncmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgbGVnYWN5CkBAIC0xMDUsNiArMTExLDI3IEBACiBUaGUgZHJpdmVyIHJlYWRzIHRoZSBoYXJkd2FyZSBjaGlwIHZhbHVlcyBhdCBtb3N0IG9uY2UgZXZlcnkgdGhyZWUgc2Vjb25kcy4KIFVzZXIgbW9kZSBjb2RlIHJlcXVlc3RpbmcgdmFsdWVzIG1vcmUgb2Z0ZW4gd2lsbCByZWNlaXZlIGNhY2hlZCB2YWx1ZXMuCiAKKy9zeXMgZmlsZXMKKy0tLS0tLS0tLS0KK1RoZSBzeXNmcy1pbnRlcmZhY2UgaXMgZG9jdW1lbnRlZCBpbiB0aGUgJ3N5c2ZzLWludGVyZmFjZScgZmlsZS4gT25seQorY2hpcC1zcGVjaWZpYyBvcHRpb25zIGFyZSBkb2N1bWVudGVkIGhlcmUuCisKK3B3bVsxLTNdX2VuYWJsZSAtCXRoaXMgZmlsZSBjb250cm9scyBtb2RlIG9mIGZhbi90ZW1wZXJhdHVyZSBjb250cm9sIGZvcgorCQkJZmFuIDEtMy4gRmFuL1BXTSA0LTUgb25seSBzdXBwb3J0IG1hbnVhbCBtb2RlLgorCQkgICAgICAgICAgICAqIDEgTWFudWFsIG1vZGUKKwkJICAgICAgICAgICAgKiAyIFRoZXJtYWwgQ3J1aXNlIG1vZGUKKwkJICAgICAgICAgICAgKiAzIEZhbiBTcGVlZCBDcnVpc2UgbW9kZSAobm8gZnVydGhlciBzdXBwb3J0KQorCit0ZW1wWzEtM11fdGFyZ2V0IC0JZGVmaW5lcyB0aGUgdGFyZ2V0IHRlbXBlcmF0dXJlIGZvciBUaGVybWFsIENydWlzZSBtb2RlLgorCQkJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCQkJUlcKKwordGVtcFsxLTNdX3RvbGVyYW5jZSAtCXRlbXBlcmF0dXJlIHRvbGVyYW5jZSBmb3IgVGhlcm1hbCBDcnVpc2UgbW9kZS4KKwkJCVNwZWNpZmllcyBhbiBpbnRlcnZhbCBhcm91bmQgdGhlIHRhcmdldCB0ZW1wZXJhdHVyZQorCQkJaW4gd2hpY2ggdGhlIGZhbiBzcGVlZCBpcyBub3QgY2hhbmdlZC4KKwkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKKwkJCVJXCisKIEFsYXJtcyBiaXRtYXAgdnMuIGJlZXBfbWFzayBiaXRtYXNrCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZvciBsZWdhY3kgY29kZSB1c2luZyB0aGUgYWxhcm1zIGFuZCBiZWVwX21hc2sgZmlsZXM6CkBAIC0xMzIsNyArMTU5LDMgQEAKIHRhcnQzICAgICAgICA6ICBhbGFybXM6IDB4MDQwMDAwIGJlZXBfbWFzazogMHgxMDAwMDAgPD09IG1pc21hdGNoCiBjYXNlX29wZW4gICAgOiAgYWxhcm1zOiAweDAwMTAwMCBiZWVwX21hc2s6IDB4MDAxMDAwCiBnbG9iYWxfZW5hYmxlOiAgYWxhcm1zOiAtLS0tLS0tLSBiZWVwX21hc2s6IDB4ODAwMDAwIChtb2RpZmllZCB2aWEgYmVlcF9lbmFibGUpCi0KLVc4Mzc5MUQgVE9ETzoKLS0tLS0tLS0tLS0tLS0tLQotUHJvdmlkZSBhIHBhdGNoIGZvciBzbWFydC1mYW4gY29udHJvbCAoc3RpbGwgbmVlZCBhcHByb3ByaWF0ZSBtb3RoZXJib2FyZC9mYW5zKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CmluZGV4IDFjNmI1NDUuLmI4ODBjZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKQEAgLTkyLDYgKzkyLDcgQEAKICdKJwkwMC0xRglkcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCiAnSycJYWxsCWxpbnV4L2tkLmgKICdMJwkwMC0xRglsaW51eC9sb29wLmgKKydMJwkyMC0yRglkcml2ZXIvdXNiL21pc2MvdnN0dXNiLmgKICdMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKIAkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgogJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaApAQCAtMTEwLDYgKzExMSw4IEBACiAnVycJMDAtMUYJbGludXgvd2Fucm91dGVyLmgJY29uZmxpY3QhCiAnWCcJYWxsCWxpbnV4L3hmc19mcy5oCiAnWScJYWxsCWxpbnV4L2N5Y2xhZGVzLmgKKydbJwkwMC0wNwlsaW51eC91c2IvdXNidG1jLmgJVVNCIFRlc3QgYW5kIE1lYXN1cmVtZW50IERldmljZXMKKwkJCQkJPG1haWx0bzpncmVna2hAc3VzZS5kZT4KICdhJwlhbGwJCQkJQVRNIG9uIGxpbnV4CiAJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+CiAnYicJMDAtRkYJCQkJYml0MyB2bWUgaG9zdCBicmlkZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZGQyOGEwZC4uNTNiYTdjNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTEwMSw2ICsxMDEsNyBAQAogCVg4Ni02NAlYODYtNjQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJCQlNb3JlIFg4Ni02NCBib290IG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluCiAJCQlEb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0IC4KKwlYODYJRWl0aGVyIDMyYml0IG9yIDY0Yml0IHg4NiAoc2FtZSBhcyBYODYtMzIrWDg2LTY0KQogCiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyB0ZXh0IGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb246CiAKQEAgLTY5MCw3ICs2OTEsNyBAQAogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQgYW5kCiAJCQlEb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0IGZvciBkZXRhaWxzLgogCi0JZWxmY29yZWhkcj0JW1g4Ni0zMiwgWDg2XzY0XQorCWVsZmNvcmVoZHI9CVtJQTY0LFBQQyxTSCxYODYtMzIsWDg2XzY0XQogCQkJU3BlY2lmaWVzIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhcnQgb2Yga2VybmVsIGNvcmUKIAkJCWltYWdlIGVsZiBoZWFkZXIuIEdlbmVyYWxseSBrZXhlYyBsb2FkZXIgd2lsbAogCQkJcGFzcyB0aGlzIG9wdGlvbiB0byBjYXB0dXJlIGtlcm5lbC4KQEAgLTc5Niw2ICs3OTcsOCBAQAogCQkJRGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlJ3MgaHVnZSBwYWdlIHNpemUKIAkJCWlmIG5vdCBzcGVjaWZpZWQuCiAKKwlobHQJCVtCVUdTPUFSTSxTSF0KKwogCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKIAlpODA0Mi5kdW1ia2JkCVtIV10gUHJldGVuZCB0aGF0IGNvbnRyb2xsZXIgY2FuIG9ubHkgcmVhZCBkYXRhIGZyb20KQEAgLTEyMTEsNiArMTIxNCwxMCBAQAogCW1lbT1ub3BlbnRpdW0JW0JVR1M9WDg2LTMyXSBEaXNhYmxlIHVzYWdlIG9mIDRNQiBwYWdlcyBmb3Iga2VybmVsCiAJCQltZW1vcnkuCiAKKwltZW1jaHVuaz1ubltLTUddCisJCQlbS05MLFNIXSBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNpemUgZm9yCisJCQlwZXItZGV2aWNlIHBoeXNpY2FsbHkgY29udGlndW91cyBETUEgYnVmZmVycy4KKwogCW1lbW1hcD1leGFjdG1hcAlbS05MLFg4Ni0zMixYODZfNjRdIEVuYWJsZSBzZXR0aW5nIG9mIGFuIGV4YWN0CiAJCQlFODIwIG1lbW9yeSBtYXAsIGFzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KIAkJCVN1Y2ggbWVtbWFwPWV4YWN0bWFwIGxpbmVzIGNhbiBiZSBjb25zdHJ1Y3RlZCBiYXNlZCBvbgpAQCAtMTM5Myw2ICsxNDAwLDggQEAKIAogCW5vZGlzY29ubmVjdAlbSFcsU0NTSSxNNjhLXSBEaXNhYmxlcyBTQ1NJIGRpc2Nvbm5lY3RzLgogCisJbm9kc3AJCVtTSF0gRGlzYWJsZSBoYXJkd2FyZSBEU1AgYXQgYm9vdCB0aW1lLgorCiAJbm9lZmkJCVtYODYtMzIsWDg2LTY0XSBEaXNhYmxlIEVGSSBydW50aW1lIHNlcnZpY2VzIHN1cHBvcnQuCiAKIAlub2V4ZWMJCVtJQS02NF0KQEAgLTE0MDksMTMgKzE0MTgsMTUgQEAKIAkJCW5vZXhlYzMyPW9mZjogZGlzYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncwogCQkJCXJlYWQgaW1wbGllcyBleGVjdXRhYmxlIG1hcHBpbmdzCiAKKwlub2ZwdQkJW1NIXSBEaXNhYmxlIGhhcmR3YXJlIEZQVSBhdCBib290IHRpbWUuCisKIAlub2Z4c3IJCVtCVUdTPVg4Ni0zMl0gRGlzYWJsZXMgeDg2IGZsb2F0aW5nIHBvaW50IGV4dGVuZGVkCiAJCQlyZWdpc3RlciBzYXZlIGFuZCByZXN0b3JlLiBUaGUga2VybmVsIHdpbGwgb25seSBzYXZlCiAJCQlsZWdhY3kgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHRhc2sgc3dpdGNoLgogCiAJbm9jbGZsdXNoCVtCVUdTPVg4Nl0gRG9uJ3QgdXNlIHRoZSBDTEZMVVNIIGluc3RydWN0aW9uCiAKLQlub2hsdAkJW0JVR1M9QVJNXQorCW5vaGx0CQlbQlVHUz1BUk0sU0hdCiAKIAluby1obHQJCVtCVUdTPVg4Ni0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoZSBobHQKIAkJCWluc3RydWN0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYW5kIG5vdCB0bwpAQCAtMTU3OCw3ICsxNTg5LDcgQEAKIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KIAogCXBjaT1vcHRpb25bLG9wdGlvbi4uLl0JW1BDSV0gdmFyaW91cyBQQ0kgc3Vic3lzdGVtIG9wdGlvbnM6Ci0JCW9mZgkJW1g4Ni0zMl0gZG9uJ3QgcHJvYmUgZm9yIHRoZSBQQ0kgYnVzCisJCW9mZgkJW1g4Nl0gZG9uJ3QgcHJvYmUgZm9yIHRoZSBQQ0kgYnVzCiAJCWJpb3MJCVtYODYtMzJdIGZvcmNlIHVzZSBvZiBQQ0kgQklPUywgZG9uJ3QgYWNjZXNzCiAJCQkJdGhlIGhhcmR3YXJlIGRpcmVjdGx5LiBVc2UgdGhpcyBpZiB5b3VyIG1hY2hpbmUKIAkJCQloYXMgYSBub24tc3RhbmRhcmQgUENJIGhvc3QgYnJpZGdlLgpAQCAtMTU4Niw5ICsxNTk3LDkgQEAKIAkJCQloYXJkd2FyZSBhY2Nlc3MgbWV0aG9kcyBhcmUgYWxsb3dlZC4gVXNlIHRoaXMKIAkJCQlpZiB5b3UgZXhwZXJpZW5jZSBjcmFzaGVzIHVwb24gYm9vdHVwIGFuZCB5b3UKIAkJCQlzdXNwZWN0IHRoZXkgYXJlIGNhdXNlZCBieSB0aGUgQklPUy4KLQkJY29uZjEJCVtYODYtMzJdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbgorCQljb25mMQkJW1g4Nl0gRm9yY2UgdXNlIG9mIFBDSSBDb25maWd1cmF0aW9uCiAJCQkJTWVjaGFuaXNtIDEuCi0JCWNvbmYyCQlbWDg2LTMyXSBGb3JjZSB1c2Ugb2YgUENJIENvbmZpZ3VyYXRpb24KKwkJY29uZjIJCVtYODZdIEZvcmNlIHVzZSBvZiBQQ0kgQ29uZmlndXJhdGlvbgogCQkJCU1lY2hhbmlzbSAyLgogCQlub2FlcgkJW1BDSUVdIElmIHRoZSBQQ0lFQUVSIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIGlzCiAJCQkJZW5hYmxlZCwgdGhpcyBrZXJuZWwgYm9vdCBvcHRpb24gY2FuIGJlIHVzZWQgdG8KQEAgLTE2MDgsMzcgKzE2MTksMzcgQEAKIAkJCQl0aGlzIG9wdGlvbiBpZiB0aGUga2VybmVsIGlzIHVuYWJsZSB0byBhbGxvY2F0ZQogCQkJCUlSUXMgb3IgZGlzY292ZXIgc2Vjb25kYXJ5IFBDSSBidXNlcyBvbiB5b3VyCiAJCQkJbW90aGVyYm9hcmQuCi0JCXJvbQkJW1g4Ni0zMl0gQXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8gZXhwYW5zaW9uIFJPTXMuCisJCXJvbQkJW1g4Nl0gQXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8gZXhwYW5zaW9uIFJPTXMuCiAJCQkJVXNlIHdpdGggY2F1dGlvbiBhcyBjZXJ0YWluIGRldmljZXMgc2hhcmUKIAkJCQlhZGRyZXNzIGRlY29kZXJzIGJldHdlZW4gUk9NcyBhbmQgb3RoZXIKIAkJCQlyZXNvdXJjZXMuCi0JCW5vcm9tCQlbWDg2LTMyLFg4Nl82NF0gRG8gbm90IGFzc2lnbiBhZGRyZXNzIHNwYWNlIHRvCisJCW5vcm9tCQlbWDg2XSBEbyBub3QgYXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8KIAkJCQlleHBhbnNpb24gUk9NcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGhhdmUKIAkJCQlCSU9TIGFzc2lnbmVkIGFkZHJlc3MgcmFuZ2VzLgotCQlpcnFtYXNrPTB4TU1NTQlbWDg2LTMyXSBTZXQgYSBiaXQgbWFzayBvZiBJUlFzIGFsbG93ZWQgdG8gYmUKKwkJaXJxbWFzaz0weE1NTU0JW1g4Nl0gU2V0IGEgYml0IG1hc2sgb2YgSVJRcyBhbGxvd2VkIHRvIGJlCiAJCQkJYXNzaWduZWQgYXV0b21hdGljYWxseSB0byBQQ0kgZGV2aWNlcy4gWW91IGNhbgogCQkJCW1ha2UgdGhlIGtlcm5lbCBleGNsdWRlIElSUXMgb2YgeW91ciBJU0EgY2FyZHMKIAkJCQl0aGlzIHdheS4KLQkJcGlycWFkZHI9MHhBQUFBQQlbWDg2LTMyXSBTcGVjaWZ5IHRoZSBwaHlzaWNhbCBhZGRyZXNzCisJCXBpcnFhZGRyPTB4QUFBQUEJW1g4Nl0gU3BlY2lmeSB0aGUgcGh5c2ljYWwgYWRkcmVzcwogCQkJCW9mIHRoZSBQSVJRIHRhYmxlIChub3JtYWxseSBnZW5lcmF0ZWQKIAkJCQlieSB0aGUgQklPUykgaWYgaXQgaXMgb3V0c2lkZSB0aGUKIAkJCQlGMDAwMGgtMTAwMDAwaCByYW5nZS4KLQkJbGFzdGJ1cz1OCVtYODYtMzJdIFNjYW4gYWxsIGJ1c2VzIHRocnUgYnVzICNOLiBDYW4gYmUKKwkJbGFzdGJ1cz1OCVtYODZdIFNjYW4gYWxsIGJ1c2VzIHRocnUgYnVzICNOLiBDYW4gYmUKIAkJCQl1c2VmdWwgaWYgdGhlIGtlcm5lbCBpcyB1bmFibGUgdG8gZmluZCB5b3VyCiAJCQkJc2Vjb25kYXJ5IGJ1c2VzIGFuZCB5b3Ugd2FudCB0byB0ZWxsIGl0CiAJCQkJZXhwbGljaXRseSB3aGljaCBvbmVzIHRoZXkgYXJlLgotCQlhc3NpZ24tYnVzc2VzCVtYODYtMzJdIEFsd2F5cyBhc3NpZ24gYWxsIFBDSSBidXMKKwkJYXNzaWduLWJ1c3NlcwlbWDg2XSBBbHdheXMgYXNzaWduIGFsbCBQQ0kgYnVzCiAJCQkJbnVtYmVycyBvdXJzZWx2ZXMsIG92ZXJyaWRpbmcKIAkJCQl3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS4KLQkJdXNlcGlycW1hc2sJW1g4Ni0zMl0gSG9ub3IgdGhlIHBvc3NpYmxlIElSUSBtYXNrIHN0b3JlZAorCQl1c2VwaXJxbWFzawlbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkCiAJCQkJaW4gdGhlIEJJT1MgJFBJUiB0YWJsZS4gVGhpcyBpcyBuZWVkZWQgb24KIAkJCQlzb21lIHN5c3RlbXMgd2l0aCBicm9rZW4gQklPU2VzLCBub3RhYmx5CiAJCQkJc29tZSBIUCBQYXZpbGlvbiBONTQwMCBhbmQgT21uaWJvb2sgWEUzCiAJCQkJbm90ZWJvb2tzLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgQUNQSQogCQkJCUlSUSByb3V0aW5nIGlzIGVuYWJsZWQuCi0JCW5vYWNwaQkJW1g4Ni0zMl0gRG8gbm90IHVzZSBBQ1BJIGZvciBJUlEgcm91dGluZworCQlub2FjcGkJCVtYODZdIERvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKIAkJCQlvciBmb3IgUENJIHNjYW5uaW5nLgotCQl1c2VfY3JzCQlbWDg2LTMyXSBVc2UgX0NSUyBmb3IgUENJIHJlc291cmNlCisJCXVzZV9jcnMJCVtYODZdIFVzZSBfQ1JTIGZvciBQQ0kgcmVzb3VyY2UKIAkJCQlhbGxvY2F0aW9uLgogCQlyb3V0ZWlycQlEbyBJUlEgcm91dGluZyBmb3IgYWxsIFBDSSBkZXZpY2VzLgogCQkJCVRoaXMgaXMgbm9ybWFsbHkgZG9uZSBpbiBwY2lfZW5hYmxlX2RldmljZSgpLApAQCAtMTY2Nyw2ICsxNjc4LDEyIEBACiAJCQkJcmVzZXJ2ZWQgZm9yIHRoZSBDYXJkQnVzIGJyaWRnZSdzIG1lbW9yeQogCQkJCXdpbmRvdy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQgbWVnYWJ5dGVzLgogCisJcGNpZV9hc3BtPQlbUENJRV0gRm9yY2libHkgZW5hYmxlIG9yIGRpc2FibGUgUENJZSBBY3RpdmUgU3RhdGUgUG93ZXIKKwkJCU1hbmFnZW1lbnQuCisJCW9mZglEaXNhYmxlIEFTUE0uCisJCWZvcmNlCUVuYWJsZSBBU1BNIGV2ZW4gb24gZGV2aWNlcyB0aGF0IGNsYWltIG5vdCB0byBzdXBwb3J0IGl0LgorCQkJV0FSTklORzogRm9yY2luZyBBU1BNIG9uIG1heSBjYXVzZSBzeXN0ZW0gbG9ja3Vwcy4KKwogCXBjbXY9CQlbSFcsUENNQ0lBXSBCYWRnZVBBRCA0CiAKIAlwZC4JCVtQQVJJREVdCkBAIC0yMjUzLDYgKzIyNzAsMjUgQEAKIAkJCWF1dG9zdXNwZW5kZWQuICBEZXZpY2VzIGZvciB3aGljaCB0aGUgZGVsYXkgaXMgc2V0CiAJCQl0byBhIG5lZ2F0aXZlIHZhbHVlIHdvbid0IGJlIGF1dG9zdXNwZW5kZWQgYXQgYWxsLgogCisJdXNiY29yZS51c2Jmc19zbm9vcD0KKwkJCVtVU0JdIFNldCB0byBsb2cgYWxsIHVzYmZzIHRyYWZmaWMgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLmJsaW5rZW5saWdodHM9CisJCQlbVVNCXSBTZXQgdG8gY3ljbGUgbGVkcyBvbiBodWJzIChkZWZhdWx0IDAgPSBvZmYpLgorCisJdXNiY29yZS5vbGRfc2NoZW1lX2ZpcnN0PQorCQkJW1VTQl0gU3RhcnQgd2l0aCB0aGUgb2xkIGRldmljZSBpbml0aWFsaXphdGlvbgorCQkJc2NoZW1lIChkZWZhdWx0IDAgPSBvZmYpLgorCisJdXNiY29yZS51c2VfYm90aF9zY2hlbWVzPQorCQkJW1VTQl0gVHJ5IHRoZSBvdGhlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lCisJCQlpZiB0aGUgZmlyc3Qgb25lIGZhaWxzIChkZWZhdWx0IDEgPSBlbmFibGVkKS4KKworCXVzYmNvcmUuaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQ9CisJCQlbVVNCXSBTcGVjaWZpZXMgdGltZW91dCBmb3IgdGhlIGluaXRpYWwgNjQtYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiByZXF1ZXN0IGluIG1pbGxpc2Vjb25kcworCQkJKGRlZmF1bHQgNTAwMCA9IDUuMCBzZWNvbmRzKS4KKwogCXVzYmhpZC5tb3VzZXBvbGw9CiAJCQlbVVNCSElEXSBUaGUgaW50ZXJ2YWwgd2hpY2ggbWljZSBhcmUgdG8gYmUgcG9sbGVkIGF0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hcmtlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dAppbmRleCBkOWY1MGExLi4wODlmNjEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21hcmtlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWFya2Vycy50eHQKQEAgLTUwLDEwICs1MCwxMiBAQAogdG8gY2FsbCkgZm9yIHRoZSBzcGVjaWZpYyBtYXJrZXIgdGhyb3VnaCBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoKSBhbmQgY2FuIGJlCiBhY3RpdmF0ZWQgYnkgY2FsbGluZyBtYXJrZXJfYXJtKCkuIE1hcmtlciBkZWFjdGl2YXRpb24gY2FuIGJlIGRvbmUgYnkgY2FsbGluZwogbWFya2VyX2Rpc2FybSgpIGFzIG1hbnkgdGltZXMgYXMgbWFya2VyX2FybSgpIGhhcyBiZWVuIGNhbGxlZC4gUmVtb3ZpbmcgYSBwcm9iZQotaXMgZG9uZSB0aHJvdWdoIG1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCk7IGl0IHdpbGwgZGlzYXJtIHRoZSBwcm9iZSBhbmQgbWFrZQotc3VyZSB0aGVyZSBpcyBubyBjYWxsZXIgbGVmdCB1c2luZyB0aGUgcHJvYmUgd2hlbiBpdCByZXR1cm5zLiBQcm9iZSByZW1vdmFsIGlzCi1wcmVlbXB0LXNhZmUgYmVjYXVzZSBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIGFyb3VuZCB0aGUgcHJvYmUgY2FsbC4gU2VlIHRoZQotIlByb2JlIGV4YW1wbGUiIHNlY3Rpb24gYmVsb3cgZm9yIGEgc2FtcGxlIHByb2JlIG1vZHVsZS4KK2lzIGRvbmUgdGhyb3VnaCBtYXJrZXJfcHJvYmVfdW5yZWdpc3RlcigpOyBpdCB3aWxsIGRpc2FybSB0aGUgcHJvYmUuCittYXJrZXJfc3luY2hyb25pemVfdW5yZWdpc3RlcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBtb2R1bGUgZXhpdAorZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGNhbGxlciBsZWZ0IHVzaW5nIHRoZSBwcm9iZS4gVGhpcywgYW5kIHRoZQorZmFjdCB0aGF0IHByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXJvdW5kIHRoZSBwcm9iZSBjYWxsLCBtYWtlIHN1cmUgdGhhdCBwcm9iZQorcmVtb3ZhbCBhbmQgbW9kdWxlIHVubG9hZCBhcmUgc2FmZS4gU2VlIHRoZSAiUHJvYmUgZXhhbXBsZSIgc2VjdGlvbiBiZWxvdyBmb3IgYQorc2FtcGxlIHByb2JlIG1vZHVsZS4KIAogVGhlIG1hcmtlciBtZWNoYW5pc20gc3VwcG9ydHMgaW5zZXJ0aW5nIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBtYXJrZXIuCiBNYXJrZXJzIGNhbiBiZSBwdXQgaW4gaW5saW5lIGZ1bmN0aW9ucywgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dCBiL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGY5M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0CkBAIC0wLDAgKzEsNzE0IEBACitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitIYXZpbmcgbG9va2VkIGF0IHRoZSBsaW51eCBtdGQvbmFuZCBkcml2ZXIgYW5kIG1vcmUgc3BlY2lmaWMgYXQgbmFuZF9lY2MuYworSSBmZWx0IHRoZXJlIHdhcyByb29tIGZvciBvcHRpbWlzYXRpb24uIEkgYmFzaGVkIHRoZSBjb2RlIGZvciBhIGZldyBob3VycworcGVyZm9ybWluZyB0cmlja3MgbGlrZSB0YWJsZSBsb29rdXAgcmVtb3Zpbmcgc3VwZXJmbHVvdXMgY29kZSBldGMuCitBZnRlciB0aGF0IHRoZSBzcGVlZCB3YXMgaW5jcmVhc2VkIGJ5IDM1LTQwJS4KK1N0aWxsIEkgd2FzIG5vdCB0b28gaGFwcHkgYXMgSSBmZWx0IHRoZXJlIHdhcyBhZGRpdGlvbmFsIHJvb20gZm9yIGltcHJvdmVtZW50LgorCitCYWQhIEkgd2FzIGhvb2tlZC4KK0kgZGVjaWRlZCB0byBhbm5vdGF0ZSBteSBzdGVwcyBpbiB0aGlzIGZpbGUuIFBlcmhhcHMgaXQgaXMgdXNlZnVsIHRvIHNvbWVvbmUKK29yIHNvbWVvbmUgbGVhcm5zIHNvbWV0aGluZyBmcm9tIGl0LgorCisKK1RoZSBwcm9ibGVtCis9PT09PT09PT09PQorCitOQU5EIGZsYXNoIChhdCBsZWFzdCBTTEMgb25lKSB0eXBpY2FsbHkgaGFzIHNlY3RvcnMgb2YgMjU2IGJ5dGVzLgorSG93ZXZlciBOQU5EIGZsYXNoIGlzIG5vdCBleHRyZW1lbHkgcmVsaWFibGUgc28gc29tZSBlcnJvciBkZXRlY3Rpb24KKyhhbmQgc29tZXRpbWVzIGNvcnJlY3Rpb24pIGlzIG5lZWRlZC4KKworVGhpcyBpcyBkb25lIGJ5IG1lYW5zIG9mIGEgSGFtbWluZyBjb2RlLiBJJ2xsIHRyeSB0byBleHBsYWluIGl0IGluCitsYXltYW5zIHRlcm1zIChhbmQgYXBvbG9naWVzIHRvIGFsbCB0aGUgcHJvJ3MgaW4gdGhlIGZpZWxkIGluIGNhc2UgSSBkbworbm90IHVzZSB0aGUgcmlnaHQgdGVybWlub2xvZ3ksIG15IGNvZGluZyB0aGVvcnkgY2xhc3Mgd2FzIGFsbW9zdCAzMAoreWVhcnMgYWdvLCBhbmQgSSBtdXN0IGFkbWl0IGl0IHdhcyBub3Qgb25lIG9mIG15IGZhdm91cml0ZXMpLgorCitBcyBJIHNhaWQgYmVmb3JlIHRoZSBlY2MgY2FsY3VsYXRpb24gaXMgcGVyZm9ybWVkIG9uIHNlY3RvcnMgb2YgMjU2CitieXRlcy4gVGhpcyBpcyBkb25lIGJ5IGNhbGN1bGF0aW5nIHNldmVyYWwgcGFyaXR5IGJpdHMgb3ZlciB0aGUgcm93cyBhbmQKK2NvbHVtbnMuIFRoZSBwYXJpdHkgdXNlZCBpcyBldmVuIHBhcml0eSB3aGljaCBtZWFucyB0aGF0IHRoZSBwYXJpdHkgYml0ID0gMQoraWYgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFyaXR5IGlzIGNhbGN1bGF0ZWQgaXMgMSBhbmQgdGhlIHBhcml0eSBiaXQgPSAwCitpZiB0aGUgZGF0YSBvdmVyIHdoaWNoIHRoZSBwYXJpdHkgaXMgY2FsY3VsYXRlZCBpcyAwLiBTbyB0aGUgdG90YWwKK251bWJlciBvZiBiaXRzIG92ZXIgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFyaXR5IGlzIGNhbGN1bGF0ZWQgKyB0aGUKK3Bhcml0eSBiaXQgaXMgZXZlbi4gKHNlZSB3aWtpcGVkaWEgaWYgeW91IGNhbid0IGZvbGxvdyB0aGlzKS4KK1Bhcml0eSBpcyBvZnRlbiBjYWxjdWxhdGVkIGJ5IG1lYW5zIG9mIGFuIGV4Y2x1c2l2ZSBvciBvcGVyYXRpb24sCitzb21ldGltZXMgYWxzbyByZWZlcnJlZCB0byBhcyB4b3IuIEluIEMgdGhlIG9wZXJhdG9yIGZvciB4b3IgaXMgXgorCitCYWNrIHRvIGVjYy4KK0xldCdzIGdpdmUgYSBzbWFsbCBmaWd1cmU6CisKK2J5dGUgICAwOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMiBycDQgLi4uIHJwMTQKK2J5dGUgICAxOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAxIHJwMiBycDQgLi4uIHJwMTQKK2J5dGUgICAyOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMyBycDQgLi4uIHJwMTQKK2J5dGUgICAzOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAxIHJwMyBycDQgLi4uIHJwMTQKK2J5dGUgICA0OiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMiBycDUgLi4uIHJwMTQKKy4uLi4KK2J5dGUgMjU0OiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMyBycDUgLi4uIHJwMTUKK2J5dGUgMjU1OiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAxIHJwMyBycDUgLi4uIHJwMTUKKyAgICAgICAgICAgY3AxICBjcDAgIGNwMSAgY3AwICBjcDEgIGNwMCAgY3AxICBjcDAKKyAgICAgICAgICAgY3AzICBjcDMgIGNwMiAgY3AyICBjcDMgIGNwMyAgY3AyICBjcDIKKyAgICAgICAgICAgY3A1ICBjcDUgIGNwNSAgY3A1ICBjcDQgIGNwNCAgY3A0ICBjcDQKKworVGhpcyBmaWd1cmUgcmVwcmVzZW50cyBhIHNlY3RvciBvZiAyNTYgYnl0ZXMuCitjcCBpcyBteSBhYmJyZXZpYXRvbiBmb3IgY29sdW1uIHBhcml0eSwgcnAgZm9yIHJvdyBwYXJpdHkuCisKK0xldCdzIHN0YXJ0IHRvIGV4cGxhaW4gY29sdW1uIHBhcml0eS4KK2NwMCBpcyB0aGUgcGFyaXR5IHRoYXQgYmVsb25ncyB0byBhbGwgYml0MCwgYml0MiwgYml0NCwgYml0Ni4KK3NvIHRoZSBzdW0gb2YgYWxsIGJpdDAsIGJpdDIsIGJpdDQgYW5kIGJpdDYgdmFsdWVzICsgY3AwIGl0c2VsZiBpcyBldmVuLgorU2ltaWxhcmx5IGNwMSBpcyB0aGUgc3VtIG9mIGFsbCBiaXQxLCBiaXQzLCBiaXQ1IGFuZCBiaXQ3LgorY3AyIGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQwLCBiaXQxLCBiaXQ0IGFuZCBiaXQ1CitjcDMgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDIsIGJpdDMsIGJpdDYgYW5kIGJpdDcuCitjcDQgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDAsIGJpdDEsIGJpdDIgYW5kIGJpdDMuCitjcDUgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDQsIGJpdDUsIGJpdDYgYW5kIGJpdDcuCitOb3RlIHRoYXQgZWFjaCBvZiBjcDAgLi4gY3A1IGlzIGV4YWN0bHkgb25lIGJpdC4KKworUm93IHBhcml0eSBhY3R1YWxseSB3b3JrcyBhbG1vc3QgdGhlIHNhbWUuCitycDAgaXMgdGhlIHBhcml0eSBvZiBhbGwgZXZlbiBieXRlcyAoMCwgMiwgNCwgNiwgLi4uIDI1MiwgMjU0KQorcnAxIGlzIHRoZSBwYXJpdHkgb2YgYWxsIG9kZCBieXRlcyAoMSwgMywgNSwgNywgLi4uLCAyNTMsIDI1NSkKK3JwMiBpcyB0aGUgcGFyaXR5IG9mIGFsbCBieXRlcyAwLCAxLCA0LCA1LCA4LCA5LCAuLi4KKyhzbyBoYW5kbGUgdHdvIGJ5dGVzLCB0aGVuIHNraXAgMiBieXRlcykuCitycDMgaXMgY292ZXJzIHRoZSBoYWxmIHJwMiBkb2VzIG5vdCBjb3ZlciAoYnl0ZXMgMiwgMywgNiwgNywgMTAsIDExLCAuLi4pCitmb3IgcnA0IHRoZSBydWxlIGlzIGNvdmVyIDQgYnl0ZXMsIHNraXAgNCBieXRlcywgY292ZXIgNCBieXRlcywgc2tpcCA0IGV0Yy4KK3NvIHJwNCBjYWxjdWxhdGVzIHBhcml0eSBvdmVyIGJ5dGVzIDAsIDEsIDIsIDMsIDgsIDksIDEwLCAxMSwgMTYsIC4uLikKK2FuZCBycDUgY292ZXJzIHRoZSBvdGhlciBoYWxmLCBzbyBieXRlcyA0LCA1LCA2LCA3LCAxMiwgMTMsIDE0LCAxNSwgMjAsIC4uCitUaGUgc3Rvcnkgbm93IGJlY29tZXMgcXVpdGUgYm9yaW5nLiBJIGd1ZXNzIHlvdSBnZXQgdGhlIGlkZWEuCitycDYgY292ZXJzIDggYnl0ZXMgdGhlbiBza2lwcyA4IGV0YworcnA3IHNraXBzIDggYnl0ZXMgdGhlbiBjb3ZlcnMgOCBldGMKK3JwOCBjb3ZlcnMgMTYgYnl0ZXMgdGhlbiBza2lwcyAxNiBldGMKK3JwOSBza2lwcyAxNiBieXRlcyB0aGVuIGNvdmVycyAxNiBldGMKK3JwMTAgY292ZXJzIDMyIGJ5dGVzIHRoZW4gc2tpcHMgMzIgZXRjCitycDExIHNraXBzIDMyIGJ5dGVzIHRoZW4gY292ZXJzIDMyIGV0YworcnAxMiBjb3ZlcnMgNjQgYnl0ZXMgdGhlbiBza2lwcyA2NCBldGMKK3JwMTMgc2tpcHMgNjQgYnl0ZXMgdGhlbiBjb3ZlcnMgNjQgZXRjCitycDE0IGNvdmVycyAxMjggYnl0ZXMgdGhlbiBza2lwcyAxMjgKK3JwMTUgc2tpcHMgMTI4IGJ5dGVzIHRoZW4gY292ZXJzIDEyOAorCitJbiB0aGUgZW5kIHRoZSBwYXJpdHkgYml0cyBhcmUgZ3JvdXBlZCB0b2dldGhlciBpbiB0aHJlZSBieXRlcyBhcworZm9sbG93czoKK0VDQyAgICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNCBCaXQgMyBCaXQgMiBCaXQgMSBCaXQgMAorRUNDIDAgICBycDA3ICBycDA2ICBycDA1ICBycDA0ICBycDAzICBycDAyICBycDAxICBycDAwCitFQ0MgMSAgIHJwMTUgIHJwMTQgIHJwMTMgIHJwMTIgIHJwMTEgIHJwMTAgIHJwMDkgIHJwMDgKK0VDQyAyICAgY3A1ICAgY3A0ICAgY3AzICAgY3AyICAgY3AxICAgY3AwICAgICAgMSAgICAgMQorCitJIGRldGVjdGVkIGFmdGVyIHdyaXRpbmcgdGhpcyB0aGF0IFNUIGFwcGxpY2F0aW9uIG5vdGUgQU4xODIzCisoaHR0cDovL3d3dy5zdC5jb20vc3RvbmxpbmUvYm9va3MvcGRmL2RvY3MvMTAxMjMucGRmKSBnaXZlcyBhIG11Y2gKK25pY2VyIHBpY3R1cmUuKGJ1dCB0aGV5IHVzZSBsaW5lIHBhcml0eSBhcyB0ZXJtIHdoZXJlIEkgdXNlIHJvdyBwYXJpdHkpCitPaCB3ZWxsLCBJJ20gZ3JhcGhpY2FsbHkgY2hhbGxlbmdlZCwgc28gc3VmZmVyIHdpdGggbWUgZm9yIGEgbW9tZW50IDotKQorQW5kIEkgY291bGQgbm90IHJldXNlIHRoZSBTVCBwaWN0dXJlIGFueXdheSBmb3IgY29weXJpZ2h0IHJlYXNvbnMuCisKKworQXR0ZW1wdCAwCis9PT09PT09PT0KKworSW1wbGVtZW50aW5nIHRoZSBwYXJpdHkgY2FsY3VsYXRpb24gaXMgcHJldHR5IHNpbXBsZS4KK0luIEMgcHNldWRvY29kZToKK2ZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKK3sKKyAgICBpZiAoaSAmIDB4MDEpCisgICAgICAgcnAxID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDE7CisgICAgZWxzZQorICAgICAgIHJwMCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxOworICAgIGlmIChpICYgMHgwMikKKyAgICAgICBycDMgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMzsKKyAgICBlbHNlCisgICAgICAgcnAyID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDI7CisgICAgaWYgKGkgJiAweDA0KQorICAgICAgcnA1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDU7CisgICAgZWxzZQorICAgICAgcnA0ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDQ7CisgICAgaWYgKGkgJiAweDA4KQorICAgICAgcnA3ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDc7CisgICAgZWxzZQorICAgICAgcnA2ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDY7CisgICAgaWYgKGkgJiAweDEwKQorICAgICAgcnA5ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDk7CisgICAgZWxzZQorICAgICAgcnA4ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDg7CisgICAgaWYgKGkgJiAweDIwKQorICAgICAgcnAxMSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMTsKKyAgICBlbHNlCisgICAgcnAxMCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMDsKKyAgICBpZiAoaSAmIDB4NDApCisgICAgICBycDEzID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDEzOworICAgIGVsc2UKKyAgICAgIHJwMTIgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTI7CisgICAgaWYgKGkgJiAweDgwKQorICAgICAgcnAxNSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxNTsKKyAgICBlbHNlCisgICAgICBycDE0ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDE0OworICAgIGNwMCA9IGJpdDYgXiBiaXQ0IF4gYml0MiBeIGJpdDAgXiBjcDA7CisgICAgY3AxID0gYml0NyBeIGJpdDUgXiBiaXQzIF4gYml0MSBeIGNwMTsKKyAgICBjcDIgPSBiaXQ1IF4gYml0NCBeIGJpdDEgXiBiaXQwIF4gY3AyOworICAgIGNwMyA9IGJpdDcgXiBiaXQ2IF4gYml0MyBeIGJpdDIgXiBjcDMKKyAgICBjcDQgPSBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gY3A0CisgICAgY3A1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGNwNQorfQorCisKK0FuYWx5c2lzIDAKKz09PT09PT09PT0KKworQyBkb2VzIGhhdmUgYml0d2lzZSBvcGVyYXRvcnMgYnV0IG5vdCByZWFsbHkgb3BlcmF0b3JzIHRvIGRvIHRoZSBhYm92ZQorZWZmaWNpZW50bHkgKGFuZCBtb3N0IGhhcmR3YXJlIGhhcyBubyBzdWNoIGluc3RydWN0aW9ucyBlaXRoZXIpLgorVGhlcmVmb3JlIHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoaXMgaXQgd2FzIGNsZWFyIHRoYXQgdGhlIGNvZGUgYWJvdmUgd2FzCitub3QgZ29pbmcgdG8gYnJpbmcgbWUgYSBOb2JlbCBwcml6ZSA6LSkKKworRm9ydHVuYXRlbHkgdGhlIGV4Y2x1c2l2ZSBvciBvcGVyYXRpb24gaXMgY29tbXV0YXRpdmUsIHNvIHdlIGNhbiBjb21iaW5lCit0aGUgdmFsdWVzIGluIGFueSBvcmRlci4gU28gaW5zdGVhZCBvZiBjYWxjdWxhdGluZyBhbGwgdGhlIGJpdHMKK2luZGl2aWR1YWxseSwgbGV0IHVzIHRyeSB0byByZWFycmFuZ2UgdGhpbmdzLgorRm9yIHRoZSBjb2x1bW4gcGFyaXR5IHRoaXMgaXMgZWFzeS4gV2UgY2FuIGp1c3QgeG9yIHRoZSBieXRlcyBhbmQgaW4gdGhlCitlbmQgZmlsdGVyIG91dCB0aGUgcmVsZXZhbnQgYml0cy4gVGhpcyBpcyBwcmV0dHkgbmljZSBhcyBpdCB3aWxsIGJyaW5nCithbGwgY3AgY2FsY3VsYXRpb24gb3V0IG9mIHRoZSBpZiBsb29wLgorCitTaW1pbGFybHkgd2UgY2FuIGZpcnN0IHhvciB0aGUgYnl0ZXMgZm9yIHRoZSB2YXJpb3VzIHJvd3MuCitUaGlzIGxlYWRzIHRvOgorCisKK0F0dGVtcHQgMQorPT09PT09PT09CisKK2NvbnN0IGNoYXIgcGFyaXR5WzI1Nl0gPSB7CisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMAorfTsKKwordm9pZCBlY2MxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqY29kZSkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpicCA9IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyIGN1cjsKKyAgICB1bnNpZ25lZCBjaGFyIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworICAgIHVuc2lnbmVkIGNoYXIgcnA4LCBycDksIHJwMTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisgICAgdW5zaWduZWQgY2hhciBwYXI7CisKKyAgICBwYXIgPSAwOworICAgIHJwMCA9IDA7IHJwMSA9IDA7IHJwMiA9IDA7IHJwMyA9IDA7CisgICAgcnA0ID0gMDsgcnA1ID0gMDsgcnA2ID0gMDsgcnA3ID0gMDsKKyAgICBycDggPSAwOyBycDkgPSAwOyBycDEwID0gMDsgcnAxMSA9IDA7CisgICAgcnAxMiA9IDA7IHJwMTMgPSAwOyBycDE0ID0gMDsgcnAxNSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDEgXj0gY3VyOyBlbHNlIHJwMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnAzIF49IGN1cjsgZWxzZSBycDIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxMCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4NDApIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4ODApIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgIH0KKyAgICBjb2RlWzBdID0KKyAgICAgICAgKHBhcml0eVtycDddIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtycDZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDVdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtycDRdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtycDNdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDJdIDw8IDIpIHwKKyAgICAgICAgKHBhcml0eVtycDFdIDw8IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDBdKTsKKyAgICBjb2RlWzFdID0KKyAgICAgICAgKHBhcml0eVtycDE1XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnAxNF0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3JwMTNdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtycDEyXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAxMV0gPDwgMykgfAorICAgICAgICAocGFyaXR5W3JwMTBdIDw8IDIpIHwKKyAgICAgICAgKHBhcml0eVtycDldICA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnA4XSk7CisgICAgY29kZVsyXSA9CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDU1XSA8PCAyKTsKKyAgICBjb2RlWzBdID0gfmNvZGVbMF07CisgICAgY29kZVsxXSA9IH5jb2RlWzFdOworICAgIGNvZGVbMl0gPSB+Y29kZVsyXTsKK30KKworU3RpbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGxhc3QgdGhyZWUgaW52ZXJ0IHN0YXRlbWVudHMgYXJlIHRoZXJlIHRvCitnaXZlIGEgY2hlY2tzdW0gb2YgMHhmZiAweGZmIDB4ZmYgZm9yIGFuIGVtcHR5IGZsYXNoLiBJbiBhbiBlbXB0eSBmbGFzaAorYWxsIGRhdGEgaXMgMHhmZiwgc28gdGhlIGNoZWNrc3VtIHRoZW4gbWF0Y2hlcy4KKworSSBhbHNvIGludHJvZHVjZWQgdGhlIHBhcml0eSBsb29rdXAuIEkgZXhwZWN0ZWQgdGhpcyB0byBiZSB0aGUgZmFzdGVzdAord2F5IHRvIGNhbGN1bGF0ZSB0aGUgcGFyaXR5LCBidXQgSSB3aWxsIGludmVzdGlnYXRlIGFsdGVybmF0aXZlcyBsYXRlcgorb24uCisKKworQW5hbHlzaXMgMQorPT09PT09PT09PQorCitUaGUgY29kZSB3b3JrcywgYnV0IGlzIG5vdCB0ZXJyaWJseSBlZmZpY2llbnQuIE9uIG15IHN5c3RlbSBpdCB0b29rCithbG1vc3QgNCB0aW1lcyBhcyBtdWNoIHRpbWUgYXMgdGhlIGxpbnV4IGRyaXZlciBjb2RlLiBCdXQgaGV5LCBpZiBpdCB3YXMKKyp0aGF0KiBlYXN5IHRoaXMgd291bGQgaGF2ZSBiZWVuIGRvbmUgbG9uZyBiZWZvcmUuCitObyBwYWluLiBubyBnYWluLgorCitGb3J0dW5hdGVseSB0aGVyZSBpcyBwbGVudHkgb2Ygcm9vbSBmb3IgaW1wcm92ZW1lbnQuCisKK0luIHN0ZXAgMSB3ZSBtb3ZlZCBmcm9tIGJpdC13aXNlIGNhbGN1bGF0aW9uIHRvIGJ5dGUtd2lzZSBjYWxjdWxhdGlvbi4KK0hvd2V2ZXIgaW4gQyB3ZSBjYW4gYWxzbyB1c2UgdGhlIHVuc2lnbmVkIGxvbmcgZGF0YSB0eXBlIGFuZCB2aXJ0dWFsbHkKK2V2ZXJ5IG1vZGVybiBtaWNyb3Byb2Nlc3NvciBzdXBwb3J0cyAzMiBiaXQgb3BlcmF0aW9ucywgc28gd2h5IG5vdCB0cnkKK3RvIHdyaXRlIG91ciBjb2RlIGluIHN1Y2ggYSB3YXkgdGhhdCB3ZSBwcm9jZXNzIGRhdGEgaW4gMzIgYml0IGNodW5rcy4KKworT2YgY291cnNlIHRoaXMgbWVhbnMgc29tZSBtb2RpZmljYXRpb24gYXMgdGhlIHJvdyBwYXJpdHkgaXMgYnl0ZSBieQorYnl0ZS4gQSBxdWljayBhbmFseXNpczoKK2ZvciB0aGUgY29sdW1uIHBhcml0eSB3ZSB1c2UgdGhlIHBhciB2YXJpYWJsZS4gV2hlbiBleHRlbmRpbmcgdG8gMzIgYml0cword2UgY2FuIGluIHRoZSBlbmQgZWFzaWx5IGNhbGN1bGF0ZSBwMCBhbmQgcDEgZnJvbSBpdC4KKyhiZWNhdXNlIHBhciBub3cgY29uc2lzdHMgb2YgNCBieXRlcywgY29udHJpYnV0aW5nIHRvIHJwMSwgcnAwLCBycDEsIHJwMAorcmVzcGVjdGl2ZWx5KQorYWxzbyBycDIgYW5kIHJwMyBjYW4gYmUgZWFzaWx5IHJldHJpZXZlZCBmcm9tIHBhciBhcyBycDMgY292ZXJzIHRoZQorZmlyc3QgdHdvIGJ5dGVzIGFuZCBycDIgdGhlIGxhc3QgdHdvIGJ5dGVzLgorCitOb3RlIHRoYXQgb2YgY291cnNlIG5vdyB0aGUgbG9vcCBpcyBleGVjdXRlZCBvbmx5IDY0IHRpbWVzICgyNTYvNCkuCitBbmQgbm90ZSB0aGF0IGNhcmUgbXVzdCB0YWtlbiB3cnQgYnl0ZSBvcmRlcmluZy4gVGhlIHdheSBieXRlcyBhcmUKK29yZGVyZWQgaW4gYSBsb25nIGlzIG1hY2hpbmUgZGVwZW5kZW50LCBhbmQgbWlnaHQgYWZmZWN0IHVzLgorQW55d2F5LCBpZiB0aGVyZSBpcyBhbiBpc3N1ZTogdGhpcyBjb2RlIGlzIGRldmVsb3BlZCBvbiB4ODYgKHRvIGJlCitwcmVjaXNlOiBhIERFTEwgUEMgd2l0aCBhIEQ5MjAgSW50ZWwgQ1BVKQorCitBbmQgb2YgY291cnNlIHRoZSBwZXJmb3JtYW5jZSBtaWdodCBkZXBlbmQgb24gYWxpZ25tZW50LCBidXQgSSBleHBlY3QKK3RoYXQgdGhlIEkvTyBidWZmZXJzIGluIHRoZSBuYW5kIGRyaXZlciBhcmUgYWxpZ25lZCBwcm9wZXJseSAoYW5kCitvdGhlcndpc2UgdGhhdCBzaG91bGQgYmUgZml4ZWQgdG8gZ2V0IG1heGltdW0gcGVyZm9ybWFuY2UpLgorCitMZXQncyBnaXZlIGl0IGEgdHJ5Li4uCisKKworQXR0ZW1wdCAyCis9PT09PT09PT0KKworZXh0ZXJuIGNvbnN0IGNoYXIgcGFyaXR5WzI1Nl07CisKK3ZvaWQgZWNjMihjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmNvZGUpCit7CisgICAgaW50IGk7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYnAgPSAodW5zaWduZWQgbG9uZyAqKWJ1ZjsKKyAgICB1bnNpZ25lZCBsb25nIGN1cjsKKyAgICB1bnNpZ25lZCBsb25nIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworICAgIHVuc2lnbmVkIGxvbmcgcnA4LCBycDksIHJwMTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisgICAgdW5zaWduZWQgbG9uZyBwYXI7CisKKyAgICBwYXIgPSAwOworICAgIHJwMCA9IDA7IHJwMSA9IDA7IHJwMiA9IDA7IHJwMyA9IDA7CisgICAgcnA0ID0gMDsgcnA1ID0gMDsgcnA2ID0gMDsgcnA3ID0gMDsKKyAgICBycDggPSAwOyBycDkgPSAwOyBycDEwID0gMDsgcnAxMSA9IDA7CisgICAgcnAxMiA9IDA7IHJwMTMgPSAwOyBycDE0ID0gMDsgcnAxNSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDEpIHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAyKSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgIH0KKyAgICAvKgorICAgICAgIHdlIG5lZWQgdG8gYWRhcHQgdGhlIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGhlIGZhY3QgdGhhdCBycCB2YXJzIGFyZSBub3cKKyAgICAgICBsb25nOyBhbHNvIHRoZSBjb2x1bW4gcGFyaXR5IGNhbGN1bGF0aW9uIG5lZWRzIHRvIGJlIGNoYW5nZWQuCisgICAgICAgd2UnbGwgYnJpbmcgcnA0IHRvIDE1IGJhY2sgdG8gc2luZ2xlIGJ5dGUgZW50aXRpZXMgYnkgc2hpZnRpbmcgYW5kCisgICAgICAgeG9yaW5nCisgICAgKi8KKyAgICBycDQgXj0gKHJwNCA+PiAxNik7IHJwNCBePSAocnA0ID4+IDgpOyBycDQgJj0gMHhmZjsKKyAgICBycDUgXj0gKHJwNSA+PiAxNik7IHJwNSBePSAocnA1ID4+IDgpOyBycDUgJj0gMHhmZjsKKyAgICBycDYgXj0gKHJwNiA+PiAxNik7IHJwNiBePSAocnA2ID4+IDgpOyBycDYgJj0gMHhmZjsKKyAgICBycDcgXj0gKHJwNyA+PiAxNik7IHJwNyBePSAocnA3ID4+IDgpOyBycDcgJj0gMHhmZjsKKyAgICBycDggXj0gKHJwOCA+PiAxNik7IHJwOCBePSAocnA4ID4+IDgpOyBycDggJj0gMHhmZjsKKyAgICBycDkgXj0gKHJwOSA+PiAxNik7IHJwOSBePSAocnA5ID4+IDgpOyBycDkgJj0gMHhmZjsKKyAgICBycDEwIF49IChycDEwID4+IDE2KTsgcnAxMCBePSAocnAxMCA+PiA4KTsgcnAxMCAmPSAweGZmOworICAgIHJwMTEgXj0gKHJwMTEgPj4gMTYpOyBycDExIF49IChycDExID4+IDgpOyBycDExICY9IDB4ZmY7CisgICAgcnAxMiBePSAocnAxMiA+PiAxNik7IHJwMTIgXj0gKHJwMTIgPj4gOCk7IHJwMTIgJj0gMHhmZjsKKyAgICBycDEzIF49IChycDEzID4+IDE2KTsgcnAxMyBePSAocnAxMyA+PiA4KTsgcnAxMyAmPSAweGZmOworICAgIHJwMTQgXj0gKHJwMTQgPj4gMTYpOyBycDE0IF49IChycDE0ID4+IDgpOyBycDE0ICY9IDB4ZmY7CisgICAgcnAxNSBePSAocnAxNSA+PiAxNik7IHJwMTUgXj0gKHJwMTUgPj4gOCk7IHJwMTUgJj0gMHhmZjsKKyAgICBycDMgPSAocGFyID4+IDE2KTsgcnAzIF49IChycDMgPj4gOCk7IHJwMyAmPSAweGZmOworICAgIHJwMiA9IHBhciAmIDB4ZmZmZjsgcnAyIF49IChycDIgPj4gOCk7IHJwMiAmPSAweGZmOworICAgIHBhciBePSAocGFyID4+IDE2KTsKKyAgICBycDEgPSAocGFyID4+IDgpOyBycDEgJj0gMHhmZjsKKyAgICBycDAgPSAocGFyICYgMHhmZik7CisgICAgcGFyIF49IChwYXIgPj4gOCk7IHBhciAmPSAweGZmOworCisgICAgY29kZVswXSA9CisgICAgICAgIChwYXJpdHlbcnA3XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnA2XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnA1XSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnA0XSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAzXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAyXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnAxXSA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnAwXSk7CisgICAgY29kZVsxXSA9CisgICAgICAgIChwYXJpdHlbcnAxNV0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwMTRdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDEzXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnAxMl0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwMTFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDEwXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnA5XSAgPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwOF0pOworICAgIGNvZGVbMl0gPQorICAgICAgICAocGFyaXR5W3BhciAmIDB4ZjBdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MzNdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHg1NV0gPDwgMik7CisgICAgY29kZVswXSA9IH5jb2RlWzBdOworICAgIGNvZGVbMV0gPSB+Y29kZVsxXTsKKyAgICBjb2RlWzJdID0gfmNvZGVbMl07Cit9CisKK1RoZSBwYXJpdHkgYXJyYXkgaXMgbm90IHNob3duIGFueSBtb3JlLiBOb3RlIGFsc28gdGhhdCBmb3IgdGhlc2UKK2V4YW1wbGVzIEkga2luZGEgZGV2aWF0ZWQgZnJvbSBteSByZWd1bGFyIHByb2dyYW1taW5nIHN0eWxlIGJ5IGFsbG93aW5nCittdWx0aXBsZSBzdGF0ZW1lbnRzIG9uIGEgbGluZSwgbm90IHVzaW5nIHsgfSBpbiB0aGVuIGFuZCBlbHNlIGJsb2Nrcword2l0aCBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudCBhbmQgYnkgdXNpbmcgb3BlcmF0b3JzIGxpa2UgXj0KKworCitBbmFseXNpcyAyCis9PT09PT09PT09CisKK1RoZSBjb2RlIChvZiBjb3Vyc2UpIHdvcmtzLCBhbmQgaHVycmF5OiB3ZSBhcmUgYSBsaXR0bGUgYml0IGZhc3RlciB0aGFuCit0aGUgbGludXggZHJpdmVyIGNvZGUgKGFib3V0IDE1JSkuIEJ1dCB3YWl0LCBkb24ndCBjaGVlciB0b28gcXVpY2tseS4KK1RIZXJlIGlzIG1vcmUgdG8gYmUgZ2FpbmVkLgorSWYgd2UgbG9vayBhdCBlLmcuIHJwMTQgYW5kIHJwMTUgd2Ugc2VlIHRoYXQgd2UgZWl0aGVyIHhvciBvdXIgZGF0YSB3aXRoCitycDE0IG9yIHdpdGggcnAxNS4gSG93ZXZlciB3ZSBhbHNvIGhhdmUgcGFyIHdoaWNoIGdvZXMgb3ZlciBhbGwgZGF0YS4KK1RoaXMgbWVhbnMgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgcnAxNCBhcyBpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tCitycDE1IHRocm91Z2ggcnAxNCA9IHBhciBeIHJwMTU7Cisob3IgaWYgZGVzaXJlZCB3ZSBjYW4gYXZvaWQgY2FsY3VsYXRpbmcgcnAxNSBhbmQgY2FsY3VsYXRlIGl0IGZyb20KK3JwMTQpLiAgVGhhdCBpcyB3aHkgc29tZSBwbGFjZXMgcmVmZXIgdG8gaW52ZXJzZSBwYXJpdHkuCitPZiBjb3Vyc2UgdGhlIHNhbWUgdGhpbmcgaG9sZHMgZm9yIHJwNC81LCBycDYvNywgcnA4LzksIHJwMTAvMTEgYW5kIHJwMTIvMTMuCitFZmZlY3RpdmVseSB0aGlzIG1lYW5zIHdlIGNhbiBlbGltaW5hdGUgdGhlIGVsc2UgY2xhdXNlIGZyb20gdGhlIGlmCitzdGF0ZW1lbnRzLiBBbHNvIHdlIGNhbiBvcHRpbWlzZSB0aGUgY2FsY3VsYXRpb24gaW4gdGhlIGVuZCBhIGxpdHRsZSBiaXQKK2J5IGdvaW5nIGZyb20gbG9uZyB0byBieXRlIGZpcnN0LiBBY3R1YWxseSB3ZSBjYW4gZXZlbiBhdm9pZCB0aGUgdGFibGUKK2xvb2t1cHMKKworQXR0ZW1wdCAzCis9PT09PT09PT0KKworT2RkIHJlcGxhY2VkOgorICAgICAgICBpZiAoaSAmIDB4MDEpIHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAyKSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOword2l0aAorICAgICAgICBpZiAoaSAmIDB4MDEpIHJwNSBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA0KSBycDkgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwMTEgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwMTMgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTUgXj0gY3VyOworCisgICAgICAgIGFuZCBvdXRzaWRlIHRoZSBsb29wIGFkZGVkOgorICAgIHJwNCAgPSBwYXIgXiBycDU7CisgICAgcnA2ICA9IHBhciBeIHJwNzsKKyAgICBycDggID0gcGFyIF4gcnA5OworICAgIHJwMTAgID0gcGFyIF4gcnAxMTsKKyAgICBycDEyICA9IHBhciBeIHJwMTM7CisgICAgcnAxNCAgPSBwYXIgXiBycDE1OworCitBbmQgYWZ0ZXIgdGhhdCB0aGUgY29kZSB0YWtlcyBhYm91dCAzMCUgbW9yZSB0aW1lLCBhbHRob3VnaCB0aGUgbnVtYmVyIG9mCitzdGF0ZW1lbnRzIGlzIHJlZHVjZWQuIFRoaXMgaXMgYWxzbyByZWZsZWN0ZWQgaW4gdGhlIGFzc2VtYmx5IGNvZGUuCisKKworQW5hbHlzaXMgMworPT09PT09PT09PQorCitWZXJ5IHdlaXJkLiBHdWVzcyBpdCBoYXMgdG8gZG8gd2l0aCBjYWNoaW5nIG9yIGluc3RydWN0aW9uIHBhcmFsbGVsbGlzbQorb3Igc28uIEkgYWxzbyB0cmllZCBvbiBhbiBlZWVQQyAoQ2VsZXJvbiwgY2xvY2tlZCBhdCA5MDAgTWh6KS4gSW50ZXJlc3RpbmcKK29ic2VydmF0aW9uIHdhcyB0aGF0IHRoaXMgb25lIGlzIG9ubHkgMzAlIHNsb3dlciAoYWNjb3JkaW5nIHRvIHRpbWUpCitleGVjdXRpbmcgdGhlIGNvZGUgYXMgbXkgM0doeiBEOTIwIHByb2Nlc3Nvci4KKworV2VsbCwgaXQgd2FzIGV4cGVjdGVkIG5vdCB0byBiZSBlYXN5IHNvIG1heWJlIGluc3RlYWQgbW92ZSB0byBhCitkaWZmZXJlbnQgdHJhY2s6IGxldCdzIG1vdmUgYmFjayB0byB0aGUgY29kZSBmcm9tIGF0dGVtcHQyIGFuZCBkbyBzb21lCitsb29wIHVucm9sbGluZy4gVGhpcyB3aWxsIGVsaW1pbmF0ZSBhIGZldyBpZiBzdGF0ZW1lbnRzLiBJJ2xsIHRyeQorZGlmZmVyZW50IGFtb3VudHMgb2YgdW5yb2xsaW5nIHRvIHNlZSB3aGF0IHdvcmtzIGJlc3QuCisKKworQXR0ZW1wdCA0Cis9PT09PT09PT0KKworVW5yb2xsZWQgdGhlIGxvb3AgMSwgMiwgMyBhbmQgNCB0aW1lcy4KK0ZvciA0IHRoZSBjb2RlIHN0YXJ0cyB3aXRoOgorCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBycDQgXj0gY3VyOworICAgICAgICBycDYgXj0gY3VyOworICAgICAgICBycDggXj0gY3VyOworICAgICAgICBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEpIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MikgcnAxNSBePSBjdXI7IGVsc2UgcnAxNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBycDUgXj0gY3VyOworICAgICAgICBycDYgXj0gY3VyOworICAgICAgICAuLi4KKworCitBbmFseXNpcyA0Cis9PT09PT09PT09CisKK1Vucm9sbGluZyBvbmNlIGdhaW5zIGFib3V0IDE1JQorVW5yb2xsaW5nIHR3aWNlIGtlZXBzIHRoZSBnYWluIGF0IGFib3V0IDE1JQorVW5yb2xsaW5nIHRocmVlIHRpbWVzIGdpdmVzIGEgZ2FpbiBvZiAzMCUgY29tcGFyZWQgdG8gYXR0ZW1wdCAyLgorVW5yb2xsaW5nIGZvdXIgdGltZXMgZ2l2ZXMgYSBtYXJnaW5hbCBpbXByb3ZlbWVudCBjb21wYXJlZCB0byB1bnJvbGxpbmcKK3RocmVlIHRpbWVzLgorCitJIGRlY2lkZWQgdG8gcHJvY2VlZCB3aXRoIGEgZm91ciB0aW1lIHVucm9sbGVkIGxvb3AgYW55d2F5LiBJdCB3YXMgbXkgZ3V0CitmZWVsaW5nIHRoYXQgaW4gdGhlIG5leHQgc3RlcHMgSSB3b3VsZCBvYnRhaW4gYWRkaXRpb25hbCBnYWluIGZyb20gaXQuCisKK1RoZSBuZXh0IHN0ZXAgd2FzIHRyaWdnZXJlZCBieSB0aGUgZmFjdCB0aGF0IHBhciBjb250YWlucyB0aGUgeG9yIG9mIGFsbAorYnl0ZXMgYW5kIHJwNCBhbmQgcnA1IGVhY2ggY29udGFpbiB0aGUgeG9yIG9mIGhhbGYgb2YgdGhlIGJ5dGVzLgorU28gaW4gZWZmZWN0IHBhciA9IHJwNCBeIHJwNS4gQnV0IGFzIHhvciBpcyBjb21tdXRhdGl2ZSB3ZSBjYW4gYWxzbyBzYXkKK3RoYXQgcnA1ID0gcGFyIF4gcnA0LiBTbyBubyBuZWVkIHRvIGtlZXAgYm90aCBycDQgYW5kIHJwNSBhcm91bmQuIFdlIGNhbgorZWxpbWluYXRlIHJwNSAob3IgcnA0LCBidXQgSSBhbHJlYWR5IGZvcmVzYXcgYW5vdGhlciBvcHRpbWlzYXRpb24pLgorVGhlIHNhbWUgaG9sZHMgZm9yIHJwNi83LCBycDgvOSwgcnAxMC8xMSBycDEyLzEzIGFuZCBycDE0LzE1LgorCisKK0F0dGVtcHQgNQorPT09PT09PT09CisKK0VmZmVjdGl2ZWx5IHNvIGFsbCBvZGQgZGlnaXQgcnAgYXNzaWdubWVudHMgaW4gdGhlIGxvb3Agd2VyZSByZW1vdmVkLgorVGhpcyBpbmNsdWRlZCB0aGUgZWxzZSBjbGF1c2Ugb2YgdGhlIGlmIHN0YXRlbWVudHMuCitPZiBjb3Vyc2UgYWZ0ZXIgdGhlIGxvb3Agd2UgbmVlZCB0byBjb3JyZWN0IHRoaW5ncyBieSBhZGRpbmcgY29kZSBsaWtlOgorICAgIHJwNSA9IHBhciBeIHJwNDsKK0Fsc28gdGhlIGluaXRpYWwgYXNzaWdubWVudHMgKHJwNSA9IDA7IGV0YykgY291bGQgYmUgcmVtb3ZlZC4KK0Fsb25nIHRoZSBsaW5lIEkgYWxzbyByZW1vdmVkIHRoZSBpbml0aWFsaXNhdGlvbiBvZiBycDAvMS8yLzMuCisKKworQW5hbHlzaXMgNQorPT09PT09PT09PQorCitNZWFzdXJlbWVudHMgc2hvd2VkIHRoaXMgd2FzIGEgZ29vZCBtb3ZlLiBUaGUgcnVuLXRpbWUgcm91Z2hseSBoYWx2ZWQKK2NvbXBhcmVkIHdpdGggYXR0ZW1wdCA0IHdpdGggNCB0aW1lcyB1bnJvbGxlZCwgYW5kIHdlIG9ubHkgcmVxdWlyZSAxLzNyZAorb2YgdGhlIHByb2Nlc3NvciB0aW1lIGNvbXBhcmVkIHRvIHRoZSBjdXJyZW50IGNvZGUgaW4gdGhlIGxpbnV4IGtlcm5lbC4KKworSG93ZXZlciwgc3RpbGwgSSB0aG91Z2h0IHRoZXJlIHdhcyBtb3JlLiBJIGRpZG4ndCBsaWtlIGFsbCB0aGUgaWYKK3N0YXRlbWVudHMuIFdoeSBub3Qga2VlcCBhIHJ1bm5pbmcgcGFyaXR5IGFuZCBvbmx5IGtlZXAgdGhlIGxhc3QgaWYKK3N0YXRlbWVudC4gVGltZSBmb3IgeWV0IGFub3RoZXIgdmVyc2lvbiEKKworCitBdHRlbXB0IDYKKz09PT09PT09PQorCitUSGUgY29kZSB3aXRoaW4gdGhlIGZvciBsb29wIHdhcyBjaGFuZ2VkIHRvOgorCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgID0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IHRtcHBhcjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDggXj0gdG1wcGFyOworCisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDEwIF49IHRtcHBhcjsKKworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA2IF49IGN1cjsgcnA4IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7IHJwOCBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDggXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA4IF49IGN1cjsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKworCSAgICBwYXIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDEpID09IDApIHJwMTIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDIpID09IDApIHJwMTQgXj0gdG1wcGFyOworICAgIH0KKworQXMgeW91IGNhbiBzZWUgdG1wcGFyIGlzIHVzZWQgdG8gYWNjdW11bGF0ZSB0aGUgcGFyaXR5IHdpdGhpbiBhIGZvcgoraXRlcmF0aW9uLiBJbiB0aGUgbGFzdCAzIHN0YXRlbWVudHMgaXMgaXMgYWRkZWQgdG8gcGFyIGFuZCwgaWYgbmVlZGVkLAordG8gcnAxMiBhbmQgcnAxNC4KKworV2hpbGUgbWFraW5nIHRoZSBjaGFuZ2VzIEkgYWxzbyBmb3VuZCB0aGF0IEkgY291bGQgZXhwbG9pdCB0aGF0IHRtcHBhcgorY29udGFpbnMgdGhlIHJ1bm5pbmcgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbi4gU28gaW5zdGVhZCBvZiBoYXZpbmc6CitycDQgXj0gY3VyOyBycDYgPSBjdXI7CitJIHJlbW92ZWQgdGhlIHJwNiA9IGN1cjsgc3RhdGVtZW50IGFuZCBkaWQgcnA2IF49IHRtcHBhcjsgb24gbmV4dAorc3RhdGVtZW50LiBBIHNpbWlsYXIgY2hhbmdlIHdhcyBkb25lIGZvciBycDggYW5kIHJwMTAKKworCitBbmFseXNpcyA2Cis9PT09PT09PT09CisKK01lYXN1cmluZyB0aGlzIGNvZGUgYWdhaW4gc2hvd2VkIGJpZyBnYWluLiBXaGVuIGV4ZWN1dGluZyB0aGUgb3JpZ2luYWwKK2xpbnV4IGNvZGUgMSBtaWxsaW9uIHRpbWVzLCB0aGlzIHRvb2sgYWJvdXQgMSBzZWNvbmQgb24gbXkgc3lzdGVtLgorKHVzaW5nIHRpbWUgdG8gbWVhc3VyZSB0aGUgcGVyZm9ybWFuY2UpLiBBZnRlciB0aGlzIGl0ZXJhdGlvbiBJIHdhcyBiYWNrCit0byAwLjA3NSBzZWMuIEFjdHVhbGx5IEkgaGFkIHRvIGRlY2lkZSB0byBzdGFydCBtZWFzdXJpbmcgb3ZlciAxMAorbWlsbGlvbiBpbnRlcmF0aW9ucyBpbiBvcmRlciBub3QgdG8gbG9vc2UgdG9vIG11Y2ggYWNjdXJhY3kuIFRoaXMgb25lCitkZWZpbml0ZWx5IHNlZW1lZCB0byBiZSB0aGUgamFja3BvdCEKKworVGhlcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgcm9vbSBmb3IgaW1wcm92ZW1lbnQgdGhvdWdoLiBUaGVyZSBhcmUgdGhyZWUKK3BsYWNlcyB3aXRoIHN0YXRlbWVudHM6CitycDQgXj0gY3VyOyBycDYgXj0gY3VyOworSXQgc2VlbXMgbW9yZSBlZmZpY2llbnQgdG8gYWxzbyBtYWludGFpbiBhIHZhcmlhYmxlIHJwNF82IGluIHRoZSB3aGlsZQorbG9vcDsgVGhpcyBlbGltaW5hdGVzIDMgc3RhdGVtZW50cyBwZXIgbG9vcC4gT2YgY291cnNlIGFmdGVyIHRoZSBsb29wIHdlCituZWVkIHRvIGNvcnJlY3QgYnkgYWRkaW5nOgorICAgIHJwNCBePSBycDRfNjsKKyAgICBycDYgXj0gcnA0XzYKK0Z1cnRoZXJtb3JlIHRoZXJlIGFyZSA0IHNlcXVlbnRpYWwgYXNzaW5nbWVudHMgdG8gcnA4LiBUaGlzIGNhbiBiZQorZW5jb2RlZCBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBieSBzYXZpbmcgdG1wcGFyIGJlZm9yZSB0aG9zZSA0IGxpbmVzCithbmQgbGF0ZXIgZG8gcnA4ID0gcnA4IF4gdG1wcGFyIF4gbm90cnA4OworKHdoZXJlIG5vdHJwOCBpcyB0aGUgdmFsdWUgb2YgcnA4IGJlZm9yZSB0aG9zZSA0IGxpbmVzKS4KK0FnYWluIGEgdXNlIG9mIHRoZSBjb21tdXRhdGl2ZSBwcm9wZXJ0eSBvZiB4b3IuCitUaW1lIGZvciBhIG5ldyB0ZXN0IQorCisKK0F0dGVtcHQgNworPT09PT09PT09CisKK1RoZSBuZXcgY29kZSBub3cgbG9va3MgbGlrZToKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyICA9IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSB0bXBwYXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA4IF49IHRtcHBhcjsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0XzYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDEwIF49IHRtcHBhcjsKKworCSAgICBub3RycDggPSB0bXBwYXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisJICAgIHJwOCA9IHJwOCBeIHRtcHBhciBeIG5vdHJwODsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0XzYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCisJICAgIHBhciBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MSkgPT0gMCkgcnAxMiBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MikgPT0gMCkgcnAxNCBePSB0bXBwYXI7CisgICAgfQorICAgIHJwNCBePSBycDRfNjsKKyAgICBycDYgXj0gcnA0XzY7CisKKworTm90IGEgYmlnIGNoYW5nZSwgYnV0IGV2ZXJ5IHBlbm55IGNvdW50cyA6LSkKKworCitBbmFseXNpcyA3Cis9PT09PT09PT09CisKK0FjdXRhbGx5IHRoaXMgbWFkZSB0aGluZ3Mgd29yc2UuIE5vdCB2ZXJ5IG11Y2gsIGJ1dCBJIGRvbid0IHdhbnQgdG8gbW92ZQoraW50byB0aGUgd3JvbmcgZGlyZWN0aW9uLiBNYXliZSBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgbGF0ZXIuIENvdWxkCitoYXZlIHRvIGRvIHdpdGggY2FjaGluZyBhZ2Fpbi4KKworR3Vlc3MgdGhhdCBpcyB3aGF0IHRoZXJlIGlzIHRvIHdpbiB3aXRoaW4gdGhlIGxvb3AuIE1heWJlIHVucm9sbGluZyBvbmUKK21vcmUgdGltZSB3aWxsIGhlbHAuIEknbGwga2VlcCB0aGUgb3B0aW1pc2F0aW9ucyBmcm9tIDcgZm9yIG5vdy4KKworCitBdHRlbXB0IDgKKz09PT09PT09PQorCitVbnJvbGxlZCB0aGUgbG9vcCBvbmUgbW9yZSB0aW1lLgorCisKK0FuYWx5c2lzIDgKKz09PT09PT09PT0KKworVGhpcyBtYWtlcyB0aGluZ3Mgd29yc2UuIExldCdzIHN0aWNrIHdpdGggYXR0ZW1wdCA2IGFuZCBjb250aW51ZSBmcm9tIHRoZXJlLgorQWx0aG91Z2ggaXQgc2VlbXMgdGhhdCB0aGUgY29kZSB3aXRoaW4gdGhlIGxvb3AgY2Fubm90IGJlIG9wdGltaXNlZAorZnVydGhlciB0aGVyZSBpcyBzdGlsbCByb29tIHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBlY2MgY29kZXMuCitXZSBjYW4gc2ltcGx5IGNhbGN1YWxhdGUgdGhlIHRvdGFsIHBhcml0eS4gSWYgdGhpcyBpcyAwIHRoZW4gcnA0ID0gcnA1CitldGMuIElmIHRoZSBwYXJpdHkgaXMgMSwgdGhlbiBycDQgPSAhcnA1OworQnV0IGlmIHJwNCA9IHJwNSB3ZSBkbyBub3QgbmVlZCBycDUgZXRjLiBXZSBjYW4ganVzdCB3cml0ZSB0aGUgZXZlbiBiaXRzCitpbiB0aGUgcmVzdWx0IGJ5dGUgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UKKyAgICBjb2RlWzBdIHw9IChjb2RlWzBdIDw8IDEpOworTGV0cyB0ZXN0IHRoaXMuCisKKworQXR0ZW1wdCA5Cis9PT09PT09PT0KKworQ2hhbmdlZCB0aGUgY29kZSBidXQgYWdhaW4gdGhpcyBzbGlnaHRseSBkZWdyYWRlcyBwZXJmb3JtYW5jZS4gVHJpZWQgYWxsCitraW5kIG9mIG90aGVyIHRoaW5ncywgbGlrZSBoYXZpbmcgZGVkaWNhdGVkIHBhcml0eSBhcnJheXMgdG8gYXZvaWQgdGhlCitzaGlmdCBhZnRlciBwYXJpdHlbcnA3XSA8PCA3OyBObyBnYWluLgorQ2hhbmdlIHRoZSBsb29rdXAgdXNpbmcgdGhlIHBhcml0eSBhcnJheSBieSB1c2luZyBzaGlmdCBvcGVyYXRvcnMgKGUuZy4KK3JlcGxhY2UgcGFyaXR5W3JwN10gPDwgNyB3aXRoOgorcnA3IF49IChycDcgPDwgNCk7CitycDcgXj0gKHJwNyA8PCAyKTsKK3JwNyBePSAocnA3IDw8IDEpOworcnA3ICY9IDB4ODA7CitObyBnYWluLgorCitUaGUgb25seSBtYXJnaW5hbCBjaGFuZ2Ugd2FzIGludmVydGluZyB0aGUgcGFyaXR5IGJpdHMsIHNvIHdlIGNhbiByZW1vdmUKK3RoZSBsYXN0IHRocmVlIGludmVydCBzdGF0ZW1lbnRzLgorCitBaCB3ZWxsLCBwaXR5IHRoaXMgZG9lcyBub3QgZGVsaXZlciBtb3JlLiBUaGVuIGFnYWluIDEwIG1pbGxpb24KK2l0ZXJhdGlvbnMgdXNpbmcgdGhlIGxpbnV4IGRyaXZlciBjb2RlIHRha2VzIGJldHdlZW4gMTMgYW5kIDEzLjUKK3NlY29uZHMsIHdoZXJlYXMgbXkgY29kZSBub3cgdGFrZXMgYWJvdXQgMC43MyBzZWNvbmRzIGZvciB0aG9zZSAxMAorbWlsbGlvbiBpdGVyYXRpb25zLiBTbyBiYXNpY2FsbHkgSSd2ZSBpbXByb3ZlZCB0aGUgcGVyZm9ybWFuY2UgYnkgYQorZmFjdG9yIDE4IG9uIG15IHN5c3RlbS4gTm90IHRoYXQgYmFkLiBPZiBjb3Vyc2Ugb24gZGlmZmVyZW50IGhhcmR3YXJlCit5b3Ugd2lsbCBnZXQgZGlmZmVyZW50IHJlc3VsdHMuIE5vIHdhcnJhbnRpZXMhCisKK0J1dCBvZiBjb3Vyc2UgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhIGZyZWUgbHVuY2guIFRoZSBjb2Rlc2l6ZSBhbG1vc3QKK3RyaXBsZWQgKGZyb20gNTYyIGJ5dGVzIHRvIDE0MzQgYnl0ZXMpLiBUaGVuIGFnYWluLCBpdCBpcyBub3QgdGhhdCBtdWNoLgorCisKK0NvcnJlY3RpbmcgZXJyb3JzCis9PT09PT09PT09PT09PT09PQorCitGb3IgY29ycmVjdGluZyBlcnJvcnMgSSBhZ2FpbiB1c2VkIHRoZSBTVCBhcHBsaWNhdGlvbiBub3RlIGFzIGEgc3RhcnRlciwKK2J1dCBJIGFsc28gcGVla2VkIGF0IHRoZSBleGlzdGluZyBjb2RlLgorVGhlIGFsZ29yaXRobSBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSnVzdCB4b3IgdGhlIGdpdmVuIGFuZAordGhlIGNhbGN1bGF0ZWQgZWNjLiBJZiBhbGwgYnl0ZXMgYXJlIDAgdGhlcmUgaXMgbm8gcHJvYmxlbS4gSWYgMTEgYml0cworYXJlIDEgd2UgaGF2ZSBvbmUgY29ycmVjdGFibGUgYml0IGVycm9yLiBJZiB0aGVyZSBpcyAxIGJpdCAxLCB3ZSBoYXZlIGFuCitlcnJvciBpbiB0aGUgZ2l2ZW4gZWNjIGNvZGUuCitJdCBwcm92ZWQgdG8gYmUgZmFzdGVzdCB0byBkbyBzb21lIHRhYmxlIGxvb2t1cHMuIFBlcmZvcm1hbmNlIGdhaW4KK2ludHJvZHVjZWQgYnkgdGhpcyBpcyBhYm91dCBhIGZhY3RvciAyIG9uIG15IHN5c3RlbSB3aGVuIGEgcmVwYWlyIGhhZCB0bworYmUgZG9uZSwgYW5kIDElIG9yIHNvIGlmIG5vIHJlcGFpciBoYWQgdG8gYmUgZG9uZS4KK0NvZGUgc2l6ZSBpbmNyZWFzZWQgZnJvbSAzMzAgYnl0ZXMgdG8gNjg2IGJ5dGVzIGZvciB0aGlzIGZ1bmN0aW9uLgorKGdjYyA0LjIsIC1PMykKKworCitDb25jbHVzaW9uCis9PT09PT09PT09CisKK1RoZSBnYWluIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGVjYyBpcyB0cmVtZW5kb3VzLiBPbSBteSBkZXZlbG9wbWVudCBoYXJkd2FyZQorYSBzcGVlZHVwIG9mIGEgZmFjdG9yIG9mIDE4IGZvciBlY2MgY2FsY3VsYXRpb24gd2FzIGFjaGlldmVkLiBPbiBhIHRlc3Qgb24gYW4KK2VtYmVkZGVkIHN5c3RlbSB3aXRoIGEgTUlQUyBjb3JlIGEgZmFjdG9yIDcgd2FzIG9idGFpbmVkLgorT24gIGEgdGVzdCB3aXRoIGEgTGlua3N5cyBOU0xVMiAoQVJNdjVURSBwcm9jZXNzb3IpIHRoZSBzcGVlZHVwIHdhcyBhIGZhY3RvcgorNSAoYmlnIGVuZGlhbiBtb2RlLCBnY2MgNC4xLjIsIC1PMykKK0ZvciBjb3JyZWN0aW9uIG5vdCBtdWNoIGdhaW4gY291bGQgYmUgb2J0YWluZWQgKGFzIGJpdGZsaXBzIGFyZSByYXJlKS4gVGhlbgorYWdhaW4gdGhlcmUgYXJlIGFsc28gbXVjaCBsZXNzIGN5Y2xlcyBzcGVudCB0aGVyZS4KKworSXQgc2VlbXMgdGhlcmUgaXMgbm90IG11Y2ggbW9yZSBnYWluIHBvc3NpYmxlIGluIHRoaXMsIGF0IGxlYXN0IHdoZW4KK3Byb2dyYW1tZWQgaW4gQy4gT2YgY291cnNlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHNxdWVlemUgc29tZXRoaW5nIG1vcmUKK291dCBvZiBpdCB3aXRoIGFuIGFzc2VtYmxlciBwcm9ncmFtLCBidXQgZHVlIHRvIHBpcGVsaW5lIGJlaGF2aW91ciBldGMKK3RoaXMgaXMgdmVyeSB0cmlja3kgKGF0IGxlYXN0IGZvciBpbnRlbCBodykuCisKK0F1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzCitDb3B5cmlnaHQgKEMpIDIwMDggS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOVi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IGUxZmYwZDkuLmJkZTc5OWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMzY5LDQgKzM2OSw1IEBACiAgIDIgLSBBIG1vZHVsZSB3YXMgZm9yY2UgbG9hZGVkIGJ5IGluc21vZCAtZi4KICAgICAgIFNldCBieSBtb2R1dGlscyA+PSAyLjQuOSBhbmQgbW9kdWxlLWluaXQtdG9vbHMuCiAgIDQgLSBVbnNhZmUgU01QIHByb2Nlc3NvcnM6IFNNUCB3aXRoIENQVXMgbm90IGRlc2lnbmVkIGZvciBTTVAuCisgNjQgLSBBIG1vZHVsZSBmcm9tIGRyaXZlcnMvc3RhZ2luZyB3YXMgbG9hZGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CmluZGV4IDVjZTA5NTIuLjEwYTAyNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CkBAIC05NSw3ICs5NSw5IEBACiAKICdwJyAgICAgLSBXaWxsIGR1bXAgdGhlIGN1cnJlbnQgcmVnaXN0ZXJzIGFuZCBmbGFncyB0byB5b3VyIGNvbnNvbGUuCiAKLSdxJyAgICAgLSBXaWxsIGR1bXAgYSBsaXN0IG9mIGFsbCBydW5uaW5nIHRpbWVycy4KKydxJyAgICAgLSBXaWxsIGR1bXAgcGVyIENQVSBsaXN0cyBvZiBhbGwgYXJtZWQgaHJ0aW1lcnMgKGJ1dCBOT1QgcmVndWxhcgorICAgICAgICAgIHRpbWVyX2xpc3QgdGltZXJzKSBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYWxsCisgICAgICAgICAgY2xvY2tldmVudCBkZXZpY2VzLgogCiAncicgICAgIC0gVHVybnMgb2ZmIGtleWJvYXJkIHJhdyBtb2RlIGFuZCBzZXRzIGl0IHRvIFhMQVRFLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlcG9pbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzU0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlcG9pbnRzLnR4dApAQCAtMCwwICsxLDEwMSBAQAorCSAgICAgICAgICAgICBVc2luZyB0aGUgTGludXggS2VybmVsIFRyYWNlcG9pbnRzCisKKwkJCSAgICBNYXRoaWV1IERlc25veWVycworCisKK1RoaXMgZG9jdW1lbnQgaW50cm9kdWNlcyBMaW51eCBLZXJuZWwgVHJhY2Vwb2ludHMgYW5kIHRoZWlyIHVzZS4gSXQgcHJvdmlkZXMKK2V4YW1wbGVzIG9mIGhvdyB0byBpbnNlcnQgdHJhY2Vwb2ludHMgaW4gdGhlIGtlcm5lbCBhbmQgY29ubmVjdCBwcm9iZSBmdW5jdGlvbnMKK3RvIHRoZW0gYW5kIHByb3ZpZGVzIHNvbWUgZXhhbXBsZXMgb2YgcHJvYmUgZnVuY3Rpb25zLgorCisKKyogUHVycG9zZSBvZiB0cmFjZXBvaW50cworCitBIHRyYWNlcG9pbnQgcGxhY2VkIGluIGNvZGUgcHJvdmlkZXMgYSBob29rIHRvIGNhbGwgYSBmdW5jdGlvbiAocHJvYmUpIHRoYXQgeW91CitjYW4gcHJvdmlkZSBhdCBydW50aW1lLiBBIHRyYWNlcG9pbnQgY2FuIGJlICJvbiIgKGEgcHJvYmUgaXMgY29ubmVjdGVkIHRvIGl0KSBvcgorIm9mZiIgKG5vIHByb2JlIGlzIGF0dGFjaGVkKS4gV2hlbiBhIHRyYWNlcG9pbnQgaXMgIm9mZiIgaXQgaGFzIG5vIGVmZmVjdCwKK2V4Y2VwdCBmb3IgYWRkaW5nIGEgdGlueSB0aW1lIHBlbmFsdHkgKGNoZWNraW5nIGEgY29uZGl0aW9uIGZvciBhIGJyYW5jaCkgYW5kCitzcGFjZSBwZW5hbHR5IChhZGRpbmcgYSBmZXcgYnl0ZXMgZm9yIHRoZSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBlbmQgb2YgdGhlCitpbnN0cnVtZW50ZWQgZnVuY3Rpb24gYW5kIGFkZHMgYSBkYXRhIHN0cnVjdHVyZSBpbiBhIHNlcGFyYXRlIHNlY3Rpb24pLiAgV2hlbiBhCit0cmFjZXBvaW50IGlzICJvbiIsIHRoZSBmdW5jdGlvbiB5b3UgcHJvdmlkZSBpcyBjYWxsZWQgZWFjaCB0aW1lIHRoZSB0cmFjZXBvaW50CitpcyBleGVjdXRlZCwgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIHRoZSBjYWxsZXIuIFdoZW4gdGhlIGZ1bmN0aW9uIHByb3ZpZGVkCitlbmRzIGl0cyBleGVjdXRpb24sIGl0IHJldHVybnMgdG8gdGhlIGNhbGxlciAoY29udGludWluZyBmcm9tIHRoZSB0cmFjZXBvaW50CitzaXRlKS4KKworWW91IGNhbiBwdXQgdHJhY2Vwb2ludHMgYXQgaW1wb3J0YW50IGxvY2F0aW9ucyBpbiB0aGUgY29kZS4gVGhleSBhcmUKK2xpZ2h0d2VpZ2h0IGhvb2tzIHRoYXQgY2FuIHBhc3MgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwYXJhbWV0ZXJzLAord2hpY2ggcHJvdG90eXBlcyBhcmUgZGVzY3JpYmVkIGluIGEgdHJhY2Vwb2ludCBkZWNsYXJhdGlvbiBwbGFjZWQgaW4gYSBoZWFkZXIKK2ZpbGUuCisKK1RoZXkgY2FuIGJlIHVzZWQgZm9yIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFjY291bnRpbmcuCisKKworKiBVc2FnZQorCitUd28gZWxlbWVudHMgYXJlIHJlcXVpcmVkIGZvciB0cmFjZXBvaW50cyA6CisKKy0gQSB0cmFjZXBvaW50IGRlZmluaXRpb24sIHBsYWNlZCBpbiBhIGhlYWRlciBmaWxlLgorLSBUaGUgdHJhY2Vwb2ludCBzdGF0ZW1lbnQsIGluIEMgY29kZS4KKworSW4gb3JkZXIgdG8gdXNlIHRyYWNlcG9pbnRzLCB5b3Ugc2hvdWxkIGluY2x1ZGUgbGludXgvdHJhY2Vwb2ludC5oLgorCitJbiBpbmNsdWRlL3RyYWNlL3N1YnN5cy5oIDoKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworREVGSU5FX1RSQUNFKHN1YnN5c19ldmVudG5hbWUsCisJVFBQVE9UTyhpbnQgZmlyc3RhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJVFBBUkdTKGZpcnN0YXJnLCBwKSk7CisKK0luIHN1YnN5cy9maWxlLmMgKHdoZXJlIHRoZSB0cmFjaW5nIHN0YXRlbWVudCBtdXN0IGJlIGFkZGVkKSA6CisKKyNpbmNsdWRlIDx0cmFjZS9zdWJzeXMuaD4KKwordm9pZCBzb21lZmN0KHZvaWQpCit7CisJLi4uCisJdHJhY2Vfc3Vic3lzX2V2ZW50bmFtZShhcmcsIHRhc2spOworCS4uLgorfQorCitXaGVyZSA6CistIHN1YnN5c19ldmVudG5hbWUgaXMgYW4gaWRlbnRpZmllciB1bmlxdWUgdG8geW91ciBldmVudAorICAgIC0gc3Vic3lzIGlzIHRoZSBuYW1lIG9mIHlvdXIgc3Vic3lzdGVtLgorICAgIC0gZXZlbnRuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBldmVudCB0byB0cmFjZS4KKy0gVFBQVE9UTyhpbnQgZmlyc3RhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgaXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgZnVuY3Rpb24KKyAgY2FsbGVkIGJ5IHRoaXMgdHJhY2Vwb2ludC4KKy0gVFBBUkdTKGZpcnN0YXJnLCBwKSBhcmUgdGhlIHBhcmFtZXRlcnMgbmFtZXMsIHNhbWUgYXMgZm91bmQgaW4gdGhlIHByb3RvdHlwZS4KKworQ29ubmVjdGluZyBhIGZ1bmN0aW9uIChwcm9iZSkgdG8gYSB0cmFjZXBvaW50IGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEgcHJvYmUKKyhmdW5jdGlvbiB0byBjYWxsKSBmb3IgdGhlIHNwZWNpZmljIHRyYWNlcG9pbnQgdGhyb3VnaAorcmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50bmFtZSgpLiAgUmVtb3ZpbmcgYSBwcm9iZSBpcyBkb25lIHRocm91Z2gKK3VucmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50bmFtZSgpOyBpdCB3aWxsIHJlbW92ZSB0aGUgcHJvYmUgc3VyZSB0aGVyZSBpcyBubworY2FsbGVyIGxlZnQgdXNpbmcgdGhlIHByb2JlIHdoZW4gaXQgcmV0dXJucy4gUHJvYmUgcmVtb3ZhbCBpcyBwcmVlbXB0LXNhZmUKK2JlY2F1c2UgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCBhcm91bmQgdGhlIHByb2JlIGNhbGwuIFNlZSB0aGUgIlByb2JlIGV4YW1wbGUiCitzZWN0aW9uIGJlbG93IGZvciBhIHNhbXBsZSBwcm9iZSBtb2R1bGUuCisKK1RoZSB0cmFjZXBvaW50IG1lY2hhbmlzbSBzdXBwb3J0cyBpbnNlcnRpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lCit0cmFjZXBvaW50LCBidXQgYSBzaW5nbGUgZGVmaW5pdGlvbiBtdXN0IGJlIG1hZGUgb2YgYSBnaXZlbiB0cmFjZXBvaW50IG5hbWUgb3ZlcgorYWxsIHRoZSBrZXJuZWwgdG8gbWFrZSBzdXJlIG5vIHR5cGUgY29uZmxpY3Qgd2lsbCBvY2N1ci4gTmFtZSBtYW5nbGluZyBvZiB0aGUKK3RyYWNlcG9pbnRzIGlzIGRvbmUgdXNpbmcgdGhlIHByb3RvdHlwZXMgdG8gbWFrZSBzdXJlIHR5cGluZyBpcyBjb3JyZWN0LgorVmVyaWZpY2F0aW9uIG9mIHByb2JlIHR5cGUgY29ycmVjdG5lc3MgaXMgZG9uZSBhdCB0aGUgcmVnaXN0cmF0aW9uIHNpdGUgYnkgdGhlCitjb21waWxlci4gVHJhY2Vwb2ludHMgY2FuIGJlIHB1dCBpbiBpbmxpbmUgZnVuY3Rpb25zLCBpbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMsCithbmQgdW5yb2xsZWQgbG9vcHMgYXMgd2VsbCBhcyByZWd1bGFyIGZ1bmN0aW9ucy4KKworVGhlIG5hbWluZyBzY2hlbWUgInN1YnN5c19ldmVudCIgaXMgc3VnZ2VzdGVkIGhlcmUgYXMgYSBjb252ZW50aW9uIGludGVuZGVkCit0byBsaW1pdCBjb2xsaXNpb25zLiBUcmFjZXBvaW50IG5hbWVzIGFyZSBnbG9iYWwgdG8gdGhlIGtlcm5lbDogdGhleSBhcmUKK2NvbnNpZGVyZWQgYXMgYmVpbmcgdGhlIHNhbWUgd2hldGhlciB0aGV5IGFyZSBpbiB0aGUgY29yZSBrZXJuZWwgaW1hZ2Ugb3IgaW4KK21vZHVsZXMuCisKKworKiBQcm9iZSAvIHRyYWNlcG9pbnQgZXhhbXBsZQorCitTZWUgdGhlIGV4YW1wbGUgcHJvdmlkZWQgaW4gc2FtcGxlcy90cmFjZXBvaW50cy9zcmMKKworQ29tcGlsZSB0aGVtIHdpdGggeW91ciBrZXJuZWwuCisKK1J1biwgYXMgcm9vdCA6Cittb2Rwcm9iZSB0cmFjZXBvaW50LWV4YW1wbGUgKGluc21vZCBvcmRlciBpcyBub3QgaW1wb3J0YW50KQorbW9kcHJvYmUgdHJhY2Vwb2ludC1wcm9iZS1leGFtcGxlCitjYXQgL3Byb2MvdHJhY2Vwb2ludC1leGFtcGxlIChyZXR1cm5zIGFuIGV4cGVjdGVkIGVycm9yKQorcm1tb2QgdHJhY2Vwb2ludC1leGFtcGxlIHRyYWNlcG9pbnQtcHJvYmUtZXhhbXBsZQorZG1lc2cKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Vycy9tbWlvdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQKaW5kZXggYTRhZmI1Ni4uNWJiYmUyMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZXJzL21taW90cmFjZS50eHQKQEAgLTM2LDcgKzM2LDcgQEAKICQgZWNobyBtbWlvdHJhY2UgPiAvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlcgogJCBjYXQgL2RlYnVnL3RyYWNpbmcvdHJhY2VfcGlwZSA+IG15ZHVtcC50eHQgJgogU3RhcnQgWCBvciB3aGF0ZXZlci4KLSQgZWNobyAiWCBpcyB1cCIgPiAvZGVidWcvdHJhY2luZy9tYXJrZXIKKyQgZWNobyAiWCBpcyB1cCIgPiAvZGVidWcvdHJhY2luZy90cmFjZV9tYXJrZXIKICQgZWNobyBub25lID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKIENoZWNrIGZvciBsb3N0IGV2ZW50cy4KIApAQCAtNTksOSArNTksOCBAQAogTG9hZCB0aGUgZHJpdmVyIHlvdSB3YW50IHRvIHRyYWNlIGFuZCB1c2UgaXQuIE1taW90cmFjZSB3aWxsIG9ubHkgY2F0Y2ggTU1JTwogYWNjZXNzZXMgdG8gYXJlYXMgdGhhdCBhcmUgaW9yZW1hcHBlZCB3aGlsZSBtbWlvdHJhY2UgaXMgYWN0aXZlLgogCi1bVW5pbXBsZW1lbnRlZCBmZWF0dXJlOl0KIER1cmluZyB0cmFjaW5nIHlvdSBjYW4gcGxhY2UgY29tbWVudHMgKG1hcmtlcnMpIGludG8gdGhlIHRyYWNlIGJ5Ci0kIGVjaG8gIlggaXMgdXAiID4gL2RlYnVnL3RyYWNpbmcvbWFya2VyCiskIGVjaG8gIlggaXMgdXAiID4gL2RlYnVnL3RyYWNpbmcvdHJhY2VfbWFya2VyCiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBzZWUgd2hpY2ggcGFydCBvZiB0aGUgKGh1Z2UpIHRyYWNlIGNvcnJlc3BvbmRzIHRvCiB3aGljaCBhY3Rpb24uIEl0IGlzIHJlY29tbWVuZGVkIHRvIHBsYWNlIGRlc2NyaXB0aXZlIG1hcmtlcnMgYWJvdXQgd2hhdCB5b3UKIGRvLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvYW5jaG9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dAppbmRleCA1ZTZiNjRjLi42ZjI0ZjU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dApAQCAtNTIsNiArNTIsMTEgQEAKIHRoZSBjYWxsIHJldHVybnMuIFRoZXkgbWF5IGJlIHVubGlua2VkIGxhdGVyIGJ1dCB3aWxsIGJlIHVubGlua2VkIGluCiBmaW5pdGUgdGltZS4KIAordXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIFVSQnMgb2YgYW4gYW5jaG9yIGFyZSB1bmFuY2hvcmVkIGVuIG1hc3NlLgorCiB1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCgpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTU5LDQgKzY0LDE2IEBACiBvciBhIHRpbWVvdXQsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsIHRlbGwgeW91CiB3aGV0aGVyIHRoZSB0aW1lb3V0IHdhcyByZWFjaGVkLgogCit1c2JfYW5jaG9yX2VtcHR5KCkKKy0tLS0tLS0tLS0tLS0tLS0tLQogCitSZXR1cm5zIHRydWUgaWYgbm8gVVJCcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGFuY2hvci4gTG9ja2luZworaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5LgorCit1c2JfZ2V0X2Zyb21fYW5jaG9yKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXR1cm5zIHRoZSBvbGRlc3QgYW5jaG9yZWQgVVJCIG9mIGFuIGFuY2hvci4gVGhlIFVSQiBpcyB1bmFuY2hvcmVkCithbmQgcmV0dXJuZWQgd2l0aCBhIHJlZmVyZW5jZS4gQXMgeW91IG1heSBtaXggVVJCcyB0byBzZXZlcmFsCitkZXN0aW5hdGlvbnMgaW4gb25lIGFuY2hvciB5b3UgaGF2ZSBubyBndWFyYW50ZWUgdGhlIGNocm9ub2xvZ2ljYWxseQorZmlyc3Qgc3VibWl0dGVkIFVSQiBpcyByZXR1cm5lZC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9taXNjX3VzYnNldnNlZy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9taXNjX3VzYnNldnNlZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2YmU0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL21pc2NfdXNic2V2c2VnLnR4dApAQCAtMCwwICsxLDQ2IEBACitVU0IgNy1TZWdtZW50IE51bWVyaWMgRGlzcGxheQorTWFudWZhY3R1cmVkIGJ5IERlbGNvbSBFbmdpbmVlcmluZworCitEZXZpY2UgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorVVNCIFZFTkRPUl9JRAkweDBmYzUKK1VTQiBQUk9EVUNUX0lECTB4MTIyNworQm90aCB0aGUgNiBjaGFyYWN0ZXIgYW5kIDggY2hhcmFjdGVyIGRpc3BsYXlzIGhhdmUgUFJPRFVDVF9JRCwKK2FuZCBhY2NvcmRpbmcgdG8gRGVsY29tIEVuZ2luZWVyaW5nIG5vIHF1ZXJ5YWJsZSBpbmZvcm1hdGlvbgorY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIGRldmljZSB0byB0ZWxsIHRoZW0gYXBhcnQuCisKK0RldmljZSBNb2RlcworLS0tLS0tLS0tLS0tCitCeSBkZWZhdWx0LCB0aGUgZHJpdmVyIGFzc3VtZXMgdGhlIGRpc3BsYXkgaXMgb25seSA2IGNoYXJhY3RlcnMKK1RoZSBtb2RlIGZvciA2IGNoYXJhY3RlcnMgaXM6CisJTVNCIDB4MDY7IExTQiAweDNmCitGb3IgdGhlIDggY2hhcmFjdGVyIGRpc3BsYXk6CisJTVNCIDB4MDg7IExTQiAweGZmCitUaGUgZGV2aWNlIGNhbiBhY2NlcHQgInRleHQiIGVpdGhlciBpbiByYXcsIGhleCwgb3IgYXNjaWkgdGV4dG1vZGUuCityYXcgY29udHJvbHMgZWFjaCBzZWdtZW50IG1hbnVhbGx5LAoraGV4IGV4cGVjdHMgYSB2YWx1ZSBiZXR3ZWVuIDAtMTUgcGVyIGNoYXJhY3RlciwKK2FzY2lpIGV4cGVjdHMgYSB2YWx1ZSBiZXR3ZWVuICcwJy0nOScgYW5kICdBJy0nRicuCitUaGUgZGVmYXVsdCBpcyBhc2NpaS4KKworRGV2aWNlIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorMS4JVHVybiBvbiB0aGUgZGV2aWNlOgorCWVjaG8gMSA+IC9zeXMvYnVzL3VzYi8uLi4vcG93ZXJlZAorMi4JU2V0IHRoZSBkZXZpY2UncyBtb2RlOgorCWVjaG8gJG1vZGVfbXNiID4gL3N5cy9idXMvdXNiLy4uLi9tb2RlX21zYgorCWVjaG8gJG1vZGVfbHNiID4gL3N5cy9idXMvdXNiLy4uLi9tb2RlX2xzYgorMy4JU2V0IHRoZSB0ZXh0bW9kZToKKwllY2hvICR0ZXh0bW9kZSA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dG1vZGUKKzQuCXNldCB0aGUgdGV4dCAoZm9yIGV4YW1wbGUpOgorCWVjaG8gIjEyM0FCQyIgPiAvc3lzL2J1cy91c2IvLi4uL3RleHQgKGFzY2lpKQorCWVjaG8gIkExQjIiID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0IChhc2NpaSkKKwllY2hvIC1uZSAiXHgwMVx4MDJceDAzIiA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dCAoaGV4KQorNS4JU2V0IHRoZSBkZWNpbWFsIHBsYWNlcy4KKwlUaGUgZGV2aWNlIGhhcyBlaXRoZXIgNiBvciA4IGRlY2ltYWwgcG9pbnRzLgorCXRvIHNldCB0aGUgbnRoIGRlY2ltYWwgcGxhY2UgY2FsY3VsYXRlIDEwICoqIG4KKwlhbmQgZWNobyBpdCBpbiB0byAvc3lzL2J1cy91c2IvLi4uL2RlY2ltYWxzCisJVG8gc2V0IG11bHRpcGxlIGRlY2ltYWxzIHBvaW50cyBzdW0gdXAgZWFjaCBwb3dlci4KKwlGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSAwdGggYW5kIDNyZCBkZWNpbWFsIHBsYWNlCisJZWNobyAxMDAxID4gL3N5cy9idXMvdXNiLy4uLi9kZWNpbWFscworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKaW5kZXggOWQzMTE0MC4uZTQ4ZWExZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKQEAgLTM1MCwxMiArMzUwLDEyIEBACiAKIFRoZXJlIGFsc28gYXJlIGEgY291cGxlIG9mIHV0aWxpdHkgcm91dGluZXMgZHJpdmVycyBjYW4gdXNlOgogCi0JdXNiX2F1dG9wbV9lbmFibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAxIGFuZCB0aGVuIGNhbGxzCi0JdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKCksIHdoaWNoIHdpbGwgYXR0ZW1wdCBhbiBhdXRvcmVzdW1lLgotCi0JdXNiX2F1dG9wbV9kaXNhYmxlKCkgc2V0cyBwbV91c2FnZV9jbnQgdG8gMCBhbmQgdGhlbiBjYWxscworCXVzYl9hdXRvcG1fZW5hYmxlKCkgc2V0cyBwbV91c2FnZV9jbnQgdG8gMCBhbmQgdGhlbiBjYWxscwogCXVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZSgpLCB3aGljaCB3aWxsIGF0dGVtcHQgYW4gYXV0b3N1c3BlbmQuCiAKKwl1c2JfYXV0b3BtX2Rpc2FibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAxIGFuZCB0aGVuIGNhbGxzCisJdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKCksIHdoaWNoIHdpbGwgYXR0ZW1wdCBhbiBhdXRvcmVzdW1lLgorCiBUaGUgY29udmVudGlvbmFsIHVzYWdlIHBhdHRlcm4gaXMgdGhhdCBhIGRyaXZlciBjYWxscwogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgaW4gaXRzIG9wZW4gcm91dGluZSBhbmQKIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSgpIGluIGl0cyBjbG9zZSBvciByZWxlYXNlIHJvdXRpbmUuICBCdXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjgKaW5kZXggYWEwNWU1Yi4uZDVjYjRlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjgKQEAgLTEsNSArMSw1IEBACiAgIDAgLT4gVW5rbm93biBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KQotICAxIC0+IEhhdXBwYXVnZSBIVlI5NTBRICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyMDAsMjA0MDo3MjEwLDIwNDA6NzIxNywyMDQwOjcyMWIsMjA0MDo3MjFmLDIwNDA6NzI4MCwwZmQ5OjAwMDhdCisgIDEgLT4gSGF1cHBhdWdlIEhWUjk1MFEgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzIwNDA6NzIwMCwyMDQwOjcyMTAsMjA0MDo3MjE3LDIwNDA6NzIxYiwyMDQwOjcyMWUsMjA0MDo3MjFmLDIwNDA6NzI4MCwwZmQ5OjAwMDhdCiAgIDIgLT4gSGF1cHBhdWdlIEhWUjg1MCAgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzIwNDA6NzI0MF0KICAgMyAtPiBEVmlDTyBGdXNpb25IRFRWIFVTQiAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMGZlOTpkNjIwXQogICA0IC0+IEhhdXBwYXVnZSBIVlI5NTBRIHJldiB4eEY4ICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyMDEsMjA0MDo3MjExLDIwNDA6NzI4MV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCmluZGV4IDMwYmJkZGEuLjY5MWQyZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgpAQCAtNzUsMyArNzUsNCBAQAogdHVuZXI9NzUgLSBQaGlsaXBzIFRFQTU3NjEgRk0gUmFkaW8KIHR1bmVyPTc2IC0gWGNlaXZlIDUwMDAgdHVuZXIKIHR1bmVyPTc3IC0gVENMIHR1bmVyIE1GMDJHSVAtNU4tRQordHVuZXI9NzggLSBQaGlsaXBzIEZNRDEyMTZNRVggTUszIEh5YnJpZCBUdW5lcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS91bmV2aWN0YWJsZS1scnUudHh0IGIvRG9jdW1lbnRhdGlvbi92bS91bmV2aWN0YWJsZS1scnUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNWVlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQKQEAgLTAsMCArMSw2MTUgQEAKKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VtZW50ICJVbmV2aWN0YWJsZSBMUlUiCitpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGluZnJhc3RydWN0dXJlIHRvIG1hbmFnZSBzZXZlcmFsIHR5cGVzCitvZiAidW5ldmljdGFibGUiIHBhZ2VzLiAgVGhlIGRvY3VtZW50IGF0dGVtcHRzIHRvIHByb3ZpZGUgdGhlIG92ZXJhbGwKK3JhdGlvbmFsZSBiZWhpbmQgdGhpcyBtZWNoYW5pc20gYW5kIHRoZSByYXRpb25hbGUgZm9yIHNvbWUgb2YgdGhlIGRlc2lnbgorZGVjaXNpb25zIHRoYXQgZHJvdmUgdGhlIGltcGxlbWVudGF0aW9uLiAgVGhlIGxhdHRlciBkZXNpZ24gcmF0aW9uYWxlIGlzCitkaXNjdXNzZWQgaW4gdGhlIGNvbnRleHQgb2YgYW4gaW1wbGVtZW50YXRpb24gZGVzY3JpcHRpb24uICBBZG1pdHRlZGx5LCBvbmUKK2NhbiBvYnRhaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMtLXRoZSAid2hhdCBkb2VzIGl0IGRvPyItLWJ5IHJlYWRpbmcgdGhlCitjb2RlLiAgT25lIGhvcGVzIHRoYXQgdGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBhZGQgdmFsdWUgYnkgcHJvdmlkZSB0aGUgYW5zd2VyCit0byAid2h5IGRvZXMgaXQgZG8gdGhhdD8iLgorCitVbmV2aWN0YWJsZSBMUlUgSW5mcmFzdHJ1Y3R1cmU6CisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgYWRkcyBhbiBhZGRpdGlvbmFsIExSVSBsaXN0IHRvIHRyYWNrIHVuZXZpY3RhYmxlIHBhZ2VzCithbmQgdG8gaGlkZSB0aGVzZSBwYWdlcyBmcm9tIHZtc2Nhbi4gIFRoaXMgbWVjaGFuaXNtIGlzIGJhc2VkIG9uIGEgcGF0Y2ggYnkKK0xhcnJ5IFdvb2RtYW4gb2YgUmVkIEhhdCB0byBhZGRyZXNzIHNldmVyYWwgc2NhbGFiaWxpdHkgcHJvYmxlbXMgd2l0aCBwYWdlCityZWNsYWltIGluIExpbnV4LiAgVGhlIHByb2JsZW1zIGhhdmUgYmVlbiBvYnNlcnZlZCBhdCBjdXN0b21lciBzaXRlcyBvbiBsYXJnZQorbWVtb3J5IHg4Nl82NCBzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIGEgbm9uLW51bWFsIHg4Nl82NCBwbGF0Zm9ybSB3aXRoIDEyOEdCCitvZiBtYWluIG1lbW9yeSB3aWxsIGhhdmUgb3ZlciAzMiBtaWxsaW9uIDRrIHBhZ2VzIGluIGEgc2luZ2xlIHpvbmUuICBXaGVuIGEKK2xhcmdlIGZyYWN0aW9uIG9mIHRoZXNlIHBhZ2VzIGFyZSBub3QgZXZpY3RhYmxlIGZvciBhbnkgcmVhc29uIFtzZWUgYmVsb3ddLAordm1zY2FuIHdpbGwgc3BlbmQgYSBsb3Qgb2YgdGltZSBzY2FubmluZyB0aGUgTFJVIGxpc3RzIGxvb2tpbmcgZm9yIHRoZSBzbWFsbAorZnJhY3Rpb24gb2YgcGFnZXMgdGhhdCBhcmUgZXZpY3RhYmxlLiAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2l0dWF0aW9uIHdoZXJlCithbGwgY3B1cyBhcmUgc3BlbmRpbmcgMTAwJSBvZiB0aGVpciB0aW1lIGluIHZtc2NhbiBmb3IgaG91cnMgb3IgZGF5cyBvbiBlbmQsCit3aXRoIHRoZSBzeXN0ZW0gY29tcGxldGVseSB1bnJlc3BvbnNpdmUuCisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgaW5mcmFzdHJ1Y3R1cmUgYWRkcmVzc2VzIHRoZSBmb2xsb3dpbmcgY2xhc3NlcyBvZgordW5ldmljdGFibGUgcGFnZXM6CisKKysgcGFnZSBvd25lZCBieSByYW1mcworKyBwYWdlIG1hcHBlZCBpbnRvIFNITV9MT0NLZWQgc2hhcmVkIG1lbW9yeSByZWdpb25zCisrIHBhZ2UgbWFwcGVkIGludG8gVk1fTE9DS0VEIFttbG9jaygpZWRdIHZtYXMKKworVGhlIGluZnJhc3RydWN0dXJlIG1pZ2h0IGJlIGFibGUgdG8gaGFuZGxlIG90aGVyIGNvbmRpdGlvbnMgdGhhdCBtYWtlIHBhZ2VzCit1bmV2aWN0YWJsZSwgZWl0aGVyIGJ5IGRlZmluaXRpb24gb3IgYnkgY2lyY3Vtc3RhbmNlLCBpbiB0aGUgZnV0dXJlLgorCisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgTGlzdAorCitUaGUgVW5ldmljdGFibGUgTFJVIGluZnJhc3RydWN0dXJlIGNvbnNpc3RzIG9mIGFuIGFkZGl0aW9uYWwsIHBlci16b25lLCBMUlUgbGlzdAorY2FsbGVkIHRoZSAidW5ldmljdGFibGUiIGxpc3QgYW5kIGFuIGFzc29jaWF0ZWQgcGFnZSBmbGFnLCBQR191bmV2aWN0YWJsZSwgdG8KK2luZGljYXRlIHRoYXQgdGhlIHBhZ2UgaXMgYmVpbmcgbWFuYWdlZCBvbiB0aGUgdW5ldmljdGFibGUgbGlzdC4gIFRoZQorUEdfdW5ldmljdGFibGUgZmxhZyBpcyBhbmFsb2dvdXMgdG8sIGFuZCBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCwgdGhlIFBHX2FjdGl2ZQorZmxhZyBpbiB0aGF0IGl0IGluZGljYXRlcyBvbiB3aGljaCBMUlUgbGlzdCBhIHBhZ2UgcmVzaWRlcyB3aGVuIFBHX2xydSBpcyBzZXQuCitUaGUgdW5ldmljdGFibGUgTFJVIGxpc3QgaXMgc291cmNlIGNvbmZpZ3VyYWJsZSBiYXNlZCBvbiB0aGUgVU5FVklDVEFCTEVfTFJVCitLY29uZmlnIG9wdGlvbi4KKworVGhlIFVuZXZpY3RhYmxlIExSVSBpbmZyYXN0cnVjdHVyZSBtYWludGFpbnMgdW5ldmljdGFibGUgcGFnZXMgb24gYW4gYWRkaXRpb25hbAorTFJVIGxpc3QgZm9yIGEgZmV3IHJlYXNvbnM6CisKKzEpIFdlIGdldCB0byAidHJlYXQgdW5ldmljdGFibGUgcGFnZXMganVzdCBsaWtlIHdlIHRyZWF0IG90aGVyIHBhZ2VzIGluIHRoZQorICAgc3lzdGVtLCB3aGljaCBtZWFucyB3ZSBnZXQgdG8gdXNlIHRoZSBzYW1lIGNvZGUgdG8gbWFuaXB1bGF0ZSB0aGVtLCB0aGUKKyAgIHNhbWUgY29kZSB0byBpc29sYXRlIHRoZW0gKGZvciBtaWdyYXRlLCBldGMuKSwgdGhlIHNhbWUgY29kZSB0byBrZWVwIHRyYWNrCisgICBvZiB0aGUgc3RhdGlzdGljcywgZXRjLi4uIiBbUmlrIHZhbiBSaWVsXQorCisyKSBXZSB3YW50IHRvIGJlIGFibGUgdG8gbWlncmF0ZSB1bmV2aWN0YWJsZSBwYWdlcyBiZXR3ZWVuIG5vZGVzLS1mb3IgbWVtb3J5CisgICBkZWZyYWdtZW50YXRpb24sIHdvcmtsb2FkIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnLiAgVGhlIGxpbnV4IGtlcm5lbAorICAgY2FuIG9ubHkgbWlncmF0ZSBwYWdlcyB0aGF0IGl0IGNhbiBzdWNjZXNzZnVsbHkgaXNvbGF0ZSBmcm9tIHRoZSBscnUgbGlzdHMuCisgICBJZiB3ZSB3ZXJlIHRvIG1haW50YWluIHBhZ2VzIGVsc2V3aXNlIHRoYW4gb24gYW4gbHJ1LWxpa2UgbGlzdCwgd2hlcmUgdGhleQorICAgY2FuIGJlIGZvdW5kIGJ5IGlzb2xhdGVfbHJ1X3BhZ2UoKSwgd2Ugd291bGQgcHJldmVudCB0aGVpciBtaWdyYXRpb24sIHVubGVzcworICAgd2UgcmV3b3JrZWQgbWlncmF0aW9uIGNvZGUgdG8gZmluZCB0aGUgdW5ldmljdGFibGUgcGFnZXMuCisKKworVGhlIHVuZXZpY3RhYmxlIExSVSBsaXN0IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaWxlIGJhY2tlZCBhbmQgc3dhcAorYmFja2VkIFthbm9uXSBwYWdlcy4gIFRoaXMgZGlmZmVyZW50aWF0aW9uIGlzIG9ubHkgaW1wb3J0YW50IHdoaWxlIHRoZSBwYWdlcworYXJlLCBpbiBmYWN0LCBldmljdGFibGUuCisKK1RoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCBiZW5lZml0cyBmcm9tIHRoZSAiYXJyYXlpZmljYXRpb24iIG9mIHRoZSBwZXItem9uZQorTFJVIGxpc3RzIGFuZCBzdGF0aXN0aWNzIG9yaWdpbmFsbHkgcHJvcG9zZWQgYW5kIHBvc3RlZCBieSBDaHJpc3RvcGggTGFtZXRlci4KKworVGhlIHVuZXZpY3RhYmxlIGxpc3QgZG9lcyBub3QgdXNlIHRoZSBscnUgcGFnZXZlYyBtZWNoYW5pc20uIFJhdGhlciwKK3VuZXZpY3RhYmxlIHBhZ2VzIGFyZSBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIHBhZ2UncyB6b25lJ3MgdW5ldmljdGFibGUKK2xpc3QgdW5kZXIgdGhlIHpvbmUgbHJ1X2xvY2suICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRvIHByZXZlbnQgc3RyYW5kaW5nCitvZiBwYWdlcyBvbiB0aGUgdW5ldmljdGFibGUgbGlzdCB3aGVuIG9uZSB0YXNrIGhhcyB0aGUgcGFnZSBpc29sYXRlZCBmcm9tIHRoZQorbHJ1IGFuZCBvdGhlciB0YXNrcyBhcmUgY2hhbmdpbmcgdGhlICJldmljdGFiaWxpdHkiIHN0YXRlIG9mIHRoZSBwYWdlLgorCisKK1VuZXZpY3RhYmxlIExSVSBhbmQgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJhY3Rpb24KKworVGhlIG1lbW9yeSBjb250cm9sbGVyIGRhdGEgc3RydWN0dXJlIGF1dG9tYXRpY2FsbHkgZ2V0cyBhIHBlciB6b25lIHVuZXZpY3RhYmxlCitscnUgbGlzdCBhcyBhIHJlc3VsdCBvZiB0aGUgImFycmF5aWZpY2F0aW9uIiBvZiB0aGUgcGVyLXpvbmUgTFJVIGxpc3RzLiAgVGhlCittZW1vcnkgY29udHJvbGxlciB0cmFja3MgdGhlIG1vdmVtZW50IG9mIHBhZ2VzIHRvIGFuZCBmcm9tIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgorV2hlbiBhIG1lbW9yeSBjb250cm9sIGdyb3VwIGNvbWVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgdGhlIGNvbnRyb2xsZXIgd2lsbAorbm90IGF0dGVtcHQgdG8gcmVjbGFpbSBwYWdlcyBvbiB0aGUgdW5ldmljdGFibGUgbGlzdC4gIFRoaXMgaGFzIGEgY291cGxlIG9mCitlZmZlY3RzLiAgQmVjYXVzZSB0aGUgcGFnZXMgYXJlICJoaWRkZW4iIGZyb20gcmVjbGFpbSBvbiB0aGUgdW5ldmljdGFibGUgbGlzdCwKK3RoZSByZWNsYWltIHByb2Nlc3MgY2FuIGJlIG1vcmUgZWZmaWNpZW50LCBkZWFsaW5nIG9ubHkgd2l0aCBwYWdlcyB0aGF0IGhhdmUKK2EgY2hhbmNlIG9mIGJlaW5nIHJlY2xhaW1lZC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0b28gbWFueSBvZiB0aGUgcGFnZXMKK2NoYXJnZWQgdG8gdGhlIGNvbnRyb2wgZ3JvdXAgYXJlIHVuZXZpY3RhYmxlLCB0aGUgZXZpY3RhYmxlIHBvcnRpb24gb2YgdGhlCit3b3JraW5nIHNldCBvZiB0aGUgdGFza3MgaW4gdGhlIGNvbnRyb2wgZ3JvdXAgbWF5IG5vdCBmaXQgaW50byB0aGUgYXZhaWxhYmxlCittZW1vcnkuICBUaGlzIGNhbiBjYXVzZSB0aGUgY29udHJvbCBncm91cCB0byB0aHJhc2ggb3IgdG8gb29tLWtpbGwgdGFza3MuCisKKworVW5ldmljdGFibGUgTFJVOiAgRGV0ZWN0aW5nIFVuZXZpY3RhYmxlIFBhZ2VzCisKK1RoZSBmdW5jdGlvbiBwYWdlX2V2aWN0YWJsZShwYWdlLCB2bWEpIGluIHZtc2Nhbi5jIGRldGVybWluZXMgd2hldGhlciBhCitwYWdlIGlzIGV2aWN0YWJsZSBvciBub3QuICBGb3IgcmFtZnMgcGFnZXMgYW5kIHBhZ2VzIGluIFNITV9MT0NLZWQgcmVnaW9ucywKK3BhZ2VfZXZpY3RhYmxlKCkgdGVzdHMgYSBuZXcgYWRkcmVzcyBzcGFjZSBmbGFnLCBBU19VTkVWSUNUQUJMRSwgaW4gdGhlIHBhZ2UncworYWRkcmVzcyBzcGFjZSB1c2luZyBhIHdyYXBwZXIgZnVuY3Rpb24uICBXcmFwcGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBzZXQsCitjbGVhciBhbmQgdGVzdCB0aGUgZmxhZyB0byByZWR1Y2UgdGhlIHJlcXVpcmVtZW50IGZvciAjaWZkZWYncyB0aHJvdWdob3V0IHRoZQorc291cmNlIGNvZGUuICBBU19VTkVWSUNUQUJMRSBpcyBzZXQgb24gcmFtZnMgaW5vZGUvbWFwcGluZyB3aGVuIGl0IGlzIGNyZWF0ZWQuCitUaGlzIGZsYWcgcmVtYWlucyBmb3IgdGhlIGxpZmUgb2YgdGhlIGlub2RlLgorCitGb3Igc2hhcmVkIG1lbW9yeSByZWdpb25zLCBBU19VTkVWSUNUQUJMRSBpcyBzZXQgd2hlbiBhbiBhcHBsaWNhdGlvbgorc3VjY2Vzc2Z1bGx5IFNITV9MT0NLcyB0aGUgcmVnaW9uIGFuZCBpcyByZW1vdmVkIHdoZW4gdGhlIHJlZ2lvbiBpcworU0hNX1VOTE9DS2VkLiAgTm90ZSB0aGF0IHNobWN0bChTSE1fTE9DSywgLi4uKSBkb2VzIG5vdCBwb3B1bGF0ZSB0aGUgcGFnZQordGFibGVzIGZvciB0aGUgcmVnaW9uIGFzIGRvZXMsIGZvciBleGFtcGxlLCBtbG9jaygpLiAgIFNvLCB3ZSBtYWtlIG5vIHNwZWNpYWwKK2VmZm9ydCB0byBwdXNoIGFueSBwYWdlcyBpbiB0aGUgU0hNX0xPQ0tlZCByZWdpb24gdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3QuCitWbXNjYW4gd2lsbCBkbyB0aGlzIHdoZW4vaWYgaXQgZW5jb3VudGVycyB0aGUgcGFnZXMgZHVyaW5nIHJlY2xhaW0uICBPbgorU0hNX1VOTE9DSywgc2htY3RsKCkgc2NhbnMgdGhlIHBhZ2VzIGluIHRoZSByZWdpb24gYW5kICJyZXNjdWVzIiB0aGVtIGZyb20gdGhlCit1bmV2aWN0YWJsZSBsaXN0IGlmIG5vIG90aGVyIGNvbmRpdGlvbiBrZWVwcyB0aGVtIHVuZXZpY3RhYmxlLiAgSWYgYSBTSE1fTE9DS2VkCityZWdpb24gaXMgZGVzdHJveWVkLCB0aGUgcGFnZXMgYXJlIGFsc28gInJlc2N1ZWQiIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3QgaW4KK3RoZSBwcm9jZXNzIG9mIGZyZWVpbmcgdGhlbS4KKworcGFnZV9ldmljdGFibGUoKSBkZXRlY3RzIG1sb2NrKCllZCBwYWdlcyBieSB0ZXN0aW5nIGFuIGFkZGl0aW9uYWwgcGFnZSBmbGFnLAorUEdfbWxvY2tlZCB2aWEgdGhlIFBhZ2VNbG9ja2VkKCkgd3JhcHBlci4gIElmIHRoZSBwYWdlIGlzIE5PVCBtbG9ja2VkLCBhbmQgYQorbm9uLU5VTEwgdm1hIGlzIHN1cHBsaWVkLCBwYWdlX2V2aWN0YWJsZSgpIHdpbGwgY2hlY2sgd2hldGhlciB0aGUgdm1hIGlzCitWTV9MT0NLRUQgdmlhIGlzX21sb2NrZWRfdm1hKCkuICBpc19tbG9ja2VkX3ZtYSgpIHdpbGwgU2V0UGFnZU1sb2NrZWQoKSBhbmQKK3VwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgc3RhdGlzdGljcyBpZiB0aGUgdm1hIGlzIFZNX0xPQ0tFRC4gIFRoaXMgbWV0aG9kIGFsbG93cworZWZmaWNpZW50ICJjdWxsaW5nIiBvZiBwYWdlcyBpbiB0aGUgZmF1bHQgcGF0aCB0aGF0IGFyZSBiZWluZyBmYXVsdGVkIGluIHRvCitWTV9MT0NLRUQgdm1hcy4KKworCitVbmV2aWN0YWJsZSBQYWdlcyBhbmQgVm1zY2FuIFtzaHJpbmtfKl9saXN0KCldCisKK0lmIHVuZXZpY3RhYmxlIHBhZ2VzIGFyZSBjdWxsZWQgaW4gdGhlIGZhdWx0IHBhdGgsIG9yIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZQorbGlzdCBhdCBtbG9jaygpIG9yIG1tYXAoKSB0aW1lLCB2bXNjYW4gd2lsbCBuZXZlciBlbmNvdW50ZXIgdGhlIHBhZ2VzIHVudGlsCit0aGV5IGhhdmUgYmVjb21lIGV2aWN0YWJsZSBhZ2FpbiwgZm9yIGV4YW1wbGUsIHZpYSBtdW5sb2NrKCkgYW5kIGhhdmUgYmVlbgorInJlc2N1ZWQiIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3QuICBIb3dldmVyLCB0aGVyZSBtYXkgYmUgc2l0dWF0aW9ucyB3aGVyZSB3ZQorZGVjaWRlLCBmb3IgdGhlIHNha2Ugb2YgZXhwZWRpZW5jeSwgdG8gbGVhdmUgYSB1bmV2aWN0YWJsZSBwYWdlIG9uIG9uZSBvZiB0aGUKK3JlZ3VsYXIgYWN0aXZlL2luYWN0aXZlIExSVSBsaXN0cyBmb3Igdm1zY2FuIHRvIGRlYWwgd2l0aC4gIFZtc2NhbiBjaGVja3MgZm9yCitzdWNoIHBhZ2VzIGluIGFsbCBvZiB0aGUgc2hyaW5rX3thY3RpdmV8aW5hY3RpdmV8cGFnZX1fbGlzdCgpIGZ1bmN0aW9ucyBhbmQKK3dpbGwgImN1bGwiIHN1Y2ggcGFnZXMgdGhhdCBpdCBlbmNvdW50ZXJzLS10aGF0IGlzLCBpdCBkaXZlcnRzIHRob3NlIHBhZ2VzIHRvCit0aGUgdW5ldmljdGFibGUgbGlzdCBmb3IgdGhlIHpvbmUgYmVpbmcgc2Nhbm5lZC4KKworVGhlcmUgbWF5IGJlIHNpdHVhdGlvbnMgd2hlcmUgYSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEgVk1fTE9DS0VEIHZtYSwgYnV0IHRoZQorcGFnZSBpcyBub3QgbWFya2VkIGFzIFBhZ2VNbG9ja2VkLiAgU3VjaCBwYWdlcyB3aWxsIG1ha2UgaXQgYWxsIHRoZSB3YXkgdG8KK3Nocmlua19wYWdlX2xpc3QoKSB3aGVyZSB0aGV5IHdpbGwgYmUgZGV0ZWN0ZWQgd2hlbiB2bXNjYW4gd2Fsa3MgdGhlIHJldmVyc2UKK21hcCBpbiB0cnlfdG9fdW5tYXAoKS4gIElmIHRyeV90b191bm1hcCgpIHJldHVybnMgU1dBUF9NTE9DSywgc2hyaW5rX3BhZ2VfbGlzdCgpCit3aWxsIGN1bGwgdGhlIHBhZ2UgYXQgdGhhdCBwb2ludC4KKworTm90ZSB0aGF0IGZvciBhbm9ueW1vdXMgcGFnZXMsIHNocmlua19wYWdlX2xpc3QoKSBhdHRlbXB0cyB0byBhZGQgdGhlIHBhZ2UgdG8KK3RoZSBzd2FwIGNhY2hlIGJlZm9yZSBpdCB0cmllcyB0byB1bm1hcCB0aGUgcGFnZS4gIFRvIGF2b2lkIHRoaXMgdW5uZWNlc3NhcnkKK2NvbnN1bXB0aW9uIG9mIHN3YXAgc3BhY2UsIHNocmlua19wYWdlX2xpc3QoKSBjYWxscyB0cnlfdG9fbXVubG9jaygpIHRvIGNoZWNrCit3aGV0aGVyIGFueSBWTV9MT0NLRUQgdm1hcyBtYXAgdGhlIHBhZ2Ugd2l0aG91dCBhdHRlbXB0aW5nIHRvIHVubWFwIHRoZSBwYWdlLgorSWYgdHJ5X3RvX211bmxvY2soKSByZXR1cm5zIFNXQVBfTUxPQ0ssIHNocmlua19wYWdlX2xpc3QoKSB3aWxsIGN1bGwgdGhlIHBhZ2UKK3dpdGhvdXQgY29uc3VtaW5nIHN3YXAgc3BhY2UuICB0cnlfdG9fbXVubG9jaygpIHdpbGwgYmUgZGVzY3JpYmVkIGJlbG93LgorCitUbyAiY3VsbCIgYW4gdW5ldmljdGFibGUgcGFnZSwgdm1zY2FuIHNpbXBseSBwdXRzIHRoZSBwYWdlIGJhY2sgb24gdGhlIGxydQorbGlzdCB1c2luZyBwdXRiYWNrX2xydV9wYWdlKCktLXRoZSBpbnZlcnNlIG9wZXJhdGlvbiB0byBpc29sYXRlX2xydV9wYWdlKCktLQorYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgbG9jay4gIEJlY2F1c2UgdGhlIGNvbmRpdGlvbiB3aGljaCBtYWtlcyB0aGUgcGFnZQordW5ldmljdGFibGUgbWF5IGNoYW5nZSBvbmNlIHRoZSBwYWdlIGlzIHVubG9ja2VkLCBwdXRiYWNrX2xydV9wYWdlKCkgd2lsbAorcmVjaGVjayB0aGUgdW5ldmljdGFibGUgc3RhdGUgb2YgYSBwYWdlIHRoYXQgaXQgcGxhY2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBscnUKK2xpc3QuICBJZiB0aGUgcGFnZSBoYXMgYmVjb21lIHVuZXZpY3RhYmxlLCBwdXRiYWNrX2xydV9wYWdlKCkgcmVtb3ZlcyBpdCBmcm9tCit0aGUgbGlzdCBhbmQgcmV0cmllcywgaW5jbHVkaW5nIHRoZSBwYWdlX3VuZXZpY3RhYmxlKCkgdGVzdC4gIEJlY2F1c2Ugc3VjaCBhCityYWNlIGlzIGEgcmFyZSBldmVudCBhbmQgbW92ZW1lbnQgb2YgcGFnZXMgb250byB0aGUgdW5ldmljdGFibGUgbGlzdCBzaG91bGQgYmUKK3JhcmUsIHRoZXNlIGV4dHJhIGV2aWN0YWJpbHR5IGNoZWNrcyBzaG91bGQgbm90IG9jY3VyIGluIHRoZSBtYWpvcml0eSBvZiBjYWxscwordG8gcHV0YmFja19scnVfcGFnZSgpLgorCisKK01sb2NrZWQgUGFnZTogIFByaW9yIFdvcmsKKworVGhlICJVbmV2aWN0YWJsZSBNbG9ja2VkIFBhZ2VzIiBpbmZyYXN0cnVjdHVyZSBpcyBiYXNlZCBvbiB3b3JrIG9yaWdpbmFsbHkKK3Bvc3RlZCBieSBOaWNrIFBpZ2dpbiBpbiBhbiBSRkMgcGF0Y2ggZW50aXRsZWQgIm1tOiBtbG9ja2VkIHBhZ2VzIG9mZiBMUlUiLgorTmljayBwb3N0ZWQgaGlzIHBhdGNoIGFzIGFuIGFsdGVybmF0aXZlIHRvIGEgcGF0Y2ggcG9zdGVkIGJ5IENocmlzdG9waAorTGFtZXRlciB0byBhY2hpZXZlIHRoZSBzYW1lIG9iamVjdGl2ZS0taGlkaW5nIG1sb2NrZWQgcGFnZXMgZnJvbSB2bXNjYW4uCitJbiBOaWNrJ3MgcGF0Y2gsIGhlIHVzZWQgb25lIG9mIHRoZSBzdHJ1Y3QgcGFnZSBscnUgbGlzdCBsaW5rIGZpZWxkcyBhcyBhIGNvdW50CitvZiBWTV9MT0NLRUQgdm1hcyB0aGF0IG1hcCB0aGUgcGFnZS4gIFRoaXMgdXNlIG9mIHRoZSBsaW5rIGZpZWxkIGZvciBhIGNvdW50CitwcmV2ZW50ZWQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIHBhZ2VzIG9uIGFuIExSVSBsaXN0LiAgVGh1cywgbWxvY2tlZCBwYWdlcyB3ZXJlCitub3QgbWlncmF0YWJsZSBhcyBpc29sYXRlX2xydV9wYWdlKCkgY291bGQgbm90IGZpbmQgdGhlbSBhbmQgdGhlIGxydSBsaXN0IGxpbmsKK2ZpZWxkIHdhcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBtaWdyYXRpb24gc3Vic3lzdGVtLiAgTmljayByZXNvbHZlZCB0aGlzIGJ5CitwdXR0aW5nIG1sb2NrZWQgcGFnZXMgYmFjayBvbiB0aGUgbHJ1IGxpc3QgYmVmb3JlIGF0dGVtcHRpbmcgdG8gaXNvbGF0ZSB0aGVtLAordGh1cyBhYmFuZG9uaW5nIHRoZSBjb3VudCBvZiBWTV9MT0NLRUQgdm1hcy4gIFdoZW4gTmljaydzIHBhdGNoIHdhcyBpbnRlZ3JhdGVkCit3aXRoIHRoZSBVbmV2aWN0YWJsZSBMUlUgd29yaywgdGhlIGNvdW50IHdhcyByZXBsYWNlZCBieSB3YWxraW5nIHRoZSByZXZlcnNlCittYXAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW55IFZNX0xPQ0tFRCB2bWFzIG1hcHBlZCB0aGUgcGFnZS4gIE1vcmUgb24gdGhpcworYmVsb3cuCisKKworTWxvY2tlZCBQYWdlczogIEJhc2ljIE1hbmFnZW1lbnQKKworTWxvY2tlZCBwYWdlcy0tcGFnZXMgbWFwcGVkIGludG8gYSBWTV9MT0NLRUQgdm1hLS1yZXByZXNlbnQgb25lIGNsYXNzIG9mCit1bmV2aWN0YWJsZSBwYWdlcy4gIFdoZW4gc3VjaCBhIHBhZ2UgaGFzIGJlZW4gIm5vdGljZWQiIGJ5IHRoZSBtZW1vcnkKK21hbmFnZW1lbnQgc3Vic3lzdGVtLCB0aGUgcGFnZSBpcyBtYXJrZWQgd2l0aCB0aGUgUEdfbWxvY2tlZCBbUGFnZU1sb2NrZWQoKV0KK2ZsYWcuICBBIFBhZ2VNbG9ja2VkKCkgcGFnZSB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgdW5ldmljdGFibGUgTFJVIGxpc3Qgd2hlbgoraXQgaXMgYWRkZWQgdG8gdGhlIExSVS4gICBQYWdlcyBjYW4gYmUgIm5vdGljZWQiIGJ5IG1lbW9yeSBtYW5hZ2VtZW50IGluCitzZXZlcmFsIHBsYWNlczoKKworMSkgaW4gdGhlIG1sb2NrKCkvbWxvY2thbGwoKSBzeXN0ZW0gY2FsbCBoYW5kbGVycy4KKzIpIGluIHRoZSBtbWFwKCkgc3lzdGVtIGNhbGwgaGFuZGxlciB3aGVuIG1tYXAoKWluZyBhIHJlZ2lvbiB3aXRoIHRoZQorICAgTUFQX0xPQ0tFRCBmbGFnLCBvciBtbWFwKClpbmcgYSByZWdpb24gaW4gYSB0YXNrIHRoYXQgaGFzIGNhbGxlZAorICAgbWxvY2thbGwoKSB3aXRoIHRoZSBNQ0xfRlVUVVJFIGZsYWcuICBCb3RoIG9mIHRoZXNlIGNvbmRpdGlvbnMgcmVzdWx0CisgICBpbiB0aGUgVk1fTE9DS0VEIGZsYWcgYmVpbmcgc2V0IGZvciB0aGUgdm1hLgorMykgaW4gdGhlIGZhdWx0IHBhdGgsIGlmIG1sb2NrZWQgcGFnZXMgYXJlICJjdWxsZWQiIGluIHRoZSBmYXVsdCBwYXRoLAorICAgYW5kIHdoZW4gYSBWTV9MT0NLRUQgc3RhY2sgc2VnbWVudCBpcyBleHBhbmRlZC4KKzQpIGFzIG1lbnRpb25lZCBhYm92ZSwgaW4gdm1zY2FuOnNocmlua19wYWdlX2xpc3QoKSB3aXRoIGF0dGVtcHRpbmcgdG8KKyAgIHJlY2xhaW0gYSBwYWdlIGluIGEgVk1fTE9DS0VEIHZtYS0tdmlhIHRyeV90b191bm1hcCgpIG9yIHRyeV90b19tdW5sb2NrKCkuCisKK01sb2NrZWQgcGFnZXMgYmVjb21lIHVubG9ja2VkIGFuZCByZXNjdWVkIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3Qgd2hlbjoKKworMSkgbWFwcGVkIGluIGEgcmFuZ2UgdW5sb2NrZWQgdmlhIHRoZSBtdW5sb2NrKCkvbXVubG9ja2FsbCgpIHN5c3RlbSBjYWxscy4KKzIpIG11bm1hcHBlZCgpIG91dCBvZiB0aGUgbGFzdCBWTV9MT0NLRUQgdm1hIHRoYXQgbWFwcyB0aGUgcGFnZSwgaW5jbHVkaW5nCisgICB1bm1hcHBpbmcgYXQgdGFzayBleGl0LgorMykgd2hlbiB0aGUgcGFnZSBpcyB0cnVuY2F0ZWQgZnJvbSB0aGUgbGFzdCBWTV9MT0NLRUQgdm1hIG9mIGFuIG1tYXAoKWVkIGZpbGUuCis0KSBiZWZvcmUgYSBwYWdlIGlzIENPV2VkIGluIGEgVk1fTE9DS0VEIHZtYS4KKworCitNbG9ja2VkIFBhZ2VzOiAgbWxvY2soKS9tbG9ja2FsbCgpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK0JvdGggW2RvX11tbG9jaygpIGFuZCBbZG9fXW1sb2NrYWxsKCkgc3lzdGVtIGNhbGwgaGFuZGxlcnMgY2FsbCBtbG9ja19maXh1cCgpCitmb3IgZWFjaCB2bWEgaW4gdGhlIHJhbmdlIHNwZWNpZmllZCBieSB0aGUgY2FsbC4gIEluIHRoZSBjYXNlIG9mIG1sb2NrYWxsKCksCit0aGlzIGlzIHRoZSBlbnRpcmUgYWN0aXZlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIHRhc2suICBOb3RlIHRoYXQgbWxvY2tfZml4dXAoKQoraXMgdXNlZCBmb3IgYm90aCBtbG9jaygpaW5nIGFuZCBtdW5sb2NrKClpbmcgYSByYW5nZSBvZiBtZW1vcnkuICBBIGNhbGwgdG8KK21sb2NrKCkgYW4gYWxyZWFkeSBWTV9MT0NLRUQgdm1hLCBvciB0byBtdW5sb2NrKCkgYSB2bWEgdGhhdCBpcyBub3QgVk1fTE9DS0VECitpcyB0cmVhdGVkIGFzIGEgbm8tb3AtLW1sb2NrX2ZpeHVwKCkgc2ltcGx5IHJldHVybnMuCisKK0lmIHRoZSB2bWEgcGFzc2VzIHNvbWUgZmlsdGVyaW5nIGRlc2NyaWJlZCBpbiAiTWxvY2tlZCBQYWdlczogIEZpbHRlcmluZyBWbWFzIgorYmVsb3csIG1sb2NrX2ZpeHVwKCkgd2lsbCBhdHRlbXB0IHRvIG1lcmdlIHRoZSB2bWEgd2l0aCBpdHMgbmVpZ2hib3JzIG9yIHNwbGl0CitvZmYgYSBzdWJzZXQgb2YgdGhlIHZtYSBpZiB0aGUgcmFuZ2UgZG9lcyBub3QgY292ZXIgdGhlIGVudGlyZSB2bWEuICBPbmNlIHRoZQordm1hIGhhcyBiZWVuIG1lcmdlZCBvciBzcGxpdCBvciBuZWl0aGVyLCBtbG9ja19maXh1cCgpIHdpbGwgY2FsbAorX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0byBmYXVsdCBpbiB0aGUgcGFnZXMgdmlhIGdldF91c2VyX3BhZ2VzKCkgYW5kCit0byBtYXJrIHRoZSBwYWdlcyBhcyBtbG9ja2VkIHZpYSBtbG9ja192bWFfcGFnZSgpLgorCitOb3RlIHRoYXQgdGhlIHZtYSBiZWluZyBtbG9ja2VkIG1pZ2h0IGJlIG1hcHBlZCB3aXRoIFBST1RfTk9ORS4gIEluIHRoaXMgY2FzZSwKK2dldF91c2VyX3BhZ2VzKCkgd2lsbCBiZSB1bmFibGUgdG8gZmF1bHQgaW4gdGhlIHBhZ2VzLiAgVGhhdCdzIE9LLiAgSWYgcGFnZXMKK2RvIGVuZCB1cCBnZXR0aW5nIGZhdWx0ZWQgaW50byB0aGlzIFZNX0xPQ0tFRCB2bWEsIHdlJ2xsIGhhbmRsZSB0aGVtIGluIHRoZQorZmF1bHQgcGF0aCBvciBpbiB2bXNjYW4uCisKK0Fsc28gbm90ZSB0aGF0IGEgcGFnZSByZXR1cm5lZCBieSBnZXRfdXNlcl9wYWdlcygpIGNvdWxkIGJlIHRydW5jYXRlZCBvcgorbWlncmF0ZWQgb3V0IGZyb20gdW5kZXIgdXMsIHdoaWxlIHdlJ3JlIHRyeWluZyB0byBtbG9jayBpdC4gIFRvIGRldGVjdAordGhpcywgX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0ZXN0cyB0aGUgcGFnZV9tYXBwaW5nIGFmdGVyIGFjcXVpcmluZwordGhlIHBhZ2UgbG9jay4gIElmIHRoZSBwYWdlIGlzIHN0aWxsIGFzc29jaWF0ZWQgd2l0aCBpdHMgbWFwcGluZywgd2UnbGwKK2dvIGFoZWFkIGFuZCBjYWxsIG1sb2NrX3ZtYV9wYWdlKCkuICBJZiB0aGUgbWFwcGluZyBpcyBnb25lLCB3ZSBqdXN0Cit1bmxvY2sgdGhlIHBhZ2UgYW5kIG1vdmUgb24uICBXb3JzZSBjYXNlLCB0aGlzIHJlc3VsdHMgaW4gcGFnZSBtYXBwZWQKK2luIGEgVk1fTE9DS0VEIHZtYSByZW1haW5pbmcgb24gYSBub3JtYWwgTFJVIGxpc3Qgd2l0aG91dCBiZWluZworUGFnZU1sb2NrZWQoKS4gIEFnYWluLCB2bXNjYW4gd2lsbCBkZXRlY3QgYW5kIGN1bGwgc3VjaCBwYWdlcy4KKworbWxvY2tfdm1hX3BhZ2UoKSwgY2FsbGVkIHdpdGggdGhlIHBhZ2UgbG9ja2VkIFtOLkIuLCBub3QgIm1sb2NrZWQiXSwgd2lsbAorVGVzdFNldFBhZ2VNbG9ja2VkKCkgZm9yIGVhY2ggcGFnZSByZXR1cm5lZCBieSBnZXRfdXNlcl9wYWdlcygpLiAgV2UgdXNlCitUZXN0U2V0UGFnZU1sb2NrZWQoKSBiZWNhdXNlIHRoZSBwYWdlIG1pZ2h0IGFscmVhZHkgYmUgbWxvY2tlZCBieSBhbm90aGVyCit0YXNrL3ZtYSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBleHRyYSB3b3JrLiAgV2UgZXNwZWNpYWxseSBkbyBub3Qgd2FudCB0bworY291bnQgYW4gbWxvY2tlZCBwYWdlIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzdGF0aXN0aWNzLiAgSWYgdGhlIHBhZ2Ugd2FzCithbHJlYWR5IG1sb2NrZWQsIG1sb2NrX3ZtYV9wYWdlKCkgaXMgZG9uZS4KKworSWYgdGhlIHBhZ2Ugd2FzIE5PVCBhbHJlYWR5IG1sb2NrZWQsIG1sb2NrX3ZtYV9wYWdlKCkgYXR0ZW1wdHMgdG8gaXNvbGF0ZSB0aGUKK3BhZ2UgZnJvbSB0aGUgTFJVLCBhcyBpdCBpcyBsaWtlbHkgb24gdGhlIGFwcHJvcHJpYXRlIGFjdGl2ZSBvciBpbmFjdGl2ZSBsaXN0CithdCB0aGF0IHRpbWUuICBJZiB0aGUgaXNvbGF0ZV9scnVfcGFnZSgpIHN1Y2NlZWRzLCBtbG9ja192bWFfcGFnZSgpIHdpbGwKK3B1dGJhY2sgdGhlIHBhZ2UtLXB1dGJhY2tfbHJ1X3BhZ2UoKS0td2hpY2ggd2lsbCBub3RpY2UgdGhhdCB0aGUgcGFnZSBpcyBub3cKK21sb2NrZWQgYW5kIGRpdmVydCB0aGUgcGFnZSB0byB0aGUgem9uZSdzIHVuZXZpY3RhYmxlIExSVSBsaXN0LiAgSWYKK21sb2NrX3ZtYV9wYWdlKCkgaXMgdW5hYmxlIHRvIGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSB0aGUgTFJVLCB2bXNjYW4gd2lsbCBoYW5kbGUKK2l0IGxhdGVyIGlmL3doZW4gaXQgYXR0ZW1wdHMgdG8gcmVjbGFpbSB0aGUgcGFnZS4KKworCitNbG9ja2VkIFBhZ2VzOiAgRmlsdGVyaW5nIFNwZWNpYWwgVm1hcworCittbG9ja19maXh1cCgpIGZpbHRlcnMgc2V2ZXJhbCBjbGFzc2VzIG9mICJzcGVjaWFsIiB2bWFzOgorCisxKSB2bWFzIHdpdGggVk1fSU98Vk1fUEZOTUFQIHNldCBhcmUgc2tpcHBlZCBlbnRpcmVseS4gIFRoZSBwYWdlcyBiZWhpbmQKKyAgIHRoZXNlIG1hcHBpbmdzIGFyZSBpbmhlcmVudGx5IHBpbm5lZCwgc28gd2UgZG9uJ3QgbmVlZCB0byBtYXJrIHRoZW0gYXMKKyAgIG1sb2NrZWQuICBJbiBhbnkgY2FzZSwgbW9zdCBvZiB0aGUgcGFnZXMgaGF2ZSBubyBzdHJ1Y3QgcGFnZSBpbiB3aGljaCB0bworICAgc28gbWFyayB0aGUgcGFnZS4gIEJlY2F1c2Ugb2YgdGhpcywgZ2V0X3VzZXJfcGFnZXMoKSB3aWxsIGZhaWwgZm9yIHRoZXNlCisgICB2bWFzLCBzbyB0aGVyZSBpcyBubyBzZW5zZSBpbiBhdHRlbXB0aW5nIHRvIHZpc2l0IHRoZW0uCisKKzIpIHZtYXMgbWFwcGluZyBodWdldGxiZnMgcGFnZSBhcmUgYWxyZWFkeSBlZmZlY3RpdmVseSBwaW5uZWQgaW50byBtZW1vcnkuCisgICBXZSBkb24ndCBuZWVkIG5vciB3YW50IHRvIG1sb2NrKCkgdGhlc2UgcGFnZXMuICBIb3dldmVyLCB0byBwcmVzZXJ2ZSB0aGUKKyAgIHByaW9yIGJlaGF2aW9yIG9mIG1sb2NrKCktLWJlZm9yZSB0aGUgdW5ldmljdGFibGUvbWxvY2sgY2hhbmdlcy0tbWxvY2tfZml4dXAoKQorICAgd2lsbCBjYWxsIG1ha2VfcGFnZXNfcHJlc2VudCgpIGluIHRoZSBodWdldGxiZnMgdm1hIHJhbmdlIHRvIGFsbG9jYXRlIHRoZQorICAgaHVnZSBwYWdlcyBhbmQgcG9wdWxhdGUgdGhlIHB0ZXMuCisKKzMpIHZtYXMgd2l0aCBWTV9ET05URVhQQU5EfFZNX1JFU0VSVkVEIGFyZSBnZW5lcmFsbHkgdXNlciBzcGFjZSBtYXBwaW5ncyBvZgorICAga2VybmVsIHBhZ2VzLCBzdWNoIGFzIHRoZSB2ZHNvIHBhZ2UsIHJlbGF5IGNoYW5uZWwgcGFnZXMsIGV0Yy4gIFRoZXNlIHBhZ2VzCisgICBhcmUgaW5oZXJlbnRseSB1bmV2aWN0YWJsZSBhbmQgYXJlIG5vdCBtYW5hZ2VkIG9uIHRoZSBMUlUgbGlzdHMuCisgICBtbG9ja19maXh1cCgpIHRyZWF0cyB0aGVzZSB2bWFzIHRoZSBzYW1lIGFzIGh1Z2V0bGJmcyB2bWFzLiAgSXQgY2FsbHMKKyAgIG1ha2VfcGFnZXNfcHJlc2VudCgpIHRvIHBvcHVsYXRlIHRoZSBwdGVzLgorCitOb3RlIHRoYXQgZm9yIGFsbCBvZiB0aGVzZSBzcGVjaWFsIHZtYXMsIG1sb2NrX2ZpeHVwKCkgZG9lcyBub3Qgc2V0IHRoZQorVk1fTE9DS0VEIGZsYWcuICBUaGVyZWZvcmUsIHdlIHdvbid0IGhhdmUgdG8gZGVhbCB3aXRoIHRoZW0gbGF0ZXIgZHVyaW5nCittdW5sb2NrKCkgb3IgbXVubWFwKCktLWZvciBleGFtcGxlLCBhdCB0YXNrIGV4aXQuICBOZWl0aGVyIGRvZXMgbWxvY2tfZml4dXAoKQorYWNjb3VudCB0aGVzZSB2bWFzIGFnYWluc3QgdGhlIHRhc2sncyAibG9ja2VkX3ZtIi4KKworTWxvY2tlZCBQYWdlczogIERvd25ncmFkaW5nIHRoZSBNbWFwIFNlbWFwaG9yZS4KKworbWxvY2tfZml4dXAoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHNlbWFwaG9yZSBoZWxkIGZvciB3cml0ZSwgYmVjYXVzZQoraXQgbWF5IGhhdmUgdG8gbWVyZ2Ugb3Igc3BsaXQgdm1hcy4gIEhvd2V2ZXIsIG1sb2NraW5nIGEgbGFyZ2UgcmVnaW9uIG9mCittZW1vcnkgY2FuIHRha2UgYSBsb25nIHRpbWUtLWVzcGVjaWFsbHkgaWYgdm1zY2FuIG11c3QgcmVjbGFpbSBwYWdlcyB0bworc2F0aXNmeSB0aGUgcmVnaW9ucyByZXF1aXJlbWVudHMuICBGYXVsdGluZyBpbiBhIGxhcmdlIHJlZ2lvbiB3aXRoIHRoZSBtbWFwCitzZW1hcGhvcmUgaGVsZCBmb3Igd3JpdGUgY2FuIGhvbGQgb2ZmIG90aGVyIGZhdWx0cyBvbiB0aGUgYWRkcmVzcyBzcGFjZSwgaW4KK3RoZSBjYXNlIG9mIGEgbXVsdGktdGhyZWFkZWQgdGFzay4gIEl0IGNhbiBhbHNvIGhvbGQgb2ZmIHNjYW5zIG9mIHRoZSB0YXNrJ3MKK2FkZHJlc3Mgc3BhY2UgdmlhIC9wcm9jLiAgV2hpbGUgdGVzdGluZyB1bmRlciBoZWF2eSBsb2FkLCBpdCB3YXMgb2JzZXJ2ZWQgdGhhdAordGhlIHBzKDEpIGNvbW1hbmQgY291bGQgYmUgaGVsZCBvZmYgZm9yIG1hbnkgbWludXRlcyB3aGlsZSBhIGxhcmdlIHNlZ21lbnQgd2FzCittbG9jaygpZWQgZG93bi4KKworVG8gYWRkcmVzcyB0aGlzIGlzc3VlLCBhbmQgdG8gbWFrZSB0aGUgc3lzdGVtIG1vcmUgcmVzcG9uc2l2ZSBkdXJpbmcgbWxvY2soKWluZworb2YgbGFyZ2Ugc2VnbWVudHMsIG1sb2NrX2ZpeHVwKCkgZG93bmdyYWRlcyB0aGUgbW1hcCBzZW1hcGhvcmUgdG8gcmVhZCBtb2RlCitkdXJpbmcgdGhlIGNhbGwgdG8gX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKS4gIFRoaXMgd29ya3MgZmluZS4gIEhvd2V2ZXIsIHRoZQorY2FsbGVycyBvZiBtbG9ja19maXh1cCgpIGV4cGVjdCB0aGUgc2VtYXBob3JlIHRvIGJlIHJldHVybmVkIGluIHdyaXRlIG1vZGUuCitTbywgbWxvY2tfZml4dXAoKSAidXBncmFkZXMiIHRoZSBzZW1waG9yZSB0byB3cml0ZSBtb2RlLiAgTGludXggZG9lcyBub3QKK3N1cHBvcnQgYW4gYXRvbWljIHVwZ3JhZGVfc2VtKCkgY2FsbCwgc28gbWxvY2tfZml4dXAoKSBtdXN0IGRyb3AgdGhlIHNlbWFwaG9yZQorYW5kIHJlYWNxdWlyZSBpdCBpbiB3cml0ZSBtb2RlLiAgSW4gYSBtdWx0aS10aHJlYWRlZCB0YXNrLCBpdCBpcyBwb3NzaWJsZSBmb3IKK3RoZSB0YXNrIG1lbW9yeSBtYXAgdG8gY2hhbmdlIHdoaWxlIHRoZSBzZW1hcGhvcmUgaXMgZHJvcHBlZC4gIFRoZXJlZm9yZSwKK21sb2NrX2ZpeHVwKCkgbG9va3MgdXAgdGhlIHZtYSBhdCB0aGUgcmFuZ2Ugc3RhcnQgYWRkcmVzcyBhZnRlciByZWFjcXVpcmluZwordGhlIHNlbWFwaG9yZSBpbiB3cml0ZSBtb2RlIGFuZCB2ZXJpZmllcyB0aGF0IGl0IHN0aWxsIGNvdmVycyB0aGUgb3JpZ2luYWwKK3JhbmdlLiAgSWYgbm90LCBtbG9ja19maXh1cCgpIHJldHVybnMgYW4gZXJyb3IgWy1FQUdBSU5dLiAgQWxsIGNhbGxlcnMgb2YKK21sb2NrX2ZpeHVwKCkgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gZGVhbCB3aXRoIHRoaXMgbmV3IGVycm9yIGNvbmRpdGlvbi4KKworTm90ZTogIHdoZW4gbXVubG9ja2luZyBhIHJlZ2lvbiwgYWxsIG9mIHRoZSBwYWdlcyBzaG91bGQgYWxyZWFkeSBiZSByZXNpZGVudC0tCit1bmxlc3Mgd2UgaGF2ZSByYWNpbmcgdGhyZWFkcyBtbG9ja2luZygpIGFuZCBtdW5sb2NraW5nKCkgcmVnaW9ucy4gIFNvLAordW5sb2NraW5nIHNob3VsZCBub3QgaGF2ZSB0byB3YWl0IGZvciBwYWdlIGFsbG9jYXRpb25zIG5vciBmYXVsdHMgIG9mIGFueSBraW5kLgorVGhlcmVmb3JlIG1sb2NrX2ZpeHVwKCkgZG9lcyBub3QgZG93bmdyYWRlIHRoZSBzZW1hcGhvcmUgZm9yIG11bmxvY2soKS4KKworCitNbG9ja2VkIFBhZ2VzOiAgbXVubG9jaygpL211bmxvY2thbGwoKSBTeXN0ZW0gQ2FsbCBIYW5kbGluZworCitUaGUgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCkgc3lzdGVtIGNhbGxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzYW1lIGZ1bmN0aW9ucy0tCitkb19tbG9ja1thbGxdKCktLWFzIHRoZSBtbG9jaygpIGFuZCBtbG9ja2FsbCgpIHN5c3RlbSBjYWxscyB3aXRoIHRoZSB1bmxvY2sKK3ZzIGxvY2sgb3BlcmF0aW9uIGluZGljYXRlZCBieSBhbiBhcmd1bWVudC4gIFNvLCB0aGVzZSBzeXN0ZW0gY2FsbHMgYXJlIGFsc28KK2hhbmRsZWQgYnkgbWxvY2tfZml4dXAoKS4gIEFnYWluLCBpZiBjYWxsZWQgZm9yIGFuIGFscmVhZHkgbXVubG9jaygpZWQgdm1hLAorbWxvY2tfZml4dXAoKSBzaW1wbHkgcmV0dXJucy4gIEJlY2F1c2Ugb2YgdGhlIHZtYSBmaWx0ZXJpbmcgZGlzY3Vzc2VkIGFib3ZlLAorVk1fTE9DS0VEIHdpbGwgbm90IGJlIHNldCBpbiBhbnkgInNwZWNpYWwiIHZtYXMuICBTbywgdGhlc2Ugdm1hcyB3aWxsIGJlCitpZ25vcmVkIGZvciBtdW5sb2NrLgorCitJZiB0aGUgdm1hIGlzIFZNX0xPQ0tFRCwgbWxvY2tfZml4dXAoKSBhZ2FpbiBhdHRlbXB0cyB0byBtZXJnZSBvciBzcGxpdCBvZmYKK3RoZSBzcGVjaWZpZWQgcmFuZ2UuICBUaGUgcmFuZ2UgaXMgdGhlbiBtdW5sb2NrZWQgdmlhIHRoZSBmdW5jdGlvbgorX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKS0tdGhlIHNhbWUgZnVuY3Rpb24gdXNlZCB0byBtbG9jayBhIHZtYSByYW5nZS0tCitwYXNzaW5nIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IG11bmxvY2soKSBpcyBiZWluZyBwZXJmb3JtZWQuCisKK0JlY2F1c2UgdGhlIHZtYSBhY2Nlc3MgcHJvdGVjdGlvbnMgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gUFJPVF9OT05FIGFmdGVyCitmYXVsdGluZyBpbiBhbmQgbWxvY2tpbmcgc29tZSBwYWdlcywgZ2V0X3VzZXJfcGFnZXMoKSB3YXMgdW5yZWxpYWJsZSBmb3IgdmlzaXRpbmcKK3RoZXNlIHBhZ2VzIGZvciBtdW5sb2NraW5nLiAgQmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGxlYXZlIHBhZ2VzIG1sb2NrZWQoKSwKK2dldF91c2VyX3BhZ2VzKCkgd2FzIGVuaGFuY2VkIHRvIGFjY2VwdCBhIGZsYWcgdG8gaWdub3JlIHRoZSBwZXJtaXNzaW9ucyB3aGVuCitmZXRjaGluZyB0aGUgcGFnZXMtLWFsbCBvZiB3aGljaCBzaG91bGQgYmUgcmVzaWRlbnQgYXMgYSByZXN1bHQgb2YgcHJldmlvdXMKK21sb2NrKClpbmcuCisKK0ZvciBtdW5sb2NrKCksIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdW5sb2NrcyBpbmRpdmlkdWFsIHBhZ2VzIGJ5IGNhbGxpbmcKK211bmxvY2tfdm1hX3BhZ2UoKS4gIG11bmxvY2tfdm1hX3BhZ2UoKSB1bmNvbmRpdGlvbmFsbHkgY2xlYXJzIHRoZSBQR19tbG9ja2VkCitmbGFnIHVzaW5nIFRlc3RDbGVhclBhZ2VNbG9ja2VkKCkuICBBcyB3aXRoIG1sb2NrX3ZtYV9wYWdlKCksIG11bmxvY2tfdm1hX3BhZ2UoKQordXNlIHRoZSBUZXN0KlBhZ2VNbG9ja2VkKCkgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBwYWdlIG1pZ2h0CitoYXZlIGFscmVhZHkgYmVlbiB1bmxvY2tlZCBieSBhbm90aGVyIHRhc2suICBJZiB0aGUgcGFnZSB3YXMgbWxvY2tlZCwKK211bmxvY2tfdm1hX3BhZ2UoKSB1cGRhdGVzIHRoYXQgem9uZSBzdGF0aXN0aWNzIGZvciB0aGUgbnVtYmVyIG9mIG1sb2NrZWQKK3BhZ2VzLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBhdCB0aGlzIHBvaW50IHdlIGhhdmVuJ3QgY2hlY2tlZCB3aGV0aGVyIHRoZSBwYWdlCitpcyBtYXBwZWQgYnkgb3RoZXIgVk1fTE9DS0VEIHZtYXMuCisKK1dlIGNhbid0IGNhbGwgdHJ5X3RvX211bmxvY2soKSwgdGhlIGZ1bmN0aW9uIHRoYXQgd2Fsa3MgdGhlIHJldmVyc2UgbWFwIHRvIGNoZWNrCitmb3Igb3RoZXIgVk1fTE9DS0VEIHZtYXMsIHdpdGhvdXQgZmlyc3QgaXNvbGF0aW5nIHRoZSBwYWdlIGZyb20gdGhlIExSVS4KK3RyeV90b19tdW5sb2NrKCkgaXMgYSB2YXJpYW50IG9mIHRyeV90b191bm1hcCgpIGFuZCB0aHVzIHJlcXVpcmVzIHRoYXQgdGhlIHBhZ2UKK25vdCBiZSBvbiBhbiBscnUgbGlzdC4gIFtNb3JlIG9uIHRoZXNlIGJlbG93Ll0gIEhvd2V2ZXIsIHRoZSBjYWxsIHRvCitpc29sYXRlX2xydV9wYWdlKCkgY291bGQgZmFpbCwgaW4gd2hpY2ggY2FzZSB3ZSBjb3VsZG4ndCB0cnlfdG9fbXVubG9jaygpLgorU28sIHdlIGdvIGFoZWFkIGFuZCBjbGVhciBQR19tbG9ja2VkIHVwIGZyb250LCBhcyB0aGlzIG1pZ2h0IGJlIHRoZSBvbmx5IGNoYW5jZQord2UgaGF2ZS4gIElmIHdlIGNhbiBzdWNjZXNzZnVsbHkgaXNvbGF0ZSB0aGUgcGFnZSwgd2UgZ28gYWhlYWQgYW5kCit0cnlfdG9fbXVubG9jaygpLCB3aGljaCB3aWxsIHJlc3RvcmUgdGhlIFBHX21sb2NrZWQgZmxhZyBhbmQgdXBkYXRlIHRoZSB6b25lCitwYWdlIHN0YXRpc3RpY3MgaWYgaXQgZmluZHMgYW5vdGhlciB2bWEgaG9sZGluZyB0aGUgcGFnZSBtbG9ja2VkLiAgSWYgd2UgZmFpbAordG8gaXNvbGF0ZSB0aGUgcGFnZSwgd2UnbGwgaGF2ZSBsZWZ0IGEgcG90ZW50aWFsbHkgbWxvY2tlZCBwYWdlIG9uIHRoZSBMUlUuCitUaGlzIGlzIGZpbmUsIGJlY2F1c2Ugd2UnbGwgY2F0Y2ggaXQgbGF0ZXIgd2hlbi9pZiB2bXNjYW4gdHJpZXMgdG8gcmVjbGFpbSB0aGUKK3BhZ2UuICBUaGlzIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCisKK01sb2NrZWQgUGFnZXM6ICBNaWdyYXRpbmcgVGhlbS4uLgorCitBIHBhZ2UgdGhhdCBpcyBiZWluZyBtaWdyYXRlZCBoYXMgYmVlbiBpc29sYXRlZCBmcm9tIHRoZSBscnUgbGlzdHMgYW5kIGlzCitoZWxkIGxvY2tlZCBhY3Jvc3MgdW5tYXBwaW5nIG9mIHRoZSBwYWdlLCB1cGRhdGluZyB0aGUgcGFnZSdzIG1hcHBpbmcKK1thZGRyZXNzX3NwYWNlXSBlbnRyeSBhbmQgY29weWluZyB0aGUgY29udGVudHMgYW5kIHN0YXRlLCB1bnRpbCB0aGUKK3BhZ2UgdGFibGUgZW50cnkgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhbiBlbnRyeSB0aGF0IHJlZmVycyB0byB0aGUgbmV3CitwYWdlLiAgTGludXggc3VwcG9ydHMgbWlncmF0aW9uIG9mIG1sb2NrZWQgcGFnZXMgYW5kIG90aGVyIHVuZXZpY3RhYmxlCitwYWdlcy4gIFRoaXMgaW52b2x2ZXMgc2ltcGx5IG1vdmluZyB0aGUgUGFnZU1sb2NrZWQgYW5kIFBhZ2VVbmV2aWN0YWJsZSBzdGF0ZXMKK2Zyb20gdGhlIG9sZCBwYWdlIHRvIHRoZSBuZXcgcGFnZS4KKworTm90ZSB0aGF0IHBhZ2UgbWlncmF0aW9uIGNhbiByYWNlIHdpdGggbWxvY2tpbmcgb3IgbXVubG9ja2luZyBvZiB0aGUgc2FtZQorcGFnZS4gIFRoaXMgaGFzIGJlZW4gZGlzY3Vzc2VkIGZyb20gdGhlIG1sb2NrL211bmxvY2sgcGVyc3BlY3RpdmUgaW4gdGhlCityZXNwZWN0aXZlIHNlY3Rpb25zIGFib3ZlLiAgQm90aCBwcm9jZXNzZXMgW21pZ3JhdGlvbiwgbVt1bl1sb2NraW5nXSwgaG9sZAordGhlIHBhZ2UgbG9ja2VkLiAgVGhpcyBwcm92aWRlcyB0aGUgZmlyc3QgbGV2ZWwgb2Ygc3luY2hyb25pemF0aW9uLiAgUGFnZQorbWlncmF0aW9uIHplcm9zIG91dCB0aGUgcGFnZV9tYXBwaW5nIG9mIHRoZSBvbGQgcGFnZSBiZWZvcmUgdW5sb2NraW5nIGl0LAorc28gbVt1bl1sb2NrIGNhbiBza2lwIHRoZXNlIHBhZ2VzIGJ5IHRlc3RpbmcgdGhlIHBhZ2UgbWFwcGluZyB1bmRlciBwYWdlCitsb2NrLgorCitXaGVuIGNvbXBsZXRpbmcgcGFnZSBtaWdyYXRpb24sIHdlIHBsYWNlIHRoZSBuZXcgYW5kIG9sZCBwYWdlcyBiYWNrIG9udG8gdGhlCitscnUgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgbG9jay4gIFRoZSAidW5uZWVkZWQiIHBhZ2UtLW9sZCBwYWdlIG9uIHN1Y2Nlc3MsCituZXcgcGFnZSBvbiBmYWlsdXJlLS13aWxsIGJlIGZyZWVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoZWxkIGJ5IHRoZQorbWlncmF0aW9uIHByb2Nlc3MgaXMgcmVsZWFzZWQuICBUbyBlbnN1cmUgdGhhdCB3ZSBkb24ndCBzdHJhbmQgcGFnZXMgb24gdGhlCit1bmV2aWN0YWJsZSBsaXN0IGJlY2F1c2Ugb2YgYSByYWNlIGJldHdlZW4gbXVubG9jayBhbmQgbWlncmF0aW9uLCBwYWdlCittaWdyYXRpb24gdXNlcyB0aGUgcHV0YmFja19scnVfcGFnZSgpIGZ1bmN0aW9uIHRvIGFkZCBtaWdyYXRlZCBwYWdlcyBiYWNrIHRvCit0aGUgbHJ1LgorCisKK01sb2NrZWQgUGFnZXM6ICBtbWFwKE1BUF9MT0NLRUQpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK0luIGFkZGl0aW9uIHRoZSB0aGUgbWxvY2soKS9tbG9ja2FsbCgpIHN5c3RlbSBjYWxscywgYW4gYXBwbGljYXRpb24gY2FuIHJlcXVlc3QKK3RoYXQgYSByZWdpb24gb2YgbWVtb3J5IGJlIG1sb2NrZWQgdXNpbmcgdGhlIE1BUF9MT0NLRUQgZmxhZyB3aXRoIHRoZSBtbWFwKCkKK2NhbGwuICBGdXJ0aGVybW9yZSwgYW55IG1tYXAoKSBjYWxsIG9yIGJyaygpIGNhbGwgdGhhdCBleHBhbmRzIHRoZSBoZWFwIGJ5IGEKK3Rhc2sgdGhhdCBoYXMgcHJldmlvdXNseSBjYWxsZWQgbWxvY2thbGwoKSB3aXRoIHRoZSBNQ0xfRlVUVVJFIGZsYWcgd2lsbCByZXN1bHQKK2luIHRoZSBuZXdseSBtYXBwZWQgbWVtb3J5IGJlaW5nIG1sb2NrZWQuICBCZWZvcmUgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGNoYW5nZXMsCit0aGUga2VybmVsIHNpbXBseSBjYWxsZWQgbWFrZV9wYWdlc19wcmVzZW50KCkgdG8gYWxsb2NhdGUgcGFnZXMgYW5kIHBvcHVsYXRlCit0aGUgcGFnZSB0YWJsZS4KKworVG8gbWxvY2sgYSByYW5nZSBvZiBtZW1vcnkgdW5kZXIgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGluZnJhc3RydWN0dXJlLCB0aGUKK21tYXAoKSBoYW5kbGVyIGFuZCB0YXNrIGFkZHJlc3Mgc3BhY2UgZXhwYW5zaW9uIGZ1bmN0aW9ucyBjYWxsCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBzcGVjaWZ5aW5nIHRoZSB2bWEgYW5kIHRoZSBhZGRyZXNzIHJhbmdlIHRvIG1sb2NrLgorbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgZmlsdGVycyB2bWFzIGxpa2UgbWxvY2tfZml4dXAoKSwgYXMgZGVzY3JpYmVkIGFib3ZlIGluCisiTWxvY2tlZCBQYWdlczogIEZpbHRlcmluZyBWbWFzIi4gIEl0IHdpbGwgY2xlYXIgdGhlIFZNX0xPQ0tFRCBmbGFnLCB3aGljaCB3aWxsCitoYXZlIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIGNhbGxlciwgaW4gZmlsdGVyZWQgdm1hcy4gIFRodXMgdGhlc2Ugdm1hJ3MgbmVlZAorbm90IGJlIHZpc2l0ZWQgZm9yIG11bmxvY2sgd2hlbiB0aGUgcmVnaW9uIGlzIHVubWFwcGVkLgorCitGb3IgIm5vcm1hbCIgdm1hcywgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgY2FsbHMgX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0bworZmF1bHQvYWxsb2NhdGUgdGhlIHBhZ2VzIGFuZCBtbG9jayB0aGVtLiAgQWdhaW4sIGxpa2UgbWxvY2tfZml4dXAoKSwKK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIGRvd25ncmFkZXMgdGhlIG1tYXAgc2VtYXBob3JlIHRvIHJlYWQgbW9kZSBiZWZvcmUKK2F0dGVtcHRpbmcgdG8gZmF1bHQvYWxsb2NhdGUgYW5kIG1sb2NrIHRoZSBwYWdlczsgYW5kICJ1cGdyYWRlcyIgdGhlIHNlbWFwaG9yZQorYmFjayB0byB3cml0ZSBtb2RlIGJlZm9yZSByZXR1cm5pbmcuCisKK1RoZSBjYWxsZXJzIG9mIG1sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHdpbGwgaGF2ZSBhbHJlYWR5IGFkZGVkIHRoZSBtZW1vcnkKK3JhbmdlIHRvIGJlIG1sb2NrZWQgdG8gdGhlIHRhc2sncyAibG9ja2VkX3ZtIi4gIFRvIGFjY291bnQgZm9yIGZpbHRlcmVkIHZtYXMsCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgTk9UIG1sb2NrZWQuICBBbGwgb2YgdGhlCitjYWxsZXJzIHRoZW4gc3VidHJhY3QgYSBub24tbmVnYXRpdmUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHRhc2sncyBsb2NrZWRfdm0uCitBIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSByZXByZXNlbnQgYW4gZXJyb3ItLWZvciBleGFtcGxlLCBmcm9tIGdldF91c2VyX3BhZ2VzKCkKK2F0dGVtcHRpbmcgdG8gZmF1bHQgaW4gYSB2bWEgd2l0aCBQUk9UX05PTkUgYWNjZXNzLiAgSW4gdGhpcyBjYXNlLCB3ZSBsZWF2ZQordGhlIG1lbW9yeSByYW5nZSBhY2NvdW50ZWQgYXMgbG9ja2VkX3ZtLCBhcyB0aGUgcHJvdGVjdGlvbnMgY291bGQgYmUgY2hhbmdlZAorbGF0ZXIgYW5kIHBhZ2VzIGFsbG9jYXRlZCBpbnRvIHRoYXQgcmVnaW9uLgorCisKK01sb2NrZWQgUGFnZXM6ICBtdW5tYXAoKS9leGl0KCkvZXhlYygpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK1doZW4gdW5tYXBwaW5nIGFuIG1sb2NrZWQgcmVnaW9uIG9mIG1lbW9yeSwgd2hldGhlciBieSBhbiBleHBsaWNpdCBjYWxsIHRvCittdW5tYXAoKSBvciB2aWEgYW4gaW50ZXJuYWwgdW5tYXAgZnJvbSBleGl0KCkgb3IgZXhlYygpIHByb2Nlc3NpbmcsIHdlIG11c3QKK211bmxvY2sgdGhlIHBhZ2VzIGlmIHdlJ3JlIHJlbW92aW5nIHRoZSBsYXN0IFZNX0xPQ0tFRCB2bWEgdGhhdCBtYXBzIHRoZSBwYWdlcy4KK0JlZm9yZSB0aGUgdW5ldmljdGFibGUvbWxvY2sgY2hhbmdlcywgbWxvY2tpbmcgZGlkIG5vdCBtYXJrIHRoZSBwYWdlcyBpbiBhbnkgd2F5LAorc28gdW5tYXBwaW5nIHRoZW0gcmVxdWlyZWQgbm8gcHJvY2Vzc2luZy4KKworVG8gbXVubG9jayBhIHJhbmdlIG9mIG1lbW9yeSB1bmRlciB0aGUgdW5ldmljdGFibGUvbWxvY2sgaW5mcmFzdHJ1Y3R1cmUsIHRoZQorbXVubWFwKCkgaGFuZGVyIGFuZCB0YXNrIGFkZHJlc3Mgc3BhY2UgdGVhciBkb3duIGZ1bmN0aW9uIGNhbGwKK211bmxvY2tfdm1hX3BhZ2VzX2FsbCgpLiAgVGhlIG5hbWUgcmVmbGVjdHMgdGhlIG9ic2VydmF0aW9uIHRoYXQgb25lIGFsd2F5cworc3BlY2lmaWVzIHRoZSBlbnRpcmUgdm1hIHJhbmdlIHdoZW4gbXVubG9jaygpaW5nIGR1cmluZyB1bm1hcCBvZiBhIHJlZ2lvbi4KK0JlY2F1c2Ugb2YgdGhlIHZtYSBmaWx0ZXJpbmcgd2hlbiBtbG9ja2luZygpIHJlZ2lvbnMsIG9ubHkgIm5vcm1hbCIgdm1hcyB0aGF0CithY3R1YWxseSBjb250YWluIG1sb2NrZWQgcGFnZXMgd2lsbCBiZSBwYXNzZWQgdG8gbXVubG9ja192bWFfcGFnZXNfYWxsKCkuCisKK211bmxvY2tfdm1hX3BhZ2VzX2FsbCgpIGNsZWFycyB0aGUgVk1fTE9DS0VEIHZtYSBmbGFnIGFuZCwgbGlrZSBtbG9ja19maXh1cCgpCitmb3IgdGhlIG11bmxvY2sgY2FzZSwgY2FsbHMgX19tdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRvIHdhbGsgdGhlIHBhZ2UgdGFibGUKK2ZvciB0aGUgdm1hJ3MgbWVtb3J5IHJhbmdlIGFuZCBtdW5sb2NrX3ZtYV9wYWdlKCkgZWFjaCByZXNpZGVudCBwYWdlIG1hcHBlZCBieQordGhlIHZtYS4gIFRoaXMgZWZmZWN0aXZlbHkgbXVubG9ja3MgdGhlIHBhZ2UsIG9ubHkgaWYgdGhpcyBpcyB0aGUgbGFzdAorVk1fTE9DS0VEIHZtYSB0aGF0IG1hcHMgdGhlIHBhZ2UuCisKKworTWxvY2tlZCBQYWdlOiAgdHJ5X3RvX3VubWFwKCkKKworW05vdGU6ICB0aGUgY29kZSBjaGFuZ2VzIHJlcHJlc2VudGVkIGJ5IHRoaXMgc2VjdGlvbiBhcmUgcmVhbGx5IHF1aXRlIHNtYWxsCitjb21wYXJlZCB0byB0aGUgdGV4dCB0byBkZXNjcmliZSB3aGF0IGhhcHBlbmluZyBhbmQgd2h5LCBhbmQgdG8gZGlzY3VzcyB0aGUKK2ltcGxpY2F0aW9ucy5dCisKK1BhZ2VzIGNhbiwgb2YgY291cnNlLCBiZSBtYXBwZWQgaW50byBtdWx0aXBsZSB2bWFzLiAgU29tZSBvZiB0aGVzZSB2bWFzIG1heQoraGF2ZSBWTV9MT0NLRUQgZmxhZyBzZXQuICBJdCBpcyBwb3NzaWJsZSBmb3IgYSBwYWdlIG1hcHBlZCBpbnRvIG9uZSBvciBtb3JlCitWTV9MT0NLRUQgdm1hcyBub3QgdG8gaGF2ZSB0aGUgUEdfbWxvY2tlZCBmbGFnIHNldCBhbmQgdGhlcmVmb3JlIHJlc2lkZSBvbiBvbmUKK29mIHRoZSBhY3RpdmUgb3IgaW5hY3RpdmUgTFJVIGxpc3RzLiAgVGhpcyBjb3VsZCBoYXBwZW4gaWYsIGZvciBleGFtcGxlLCBhCit0YXNrIGluIHRoZSBwcm9jZXNzIG9mIG11bmxvY2soKWluZyB0aGUgcGFnZSBjb3VsZCBub3QgaXNvbGF0ZSB0aGUgcGFnZSBmcm9tCit0aGUgTFJVLiAgQXMgYSByZXN1bHQsIHZtc2Nhbi9zaHJpbmtfcGFnZV9saXN0KCkgbWlnaHQgZW5jb3VudGVyIHN1Y2ggYSBwYWdlCithcyBkZXNjcmliZWQgaW4gIlVuZXZpY3RhYmxlIFBhZ2VzIGFuZCBWbXNjYW4gW3Nocmlua18qX2xpc3QoKV0iLiAgVG8KK2hhbmRsZSB0aGlzIHNpdHVhdGlvbiwgdHJ5X3RvX3VubWFwKCkgaGFzIGJlZW4gZW5oYW5jZWQgdG8gY2hlY2sgZm9yIFZNX0xPQ0tFRAordm1hcyB3aGlsZSBpdCBpcyB3YWxraW5nIGEgcGFnZSdzIHJldmVyc2UgbWFwLgorCit0cnlfdG9fdW5tYXAoKSBpcyBhbHdheXMgY2FsbGVkLCBieSBlaXRoZXIgdm1zY2FuIGZvciByZWNsYWltIG9yIGZvciBwYWdlCittaWdyYXRpb24sIHdpdGggdGhlIGFyZ3VtZW50IHBhZ2UgbG9ja2VkIGFuZCBpc29sYXRlZCBmcm9tIHRoZSBMUlUuICBCVUdfT04oKQorYXNzZXJ0aW9ucyBlbmZvcmNlIHRoaXMgcmVxdWlyZW1lbnQuICBTZXBhcmF0ZSBmdW5jdGlvbnMgaGFuZGxlIGFub255bW91cyBhbmQKK21hcHBlZCBmaWxlIHBhZ2VzLCBhcyB0aGVzZSB0eXBlcyBvZiBwYWdlcyBoYXZlIGRpZmZlcmVudCByZXZlcnNlIG1hcAorbWVjaGFuaXNtcy4KKworCXRyeV90b191bm1hcF9hbm9uKCkKKworVG8gdW5tYXAgYW5vbnltb3VzIHBhZ2VzLCBlYWNoIHZtYSBpbiB0aGUgbGlzdCBhbmNob3JlZCBpbiB0aGUgYW5vbl92bWEgbXVzdCBiZQordmlzaXRlZC0tYXQgbGVhc3QgdW50aWwgYSBWTV9MT0NLRUQgdm1hIGlzIGVuY291bnRlcmVkLiAgSWYgdGhlIHBhZ2UgaXMgYmVpbmcKK3VubWFwcGVkIGZvciBtaWdyYXRpb24sIFZNX0xPQ0tFRCB2bWFzIGRvIG5vdCBzdG9wIHRoZSBwcm9jZXNzIGJlY2F1c2UgbWxvY2tlZAorcGFnZXMgYXJlIG1pZ3JhdGFibGUuICBIb3dldmVyLCBmb3IgcmVjbGFpbSwgaWYgdGhlIHBhZ2UgaXMgbWFwcGVkIGludG8gYQorVk1fTE9DS0VEIHZtYSwgdGhlIHNjYW4gc3RvcHMuICB0cnlfdG9fdW5tYXAoKSBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBtbWFwCitzZW1waG9yZSBvZiB0aGUgbW1fc3RydWN0IHRvIHdoaWNoIHRoZSB2bWEgYmVsb25ncyBpbiByZWFkIG1vZGUuICBJZiB0aGlzIGlzCitzdWNjZXNzZnVsLCB0cnlfdG9fdW5tYXAoKSB3aWxsIG1sb2NrIHRoZSBwYWdlIHZpYSBtbG9ja192bWFfcGFnZSgpLS13ZQord291bGRuJ3QgaGF2ZSBnb3R0ZW4gdG8gdHJ5X3RvX3VubWFwKCkgaWYgdGhlIHBhZ2Ugd2VyZSBhbHJlYWR5IG1sb2NrZWQtLWFuZAord2lsbCByZXR1cm4gU1dBUF9NTE9DSywgaW5kaWNhdGluZyB0aGF0IHRoZSBwYWdlIGlzIHVuZXZpY3RhYmxlLiAgSWYgdGhlCittbWFwIHNlbWFwaG9yZSBjYW5ub3QgYmUgYWNxdWlyZWQsIHdlIGFyZSBub3Qgc3VyZSB3aGV0aGVyIHRoZSBwYWdlIGlzIHJlYWxseQordW5ldmljdGFibGUgb3Igbm90LiAgSW4gdGhpcyBjYXNlLCB0cnlfdG9fdW5tYXAoKSB3aWxsIHJldHVybiBTV0FQX0FHQUlOLgorCisJdHJ5X3RvX3VubWFwX2ZpbGUoKSAtLSBsaW5lYXIgbWFwcGluZ3MKKworVW5tYXBwaW5nIG9mIGEgbWFwcGVkIGZpbGUgcGFnZSB3b3JrcyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgdGhlIHNjYW4gdmlzaXRzCithbGwgdm1hcyB0aGF0IG1hcHMgdGhlIHBhZ2UncyBpbmRleC9wYWdlIG9mZnNldCBpbiB0aGUgcGFnZSdzIG1hcHBpbmcncworcmV2ZXJzZSBtYXAgcHJpb3JpdHkgc2VhcmNoIHRyZWUuICBJdCBtdXN0IGFsc28gdmlzaXQgZWFjaCB2bWEgaW4gdGhlIHBhZ2UncworbWFwcGluZydzIG5vbi1saW5lYXIgbGlzdCwgaWYgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LiAgQXMgZm9yIGFub255bW91cyBwYWdlcywKK29uIGVuY291bnRlcmluZyBhIFZNX0xPQ0tFRCB2bWEgZm9yIGEgbWFwcGVkIGZpbGUgcGFnZSwgdHJ5X3RvX3VubWFwKCkgd2lsbAorYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBhc3NvY2lhdGVkIG1tX3N0cnVjdCdzIG1tYXAgc2VtYXBob3JlIHRvIG1sb2NrIHRoZSBwYWdlLAorcmV0dXJuaW5nIFNXQVBfTUxPQ0sgaWYgdGhpcyBpcyBzdWNjZXNzZnVsLCBhbmQgU1dBUF9BR0FJTiwgaWYgbm90LgorCisJdHJ5X3RvX3VubWFwX2ZpbGUoKSAtLSBub24tbGluZWFyIG1hcHBpbmdzCisKK0lmIGEgcGFnZSdzIG1hcHBpbmcgY29udGFpbnMgYSBub24tZW1wdHkgbm9uLWxpbmVhciBtYXBwaW5nIHZtYSBsaXN0LCB0aGVuCit0cnlfdG9fdW57bWFwfGxvY2t9KCkgbXVzdCBhbHNvIHZpc2l0IGVhY2ggdm1hIGluIHRoYXQgbGlzdCB0byBkZXRlcm1pbmUKK3doZXRoZXIgdGhlIHBhZ2UgaXMgbWFwcGVkIGluIGEgVk1fTE9DS0VEIHZtYS4gIEFnYWluLCB0aGUgc2NhbiBtdXN0IHZpc2l0CithbGwgdm1hcyBpbiB0aGUgbm9uLWxpbmVhciBsaXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBwYWdlcyBpcyBub3Qvc2hvdWxkIG5vdCBiZQorbWxvY2tlZC4gIElmIGEgVk1fTE9DS0VEIHZtYSBpcyBmb3VuZCBpbiB0aGUgbGlzdCwgdGhlIHNjYW4gY291bGQgdGVybWluYXRlLgorSG93ZXZlciwgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHBhZ2UgaXMgYWN0dWFsbHkgbWFwcGVkCitpbiBhIGdpdmVuIHZtYS0tZWl0aGVyIGZvciB1bm1hcHBpbmcgb3IgdGVzdGluZyB3aGV0aGVyIHRoZSBWTV9MT0NLRUQgdm1hCithY3R1YWxseSBwaW5zIHRoZSBwYWdlLgorCitTbywgdHJ5X3RvX3VubWFwX2ZpbGUoKSBoYW5kbGVzIG5vbi1saW5lYXIgbWFwcGluZ3MgYnkgc2Nhbm5pbmcgYSBjZXJ0YWluCitudW1iZXIgb2YgcGFnZXMtLWEgImNsdXN0ZXIiLS1pbiBlYWNoIG5vbi1saW5lYXIgdm1hIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFnZSdzCittYXBwaW5nLCBmb3IgZWFjaCBmaWxlIG1hcHBlZCBwYWdlIHRoYXQgdm1zY2FuIHRyaWVzIHRvIHVubWFwLiAgSWYgdGhpcyBoYXBwZW5zCit0byB1bm1hcCB0aGUgcGFnZSB3ZSdyZSB0cnlpbmcgdG8gdW5tYXAsIHRyeV90b191bm1hcCgpIHdpbGwgbm90aWNlIHRoaXMgb24KK3JldHVybi0tKHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMCktLWFuZCByZXR1cm4gU1dBUF9TVUNDRVNTLiAgT3RoZXJ3aXNlLCBpdAord2lsbCByZXR1cm4gU1dBUF9BR0FJTiwgY2F1c2luZyB2bXNjYW4gdG8gcmVjaXJjdWxhdGUgdGhpcyBwYWdlLiAgV2UgdGFrZQorYWR2YW50YWdlIG9mIHRoZSBjbHVzdGVyIHNjYW4gaW4gdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBhcyBmb2xsb3dzOgorCitGb3IgZWFjaCBub24tbGluZWFyIHZtYSwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBtbWFwCitzZW1hcGhvcmUgb2YgdGhlIGFzc29jaWF0ZWQgbW1fc3RydWN0IGZvciByZWFkIHdpdGhvdXQgYmxvY2tpbmcuICBJZiB0aGlzCithdHRlbXB0IGlzIHN1Y2Nlc3NmdWwgYW5kIHRoZSB2bWEgaXMgVk1fTE9DS0VELCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIHdpbGwKK3JldGFpbiB0aGUgbW1hcCBzZW1hcGhvcmUgZm9yIHRoZSBzY2FuOyBvdGhlcndpc2UgaXQgZHJvcHMgaXQgaGVyZS4gIFRoZW4sCitmb3IgZWFjaCBwYWdlIGluIHRoZSBjbHVzdGVyLCBpZiB3ZSdyZSBob2xkaW5nIHRoZSBtbWFwIHNlbWFwaG9yZSBmb3IgYSBsb2NrZWQKK3ZtYSwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBjYWxscyBtbG9ja192bWFfcGFnZSgpIHRvIG1sb2NrIHRoZSBwYWdlLiAgVGhpcworY2FsbCBpcyBhIG5vLW9wIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgbG9ja2VkLCBidXQgd2lsbCBtbG9jayBhbnkgcGFnZXMgaW4KK3RoZSBub24tbGluZWFyIG1hcHBpbmcgdGhhdCBoYXBwZW4gdG8gYmUgdW5sb2NrZWQuICBJZiBvbmUgb2YgdGhlIHBhZ2VzIHNvCittbG9ja2VkIGlzIHRoZSBwYWdlIHBhc3NlZCBpbiB0byB0cnlfdG9fdW5tYXAoKSwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSB3aWxsCityZXR1cm4gU1dBUF9NTE9DSywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgU1dBUF9BR0FJTi4gIFRoaXMgd2lsbCBhbGxvdyB2bXNjYW4KK3RvIGN1bGwgdGhlIHBhZ2UsIHJhdGhlciB0aGFuIHJlY2lyY3VsYXRpbmcgaXQgb24gdGhlIGluYWN0aXZlIGxpc3QuICBBZ2FpbiwKK2lmIHRyeV90b191bm1hcF9jbHVzdGVyKCkgY2Fubm90IGFjcXVpcmUgdGhlIHZtYSdzIG1tYXAgc2VtLCBpdCByZXR1cm5zCitTV0FQX0FHQUlOLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhZ2UgaXMgbWFwcGVkIGJ5IGEgVk1fTE9DS0VEIHZtYSwgYnV0Citjb3VsZG4ndCBiZSBtbG9ja2VkLgorCisKK01sb2NrZWQgcGFnZXM6ICB0cnlfdG9fbXVubG9jaygpIFJldmVyc2UgTWFwIFNjYW4KKworVE9ETy9GSVhNRTogIGEgYmV0dGVyIG5hbWUgbWlnaHQgYmUgcGFnZV9tbG9ja2VkKCktLWFuYWxvZ291cyB0byB0aGUKK3BhZ2VfcmVmZXJlbmNlZCgpIHJldmVyc2UgbWFwIHdhbGtlci0tZXNwZWNpYWxseSBpZiB3ZSBjb250aW51ZSB0byBjYWxsIHRoaXMKK2Zyb20gc2hyaW5rX3BhZ2VfbGlzdCgpLiAgU2VlIHJlbGF0ZWQgVE9ETy9GSVhNRSBiZWxvdy4KKworV2hlbiBtdW5sb2NrX3ZtYV9wYWdlKCktLXNlZSAiTWxvY2tlZCBQYWdlczogIG11bmxvY2soKS9tdW5sb2NrYWxsKCkgU3lzdGVtCitDYWxsIEhhbmRsaW5nIiBhYm92ZS0tdHJpZXMgdG8gbXVubG9jayBhIHBhZ2UsIG9yIHdoZW4gc2hyaW5rX3BhZ2VfbGlzdCgpCitlbmNvdW50ZXJzIGFuIGFub255bW91cyBwYWdlIHRoYXQgaXMgbm90IHlldCBpbiB0aGUgc3dhcCBjYWNoZSwgdGhleSBuZWVkIHRvCitkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHBhZ2UgaXMgbWFwcGVkIGJ5IGFueSBWTV9MT0NLRUQgdm1hLCB3aXRob3V0CithY3R1YWxseSBhdHRlbXB0aW5nIHRvIHVubWFwIGFsbCBwdGVzIGZyb20gdGhlIHBhZ2UuICBGb3IgdGhpcyBwdXJwb3NlLCB0aGUKK3VuZXZpY3RhYmxlL21sb2NrIGluZnJhc3RydWN0dXJlIGludHJvZHVjZWQgYSB2YXJpYW50IG9mIHRyeV90b191bm1hcCgpIGNhbGxlZAordHJ5X3RvX211bmxvY2soKS4KKwordHJ5X3RvX211bmxvY2soKSBjYWxscyB0aGUgc2FtZSBmdW5jdGlvbnMgYXMgdHJ5X3RvX3VubWFwKCkgZm9yIGFub255bW91cyBhbmQKK21hcHBlZCBmaWxlIHBhZ2VzIHdpdGggYW4gYWRkaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpbmcgdW5sb2NrIHZlcnN1cyB1bm1hcAorcHJvY2Vzc2luZy4gIEFnYWluLCB0aGVzZSBmdW5jdGlvbnMgd2FsayB0aGUgcmVzcGVjdGl2ZSByZXZlcnNlIG1hcHMgbG9va2luZworZm9yIFZNX0xPQ0tFRCB2bWFzLiAgV2hlbiBzdWNoIGEgdm1hIGlzIGZvdW5kIGZvciBhbm9ueW1vdXMgcGFnZXMgYW5kIGZpbGUKK3BhZ2VzIG1hcHBlZCBpbiBsaW5lYXIgVk1BcywgYXMgaW4gdGhlIHRyeV90b191bm1hcCgpIGNhc2UsIHRoZSBmdW5jdGlvbnMKK2F0dGVtcHQgdG8gYWNxdWlyZSB0aGUgYXNzb2NpYXRlZCBtbWFwIHNlbXBob3JlLCBtbG9jayB0aGUgcGFnZSB2aWEKK21sb2NrX3ZtYV9wYWdlKCkgYW5kIHJldHVybiBTV0FQX01MT0NLLiAgVGhpcyBlZmZlY3RpdmVseSB1bmRvZXMgdGhlCitwcmUtY2xlYXJpbmcgb2YgdGhlIHBhZ2UncyBQR19tbG9ja2VkIGRvbmUgYnkgbXVubG9ja192bWFfcGFnZSgpIGFuZCBpbmZvcm1zCitzaHJpbmtfcGFnZV9saXN0KCkgdGhhdCB0aGUgYW5vbnltb3VzIHBhZ2Ugc2hvdWxkIGJlIGN1bGxlZCByYXRoZXIgdGhhbiBhZGRlZAordG8gdGhlIHN3YXAgY2FjaGUgaW4gcHJlcGFyYXRpb24gZm9yIGEgdHJ5X3RvX3VubWFwKCkgdGhhdCB3aWxsIGFsbW9zdAorY2VydGFpbmx5IGZhaWwuCisKK0lmIHRyeV90b191bm1hcCgpIGlzIHVuYWJsZSB0byBhY3F1aXJlIGEgVk1fTE9DS0VEIHZtYSdzIGFzc29jaWF0ZWQgbW1hcAorc2VtYXBob3JlLCBpdCB3aWxsIHJldHVybiBTV0FQX0FHQUlOLiAgVGhpcyB3aWxsIGFsbG93IHNocmlua19wYWdlX2xpc3QoKQordG8gcmVjeWNsZSB0aGUgcGFnZSBvbiB0aGUgaW5hY3RpdmUgbGlzdCBhbmQgaG9wZSB0aGF0IGl0IGhhcyBiZXR0ZXIgbHVjaword2l0aCB0aGUgcGFnZSBuZXh0IHRpbWUuCisKK0ZvciBmaWxlIHBhZ2VzIG1hcHBlZCBpbnRvIG5vbi1saW5lYXIgdm1hcywgdGhlIHRyeV90b19tdW5sb2NrKCkgbG9naWMgd29ya3MKK3NsaWdodGx5IGRpZmZlcmVudGx5LiAgT24gZW5jb3VudGVyaW5nIGEgVk1fTE9DS0VEIG5vbi1saW5lYXIgdm1hIHRoYXQgbWlnaHQKK21hcCB0aGUgcGFnZSwgdHJ5X3RvX211bmxvY2soKSByZXR1cm5zIFNXQVBfQUdBSU4gd2l0aG91dCBhY3R1YWxseSBtbG9ja2luZwordGhlIHBhZ2UuICBtdW5sb2NrX3ZtYV9wYWdlKCkgd2lsbCBqdXN0IGxlYXZlIHRoZSBwYWdlIHVubG9ja2VkIGFuZCBsZXQKK3Ztc2NhbiBkZWFsIHdpdGggaXQtLXRoZSB1c3VhbCBmYWxsYmFjayBwb3NpdGlvbi4KKworTm90ZSB0aGF0IHRyeV90b19tdW5sb2NrKCkncyByZXZlcnNlIG1hcCB3YWxrIG11c3QgdmlzaXQgZXZlcnkgdm1hIGluIGEgcGFnZXMnCityZXZlcnNlIG1hcCB0byBkZXRlcm1pbmUgdGhhdCBhIHBhZ2UgaXMgTk9UIG1hcHBlZCBpbnRvIGFueSBWTV9MT0NLRUQgdm1hLgorSG93ZXZlciwgdGhlIHNjYW4gY2FuIHRlcm1pbmF0ZSB3aGVuIGl0IGVuY291bnRlcnMgYSBWTV9MT0NLRUQgdm1hIGFuZCBjYW4KK3N1Y2Nlc3NmdWxseSBhY3F1aXJlIHRoZSB2bWEncyBtbWFwIHNlbXBob3JlIGZvciByZWFkIGFuZCBtbG9jayB0aGUgcGFnZS4KK0FsdGhvdWdoIHRyeV90b19tdW5sb2NrKCkgY2FuIGJlIGNhbGxlZCBtYW55IFt2ZXJ5IG1hbnkhXSB0aW1lcyB3aGVuCittdW5sb2NrKClpbmcgYSBsYXJnZSByZWdpb24gb3IgdGVhcmluZyBkb3duIGEgbGFyZ2UgYWRkcmVzcyBzcGFjZSB0aGF0IGhhcyBiZWVuCittbG9ja2VkIHZpYSBtbG9ja2FsbCgpLCBvdmVyYWxsIHRoaXMgaXMgYSBmYWlybHkgcmFyZSBldmVudC4gIEluIGFkZGl0aW9uLAorYWx0aG91Z2ggc2hyaW5rX3BhZ2VfbGlzdCgpIGNhbGxzIHRyeV90b19tdW5sb2NrKCkgZm9yIGV2ZXJ5IGFub255bW91cyBwYWdlIHRoYXQKK2l0IGhhbmRsZXMgdGhhdCBpcyBub3QgeWV0IGluIHRoZSBzd2FwIGNhY2hlLCBvbiBhdmVyYWdlIGFub255bW91cyBwYWdlcyB3aWxsCitoYXZlIHZlcnkgc2hvcnQgcmV2ZXJzZSBtYXAgbGlzdHMuCisKK01sb2NrZWQgUGFnZTogIFBhZ2UgUmVjbGFpbSBpbiBzaHJpbmtfKl9saXN0KCkKKworc2hyaW5rX2FjdGl2ZV9saXN0KCkgY3VsbHMgYW55IG9idmlvdXNseSB1bmV2aWN0YWJsZSBwYWdlcy0taS5lLiwKKyFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKS0tZGl2ZXJ0aW5nIHRoZXNlIHRvIHRoZSB1bmV2aWN0YWJsZSBscnUKK2xpc3QuICBIb3dldmVyLCBzaHJpbmtfYWN0aXZlX2xpc3QoKSBvbmx5IHNlZXMgdW5ldmljdGFibGUgcGFnZXMgdGhhdAorbWFkZSBpdCBvbnRvIHRoZSBhY3RpdmUvaW5hY3RpdmUgbHJ1IGxpc3RzLiAgTm90ZSB0aGF0IHRoZXNlIHBhZ2VzIGRvIG5vdAoraGF2ZSBQYWdlVW5ldmljdGFibGUgc2V0LS1vdGhlcndpc2UsIHRoZXkgd291bGQgYmUgb24gdGhlIHVuZXZpY3RhYmxlIGxpc3QgYW5kCitzaHJpbmtfYWN0aXZlX2xpc3Qgd291bGQgbmV2ZXIgc2VlIHRoZW0uCisKK1NvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdW5ldmljdGFibGUgcGFnZXMgb24gdGhlIExSVSBsaXN0cyBhcmU6CisKKzEpIHJhbWZzIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHBsYWNlZCBvbiB0aGUgbHJ1IGxpc3RzIHdoZW4gZmlyc3QgYWxsb2NhdGVkLgorCisyKSBTSE1fTE9DS2VkIHNoYXJlZCBtZW1vcnkgcGFnZXMuICBzaG1jdGwoU0hNX0xPQ0spIGRvZXMgbm90IGF0dGVtcHQgdG8KKyAgIGFsbG9jYXRlIG9yIGZhdWx0IGluIHRoZSBwYWdlcyBpbiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24uICBUaGlzIGhhcHBlbnMKKyAgIHdoZW4gYW4gYXBwbGljYXRpb24gYWNjZXNzZXMgdGhlIHBhZ2UgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgU0hNX0xPQ0tpbmcKKyAgIHRoZSBzZWdtZW50LgorCiszKSBNbG9ja2VkIHBhZ2VzIHRoYXQgY291bGQgbm90IGJlIGlzb2xhdGVkIGZyb20gdGhlIGxydSBhbmQgbW92ZWQgdG8gdGhlCisgICB1bmV2aWN0YWJsZSBsaXN0IGluIG1sb2NrX3ZtYV9wYWdlKCkuCisKKzMpIFBhZ2VzIG1hcHBlZCBpbnRvIG11bHRpcGxlIFZNX0xPQ0tFRCB2bWFzLCBidXQgdHJ5X3RvX211bmxvY2soKSBjb3VsZG4ndAorICAgYWNxdWlyZSB0aGUgdm1hJ3MgbW1hcCBzZW1hcGhvcmUgdG8gdGVzdCB0aGUgZmxhZ3MgYW5kIHNldCBQYWdlTWxvY2tlZC4KKyAgIG11bmxvY2tfdm1hX3BhZ2UoKSB3YXMgZm9yY2VkIHRvIGxldCB0aGUgcGFnZSBiYWNrIG9uIHRvIHRoZSBub3JtYWwKKyAgIExSVSBsaXN0IGZvciB2bXNjYW4gdG8gaGFuZGxlLgorCitzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGFsc28gY3VsbHMgYW55IHVuZXZpY3RhYmxlIHBhZ2VzIHRoYXQgaXQgZmluZHMKK29uIHRoZSBpbmFjdGl2ZSBsaXN0cywgYWdhaW4gZGl2ZXJ0aW5nIHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIHpvbmUncyB1bmV2aWN0YWJsZQorbHJ1IGxpc3QuICBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIHNob3VsZCBvbmx5IHNlZSBTSE1fTE9DS2VkIHBhZ2VzIHRoYXQgYmVjYW1lCitTSE1fTE9DS2VkIGFmdGVyIHNocmlua19hY3RpdmVfbGlzdCgpIGhhZCBtb3ZlZCB0aGVtIHRvIHRoZSBpbmFjdGl2ZSBsaXN0LCBvcgorcGFnZXMgbWFwcGVkIGludG8gVk1fTE9DS0VEIHZtYXMgdGhhdCBtdW5sb2NrX3ZtYV9wYWdlKCkgY291bGRuJ3QgaXNvbGF0ZSBmcm9tCit0aGUgbHJ1IHRvIHJlY2hlY2sgdmlhIHRyeV90b19tdW5sb2NrKCkuICBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIHdvbid0IG5vdGljZQordGhlIGxhdHRlciwgYnV0IHdpbGwgcGFzcyBvbiB0byBzaHJpbmtfcGFnZV9saXN0KCkuCisKK3Nocmlua19wYWdlX2xpc3QoKSBhZ2FpbiBjdWxscyBvYnZpb3VzbHkgdW5ldmljdGFibGUgcGFnZXMgdGhhdCBpdCBjb3VsZAorZW5jb3VudGVyIGZvciBzaW1pbGFyIHJlYXNvbiB0byBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiAgQXMgYWxyZWFkeSBkaXNjdXNzZWQsCitzaHJpbmtfcGFnZV9saXN0KCkgcHJvYWN0aXZlbHkgbG9va3MgZm9yIGFub255bW91cyBwYWdlcyB0aGF0IHNob3VsZCBoYXZlCitQR19tbG9ja2VkIHNldCBidXQgZG9uJ3QtLXRoZXNlIHdvdWxkIG5vdCBiZSBkZXRlY3RlZCBieSBwYWdlX2V2aWN0YWJsZSgpLS10bworYXZvaWQgYWRkaW5nIHRoZW0gdG8gdGhlIHN3YXAgY2FjaGUgdW5uZWNlc3NhcmlseS4gIEZpbGUgcGFnZXMgbWFwcGVkIGludG8KK1ZNX0xPQ0tFRCB2bWFzIGJ1dCB3aXRob3V0IFBHX21sb2NrZWQgc2V0IHdpbGwgbWFrZSBpdCBhbGwgdGhlIHdheSB0bwordHJ5X3RvX3VubWFwKCkuICBzaHJpbmtfcGFnZV9saXN0KCkgd2lsbCBkaXZlcnQgdGhlbSB0byB0aGUgdW5ldmljdGFibGUgbGlzdCB3aGVuCit0cnlfdG9fdW5tYXAoKSByZXR1cm5zIFNXQVBfTUxPQ0ssIGFzIGRpc2N1c3NlZCBhYm92ZS4KKworVE9ETy9GSVhNRTogIElmIHdlIGNhbiBlbmhhbmNlIHRoZSBzd2FwIGNhY2hlIHRvIHJlbGlhYmx5IHJlbW92ZSBlbnRyaWVzCit3aXRoIHBhZ2VfY291bnQocGFnZSkgPiAyLCBhcyBsb25nIGFzIGFsbCBwdGVzIGFyZSBtYXBwZWQgdG8gdGhlIHBhZ2UgYW5kCitub3QgdGhlIHN3YXAgZW50cnksIHdlIGNhbiBwcm9iYWJseSByZW1vdmUgdGhlIGNhbGwgdG8gdHJ5X3RvX211bmxvY2soKSBpbgorc2hyaW5rX3BhZ2VfbGlzdCgpIGFuZCBqdXN0IHJlbW92ZSB0aGUgcGFnZSBmcm9tIHRoZSBzd2FwIGNhY2hlIHdoZW4KK3RyeV90b191bm1hcCgpIHJldHVybnMgU1dBUF9NTE9DSy4gICBDdXJyZW50bHksIHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKCkKK2RvZXNuJ3Qgc2VlbSB0byBhbGxvdyB0aGF0LgorCisKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTI3MDJiMC4uNWMzZjc5YyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAKIENQVSBGUkVRVUVOQ1kgRFJJVkVSUwogUDoJRGF2ZSBKb25lcwotTToJZGF2ZWpAY29kZW1vbmtleS5vcmcudWsKK006CWRhdmVqQHJlZGhhdC5jb20KIEw6CWNwdWZyZXFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL3Byb2plY3RzL2NwdWZyZXEvCiBUOglnaXQga2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZWovY3B1ZnJlcS5naXQKQEAgLTM5MzcsNyArMzkzNyw3IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLVNUQUJMRSBCUkFOQ0g6CitTVEFCTEUgQlJBTkNICiBQOglHcmVnIEtyb2FoLUhhcnRtYW4KIE06CWdyZWdAa3JvYWguY29tCiBQOglDaHJpcyBXcmlnaHQKQEAgLTM5NDUsNiArMzk0NSwxMyBAQAogTDoJc3RhYmxlQGtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorU1RBR0lORyBTVUJTWVNURU0KK1A6CUdyZWcgS3JvYWgtSGFydG1hbgorTToJZ3JlZ2toQHN1c2UuZGUKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZ3JlZ2toL2dyZWdraC0yLjYvCitTOglNYWludGFpbmVkCisKIFNUQVJGSVJFL0RVUkFMQU4gTkVUV09SSyBEUklWRVIKIFA6CUlvbiBCYWR1bGVzY3UKIE06CWlvbnV0QGNzLmNvbHVtYmlhLmVkdQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IGEwZjY0MmIuLjYxMTAxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTcwLDYgKzcwLDcgQEAKIAlkZWZhdWx0IHkKIAogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIAogbWVudSAiU3lzdGVtIHNldHVwIgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDE1ZmRhNDMuLmQwNjk1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTc0LDEyICs3NCwxNCBAQAogI2RlZmluZSBUSUZfVUFDX1NJR0JVUwkJNwogI2RlZmluZSBUSUZfTUVNRElFCQk4CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJOQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAvKiBXb3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuLiAgKi8KICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCShfVElGX1NJR1BFTkRJTkcgfCBfVElGX05FRURfUkVTQ0hFRCkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCmluZGV4IDA0ZGNjNWUuLjljZDhkY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwpAQCAtNjU1LDcgKzY1NSw3IEBACiAKIAljYXNlIDB4NzE6CQkJCQkvKiBSVENfUE9SVCgxKSAqLwogCQlydGNfYWNjZXNzLmluZGV4ID0gaW5kZXg7Ci0JCXJ0Y19hY2Nlc3MuZGF0YSA9IEJDRF9UT19CSU4oYik7CisJCXJ0Y19hY2Nlc3MuZGF0YSA9IGJjZDJiaW4oYik7CiAJCXJ0Y19hY2Nlc3MuZnVuY3Rpb24gPSAweDQ4ICsgIXdyaXRlOwkvKiBHRVQvUFVUX1RPWSAqLwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNjY4LDcgKzY2OCw3IEBACiAjZWxzZQogCQlfX21hcnZlbF9hY2Nlc3NfcnRjKCZydGNfYWNjZXNzKTsKICNlbmRpZgotCQlyZXQgPSBCSU5fVE9fQkNEKHJ0Y19hY2Nlc3MuZGF0YSk7CisJCXJldCA9IGJpbjJiY2QocnRjX2FjY2Vzcy5kYXRhKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwppbmRleCA5OWE3ZjE5Li5hNDU1NWY0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwpAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgaXJxX3N3aXp6bGVfdCAqc2FibGVfbHlueF9pcnFfc3dpenpsZTsKIAotc3RhdGljIHZvaWQgc2FibGVfbHlueF9pbml0X2lycShpbnQgbnJfaXJxcyk7CitzdGF0aWMgdm9pZCBzYWJsZV9seW54X2luaXRfaXJxKGludCBucl9vZl9pcnFzKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0FMUEhBX1NBQkxFKQogCkBAIC01MzAsMTEgKzUzMCwxMSBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQKLXNhYmxlX2x5bnhfaW5pdF9pcnEoaW50IG5yX2lycXMpCitzYWJsZV9seW54X2luaXRfaXJxKGludCBucl9vZl9pcnFzKQogewogCWxvbmcgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2ZfaXJxczsgKytpKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKIAkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZzYWJsZV9seW54X2lycV90eXBlOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCA3NTQ4MGNhLi5lNmEyMzE0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC0zNDYsMTIgKzM0NiwxMiBAQAogCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCiAJLyogUEMtbGlrZSBpcyBzdGFuZGFyZDsgdXNlZCBmb3IgeWVhciA+PSA3MCAqLwpAQCAtNTI1LDcgKzUyNSw3IEBACiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTU0Myw4ICs1NDMsOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDQ4NTNmOWQuLmRmMzlkMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTkyLDYgKzE5Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvdGltZS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC90aW1lLmgKaW5kZXggNDkyMTNkOS4uZDZkNTI1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC90aW1lLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC90aW1lLmgKQEAgLTQxLDcgKzQxLDcgQEAKIAkJcmV0dXJuIDEyMDAwMDAwMDA7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogd2FybmluZyB1bmtub3duIGZyZXF1ZW5jeSwgZGVmYXVsdGluZyB0byA4MDBNaHpcbiIsCi0JCQlfX0ZVTkNUSU9OX18pOworCQkJX19mdW5jX18pOwogCX0KIAogCXJldHVybiA4MDAwMDAwMDA7CkBAIC02MCw3ICs2MCw3IEBACiAJCXJldHVybiA0OwogCWRlZmF1bHQ6CiAJCXByaW50aygiJXM6IHdhcm5pbmcgdW5rbm93biByYXRpbywgZGVmYXVsdGluZyB0byAyXG4iLAotCQkJX19GVU5DVElPTl9fKTsKKwkJCV9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gMjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKaW5kZXggYjA2NTNhOC4uMzA0NTEzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCS51bm1hc2sJPSBpeGRwMngwMF9pcnFfdW5tYXNrCiB9OwogCi12b2lkIF9faW5pdCBpeGRwMngwMF9pbml0X2lycSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdGF0X3JlZywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbWFza19yZWcsIHVuc2lnbmVkIGxvbmcgbnJfaXJxcykKK3ZvaWQgX19pbml0IGl4ZHAyeDAwX2luaXRfaXJxKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnN0YXRfcmVnLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICptYXNrX3JlZywgdW5zaWduZWQgbG9uZyBucl9vZl9pcnFzKQogewogCXVuc2lnbmVkIGludCBpcnE7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAJYm9hcmRfaXJxX3N0YXQgPSBzdGF0X3JlZzsKIAlib2FyZF9pcnFfbWFzayA9IG1hc2tfcmVnOwotCWJvYXJkX2lycV9jb3VudCA9IG5yX2lycXM7CisJYm9hcmRfaXJxX2NvdW50ID0gbnJfb2ZfaXJxczsKIAogCSpib2FyZF9pcnFfbWFzayA9IDB4ZmZmZmZmZmY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCmluZGV4IGQzNTRlMGYuLmM0MGZjMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG5yX2lycXMgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfb2ZfaXJxcyA9IDA7CiAJdW5zaWduZWQgaW50IG5yX2JhbmtzID0gMDsKIAlpbnQgaTsKIApAQCAtMTMzLDE0ICsxMzMsMTQgQEAKIAogCQlvbWFwX2lycV9iYW5rX2luaXRfb25lKGJhbmspOwogCi0JCW5yX2lycXMgKz0gYmFuay0+bnJfaXJxczsKKwkJbnJfb2ZfaXJxcyArPSBiYW5rLT5ucl9pcnFzOwogCQlucl9iYW5rcysrOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIlRvdGFsIG9mICVsZCBpbnRlcnJ1cHRzIG9uICVkIGFjdGl2ZSBjb250cm9sbGVyJXNcbiIsCi0JICAgICAgIG5yX2lycXMsIG5yX2JhbmtzLCBucl9iYW5rcyA+IDEgPyAicyIgOiAiIik7CisJICAgICAgIG5yX29mX2lycXMsIG5yX2JhbmtzLCBucl9iYW5rcyA+IDEgPyAicyIgOiAiIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7IGkrKykgewogCQlzZXRfaXJxX2NoaXAoaSwgJm9tYXBfaXJxX2NoaXApOwogCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4X25hbmQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCmluZGV4IGViNGIxOTAuLmViMzVmY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCkBAIC00LDYgKzQsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAorc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyB7CisJdW5zaWduZWQgaW50CXRDSDsgIC8qIEVuYWJsZSBzaWduYWwgaG9sZCB0aW1lICovCisJdW5zaWduZWQgaW50CXRDUzsgIC8qIEVuYWJsZSBzaWduYWwgc2V0dXAgdGltZSAqLworCXVuc2lnbmVkIGludAl0V0g7ICAvKiBORF9uV0UgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0V1A7ICAvKiBORF9uV0UgcHVsc2UgdGltZSAqLworCXVuc2lnbmVkIGludAl0Ukg7ICAvKiBORF9uUkUgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0UlA7ICAvKiBORF9uUkUgcHVsc2Ugd2lkdGggKi8KKwl1bnNpZ25lZCBpbnQJdFI7ICAgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3IgcmVhZCAqLworCXVuc2lnbmVkIGludAl0V0hSOyAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciBzdGF0dXMgcmVhZCAqLworCXVuc2lnbmVkIGludAl0QVI7ICAvKiBORF9BTEUgbG93IHRvIE5EX25SRSBsb3cgZGVsYXkgKi8KK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgeworCXVpbnQxNl90CXJlYWQxOworCXVpbnQxNl90CXJlYWQyOworCXVpbnQxNl90CXByb2dyYW07CisJdWludDE2X3QJcmVhZF9zdGF0dXM7CisJdWludDE2X3QJcmVhZF9pZDsKKwl1aW50MTZfdAllcmFzZTsKKwl1aW50MTZfdAlyZXNldDsKKwl1aW50MTZfdAlsb2NrOworCXVpbnQxNl90CXVubG9jazsKKwl1aW50MTZfdAlsb2NrX3N0YXR1czsKK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCB7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdGltaW5nOyAvKiBOQU5EIEZsYXNoIHRpbWluZyAqLworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldDsKKworCXVpbnQzMl90IHBhZ2VfcGVyX2Jsb2NrOy8qIFBhZ2VzIHBlciBibG9jayAoUEdfUEVSX0JMSykgKi8KKwl1aW50MzJfdCBwYWdlX3NpemU7CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcyAoUEFHRV9TWikgKi8KKwl1aW50MzJfdCBmbGFzaF93aWR0aDsJLyogV2lkdGggb2YgRmxhc2ggbWVtb3J5IChEV0lEVEhfTSkgKi8KKwl1aW50MzJfdCBkZmNfd2lkdGg7CS8qIFdpZHRoIG9mIGZsYXNoIGNvbnRyb2xsZXIoRFdJRFRIX0MpICovCisJdWludDMyX3QgbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyBpbiBGbGFzaCAqLworCXVpbnQzMl90IGNoaXBfaWQ7Cit9OworCiBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSB7CiAKIAkvKiB0aGUgZGF0YSBmbGFzaCBidXMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFN0YXRpYyBNZW1vcnkKQEAgLTEyLDggKzQ5LDExIEBACiAJICovCiAJaW50CWVuYWJsZV9hcmJpdGVyOwogCi0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCXVuc2lnbmVkIGludAlucl9wYXJ0czsKKwljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkJKnBhcnRzOworCXVuc2lnbmVkIGludAkJCQlucl9wYXJ0czsKKworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqIAlmbGFzaDsKKwlzaXplX3QJCQkJCW51bV9mbGFzaDsKIH07CiAKIGV4dGVybiB2b2lkIHB4YTN4eF9zZXRfbmFuZF9pbmZvKHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdG9zYS5oCmluZGV4IGE3MjgwM2YuLjhiY2U2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3Rvc2EuaApAQCAtNTksOCArNTksNiBAQAogICogVEM2MzkzWEIgR1BJT3MKICAqLwogI2RlZmluZSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRQkJKE5SX0JVSUxUSU5fR1BJTyArIDIgKiAxMikKLSNkZWZpbmUgVE9TQV9UQzYzOTNYQl9HUElPKGkpCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAoaSkpCi0jZGVmaW5lIFRPU0FfVEM2MzkzWEJfR1BJT19CSVQoZ3BpbykJKDEgPDwgKGdwaW8gLSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSkpCiAKICNkZWZpbmUgVE9TQV9HUElPX1RHX09OCQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMCkKICNkZWZpbmUgVE9TQV9HUElPX0xfTVVURQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96eWxvbml0ZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmgKaW5kZXggMGQzNWNhMC4uYmY2Nzg1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmgKQEAgLTMwLDcgKzMwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB6eWxvbml0ZV9weGEzMDBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhMzAwKCkgfHwgY3B1X2lzX3B4YTMxMCgpKQotCQlwYW5pYygiJXM6IFBYQTMwMC9QWEEzMTAgbm90IHN1cHBvcnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcGFuaWMoIiVzOiBQWEEzMDAvUFhBMzEwIG5vdCBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIH0KICNlbmRpZgogCkBAIC00MCw3ICs0MCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgenlsb25pdGVfcHhhMzIwX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2lzX3B4YTMyMCgpKQotCQlwYW5pYygiJXM6IFBYQTMyMCBub3Qgc3VwcG9ydGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwYW5pYygiJXM6IFBYQTMyMCBub3Qgc3VwcG9ydGVkXG4iLCBfX2Z1bmNfXyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IDEzMGUzN2UuLmE2YzQ2OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKQEAgLTcwNiwxNiArNzA2LDM5IEBACiAJLmJhZGJsb2NrX3BhdHRlcm4gPSAmdG9zYV90YzYzOTN4Yl9uYW5kX2JidCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB0b3NhX3RjNjM5M3hiX3NldHVwID0geworc3RhdGljIGludCB0b3NhX3RjNjM5M3hiX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fQ0FSRF9WQ0NfT04sICJDQVJEX1ZDQ19PTiIpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVxOworCisJcmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX0NBUkRfVkNDX09OLCAxKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2RpcjsKKworCXJldHVybiByYzsKKworZXJyX2RpcjoKKwlncGlvX2ZyZWUoVE9TQV9HUElPX0NBUkRfVkNDX09OKTsKK2Vycl9yZXE6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCB0b3NhX3RjNjM5M3hiX3RlYXJkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoVE9TQV9HUElPX0NBUkRfVkNDX09OKTsKK30KKworc3RhdGljIHN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhIHRvc2FfdGM2MzkzeGJfZGF0YSA9IHsKIAkuc2NyX3BsbDJjcgk9IDB4MGNjMSwKIAkuc2NyX2dwZXIJPSAweDMzMDAsCi0JLnNjcl9ncG9fZHNyCT0KLQkJVE9TQV9UQzYzOTNYQl9HUElPX0JJVChUT1NBX0dQSU9fQ0FSRF9WQ0NfT04pLAotCS5zY3JfZ3BvX2RvZWNyCT0KLQkJVE9TQV9UQzYzOTNYQl9HUElPX0JJVChUT1NBX0dQSU9fQ0FSRF9WQ0NfT04pLAogCiAJLmlycV9iYXNlCT0gSVJRX0JPQVJEX1NUQVJULAogCS5ncGlvX2Jhc2UJPSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSwKKwkuc2V0dXAJCT0gdG9zYV90YzYzOTN4Yl9zZXR1cCwKKwkudGVhcmRvd24JPSB0b3NhX3RjNjM5M3hiX3RlYXJkb3duLAogCiAJLmVuYWJsZQkJPSB0b3NhX3RjNjM5M3hiX2VuYWJsZSwKIAkuZGlzYWJsZQk9IHRvc2FfdGM2MzkzeGJfZGlzYWJsZSwKQEAgLTcyMyw2ICs3NDYsOCBAQAogCS5yZXN1bWUJCT0gdG9zYV90YzYzOTN4Yl9yZXN1bWUsCiAKIAkubmFuZF9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfbmFuZF9jb25maWcsCisKKwkucmVzdW1lX3Jlc3RvcmUgPSAxLAogfTsKIAogCkBAIC03MzAsNyArNzU1LDcgQEAKIAkubmFtZQk9ICJ0YzYzOTN4YiIsCiAJLmlkCT0gLTEsCiAJLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdG9zYV90YzYzOTN4Yl9zZXR1cCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdG9zYV90YzYzOTN4Yl9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjNjM5M3hiX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gdGM2MzkzeGJfcmVzb3VyY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzk5YzhmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaWRlLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggSHVnbyBGaWVubmVzICYgTmljb2xhcyBQaXRyZQotICoKLSAqIDE4LWF1Zy0yMDAwOiBDbGVhbnVwIGJ5IEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkKLSAqICAgICAgICAgICAgICBHZXQgcmlkIG9mIHRoZSBzcGVjaWFsIGlkZV9pbml0X2h3aWZfcG9ydHMoKSBmdW5jdGlvbnMKLSAqICAgICAgICAgICAgICBhbmQgbWFrZSBhIGdlbmVyYWxpc2VkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsCi0gKiAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jZXJyb3IgIlRoaXMgY29kZSBpcyBicm9rZW4gYW5kIG5lZWRzIHVwZGF0ZSB0byBtYXRjaCB3aXRoIGN1cnJlbnQgaWRlIHN1cHBvcnQiCi0KLQotLyoKLSAqIFNldCB1cCBhIGh3IHN0cnVjdHVyZSBmb3IgYSBzcGVjaWZpZWQgZGF0YSBwb3J0LCBjb250cm9sIHBvcnQgYW5kIElSUS4KLSAqIFRoaXMgc2hvdWxkIGZvbGxvdyB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdXNlcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGFfcG9ydDsKLQlpbnQgaTsKLQlpbnQgcmVnaW5jciA9IDE7Ci0KLQkvKiBUaGUgRW1wZWcgYm9hcmQgaGFzIHRoZSBmaXJzdCB0d28gYWRkcmVzcyBsaW5lcyB1bnVzZWQgKi8KLQlpZiAobWFjaGluZV9pc19lbXBlZygpKQotCQlyZWdpbmNyID0gMSA8PCAyOwotCi0JLyogVGhlIExBUlQgZG9lc24ndCB1c2UgQTAgZm9yIElERSAqLwotCWlmIChtYWNoaW5lX2lzX2xhcnQoKSkKLQkJcmVnaW5jciA9IDEgPDwgMTsKLQotCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOwotCi0JZm9yIChpID0gMDsgaSA8PSA3OyBpKyspIHsKLQkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnOwotCQlyZWcgKz0gcmVnaW5jcjsKLQl9Ci0KLQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxKQotCQkqaXJxID0gMDsKLX0KLQotLyoKLSAqIFRoaXMgcmVnaXN0ZXJzIHRoZSBzdGFuZGFyZCBwb3J0cyBmb3IgdGhpcyBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgSURFCi0gKiBkcml2ZXIuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWlkZV9pbml0X2RlZmF1bHRfaHdpZnModm9pZCkKLXsKLSAgICBpZiAobWFjaGluZV9pc19sYXJ0KCkpIHsKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0xBUlQKLSAgICAgICAgaHdfcmVnc190IGh3OwotCi0gICAgICAgIC8qIEVuYWJsZSBHUElPIGFzIGludGVycnVwdCBsaW5lICovCi0gICAgICAgIEdQRFIgJj0gfkxBUlRfR1BJT19JREU7Ci0Jc2V0X2lycV90eXBlKExBUlRfSVJRX0lERSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0gICAgICAgIC8qIHNldCBQQ01DSUEgaW50ZXJmYWNlIHRpbWluZyAqLwotICAgICAgICBNRUNSID0gMHgwMDA2MDAwNjsKLQotICAgICAgICAvKiBpbml0IHRoZSBpbnRlcmZhY2UgKi8KLQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgUENNQ0lBX0lPXzBfQkFTRSArIDB4MDAwMCwgUENNQ0lBX0lPXzBfQkFTRSArIDB4MTAwMCwgTlVMTCk7Ci0gICAgICAgIGh3LmlycSA9IExBUlRfSVJRX0lERTsKLSAgICAgICAgaWRlX3JlZ2lzdGVyX2h3KCZodyk7Ci0jZW5kaWYKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTcyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggU2FzY2hhIEhhdWVyLCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTkFORF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTkFORF9ICisKK3N0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgd2lkdGg7CS8qIGRhdGEgYnVzIHdpZHRoIGluIGJ5dGVzICovCisJaW50IGh3X2VjYzsJLyogMCBpZiBzdXByZXNzIGhhcmR3YXJlIEVDQyAqLworfTsKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX05BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbmVuYW5kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaAppbmRleCBkNTdmMjAyLi40NjQ5ZDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaApAQCAtMTYsNiArMTYsMTAgQEAKIAlpbnQJCQlncGlvX2lycTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CiAJaW50CQkJbnJfcGFydHM7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgKCpvbmVuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKik7CisJaW50ICAgICAgICAgICAgICAgICAgICAgKCpvbmVuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKiwgaW50IGZyZXEpOwogCWludAkJCWRtYV9jaGFubmVsOwogfTsKKworaW50IG9tYXAyX29uZW5hbmRfcmVwaGFzZSh2b2lkKTsKKworI2RlZmluZSBPTkVOQU5EX01BWF9QQVJUSVRJT05TIDgKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCA3YzIzOWE5Li4zM2E1YjI5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC03Miw2ICs3Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIGFuZCBmZWF0dXJlcyIKIAogc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDI5NGIyNWYuLjQ0NDJmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk2LDYgKzk2LDcgQEAKICNkZWZpbmUgX1RJRl9NRU1ESUUJCSgxIDw8IFRJRl9NRU1ESUUpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfQ1BVX0dPSU5HX1RPX1NMRUVQICgxIDw8IFRJRl9DUFVfR09JTkdfVE9fU0xFRVApCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQogCiAvKiBOb3RlOiBUaGUgbWFza3MgYmVsb3cgbXVzdCBuZXZlciBzcGFuIG1vcmUgdGhhbiAxNiBiaXRzISAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYwppbmRleCBjMzZhNmQ1Li4zMTA0NzdiIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCXN0cnVjdCBlaWMgKmVpYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CiAJdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IG5yX2lycXM7CisJdW5zaWduZWQgaW50IG5yX29mX2lycXM7CiAJdW5zaWduZWQgaW50IGludF9pcnE7CiAJaW50IHJldDsKIAl1MzIgcGF0dGVybjsKQEAgLTIyNCw3ICsyMjQsNyBAQAogCWVpY193cml0ZWwoZWljLCBJRFIsIH4wVUwpOwogCWVpY193cml0ZWwoZWljLCBNT0RFLCB+MFVMKTsKIAlwYXR0ZXJuID0gZWljX3JlYWRsKGVpYywgTU9ERSk7Ci0JbnJfaXJxcyA9IGZscyhwYXR0ZXJuKTsKKwlucl9vZl9pcnFzID0gZmxzKHBhdHRlcm4pOwogCiAJLyogVHJpZ2dlciBvbiBsb3cgbGV2ZWwgdW5sZXNzIG92ZXJyaWRkZW4gYnkgZHJpdmVyICovCiAJZWljX3dyaXRlbChlaWMsIEVER0UsIDBVTCk7CkBAIC0yMzIsNyArMjMyLDcgQEAKIAogCWVpYy0+Y2hpcCA9ICZlaWNfY2hpcDsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2ZfaXJxczsgaSsrKSB7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihlaWMtPmZpcnN0X2lycSArIGksICZlaWNfY2hpcCwKIAkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2NoaXBfZGF0YShlaWMtPmZpcnN0X2lycSArIGksIGVpYyk7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJIGVpYy0+cmVncywgaW50X2lycSk7CiAJZGV2X2luZm8oJnBkZXYtPmRldiwKIAkJICJIYW5kbGluZyAldSBleHRlcm5hbCBJUlFzLCBzdGFydGluZyB3aXRoIElSUSAldVxuIiwKLQkJIG5yX2lycXMsIGVpYy0+Zmlyc3RfaXJxKTsKKwkJIG5yX29mX2lycXMsIGVpYy0+Zmlyc3RfaXJxKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggODEwMmM3OS4uMjllNzFlZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNjQsOCArNjQsMTEgQEAKIAlkZXBlbmRzIG9uIE9QUk9GSUxFCiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgorCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMiCiAKIGNvbW1lbnQgIlByb2Nlc3NvciBhbmQgQm9hcmQgU2V0dGluZ3MiCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9LY29uZmlnCmluZGV4IDkzODlkMzguLjA3MzM1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnCkBAIC02Miw2ICs2Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkdlbmVyYWwgc2V0dXAiCiAKIHNvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvTWFrZWZpbGUgYi9hcmNoL2NyaXMvTWFrZWZpbGUKaW5kZXggODM4Y2QyYS4uYzZmNWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsOCBAQAogIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAjIGZvciBtb3JlIGRldGFpbHMuCiAKK0tCVUlMRF9ERUZDT05GSUcgOj0gZXRyYXgtMTAwbHhfdjJfZGVmY29uZmlnCisKIGFyY2gteSA6PSB2MTAKIGFyY2gtJChDT05GSUdfRVRSQVhfQVJDSF9WMTApIDo9IHYxMAogYXJjaC0kKENPTkZJR19FVFJBWF9BUkNIX1YzMikgOj0gdjMyCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCAwOGQ5NDNjLi42ZmUwZmZhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGFzZmxhZ3MteSArPSAkKExJTlVYSU5DTFVERSkKIGNjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlCmluZGV4IDA3Njg4ZGEuLjgyYWI1OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGNjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCiBhc2ZsYWdzLXkgKz0gJChMSU5VWElOQ0xVREUpCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvcmVzY3VlLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvcmVzY3VlLmxkcwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogb2JqLSQoQ09ORklHX0VUUkFYX0FYSVNGTEFTSE1BUCkgPSBoZWFkLm8KIE9CSkVDVCA6PSAkKG9iaikvaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvcmVzY3VlLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCmluZGV4IGM5YWEzOTAuLjNiZGZhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpAQCAtMjk1LDEyICsyOTUsMTIgQEAKIAkJCWVsc2UKIAkJCQl5cnMgLT0gMTkwMDsJLyogUlRDICg3MCwgNzEsIC4uLiA5OSkgKi8KIAotCQkJQklOX1RPX0JDRChzZWMpOwotCQkJQklOX1RPX0JDRChtaW4pOwotCQkJQklOX1RPX0JDRChocnMpOwotCQkJQklOX1RPX0JDRChkYXkpOwotCQkJQklOX1RPX0JDRChtb24pOwotCQkJQklOX1RPX0JDRCh5cnMpOworCQkJc2VjID0gYmluMmJjZChzZWMpOworCQkJbWluID0gYmluMmJjZChtaW4pOworCQkJaHJzID0gYmluMmJjZChocnMpOworCQkJZGF5ID0gYmluMmJjZChkYXkpOworCQkJbW9uID0gYmluMmJjZChtb24pOworCQkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCQlDTU9TX1dSSVRFKHlycywgUlRDX1lFQVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IDg3NjlkYzkuLjFlOTBjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkgICAgICAgImluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciBndWFyYW50ZWVkIVxuIiwgUENGODU2M19OQU1FKTsKIAl9CiAKLQl0bS0+dG1feWVhciAgPSBCQ0RfVE9fQklOKHRtLT50bV95ZWFyKSArCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbih0bS0+dG1feWVhcikgKwogCQkgICAgICAgKCh0bS0+dG1fbW9uICYgMHg4MCkgPyAxMDAgOiAwKTsKIAl0bS0+dG1fc2VjICAmPSAweDdGOwogCXRtLT50bV9taW4gICY9IDB4N0Y7CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCXRtLT50bV93ZGF5ICY9IDB4MDc7IC8qIE5vdCBjb2RlZCBpbiBCQ0QuICovCiAJdG0tPnRtX21vbiAgJj0gMHgxRjsKIAotCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tb24pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKIAl0bS0+dG1fbW9uLS07IC8qIE1vbnRoIGlzIDEuLjEyIGluIFJUQyBidXQgMC4uMTEgaW4gbGludXggKi8KIH0KIApAQCAtMjgyLDEyICsyODIsMTIgQEAKIAkJY2VudHVyeSA9ICh0bS50bV95ZWFyID49IDIwMDApID8gMHg4MCA6IDA7CiAJCXRtLnRtX3llYXIgPSB0bS50bV95ZWFyICUgMTAwOwogCi0JCUJJTl9UT19CQ0QodG0udG1feWVhcik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbW9uKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tZGF5KTsKLQkJQklOX1RPX0JDRCh0bS50bV9ob3VyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9taW4pOwotCQlCSU5fVE9fQkNEKHRtLnRtX3NlYyk7CisJCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOworCQl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CisJCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKKwkJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOworCQl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJCXRtLnRtX21vbiB8PSBjZW50dXJ5OwogCiAJCW11dGV4X2xvY2soJnJ0Y19sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGQ2MzM1ZjIuLjVhMWIzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCiBjY2ZsYWdzLXkgKz0gLU8yIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlCmluZGV4IDQ0YWUwYWQuLjU2NmFhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAJCS1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAogYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaC9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIExEID0gZ2NjLWNyaXMgLW1saW51eCAtbWFyY2g9djMyIC1ub3N0ZGxpYgotbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChvYmopL3Jlc2N1ZS5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL3Jlc2N1ZS5sZHMKIExEUE9TVEZMQUdTID0gLWxnY2MKIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIG9iai0kKENPTkZJR19FVFJBWF9BWElTRkxBU0hNQVApID0gaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvcmVzY3VlLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggZjI2M2FiNS4uZjQ0Nzg1MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCSAgICAgICAiaW5mb3JtYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQhXG4iLCBQQ0Y4NTYzX05BTUUpOwogCX0KIAotCXRtLT50bV95ZWFyICA9IEJDRF9UT19CSU4odG0tPnRtX3llYXIpICsKKwl0bS0+dG1feWVhciAgPSBiY2QyYmluKHRtLT50bV95ZWFyKSArCiAJCSAgICAgICAoKHRtLT50bV9tb24gJiAweDgwKSA/IDEwMCA6IDApOwogCXRtLT50bV9zZWMgICY9IDB4N0Y7CiAJdG0tPnRtX21pbiAgJj0gMHg3RjsKQEAgLTEyNywxMSArMTI3LDExIEBACiAJdG0tPnRtX3dkYXkgJj0gMHgwNzsgLyogTm90IGNvZGVkIGluIEJDRC4gKi8KIAl0bS0+dG1fbW9uICAmPSAweDFGOwogCi0JQkNEX1RPX0JJTih0bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9taW4pOwotCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4odG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4odG0tPnRtX21vbik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pOwogCXRtLT50bV9tb24tLTsgLyogTW9udGggaXMgMS4uMTIgaW4gUlRDIGJ1dCAwLi4xMSBpbiBsaW51eCAqLwogfQogCkBAIC0yNzksMTIgKzI3OSwxMiBAQAogCQljZW50dXJ5ID0gKHRtLnRtX3llYXIgPj0gMjAwMCkgPyAweDgwIDogMDsKIAkJdG0udG1feWVhciA9IHRtLnRtX3llYXIgJSAxMDA7CiAKLQkJQklOX1RPX0JDRCh0bS50bV95ZWFyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tb24pOwotCQlCSU5fVE9fQkNEKHRtLnRtX21kYXkpOwotCQlCSU5fVE9fQkNEKHRtLnRtX2hvdXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21pbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fc2VjKTsKKwkJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CisJCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKKwkJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOworCQl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CisJCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAkJdG0udG1fbW9uIHw9IGNlbnR1cnk7CiAKIAkJbXV0ZXhfbG9jaygmcnRjX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FydHBlY18zX2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2FydHBlY18zX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FydHBlY18zX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvYXJ0cGVjXzNfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvYXJjaC12MTAvZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF9kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9kZWZjb25maWcgYi9hcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF92Ml9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X3YyX2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2V0cmF4ZnNfZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXhmc19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9ldHJheGZzX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXhmc19kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKaW5kZXggZmY0YzZhYS4uMDc0ZmU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTE0Miw4ICsxNDIsOCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcyxSVENfTUlOVVRFUyk7CiAJfSBlbHNlIHsKQEAgLTE3MCwxMiArMTcwLDEyIEBACiAJbW9uID0gQ01PU19SRUFEKFJUQ19NT05USCk7CiAJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CiAKLQlCQ0RfVE9fQklOKHNlYyk7Ci0JQkNEX1RPX0JJTihtaW4pOwotCUJDRF9UT19CSU4oaG91cik7Ci0JQkNEX1RPX0JJTihkYXkpOwotCUJDRF9UT19CSU4obW9uKTsKLQlCQ0RfVE9fQklOKHllYXIpOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAogCWlmICgoeWVhciArPSAxOTAwKSA8IDE5NzApCiAJCXllYXIgKz0gMTAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggYTVhYWMxYi4uOWQxNTUyYSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC02Niw2ICs2Niw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiRnVqaXRzdSBGUi1WIHN5c3RlbSBzZXR1cCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IGM3OTY2NzQuLmJkMTk5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTkwLDYgKzkwLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogc291cmNlICJhcmNoL2g4MzAwL0tjb25maWcuY3B1IgogCiBtZW51ICJFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cyIKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBhYWZkNGQzLi43MDAwMTRkIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04OSw2ICs4OSw3IEBACiAJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJNAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTUJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKQEAgLTk2LDYgKzk3LDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggM2I3YWEzOC4uOTEyYzU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTcsNiArNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAogY29uZmlnIElBNjQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDQ5NTZiZTQuLmQ5OGYwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMjA3MCwxNCArMjA3MCwxMyBAQAogCWlmICghaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDEiKSAmJiAhaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDFfc3dpb3RsYiIpKQogCQlyZXR1cm4gMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgJiYgZGVmaW5lZChDT05GSUdfQ1JBU0hfRFVNUCkgJiYgXAotICAgICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykKIAkvKiBJZiB3ZSBhcmUgYm9vdGluZyBhIGtkdW1wIGtlcm5lbCwgdGhlIHNiYV9pb21tdSB3aWxsCiAJICogY2F1c2UgZGV2aWNlcyB0aGF0IHdlcmUgbm90IHNodXRkb3duIHByb3Blcmx5IHRvIE1DQQogCSAqIGFzIHNvb24gYXMgdGhleSBhcmUgdHVybmVkIGJhY2sgb24uICBPdXIgb25seSBvcHRpb24gZm9yCiAJICogYSBzdWNjZXNzZnVsIGtkdW1wIGtlcm5lbCBib290IGlzIHRvIHVzZSB0aGUgc3dpb3RsYi4KIAkgKi8KLQlpZiAoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkgeworCWlmIChpc19rZHVtcF9rZXJuZWwoKSkgewogCQlpZiAoc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoNjQgKiAoMTw8MjApKSAhPSAwKQogCQkJcGFuaWMoIlVuYWJsZSB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEI6IgogCQkJCSAgIiBUcnkgbWFjaHZlYz1kaWcgYm9vdCBvcHRpb24iKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCAwMTQ5MDk3Li5jZTM0MmZiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BjaS5oCkBAIC05NSwxNiArOTUsOCBAQAogCQkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOwogI2RlZmluZSBIQVZFX1BDSV9MRUdBQ1kKIGV4dGVybiBpbnQgcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1leHRlcm4gc3NpemVfdCBwY2lfcmVhZF9sZWdhY3lfaW8oc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCk7Ci1leHRlcm4gc3NpemVfdCBwY2lfd3JpdGVfbGVnYWN5X2lvKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQkgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCk7Ci1leHRlcm4gaW50IHBjaV9tbWFwX2xlZ2FjeV9tZW0oc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSk7CiAKICNkZWZpbmUgcGNpX2dldF9sZWdhY3lfbWVtIHBsYXRmb3JtX3BjaV9nZXRfbGVnYWN5X21lbQogI2RlZmluZSBwY2lfbGVnYWN5X3JlYWQgcGxhdGZvcm1fcGNpX2xlZ2FjeV9yZWFkCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IGRhNjBlOTAuLjIzZTkxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC04LDEwICs4LDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggNTFiNzVjZS4uZWZhZmYxNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC0xMzM1LDcgKzEzMzUsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyogbG9jYXRlIHRoZSBzaXplIGZpbmQgYSB0aGUgZGVzY3JpcHRvciBhdCBhIGNlcnRhaW4gYWRkcmVzcyAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQKIHZtY29yZV9maW5kX2Rlc2NyaXB0b3Jfc2l6ZSAodW5zaWduZWQgbG9uZyBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGRlNjM2YjIuLjkxNmJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisjaWZkZWYgQ09ORklHX0NSQVNIX0tFUk5FTAogCWlmIChyZXNlcnZlX2VsZmNvcmVoZHIoJnJzdmRfcmVnaW9uW25dLnN0YXJ0LAogCQkJICAgICAgICZyc3ZkX3JlZ2lvbltuXS5lbmQpID09IDApCiAJCW4rKzsKQEAgLTQ3OCw3ICs0NzgsMTIgQEAKIH0KIGVhcmx5X3BhcmFtKCJub21jYSIsIHNldHVwX25vbWNhKTsKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorLyoKKyAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UKKyAqIGlmZGVmIGl0IHVuZGVyIENPTkZJR19DUkFTSF9EVU1QIGFuZCBub3QgQ09ORklHX1BST0NfVk1DT1JFLgorICovCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIC8qIGVsZmNvcmVoZHI9IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZWxmIGNvcmUgaGVhZGVyCiAgKiBzdG9yZWQgYnkgdGhlIGNyYXNoZWQga2VybmVsLgogICovCkBAIC01MDIsMTEgKzUwNywxMSBAQAogCSAqIHRvIHdvcmsgcHJvcGVybHkuCiAJICovCiAKLQlpZiAoZWxmY29yZWhkcl9hZGRyID49IEVMRkNPUkVfQUREUl9NQVgpCisJaWYgKCFpc192bWNvcmVfdXNhYmxlKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChsZW5ndGggPSB2bWNvcmVfZmluZF9kZXNjcmlwdG9yX3NpemUoZWxmY29yZWhkcl9hZGRyKSkgPT0gMCkgewotCQllbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCQl2bWNvcmVfdW51c2FibGUoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW5pdC5jIGIvYXJjaC9pYTY0L21tL2luaXQuYwppbmRleCBmNDgyYTkwLi4wNTRiY2Q5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKQEAgLTcwMCwyMyArNzAwLDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMTIwICogSFo7Ci0JaW50IHJldDsKLQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCWVuZF9wZm4gPSBzdGFydF9wZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgdGltZW91dCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JLyogd2UgY2FuIGZyZWUgbWVtX21hcCBhdCB0aGlzIHBvaW50ICovCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDc1NDUwMzcuLjIxMWZjZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtNjE0LDEyICs2MTQsMTcgQEAKICAqIHZlY3RvciB0byBnZXQgdGhlIGJhc2UgYWRkcmVzcy4KICAqLwogaW50Ci1wY2lfbW1hcF9sZWdhY3lfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3BjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKIAlwZ3Byb3RfdCBwcm90OwogCWNoYXIgKmFkZHI7CiAKKwkvKiBXZSBvbmx5IHN1cHBvcnQgbW1hcCdpbmcgb2YgbGVnYWN5IG1lbW9yeSBzcGFjZSAqLworCWlmIChtbWFwX3N0YXRlICE9IHBjaV9tbWFwX21lbSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKIAkvKgogCSAqIEF2b2lkIGF0dHJpYnV0ZSBhbGlhc2luZy4gIFNlZSBEb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmcudHh0CiAJICogZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggMDAyODljMS4uZGJhZWQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTQyLDYgKzQyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKaW5kZXggZmMyOTk0OC4uMzljYjZkYSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKQEAgLTQwLDYgKzQwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDY3N2M5M2EuLjgzNmZiNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC02Miw2ICs2Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cCIKIAogY29uZmlnIEVJU0EKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYyBiL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYwppbmRleCA4MDhjOTAxLi5jNTBiZWM4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKKysrIGIvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CS8qIEZvciBzdHJ1Y3QgcnRjX3RpbWUgYW5kIGlvY3RscywgZXRjICovCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxhc20vYnZtZTYwMDBody5oPgogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9LY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwppbmRleCAwYTg5OTgzLi43NmI2NmZlIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9LY29uZmlnCisrKyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKQEAgLTc1LDYgKzc1LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBjOWJjMDkuLjgyNTI5ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODQsMTIgKzg0LDE0IEBACiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkzCS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZwogCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTQKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGI5MDU3NDQuLjVmMTQ5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xODg1LDYgKzE4ODUsOCBAQAogCSAgYWRkIGluaXRyZCBvciBpbml0cmFtZnMgaW1hZ2UgdG8gdGhlIGtlcm5lbCBpbWFnZS4KIAkgIE90aGVyd2lzZSwgc2F5IE4uCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKSIKIAogY29uZmlnIEhXX0hBU19FSVNBCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3RpbWUuYyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCmluZGV4IDM5NjVmZGEuLjEzNTljMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCkBAIC00NSwxMiArNDUsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQkJbWluID0gQkNEMkJJTihtaW4pOwotCQlob3VyID0gQkNEMkJJTihob3VyKTsKLQkJZGF5ID0gQkNEMkJJTihkYXkpOwotCQltb24gPSBCQ0QyQklOKG1vbik7Ci0JCXllYXIgPSBCQ0QyQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAKIAl5ZWFyICs9IHJlYWxfeWVhciAtIDcyICsgMjAwMDsKQEAgLTgzLDcgKzgzLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCWNtb3NfbWludXRlcyA9IEJDRDJCSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtOTksOCArOTksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCXJlYWxfc2Vjb25kcyA9IEJJTjJCQ0QocmVhbF9zZWNvbmRzKTsKLQkJCXJlYWxfbWludXRlcyA9IEJJTjJCQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmgKaW5kZXggY2RjMzc5YS4uMTk5YjQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWMxNDY4MTgtdGltZS5oCkBAIC00NCw3ICs0NCw3IEBACiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTYwLDggKzYwLDggQEAKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7CiAJCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfbWludXRlcyk7CisJCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCQlyZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAJCX0KIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKQEAgLTEwMywxMiArMTAzLDEyIEBACiAJfSB3aGlsZSAoc2VjICE9IENNT1NfUkVBRChSVENfU0VDT05EUykpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAJeWVhciA9IG1jMTQ2ODE4X2RlY29kZV95ZWFyKHllYXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKaW5kZXggNjUzN2Q5MC4uMmQzYzBkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCkBAIC03OSwxNCArNzksMTQgQEAKIAkvKiBTdG9wIHRoZSB1cGRhdGUgdG8gdGhlIHRpbWUgKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4NDA7CiAKLQl5ZWFyID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+eWVhcik7Ci0JeWVhciArPSBCQ0QyQklOKG00OHQzN19iYXNlLT5jZW50dXJ5KSAqIDEwMDsKKwl5ZWFyID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+eWVhcik7CisJeWVhciArPSBiY2QyYmluKG00OHQzN19iYXNlLT5jZW50dXJ5KSAqIDEwMDsKIAotCW1vbnRoID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+bW9udGgpOwotCWRheSA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPmRhdGUpOwotCWhvdXIgPSBCQ0QyQklOKG00OHQzN19iYXNlLT5ob3VyKTsKLQltaW4gPSBCQ0QyQklOKG00OHQzN19iYXNlLT5taW4pOwotCXNlYyA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPnNlYyk7CisJbW9udGggPSBiY2QyYmluKG00OHQzN19iYXNlLT5tb250aCk7CisJZGF5ID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+ZGF0ZSk7CisJaG91ciA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPmhvdXIpOworCW1pbiA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPm1pbik7CisJc2VjID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+c2VjKTsKIAogCS8qIFN0YXJ0IHRoZSB1cGRhdGUgdG8gdGhlIHRpbWUgYWdhaW4gKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4MDA7CkBAIC0xMTMsMjIgKzExMywyMiBAQAogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHg4MDsKIAogCS8qIHllYXIgKi8KLQltNDh0MzdfYmFzZS0+eWVhciA9IEJJTjJCQ0QodG0udG1feWVhciAlIDEwMCk7Ci0JbTQ4dDM3X2Jhc2UtPmNlbnR1cnkgPSBCSU4yQkNEKHRtLnRtX3llYXIgLyAxMDApOworCW00OHQzN19iYXNlLT55ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyICUgMTAwKTsKKwltNDh0MzdfYmFzZS0+Y2VudHVyeSA9IGJpbjJiY2QodG0udG1feWVhciAvIDEwMCk7CiAKIAkvKiBtb250aCAqLwotCW00OHQzN19iYXNlLT5tb250aCA9IEJJTjJCQ0QodG0udG1fbW9uKTsKKwltNDh0MzdfYmFzZS0+bW9udGggPSBiaW4yYmNkKHRtLnRtX21vbik7CiAKIAkvKiBkYXkgKi8KLQltNDh0MzdfYmFzZS0+ZGF0ZSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CisJbTQ4dDM3X2Jhc2UtPmRhdGUgPSBiaW4yYmNkKHRtLnRtX21kYXkpOwogCiAJLyogaG91ci9taW4vc2VjICovCi0JbTQ4dDM3X2Jhc2UtPmhvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOwotCW00OHQzN19iYXNlLT5taW4gPSBCSU4yQkNEKHRtLnRtX21pbik7Ci0JbTQ4dDM3X2Jhc2UtPnNlYyA9IEJJTjJCQ0QodG0udG1fc2VjKTsKKwltNDh0MzdfYmFzZS0+aG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CisJbTQ4dDM3X2Jhc2UtPm1pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKKwltNDh0MzdfYmFzZS0+c2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCiAJLyogZGF5IG9mIHdlZWsgLS0gbm90IHJlYWxseSB1c2VkLCBidXQgbGV0J3Mga2VlcCBpdCB1cC10by1kYXRlICovCi0JbTQ4dDM3X2Jhc2UtPmRheSA9IEJJTjJCQ0QodG0udG1fd2RheSArIDEpOworCW00OHQzN19iYXNlLT5kYXkgPSBiaW4yYmNkKHRtLnRtX3dkYXkgKyAxKTsKIAogCS8qIGRpc2FibGUgd3JpdGluZyAqLwogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHgwMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX200MXQ4MS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMKaW5kZXggMjZmYmZmNC4uYjczMjYwMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMKQEAgLTE1NiwzMiArMTU2LDMyIEBACiAJICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQl0bS50bV9zZWMgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CisJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfU0MsIHRtLnRtX3NlYyk7CiAKLQl0bS50bV9taW4gPSBCSU4yQkNEKHRtLnRtX21pbik7CisJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfTU4sIHRtLnRtX21pbik7CiAKLQl0bS50bV9ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKKwl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKIAl0bS50bV9ob3VyID0gKHRtLnRtX2hvdXIgJiAweDNmKSB8IChtNDF0ODFfcmVhZChNNDFUODFSRUdfSFIpICYgMHhjMCk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19IUiwgdG0udG1faG91cik7CiAKIAkvKiB0bV93ZGF5IHN0YXJ0cyBmcm9tIDAgdG8gNiAqLwogCWlmICh0bS50bV93ZGF5ID09IDApIHRtLnRtX3dkYXkgPSA3OwotCXRtLnRtX3dkYXkgPSBCSU4yQkNEKHRtLnRtX3dkYXkpOworCXRtLnRtX3dkYXkgPSBiaW4yYmNkKHRtLnRtX3dkYXkpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfRFksIHRtLnRtX3dkYXkpOwogCi0JdG0udG1fbWRheSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CisJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19EVCwgdG0udG1fbWRheSk7CiAKIAkvKiB0bV9tb24gc3RhcnRzIGZyb20gMCwgKmljayogKi8KIAl0bS50bV9tb24gKys7Ci0JdG0udG1fbW9uID0gQklOMkJDRCh0bS50bV9tb24pOworCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX01PLCB0bS50bV9tb24pOwogCiAJLyogd2UgZG9uJ3QgZG8gY2VudHVyeSwgZXZlcnl0aGluZyBpcyBiZXlvbmQgMjAwMCAqLwogCXRtLnRtX3llYXIgJT0gMTAwOwotCXRtLnRtX3llYXIgPSBCSU4yQkNEKHRtLnRtX3llYXIpOworCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfWVIsIHRtLnRtX3llYXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKQEAgLTIwOSwxMiArMjA5LDEyIEBACiAJeWVhciA9IG00MXQ4MV9yZWFkKE00MVQ4MVJFR19ZUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAotCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQltaW4gPSBCQ0QyQklOKG1pbik7Ci0JaG91ciA9IEJDRDJCSU4oaG91cik7Ci0JZGF5ID0gQkNEMkJJTihkYXkpOwotCW1vbiA9IEJDRDJCSU4obW9uKTsKLQl5ZWFyID0gQkNEMkJJTih5ZWFyKTsKKwlzZWMgPSBiY2QyYmluKHNlYyk7CisJbWluID0gYmNkMmJpbihtaW4pOworCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCWRheSA9IGJjZDJiaW4oZGF5KTsKKwltb24gPSBiY2QyYmluKG1vbik7CisJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAKIAl5ZWFyICs9IDIwMDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX3hpY29yMTI0MS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMKaW5kZXggZmYzZTVkYS4uNDQzOGIyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMKQEAgLTEyNCwxOCArMTI0LDE4IEBACiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfU1IsIFgxMjQxUkVHX1NSX1dFTCB8IFgxMjQxUkVHX1NSX1JXRUwpOwogCiAJLyogdHJpdmlhbCBvbmVzICovCi0JdG0udG1fc2VjID0gQklOMkJDRCh0bS50bV9zZWMpOworCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19TQywgdG0udG1fc2VjKTsKIAotCXRtLnRtX21pbiA9IEJJTjJCQ0QodG0udG1fbWluKTsKKwl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfTU4sIHRtLnRtX21pbik7CiAKLQl0bS50bV9tZGF5ID0gQklOMkJDRCh0bS50bV9tZGF5KTsKKwl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19EVCwgdG0udG1fbWRheSk7CiAKIAkvKiB0bV9tb24gc3RhcnRzIGZyb20gMCwgKmljayogKi8KIAl0bS50bV9tb24gKys7Ci0JdG0udG1fbW9uID0gQklOMkJDRCh0bS50bV9tb24pOworCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19NTywgdG0udG1fbW9uKTsKIAogCS8qIHllYXIgaXMgc3BsaXQgKi8KQEAgLTE0OCw3ICsxNDgsNyBAQAogCXRtcCA9IHhpY29yX3JlYWQoWDEyNDFSRUdfSFIpOwogCWlmICh0bXAgJiBYMTI0MVJFR19IUl9NSUwpIHsKIAkJLyogMjQgaG91ciBmb3JtYXQgKi8KLQkJdG0udG1faG91ciA9IEJJTjJCQ0QodG0udG1faG91cik7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOwogCQl0bXAgPSAodG1wICYgfjB4M2YpIHwgKHRtLnRtX2hvdXIgJiAweDNmKTsKIAl9IGVsc2UgewogCQkvKiAxMiBob3VyIGZvcm1hdCwgd2l0aCAweDIgZm9yIHBtICovCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJCXRtcCB8PSAweDIwOwogCQkJdG0udG1faG91ciAtPSAxMjsKIAkJfQotCQl0bS50bV9ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CiAJCXRtcCB8PSB0bS50bV9ob3VyOwogCX0KIAl4aWNvcl93cml0ZShYMTI0MVJFR19IUiwgdG1wKTsKQEAgLTE5MSwxMyArMTkxLDEzIEBACiAJeTJrID0geGljb3JfcmVhZChYMTI0MVJFR19ZMkspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKLQlzZWMgPSBCQ0QyQklOKHNlYyk7Ci0JbWluID0gQkNEMkJJTihtaW4pOwotCWhvdXIgPSBCQ0QyQklOKGhvdXIpOwotCWRheSA9IEJDRDJCSU4oZGF5KTsKLQltb24gPSBCQ0QyQklOKG1vbik7Ci0JeWVhciA9IEJDRDJCSU4oeWVhcik7Ci0JeTJrID0gQkNEMkJJTih5MmspOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKKwl5MmsgPSBiY2QyYmluKHkyayk7CiAKIAl5ZWFyICs9ICh5MmsgKiAxMDApOwogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvS2NvbmZpZyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCmluZGV4IGRkNTU3YzkuLjlhOWY0MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9LY29uZmlnCisrKyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCkBAIC02OCw2ICs2OCw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiTWF0c3VzaGl0YSBNTjEwMzAwIHN5c3RlbSBzZXR1cCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMKaW5kZXggMDQyZjc5Mi4uNzk3ODQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTg0LDggKzg0LDggQEAKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7CiAJCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfbWludXRlcyk7CisJCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCQlyZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAJCX0KIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IDgzMTNmY2MuLjY0NGE3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtOSw2ICs5LDggQEAKIAlkZWZfYm9vbCB5CiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKKwlzZWxlY3QgUlRDX0NMQVNTCisJc2VsZWN0IFJUQ19EUlZfUEFSSVNDCiAJaGVscAogCSAgVGhlIFBBLVJJU0MgbWljcm9wcm9jZXNzb3IgaXMgZGVzaWduZWQgYnkgSGV3bGV0dC1QYWNrYXJkIGFuZCB1c2VkCiAJICBpbiBtYW55IG9mIHRoZWlyIHdvcmtzdGF0aW9ucyAmIHNlcnZlcnMgKEhQOTAwMCA3MDAgYW5kIDgwMCBzZXJpZXMsCkBAIC05MCw2ICs5Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvS2J1aWxkIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vS2J1aWxkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvS2J1aWxkCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9LYnVpbGQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hZ3AuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2FncC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYWdwLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2FncC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXNtcmVncy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXNtcmVncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYXNtcmVncy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hc21yZWdzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hc3NlbWJseS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXNzZW1ibHkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2Fzc2VtYmx5LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Fzc2VtYmx5LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXV4dmVjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdXh2ZWMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2F1eHZlYy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdXh2ZWMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2JpdG9wcy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYml0b3BzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9idWcuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2J1Zy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYnVnLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2J1Zy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYnVncy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnVncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYnVncy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9idWdzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9ieXRlb3JkZXIuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvYnl0ZW9yZGVyLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jaGVja3N1bS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2hlY2tzdW0uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2NoZWNrc3VtLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3J0X3NpZ2ZyYW1lLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXRfcnRfc2lnZnJhbWUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdF9ydF9zaWdmcmFtZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXRfcnRfc2lnZnJhbWUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdF9zaWduYWwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NvbXBhdF9zaWduYWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdF9zaWduYWwuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY29tcGF0X3NpZ25hbC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0X3Vjb250ZXh0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXRfdWNvbnRleHQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdF91Y29udGV4dC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXRfdWNvbnRleHQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NwdXRpbWUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2NwdXRpbWUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY3B1dGltZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY3VycmVudC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY3VycmVudC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvY3VycmVudC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kZWxheS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZGVsYXkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2RlbGF5LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RlbGF5LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kZXZpY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RldmljZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZGV2aWNlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RldmljZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZGl2NjQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RpdjY0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9kaXY2NC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kaXY2NC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLW1hcHBpbmcuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2RtYS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfYnVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9laXNhX2J1cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZWlzYV9idXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWlzYV9idXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Vpc2FfZWVwcm9tLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9laXNhX2VlcHJvbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZWlzYV9lZXByb20uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWlzYV9lZXByb20uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lbWVyZ2VuY3ktcmVzdGFydC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZW1lcmdlbmN5LXJlc3RhcnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2VtZXJnZW5jeS1yZXN0YXJ0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2VtZXJnZW5jeS1yZXN0YXJ0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZXJybm8uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2Vycm5vLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Vycm5vLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mYi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2ZiLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mY250bC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2ZjbnRsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9maXhtYXAuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZml4bWFwLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZmxvcHB5LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mbG9wcHkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2Zsb3BweS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mbG9wcHkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdXRleC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZnV0ZXguaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2dyZmlvY3RsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9ncmZpb2N0bC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvZ3JmaW9jdGwuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZ3JmaW9jdGwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2hhcmRpcnEuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2hhcmRpcnEuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaGFyZGlycS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaGFyZHdhcmUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmR3YXJlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9oYXJkd2FyZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkd2FyZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaHdfaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9od19pcnEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2h3X2lycS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9od19pcnEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaWRlLmgKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pZGUuaAppbmRleCBjMjQ2ZWY3Li44MTcwMGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaWRlLmgKQEAgLTEzLDEwICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgaWRlX3JlcXVlc3RfaXJxKGlycSxoYW5kLGZsZyxkZXYsaWQpCXJlcXVlc3RfaXJxKChpcnEpLChoYW5kKSwoZmxnKSwoZGV2KSwoaWQpKQotI2RlZmluZSBpZGVfZnJlZV9pcnEoaXJxLGRldl9pZCkJCWZyZWVfaXJxKChpcnEpLCAoZGV2X2lkKSkKLSNkZWZpbmUgaWRlX3JlcXVlc3RfcmVnaW9uKGZyb20sZXh0ZW50LG5hbWUpCXJlcXVlc3RfcmVnaW9uKChmcm9tKSwgKGV4dGVudCksIChuYW1lKSkKLSNkZWZpbmUgaWRlX3JlbGVhc2VfcmVnaW9uKGZyb20sZXh0ZW50KQkJcmVsZWFzZV9yZWdpb24oKGZyb20pLCAoZXh0ZW50KSkKIC8qIEdlbmVyaWMgSS9PIGFuZCBNRU1JTyBzdHJpbmcgb3BlcmF0aW9ucy4gICovCiAKICNkZWZpbmUgX19pZGVfaW5zdwlpbnN3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pby5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW9jdGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvY3RsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pb2N0bC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW9jdGxzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2lvY3Rscy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lwY2J1Zi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXBjYnVmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pcGNidWYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaXBjYnVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lycS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lycS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxX3JlZ3MuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lycV9yZWdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9pcnFfcmVncy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pcnFfcmVncy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mva2RlYnVnLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9rZGVidWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2tkZWJ1Zy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9rZGVidWcuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbGVkLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2xlZC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sZWQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2xpbmthZ2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL2xpbmthZ2UuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbGlua2FnZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbG9jYWwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xvY2FsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9sb2NhbC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9sb2NhbC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbWFjaGRlcC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbWFjaGRlcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbWFjaGRlcC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tYzE0NjgxOHJ0Yy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21jMTQ2ODE4cnRjLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tY2tpbmxleS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbWNraW5sZXkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21ja2lubGV5LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21ja2lubGV5LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tbWFuLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tbWFuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9tbWFuLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tYW4uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21tdS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW11LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9tbXUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW11LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXVfY29udGV4dC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21tdV9jb250ZXh0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXpvbmUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tem9uZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvbW16b25lLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL21tem9uZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbW9kdWxlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tb2R1bGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL21vZHVsZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9tb2R1bGUuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL21zZ2J1Zi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbXNnYnVmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9tc2didWYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbXNnYnVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tdXRleC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbXV0ZXguaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL211dGV4LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL211dGV4LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmFtLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYXJhbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyYW0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmlzYy1kZXZpY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhcmlzYy1kZXZpY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BhcmlzYy1kZXZpY2UuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyaXNjLWRldmljZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFycG9ydC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFycG9ydC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGFycG9ydC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCmluZGV4IDllYWE3OTQuLmM1ODRiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaApAQCAtMzMyLDYgKzMzMiw5IEBACiAjZGVmaW5lIEJPT1RfQ09OU09MRV9TUEFfT0ZGU0VUICAweDNjNAogI2RlZmluZSBCT09UX0NPTlNPTEVfUEFUSF9PRkZTRVQgMHgzYTgKIAorLyogc2l6ZSBvZiB0aGUgcGRjX3Jlc3VsdCBidWZmZXIgZm9yIGZpcm13YXJlLmMgKi8KKyNkZWZpbmUgTlVNX1BEQ19SRVNVTFQJMzIKKwogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKICNpZmRlZiBfX0tFUk5FTF9fCiAKQEAgLTYwMCw2ICs2MDMsNyBAQAogaW50IHBkY19jaGFzc2lzX2Rpc3AodW5zaWduZWQgbG9uZyBkaXNwKTsKIGludCBwZGNfY2hhc3Npc193YXJuKHVuc2lnbmVkIGxvbmcgKndhcm4pOwogaW50IHBkY19jb3Byb2NfY2ZnKHN0cnVjdCBwZGNfY29wcm9jX2NmZyAqcGRjX2NvcHJvY19pbmZvKTsKK2ludCBwZGNfY29wcm9jX2NmZ191bmxvY2tlZChzdHJ1Y3QgcGRjX2NvcHJvY19jZmcgKnBkY19jb3Byb2NfaW5mbyk7CiBpbnQgcGRjX2lvZGNfcmVhZCh1bnNpZ25lZCBsb25nICphY3RjbnQsIHVuc2lnbmVkIGxvbmcgaHBhLCB1bnNpZ25lZCBpbnQgaW5kZXgsCiAJCSAgdm9pZCAqaW9kY19kYXRhLCB1bnNpZ25lZCBpbnQgaW9kY19kYXRhX3NpemUpOwogaW50IHBkY19zeXN0ZW1fbWFwX2ZpbmRfbW9kcyhzdHJ1Y3QgcGRjX3N5c3RlbV9tYXBfbW9kX2luZm8gKnBkY19tb2RfaW5mbywKQEAgLTYzOCw2ICs2NDIsNyBAQAogI2VuZGlmCiAKIHZvaWQgc2V0X2Zpcm13YXJlX3dpZHRoKHZvaWQpOwordm9pZCBzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQodm9pZCk7CiBpbnQgcGRjX2RvX2Zpcm1fdGVzdF9yZXNldCh1bnNpZ25lZCBsb25nIGZ0Y19iaXRtYXApOwogaW50IHBkY19kb19yZXNldCh2b2lkKTsKIGludCBwZGNfc29mdF9wb3dlcl9pbmZvKHVuc2lnbmVkIGxvbmcgKnBvd2VyX3JlZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjX2NoYXNzaXMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkY19jaGFzc2lzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wZGNfY2hhc3Npcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGNfY2hhc3Npcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjcGF0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGNwYXQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BkY3BhdC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGNwYXQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BlcmNwdS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGVyY3B1LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wZXJjcHUuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGVyY3B1LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZXJmLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZXJmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wZXJmLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BlcmYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wb2xsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BvbGwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Bvc2l4X3R5cGVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcG9zaXhfdHlwZXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3ByZWZldGNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcmVmZXRjaC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcHJlZmV0Y2guaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJlZmV0Y2guaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wc3cuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bzdy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Bzdy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHRyYWNlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvcHRyYWNlLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDNlOTRjNWQuLmFmYTUzMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wdHJhY2UuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNDcsNiArNDcsMTYgQEAKIAogI2RlZmluZSB0YXNrX3JlZ3ModGFzaykgKChzdHJ1Y3QgcHRfcmVncyAqKSAoKGNoYXIgKikodGFzaykgKyBUQVNLX1JFR1MpKQogCisjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUFRSQUNFCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKyNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKQkxCit2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwordm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKQkxCit2b2lkIHVzZXJfZW5hYmxlX2Jsb2NrX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwogLyogWFhYIHNob3VsZCB3ZSB1c2UgaWFvcVsxXSBvciBpYW9xWzBdID8gKi8KICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPmlhb3FbMF0gJiAzKSA/IDEgOiAwKQogI2RlZmluZSB1c2VyX3NwYWNlKHJlZ3MpCQkoKChyZWdzKS0+aWFzcVsxXSAhPSAwKSA/IDEgOiAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3JlYWwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JlYWwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3JlYWwuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcmVhbC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcmVzb3VyY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Jlc291cmNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9yZXNvdXJjZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvcm9wZXMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JvcGVzLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3JvcGVzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JvcGVzLmgKaW5kZXggMDA3YTg4MDYuLjA5ZjUxZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9yb3Blcy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3JvcGVzLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BU01fUEFSSVNDX1JPUEVTX0hfCiAjZGVmaW5lIF9BU01fUEFSSVNDX1JPUEVTX0hfCiAKLSNpbmNsdWRlIDxhc20tcGFyaXNjL3BhcmlzYy1kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFyaXNjLWRldmljZS5oPgogCiAjaWZkZWYgQ09ORklHXzY0QklUCiAvKiAibG93IGVuZCIgUEE4ODAwIG1hY2hpbmVzIHVzZSBaWDEgY2hpcHNldDogUEFUIFBEQyBhbmQgb25seSBydW4gNjQtYml0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcnRfc2lnZnJhbWUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3J0X3NpZ2ZyYW1lLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9ydF9zaWdmcmFtZS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9ydF9zaWdmcmFtZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcnRjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9ydGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3J0Yy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9ydGMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3J1bndheS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcnVud2F5LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9ydW53YXkuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcnVud2F5LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zY2F0dGVybGlzdC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NjYXR0ZXJsaXN0LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZWN0aW9ucy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NlY3Rpb25zLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZWdtZW50LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZWdtZW50LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zZWdtZW50LmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlZ21lbnQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NlbWJ1Zi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2VtYnVmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zZW1idWYuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2VtYnVmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZXJpYWwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlcmlhbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2VyaWFsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NlcmlhbC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2V0dXAuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NldHVwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zZXR1cC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zZXR1cC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2htYnVmLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaG1idWYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NobWJ1Zi5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaG1idWYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NobXBhcmFtLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaG1wYXJhbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2htcGFyYW0uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2htcGFyYW0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ2NvbnRleHQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NpZ2NvbnRleHQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnaW5mby5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2lnaW5mby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2lnaW5mby5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWduYWwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NpZ25hbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NpZ25hbC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zbXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zbXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NvY2tldC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zb2NrZXQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zb2NraW9zLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NraW9zLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zb2NraW9zLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tpb3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc3BpbmxvY2suaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2Mvc3BpbmxvY2tfdHlwZXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N0YXQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3N0YXQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3RhdC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3RhdGZzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3N0YXRmcy5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N0cmluZy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3RyaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zdHJpbmcuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3RyaW5nLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zdXBlcmlvLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zdXBlcmlvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zdXBlcmlvLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N1cGVyaW8uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzdGVtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzdGVtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90ZXJtYml0cy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGVybWJpdHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3Rlcm1iaXRzLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90ZXJtaW9zLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy90ZXJtaW9zLmgKcmVuYW1lIHRvIGFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Rlcm1pb3MuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDlmODEyNzQuLjA0MDc5NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgVElGXzMyQklUICAgICAgICAgICAgICAgNCAgICAgICAvKiAzMiBiaXQgYmluYXJ5ICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTUKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2F2ZWQgc2lnbmFsIG1hc2sgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJNwkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKQEAgLTY1LDYgKzY2LDcgQEAKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxIDw8IFRJRl8zMkJJVCkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSyAgICAgKF9USUZfU0lHUEVORElORyB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGltZXguaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RpbWV4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy90aW1leC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aW1leC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90bGIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3RsYi5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90bGIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGxiZmx1c2guaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RvcG9sb2d5LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdG9wb2xvZ3kuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RyYXBzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90cmFwcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdHJhcHMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdHJhcHMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3R5cGVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wYXJpc2MvdHlwZXMuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdWNvbnRleHQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy91Y29udGV4dC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5hbGlnbmVkLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3VuYWxpZ25lZC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBhN2Q4NTdmLi5lZjI2YjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTgwMSw4ICs4MDEsMTQgQEAKICNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkoX19OUl9MaW51eCArIDMwNikKICNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJKF9fTlJfTGludXggKyAzMDcpCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCShfX05SX0xpbnV4ICsgMzA4KQorI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJKF9fTlJfTGludXggKyAzMDkpCisjZGVmaW5lIF9fTlJfZXZlbnRmZDIJCShfX05SX0xpbnV4ICsgMzEwKQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJKF9fTlJfTGludXggKyAzMTEpCisjZGVmaW5lIF9fTlJfZHVwMwkJKF9fTlJfTGludXggKyAzMTIpCisjZGVmaW5lIF9fTlJfcGlwZTIJCShfX05SX0xpbnV4ICsgMzEzKQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJKF9fTlJfTGludXggKyAzMTQpCiAKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl90aW1lcmZkX2dldHRpbWUgKyAxKQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX2lub3RpZnlfaW5pdDEgKyAxKQogCiAKICNkZWZpbmUgX19JR05PUkVfc2VsZWN0CQkvKiBuZXdzZWxlY3QgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bndpbmQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Vud2luZC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy91bndpbmQuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW53aW5kLmgKaW5kZXggMmY3ZTZlNS4uNTI0ODJlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3Vud2luZC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Vud2luZC5oCkBAIC03NCw0ICs3NCw2IEBACiBpbnQgdW53aW5kX29uY2Uoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvKTsKIGludCB1bndpbmRfdG9fdXNlcihzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8pOwogCitpbnQgdW53aW5kX2luaXQodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VzZXIuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VzZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3VzZXIuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdXNlci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdmdhLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS92Z2EuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcGFyaXNjL3ZnYS5oCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS92Z2EuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3hvci5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20veG9yLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBhcmlzYy94b3IuaApyZW5hbWUgdG8gYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20veG9yLmgKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC8uZ2l0aWdub3JlIGIvYXJjaC9wYXJpc2Mva2VybmVsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNjc2YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3ZtbGludXgubGRzCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDNlZmMwYjcuLjY5OWNmOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yOTAsNSArMjkwLDggQEAKIAlERUZJTkUoRVhDREFUQV9JUCwgb2Zmc2V0b2Yoc3RydWN0IGV4Y2VwdGlvbl9kYXRhLCBmYXVsdF9pcCkpOwogCURFRklORShFWENEQVRBX1NQQUNFLCBvZmZzZXRvZihzdHJ1Y3QgZXhjZXB0aW9uX2RhdGEsIGZhdWx0X3NwYWNlKSk7CiAJREVGSU5FKEVYQ0RBVEFfQUREUiwgb2Zmc2V0b2Yoc3RydWN0IGV4Y2VwdGlvbl9kYXRhLCBmYXVsdF9hZGRyKSk7CisJQkxBTksoKTsKKwlERUZJTkUoQVNNX1BEQ19SRVNVTFRfU0laRSwgTlVNX1BEQ19SRVNVTFQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCUJMQU5LKCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IDcxNzdhNmMuLjAzZjI2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC03MSw4ICs3MSw4IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkvKiBmb3IgYm9vdF9jcHVfZGF0YSAqLwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBkY19sb2NrKTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBkY19yZXN1bHRbMzJdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGRjX3Jlc3VsdDJbMzJdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGRjX3Jlc3VsdFtOVU1fUERDX1JFU1VMVF07CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZGNfcmVzdWx0MltOVU1fUERDX1JFU1VMVF07CiAKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgV0lERV9GSVJNV0FSRSAweDEKQEAgLTE1MCwyNiArMTUwLDQwIEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR182NEJJVAordm9pZCBfX2luaXQgc2V0X2Zpcm13YXJlX3dpZHRoX3VubG9ja2VkKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG1lbV9wZGNfY2FsbChQRENfTU9ERUwsIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMsCisJCV9fcGEocGRjX3Jlc3VsdCksIDApOworCWNvbnZlcnRfdG9fd2lkZShwZGNfcmVzdWx0KTsKKwlpZiAocGRjX3Jlc3VsdFswXSAhPSBOQVJST1dfRklSTVdBUkUpCisJCXBhcmlzY19uYXJyb3dfZmlybXdhcmUgPSAwOworfQorCQogLyoqCiAgKiBzZXRfZmlybXdhcmVfd2lkdGggLSBEZXRlcm1pbmUgaWYgdGhlIGZpcm13YXJlIGlzIHdpZGUgb3IgbmFycm93LgogICogCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGRjXyogZnVuY3Rpb24gdGhhdCB1c2VzIHRoZSBjb252ZXJ0X3RvX3dpZGUKLSAqIGZ1bmN0aW9uLgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBkY18qIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUKKyAqIGNvbnZlcnRfdG9fd2lkZSBmdW5jdGlvbi4KICAqLwogdm9pZCBfX2luaXQgc2V0X2Zpcm13YXJlX3dpZHRoKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwZGNfbG9jaywgZmxhZ3MpOwotCXJldHZhbCA9IG1lbV9wZGNfY2FsbChQRENfTU9ERUwsIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMsIF9fcGEocGRjX3Jlc3VsdCksIDApOwotCWNvbnZlcnRfdG9fd2lkZShwZGNfcmVzdWx0KTsKLQlpZihwZGNfcmVzdWx0WzBdICE9IE5BUlJPV19GSVJNV0FSRSkKLQkJcGFyaXNjX25hcnJvd19maXJtd2FyZSA9IDA7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkY19sb2NrLCBmbGFncyk7Ci0jZW5kaWYKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRjX2xvY2ssIGZsYWdzKTsKKwlzZXRfZmlybXdhcmVfd2lkdGhfdW5sb2NrZWQoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfbG9jaywgZmxhZ3MpOwogfQorI2Vsc2UKK3ZvaWQgX19pbml0IHNldF9maXJtd2FyZV93aWR0aF91bmxvY2tlZCh2b2lkKSB7CisJcmV0dXJuOworfQorCit2b2lkIF9faW5pdCBzZXRfZmlybXdhcmVfd2lkdGgodm9pZCkgeworCXJldHVybjsKK30KKyNlbmRpZiAvKkNPTkZJR182NEJJVCovCiAKIC8qKgogICogcGRjX2VtZXJnZW5jeV91bmxvY2sgLSBVbmxvY2sgdGhlIGxpbnV4IHBkYyBsb2NrCkBAIC0yODgsNiArMzAyLDIwIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAoraW50IF9faW5pdCBwZGNfY29wcm9jX2NmZ191bmxvY2tlZChzdHJ1Y3QgcGRjX2NvcHJvY19jZmcgKnBkY19jb3Byb2NfaW5mbykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWVtX3BkY19jYWxsKFBEQ19DT1BST0MsIFBEQ19DT1BST0NfQ0ZHLCBfX3BhKHBkY19yZXN1bHQpKTsKKwljb252ZXJ0X3RvX3dpZGUocGRjX3Jlc3VsdCk7CisJcGRjX2NvcHJvY19pbmZvLT5jY3JfZnVuY3Rpb25hbCA9IHBkY19yZXN1bHRbMF07CisJcGRjX2NvcHJvY19pbmZvLT5jY3JfcHJlc2VudCA9IHBkY19yZXN1bHRbMV07CisJcGRjX2NvcHJvY19pbmZvLT5yZXZpc2lvbiA9IHBkY19yZXN1bHRbMTddOworCXBkY19jb3Byb2NfaW5mby0+bW9kZWwgPSBwZGNfcmVzdWx0WzE4XTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogcGRjX2NvcHJvY19jZmcgLSBUbyBpZGVudGlmeSBjb3Byb2Nlc3NvcnMgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3Nvci4KICAqIEBwZGNfY29wcm9jX2luZm86IFJldHVybiBidWZmZXIgYWRkcmVzcy4KQEAgLTI5NywxOSArMzI1LDE0IEBACiAgKi8KIGludCBfX2luaXQgcGRjX2NvcHJvY19jZmcoc3RydWN0IHBkY19jb3Byb2NfY2ZnICpwZGNfY29wcm9jX2luZm8pCiB7Ci0gICAgICAgIGludCByZXR2YWw7CisJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwZGNfbG9jaywgZmxhZ3MpOwotICAgICAgICByZXR2YWwgPSBtZW1fcGRjX2NhbGwoUERDX0NPUFJPQywgUERDX0NPUFJPQ19DRkcsIF9fcGEocGRjX3Jlc3VsdCkpOwotICAgICAgICBjb252ZXJ0X3RvX3dpZGUocGRjX3Jlc3VsdCk7Ci0gICAgICAgIHBkY19jb3Byb2NfaW5mby0+Y2NyX2Z1bmN0aW9uYWwgPSBwZGNfcmVzdWx0WzBdOwotICAgICAgICBwZGNfY29wcm9jX2luZm8tPmNjcl9wcmVzZW50ID0gcGRjX3Jlc3VsdFsxXTsKLSAgICAgICAgcGRjX2NvcHJvY19pbmZvLT5yZXZpc2lvbiA9IHBkY19yZXN1bHRbMTddOwotICAgICAgICBwZGNfY29wcm9jX2luZm8tPm1vZGVsID0gcGRjX3Jlc3VsdFsxOF07Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkY19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkY19sb2NrLCBmbGFncyk7CisJcmV0ID0gcGRjX2NvcHJvY19jZmdfdW5sb2NrZWQocGRjX2NvcHJvY19pbmZvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfbG9jaywgZmxhZ3MpOwogCi0gICAgICAgIHJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwppbmRleCBhODRlMzFlLi4wZTNkOWY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWNvcHkJCSVyMCwlcjIKIAogCS8qIEFuZCB0aGUgUkZJIFRhcmdldCBhZGRyZXNzIHRvbyAqLwotCWxvYWQzMgkJc3RhcnRfa2VybmVsLCVyMTEKKwlsb2FkMzIJCXN0YXJ0X3BhcmlzYywlcjExCiAKIAkvKiBBbmQgdGhlIGluaXRpYWwgdGFzayBwb2ludGVyICovCiAJbG9hZDMyCQlpbml0X3RocmVhZF91bmlvbiwlcjYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA0OWM2Mzc5Li45MDkwNGY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwIEhld2xldHQtUGFja2FyZCBDbywgTGludXhjYXJlIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMCBNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNywxNSArMjgsMTQ5IEBACiAvKiBQU1cgYml0cyB3ZSBhbGxvdyB0aGUgZGVidWdnZXIgdG8gbW9kaWZ5ICovCiAjZGVmaW5lIFVTRVJfUFNXX0JJVFMJKFBTV19OIHwgUFNXX1YgfCBQU1dfQ0IpCiAKLSN1bmRlZiBERUJVR19QVFJBQ0UKKy8qCisgKiBDYWxsZWQgYnkga2VybmVsL3B0cmFjZS5jIHdoZW4gZGV0YWNoaW5nLi4KKyAqCisgKiBNYWtlIHN1cmUgc2luZ2xlIHN0ZXAgYml0cyBldGMgYXJlIG5vdCBzZXQuCisgKi8KK3ZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXRhc2stPnB0cmFjZSAmPSB+KFBUX1NJTkdMRVNURVB8UFRfQkxPQ0tTVEVQKTsKIAotI2lmZGVmIERFQlVHX1BUUkFDRQotI2RlZmluZSBEQkcoeC4uLikJcHJpbnRrKHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikKLSNlbmRpZgorCS8qIG1ha2Ugc3VyZSB0aGUgdHJhcCBiaXRzIGFyZSBub3Qgc2V0ICovCisJcGFfcHN3KHRhc2spLT5yID0gMDsKKwlwYV9wc3codGFzayktPnQgPSAwOworCXBhX3Bzdyh0YXNrKS0+aCA9IDA7CisJcGFfcHN3KHRhc2spLT5sID0gMDsKK30KIAotI2lmZGVmIENPTkZJR182NEJJVAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgcHRyYWNlX3Jlc3VtZSgpIHdoZW4KKyAqIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzaW5nbGUvYmxvY2sgdHJhY2luZy4KKyAqLwordm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXB0cmFjZV9kaXNhYmxlKHRhc2spOworfQorCit2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwl0YXNrLT5wdHJhY2UgJj0gflBUX0JMT0NLU1RFUDsKKwl0YXNrLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKKworCWlmIChwYV9wc3codGFzayktPm4pIHsKKwkJc3RydWN0IHNpZ2luZm8gc2k7CisKKwkJLyogTnVsbGlmaWVkLCBqdXN0IGNyYW5rIG92ZXIgdGhlIHF1ZXVlLiAqLworCQl0YXNrX3JlZ3ModGFzayktPmlhb3FbMF0gPSB0YXNrX3JlZ3ModGFzayktPmlhb3FbMV07CisJCXRhc2tfcmVncyh0YXNrKS0+aWFzcVswXSA9IHRhc2tfcmVncyh0YXNrKS0+aWFzcVsxXTsKKwkJdGFza19yZWdzKHRhc2spLT5pYW9xWzFdID0gdGFza19yZWdzKHRhc2spLT5pYW9xWzBdICsgNDsKKwkJcGFfcHN3KHRhc2spLT5uID0gMDsKKwkJcGFfcHN3KHRhc2spLT54ID0gMDsKKwkJcGFfcHN3KHRhc2spLT55ID0gMDsKKwkJcGFfcHN3KHRhc2spLT56ID0gMDsKKwkJcGFfcHN3KHRhc2spLT5iID0gMDsKKwkJcHRyYWNlX2Rpc2FibGUodGFzayk7CisJCS8qIERvbid0IHdha2UgdXAgdGhlIHRhc2ssIGJ1dCBsZXQgdGhlCisJCSAgIHBhcmVudCBrbm93IHNvbWV0aGluZyBoYXBwZW5lZC4gKi8KKwkJc2kuc2lfY29kZSA9IFRSQVBfVFJBQ0U7CisJCXNpLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgKHRhc2tfcmVncyh0YXNrKS0+aWFvcVswXSAmIH4zKTsKKwkJc2kuc2lfc2lnbm8gPSBTSUdUUkFQOworCQlzaS5zaV9lcnJubyA9IDA7CisJCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZzaSwgdGFzayk7CisJCS8qIG5vdGlmeV9wYXJlbnQodGFzaywgU0lHQ0hMRCk7ICovCisJCXJldHVybjsKKwl9CisKKwkvKiBFbmFibGUgcmVjb3ZlcnkgY291bnRlciB0cmFwcy4gIFRoZSByZWNvdmVyeSBjb3VudGVyCisJICogaXRzZWxmIHdpbGwgYmUgc2V0IHRvIHplcm8gb24gYSB0YXNrIHN3aXRjaC4gIElmIHRoZQorCSAqIHRhc2sgaXMgc3VzcGVuZGVkIG9uIGEgc3lzY2FsbCB0aGVuIHRoZSBzeXNjYWxsIHJldHVybgorCSAqIHBhdGggd2lsbCBvdmVyd3JpdGUgdGhlIHJlY292ZXJ5IGNvdW50ZXIgd2l0aCBhIHN1aXRhYmxlCisJICogdmFsdWUgc3VjaCB0aGF0IGl0IHRyYXBzIG9uY2UgYmFjayBpbiB1c2VyIHNwYWNlLiAgV2UKKwkgKiBkaXNhYmxlIGludGVycnVwdHMgaW4gdGhlIHRhc2tzIFBTVyBoZXJlIGFsc28sIHRvIGF2b2lkCisJICogaW50ZXJydXB0cyB3aGlsZSB0aGUgcmVjb3ZlcnkgY291bnRlciBpcyBkZWNyZW1lbnRpbmcuCisJICovCisJcGFfcHN3KHRhc2spLT5yID0gMTsKKwlwYV9wc3codGFzayktPnQgPSAwOworCXBhX3Bzdyh0YXNrKS0+aCA9IDA7CisJcGFfcHN3KHRhc2spLT5sID0gMDsKK30KKwordm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwl0YXNrLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7CisJdGFzay0+cHRyYWNlIHw9IFBUX0JMT0NLU1RFUDsKKworCS8qIEVuYWJsZSB0YWtlbiBicmFuY2ggdHJhcC4gKi8KKwlwYV9wc3codGFzayktPnIgPSAwOworCXBhX3Bzdyh0YXNrKS0+dCA9IDE7CisJcGFfcHN3KHRhc2spLT5oID0gMDsKKwlwYV9wc3codGFzayktPmwgPSAwOworfQorCitsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJbG9uZyByZXQgPSAtRUlPOworCisJc3dpdGNoIChyZXF1ZXN0KSB7CisKKwkvKiBSZWFkIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYS4gIEZvciBwdHJhY2VkCisJICAgcHJvY2Vzc2VzLCB0aGUga2VybmVsIHNhdmVzIGFsbCByZWdzIG9uIGEgc3lzY2FsbC4gKi8KKwljYXNlIFBUUkFDRV9QRUVLVVNSOgorCQlpZiAoKGFkZHIgJiAoc2l6ZW9mKGxvbmcpLTEpKSB8fAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIGFkZHIgPj0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKKwkJCWJyZWFrOworCQl0bXAgPSAqKHVuc2lnbmVkIGxvbmcgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKTsKKwkJcmV0ID0gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKTsKKwkJYnJlYWs7CisKKwkvKiBXcml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEuICBUaGlzIHdpbGwgbmVlZAorCSAgIHRvIGNoYW5nZSB3aGVuIHRoZSBrZXJuZWwgbm8gbG9uZ2VyIHNhdmVzIGFsbCByZWdzIG9uIGEgc3lzY2FsbC4KKwkgICBGSVhNRS4gIFRoZXJlIGlzIGEgcHJvYmxlbSBhdCB0aGUgbW9tZW50IGluIHRoYXQgcjMtcjE4IGFyZSBvbmx5CisJICAgc2F2ZWQgaWYgdGhlIHByb2Nlc3MgaXMgcHRyYWNlZCBvbiBzeXNjYWxsIGVudHJ5LCBhbmQgZXZlbiB0aGVuCisJICAgdGhvc2UgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbiBieSBhY3R1YWwgcmVnaXN0ZXIgdmFsdWVzIG9uIHN5c2NhbGwKKwkgICBleGl0LiAqLworCWNhc2UgUFRSQUNFX1BPS0VVU1I6CisJCS8qIFNvbWUgcmVnaXN0ZXIgdmFsdWVzIHdyaXR0ZW4gaGVyZSBtYXkgYmUgaWdub3JlZCBpbgorCQkgKiBlbnRyeS5TOnN5c2NhbGxfcmVzdG9yZV9yZmk7IGUuZy4gaWFvcSBpcyB3cml0dGVuIHdpdGgKKwkJICogcjMxL3IzMSs0LCBhbmQgbm90IHdpdGggdGhlIHZhbHVlcyBpbiBwdF9yZWdzLgorCQkgKi8KKwkJaWYgKGFkZHIgPT0gUFRfUFNXKSB7CisJCQkvKiBBbGxvdyB3cml0aW5nIHRvIE51bGxpZnksIERpdmlkZS1zdGVwLWNvcnJlY3Rpb24sCisJCQkgKiBhbmQgY2FycnkvYm9ycm93IGJpdHMuCisJCQkgKiBCRVdBUkUsIGlmIHlvdSBzZXQgTiwgYW5kIHRoZW4gc2luZ2xlIHN0ZXAsIGl0IHdvbid0CisJCQkgKiBzdG9wIG9uIHRoZSBudWxsaWZpZWQgaW5zdHJ1Y3Rpb24uCisJCQkgKi8KKwkJCWRhdGEgJj0gVVNFUl9QU1dfQklUUzsKKwkJCXRhc2tfcmVncyhjaGlsZCktPmdyWzBdICY9IH5VU0VSX1BTV19CSVRTOworCQkJdGFza19yZWdzKGNoaWxkKS0+Z3JbMF0gfD0gZGF0YTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoYWRkciAmIChzaXplb2YobG9uZyktMSkpIHx8CisJCSAgICAodW5zaWduZWQgbG9uZykgYWRkciA+PSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorCQkJYnJlYWs7CisJCWlmICgoYWRkciA+PSBQVF9HUjEgJiYgYWRkciA8PSBQVF9HUjMxKSB8fAorCQkJCWFkZHIgPT0gUFRfSUFPUTAgfHwgYWRkciA9PSBQVF9JQU9RMSB8fAorCQkJCShhZGRyID49IFBUX0ZSMCAmJiBhZGRyIDw9IFBUX0ZSMzEgKyA0KSB8fAorCQkJCWFkZHIgPT0gUFRfU0FSKSB7CisJCQkqKHVuc2lnbmVkIGxvbmcgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKSA9IGRhdGE7CisJCQlyZXQgPSAwOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIHRyYW5zbGF0ZSAzMiBiaXQgcHRfcmVncyBvZmZzZXRzIGluIHRvCiAgKiA2NCBiaXQgcHRfcmVncyBvZmZzZXRzLiAgRm9yIGV4YW1wbGUsIGEgMzIgYml0IGdkYiB1bmRlciBhIDY0IGJpdCBrZXJuZWwKQEAgLTYxLDEwNiArMTk2LDI1IEBACiAJZWxzZQogCQlyZXR1cm4gLTE7CiB9Ci0jZW5kaWYKIAotLyoKLSAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgotICoKLSAqIE1ha2Ugc3VyZSBzaW5nbGUgc3RlcCBiaXRzIGV0YyBhcmUgbm90IHNldC4KLSAqLwotdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQorbG9uZyBjb21wYXRfYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgY29tcGF0X2xvbmdfdCByZXF1ZXN0LAorCQkJY29tcGF0X3Vsb25nX3QgYWRkciwgY29tcGF0X3Vsb25nX3QgZGF0YSkKIHsKLQkvKiBtYWtlIHN1cmUgdGhlIHRyYXAgYml0cyBhcmUgbm90IHNldCAqLwotCXBhX3BzdyhjaGlsZCktPnIgPSAwOwotCXBhX3BzdyhjaGlsZCktPnQgPSAwOwotCXBhX3BzdyhjaGlsZCktPmggPSAwOwotCXBhX3BzdyhjaGlsZCktPmwgPSAwOwotfQotCi1sb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCi17Ci0JbG9uZyByZXQ7Ci0jaWZkZWYgREVCVUdfUFRSQUNFCi0JbG9uZyBvYWRkcj1hZGRyLCBvZGF0YT1kYXRhOwotI2VuZGlmCisJY29tcGF0X3VpbnRfdCB0bXA7CisJbG9uZyByZXQgPSAtRUlPOwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7Ci0JY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6IC8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLyAKLQljYXNlIFBUUkFDRV9QRUVLREFUQTogewotI2lmZGVmIENPTkZJR182NEJJVAotCQlpZiAoX19pc19jb21wYXRfdGFzayhjaGlsZCkpIHsKLQkJCWludCBjb3BpZWQ7Ci0JCQl1bnNpZ25lZCBpbnQgdG1wOwogCi0JCQlhZGRyICY9IDB4ZmZmZmZmZmZMOwotCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZ0bXAsIHNpemVvZih0bXApLCAwKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlpZiAoY29waWVkICE9IHNpemVvZih0bXApKQotCQkJCWdvdG8gb3V0X3RzazsKLQkJCXJldCA9IHB1dF91c2VyKHRtcCwodW5zaWduZWQgaW50ICopIGRhdGEpOwotCQkJREJHKCJzeXNfcHRyYWNlKFBFRUslcywgJWQsICVseCwgJWx4KSByZXR1cm5pbmcgJWxkLCBkYXRhICV4XG4iLAotCQkJCXJlcXVlc3QgPT0gUFRSQUNFX1BFRUtURVhUID8gIlRFWFQiIDogIkRBVEEiLAotCQkJCXBpZCwgb2FkZHIsIG9kYXRhLCByZXQsIHRtcCk7Ci0JCX0KLQkJZWxzZQotI2VuZGlmCi0JCQlyZXQgPSBnZW5lcmljX3B0cmFjZV9wZWVrZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0JCWdvdG8gb3V0X3RzazsKLQl9CisJY2FzZSBQVFJBQ0VfUEVFS1VTUjoKKwkJaWYgKGFkZHIgJiAoc2l6ZW9mKGNvbXBhdF91aW50X3QpLTEpKQorCQkJYnJlYWs7CisJCWFkZHIgPSB0cmFuc2xhdGVfdXNyX29mZnNldChhZGRyKTsKKwkJaWYgKGFkZHIgPCAwKQorCQkJYnJlYWs7CiAKLQkvKiB3aGVuIEkgYW5kIEQgc3BhY2UgYXJlIHNlcGFyYXRlLCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZC4gKi8KLQljYXNlIFBUUkFDRV9QT0tFVEVYVDogLyogd3JpdGUgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KLQljYXNlIFBUUkFDRV9QT0tFREFUQToKLQkJcmV0ID0gMDsKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJaWYgKF9faXNfY29tcGF0X3Rhc2soY2hpbGQpKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdG1wID0gKHVuc2lnbmVkIGludClkYXRhOwotCQkJREJHKCJzeXNfcHRyYWNlKFBPS0UlcywgJWQsICVseCwgJWx4KVxuIiwKLQkJCQlyZXF1ZXN0ID09IFBUUkFDRV9QT0tFVEVYVCA/ICJURVhUIiA6ICJEQVRBIiwKLQkJCQlwaWQsIG9hZGRyLCBvZGF0YSk7Ci0JCQlhZGRyICY9IDB4ZmZmZmZmZmZMOwotCQkJaWYgKGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBhZGRyLCAmdG1wLCBzaXplb2YodG1wKSwgMSkgPT0gc2l6ZW9mKHRtcCkpCi0JCQkJZ290byBvdXRfdHNrOwotCQl9Ci0JCWVsc2UKLSNlbmRpZgotCQl7Ci0JCQlpZiAoYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZkYXRhLCBzaXplb2YoZGF0YSksIDEpID09IHNpemVvZihkYXRhKSkKLQkJCQlnb3RvIG91dF90c2s7Ci0JCX0KLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfdHNrOwotCi0JLyogUmVhZCB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEuICBGb3IgcHRyYWNlZAotCSAgIHByb2Nlc3NlcywgdGhlIGtlcm5lbCBzYXZlcyBhbGwgcmVncyBvbiBhIHN5c2NhbGwuICovCi0JY2FzZSBQVFJBQ0VfUEVFS1VTUjogewotCQlyZXQgPSAtRUlPOwotI2lmZGVmIENPTkZJR182NEJJVAotCQlpZiAoX19pc19jb21wYXRfdGFzayhjaGlsZCkpIHsKLQkJCXVuc2lnbmVkIGludCB0bXA7Ci0KLQkJCWlmIChhZGRyICYgKHNpemVvZihpbnQpLTEpKQotCQkJCWdvdG8gb3V0X3RzazsKLQkJCWlmICgoYWRkciA9IHRyYW5zbGF0ZV91c3Jfb2Zmc2V0KGFkZHIpKSA8IDApCi0JCQkJZ290byBvdXRfdHNrOwotCi0JCQl0bXAgPSAqKHVuc2lnbmVkIGludCAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpOwotCQkJcmV0ID0gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgaW50ICopIGRhdGEpOwotCQkJREJHKCJzeXNfcHRyYWNlKFBFRUtVU1IsICVkLCAlbHgsICVseCkgcmV0dXJuaW5nICVsZCwgYWRkciAlbHgsIGRhdGEgJXhcbiIsCi0JCQkJcGlkLCBvYWRkciwgb2RhdGEsIHJldCwgYWRkciwgdG1wKTsKLQkJfQotCQllbHNlCi0jZW5kaWYKLQkJewotCQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQkJCWlmICgoYWRkciAmIChzaXplb2YobG9uZyktMSkpIHx8ICh1bnNpZ25lZCBsb25nKSBhZGRyID49IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpCi0JCQkJZ290byBvdXRfdHNrOwotCQkJdG1wID0gKih1bnNpZ25lZCBsb25nICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkcik7Ci0JCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpOwotCQl9Ci0JCWdvdG8gb3V0X3RzazsKLQl9CisJCXRtcCA9ICooY29tcGF0X3VpbnRfdCAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpOworCQlyZXQgPSBwdXRfdXNlcih0bXAsIChjb21wYXRfdWludF90ICopICh1bnNpZ25lZCBsb25nKSBkYXRhKTsKKwkJYnJlYWs7CiAKIAkvKiBXcml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEuICBUaGlzIHdpbGwgbmVlZAogCSAgIHRvIGNoYW5nZSB3aGVuIHRoZSBrZXJuZWwgbm8gbG9uZ2VyIHNhdmVzIGFsbCByZWdzIG9uIGEgc3lzY2FsbC4KQEAgLTE2OSwxODUgKzIyMyw0NiBAQAogCSAgIHRob3NlIHZhbHVlcyBhcmUgb3ZlcndyaXR0ZW4gYnkgYWN0dWFsIHJlZ2lzdGVyIHZhbHVlcyBvbiBzeXNjYWxsCiAJICAgZXhpdC4gKi8KIAljYXNlIFBUUkFDRV9QT0tFVVNSOgotCQlyZXQgPSAtRUlPOwogCQkvKiBTb21lIHJlZ2lzdGVyIHZhbHVlcyB3cml0dGVuIGhlcmUgbWF5IGJlIGlnbm9yZWQgaW4KIAkJICogZW50cnkuUzpzeXNjYWxsX3Jlc3RvcmVfcmZpOyBlLmcuIGlhb3EgaXMgd3JpdHRlbiB3aXRoCiAJCSAqIHIzMS9yMzErNCwgYW5kIG5vdCB3aXRoIHRoZSB2YWx1ZXMgaW4gcHRfcmVncy4KIAkJICovCi0JCSAvKiBQVF9QU1c9MCwgc28gdGhpcyBpcyB2YWxpZCBmb3IgMzIgYml0IHByb2Nlc3NlcyB1bmRlciA2NAotCQkgKiBiaXQga2VybmVscy4KLQkJICovCiAJCWlmIChhZGRyID09IFBUX1BTVykgewotCQkJLyogUFRfUFNXPTAsIHNvIHRoaXMgaXMgdmFsaWQgZm9yIDMyIGJpdCBwcm9jZXNzZXMKLQkJCSAqIHVuZGVyIDY0IGJpdCBrZXJuZWxzLgotCQkJICoKLQkJCSAqIEFsbG93IHdyaXRpbmcgdG8gTnVsbGlmeSwgRGl2aWRlLXN0ZXAtY29ycmVjdGlvbiwKLQkJCSAqIGFuZCBjYXJyeS9ib3Jyb3cgYml0cy4KLQkJCSAqIEJFV0FSRSwgaWYgeW91IHNldCBOLCBhbmQgdGhlbiBzaW5nbGUgc3RlcCwgaXQgd29uJ3QKLQkJCSAqIHN0b3Agb24gdGhlIG51bGxpZmllZCBpbnN0cnVjdGlvbi4KKwkJCS8qIFNpbmNlIFBUX1BTVz09MCwgaXQgaXMgdmFsaWQgZm9yIDMyIGJpdCBwcm9jZXNzZXMKKwkJCSAqIHVuZGVyIDY0IGJpdCBrZXJuZWxzIGFzIHdlbGwuCiAJCQkgKi8KLQkJCURCRygic3lzX3B0cmFjZShQT0tFVVNSLCAlZCwgJWx4LCAlbHgpXG4iLAotCQkJCXBpZCwgb2FkZHIsIG9kYXRhKTsKLQkJCWRhdGEgJj0gVVNFUl9QU1dfQklUUzsKLQkJCXRhc2tfcmVncyhjaGlsZCktPmdyWzBdICY9IH5VU0VSX1BTV19CSVRTOwotCQkJdGFza19yZWdzKGNoaWxkKS0+Z3JbMF0gfD0gZGF0YTsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dF90c2s7Ci0JCX0KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJaWYgKF9faXNfY29tcGF0X3Rhc2soY2hpbGQpKSB7Ci0JCQlpZiAoYWRkciAmIChzaXplb2YoaW50KS0xKSkKLQkJCQlnb3RvIG91dF90c2s7Ci0JCQlpZiAoKGFkZHIgPSB0cmFuc2xhdGVfdXNyX29mZnNldChhZGRyKSkgPCAwKQotCQkJCWdvdG8gb3V0X3RzazsKLQkJCURCRygic3lzX3B0cmFjZShQT0tFVVNSLCAlZCwgJWx4LCAlbHgpIGFkZHIgJWx4XG4iLAotCQkJCXBpZCwgb2FkZHIsIG9kYXRhLCBhZGRyKTsKKwkJCXJldCA9IGFyY2hfcHRyYWNlKGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChhZGRyICYgKHNpemVvZihjb21wYXRfdWludF90KS0xKSkKKwkJCQlicmVhazsKKwkJCWFkZHIgPSB0cmFuc2xhdGVfdXNyX29mZnNldChhZGRyKTsKKwkJCWlmIChhZGRyIDwgMCkKKwkJCQlicmVhazsKIAkJCWlmIChhZGRyID49IFBUX0ZSMCAmJiBhZGRyIDw9IFBUX0ZSMzEgKyA0KSB7CiAJCQkJLyogU3BlY2lhbCBjYXNlLCBmcCByZWdzIGFyZSA2NCBiaXRzIGFueXdheSAqLwotCQkJCSoodW5zaWduZWQgaW50ICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkcikgPSBkYXRhOworCQkJCSooX191NjQgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKSA9IGRhdGE7CiAJCQkJcmV0ID0gMDsKIAkJCX0KIAkJCWVsc2UgaWYgKChhZGRyID49IFBUX0dSMSs0ICYmIGFkZHIgPD0gUFRfR1IzMSs0KSB8fAogCQkJCQlhZGRyID09IFBUX0lBT1EwKzQgfHwgYWRkciA9PSBQVF9JQU9RMSs0IHx8CiAJCQkJCWFkZHIgPT0gUFRfU0FSKzQpIHsKIAkJCQkvKiBaZXJvIHRoZSB0b3AgMzIgYml0cyAqLwotCQkJCSoodW5zaWduZWQgaW50ICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkciAtIDQpID0gMDsKLQkJCQkqKHVuc2lnbmVkIGludCAqKSAoKGNoYXIgKikgdGFza19yZWdzKGNoaWxkKSArIGFkZHIpID0gZGF0YTsKKwkJCQkqKF9fdTMyICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkciAtIDQpID0gMDsKKwkJCQkqKF9fdTMyICopICgoY2hhciAqKSB0YXNrX3JlZ3MoY2hpbGQpICsgYWRkcikgPSBkYXRhOwogCQkJCXJldCA9IDA7CiAJCQl9Ci0JCQlnb3RvIG91dF90c2s7CiAJCX0KLQkJZWxzZQotI2VuZGlmCi0JCXsKLQkJCWlmICgoYWRkciAmIChzaXplb2YobG9uZyktMSkpIHx8ICh1bnNpZ25lZCBsb25nKSBhZGRyID49IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpCi0JCQkJZ290byBvdXRfdHNrOwotCQkJaWYgKChhZGRyID49IFBUX0dSMSAmJiBhZGRyIDw9IFBUX0dSMzEpIHx8Ci0JCQkJCWFkZHIgPT0gUFRfSUFPUTAgfHwgYWRkciA9PSBQVF9JQU9RMSB8fAotCQkJCQkoYWRkciA+PSBQVF9GUjAgJiYgYWRkciA8PSBQVF9GUjMxICsgNCkgfHwKLQkJCQkJYWRkciA9PSBQVF9TQVIpIHsKLQkJCQkqKHVuc2lnbmVkIGxvbmcgKikgKChjaGFyICopIHRhc2tfcmVncyhjaGlsZCkgKyBhZGRyKSA9IGRhdGE7Ci0JCQkJcmV0ID0gMDsKLQkJCX0KLQkJCWdvdG8gb3V0X3RzazsKLQkJfQotCi0JY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KLQljYXNlIFBUUkFDRV9DT05UOgotCQlyZXQgPSAtRUlPOwotCQlEQkcoInN5c19wdHJhY2UoJXMpXG4iLAotCQkJcmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCA/ICJTWVNDQUxMIiA6ICJDT05UIik7Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJZ290byBvdXRfdHNrOwotCQljaGlsZC0+cHRyYWNlICY9IH4oUFRfU0lOR0xFU1RFUHxQVF9CTE9DS1NURVApOwotCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewotCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQl9IGVsc2UgewotCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCX0JCQotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJZ290byBvdXRfd2FrZV9ub3RyYXA7Ci0KLQljYXNlIFBUUkFDRV9LSUxMOgotCQkvKgotCQkgKiBtYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEKLQkJICogc2lna2lsbC4gIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzCi0JCSAqIHRoYXQgaXQgd2FudHMgdG8gZXhpdC4KLQkJICovCi0JCXJldCA9IDA7Ci0JCURCRygic3lzX3B0cmFjZShLSUxMKVxuIik7Ci0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkJLyogYWxyZWFkeSBkZWFkICovCi0JCQlnb3RvIG91dF90c2s7Ci0JCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCQlnb3RvIG91dF93YWtlX25vdHJhcDsKLQotCWNhc2UgUFRSQUNFX1NJTkdMRUJMT0NLOgotCQlEQkcoInN5c19wdHJhY2UoU0lOR0xFQkxPQ0spXG4iKTsKLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlnb3RvIG91dF90c2s7Ci0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQljaGlsZC0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOwotCQljaGlsZC0+cHRyYWNlIHw9IFBUX0JMT0NLU1RFUDsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0KLQkJLyogRW5hYmxlIHRha2VuIGJyYW5jaCB0cmFwLiAqLwotCQlwYV9wc3coY2hpbGQpLT5yID0gMDsKLQkJcGFfcHN3KGNoaWxkKS0+dCA9IDE7Ci0JCXBhX3BzdyhjaGlsZCktPmggPSAwOwotCQlwYV9wc3coY2hpbGQpLT5sID0gMDsKLQkJZ290byBvdXRfd2FrZTsKLQotCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6Ci0JCURCRygic3lzX3B0cmFjZShTSU5HTEVTVEVQKVxuIik7Ci0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJZ290byBvdXRfdHNrOwotCi0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQljaGlsZC0+cHRyYWNlICY9IH5QVF9CTE9DS1NURVA7Ci0JCWNoaWxkLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0KLQkJaWYgKHBhX3BzdyhjaGlsZCktPm4pIHsKLQkJCXN0cnVjdCBzaWdpbmZvIHNpOwotCi0JCQkvKiBOdWxsaWZpZWQsIGp1c3QgY3Jhbmsgb3ZlciB0aGUgcXVldWUuICovCi0JCQl0YXNrX3JlZ3MoY2hpbGQpLT5pYW9xWzBdID0gdGFza19yZWdzKGNoaWxkKS0+aWFvcVsxXTsKLQkJCXRhc2tfcmVncyhjaGlsZCktPmlhc3FbMF0gPSB0YXNrX3JlZ3MoY2hpbGQpLT5pYXNxWzFdOwotCQkJdGFza19yZWdzKGNoaWxkKS0+aWFvcVsxXSA9IHRhc2tfcmVncyhjaGlsZCktPmlhb3FbMF0gKyA0OwotCQkJcGFfcHN3KGNoaWxkKS0+biA9IDA7Ci0JCQlwYV9wc3coY2hpbGQpLT54ID0gMDsKLQkJCXBhX3BzdyhjaGlsZCktPnkgPSAwOwotCQkJcGFfcHN3KGNoaWxkKS0+eiA9IDA7Ci0JCQlwYV9wc3coY2hpbGQpLT5iID0gMDsKLQkJCXB0cmFjZV9kaXNhYmxlKGNoaWxkKTsKLQkJCS8qIERvbid0IHdha2UgdXAgdGhlIGNoaWxkLCBidXQgbGV0IHRoZQotCQkJICAgcGFyZW50IGtub3cgc29tZXRoaW5nIGhhcHBlbmVkLiAqLwotCQkJc2kuc2lfY29kZSA9IFRSQVBfVFJBQ0U7Ci0JCQlzaS5zaV9hZGRyID0gKHZvaWQgX191c2VyICopICh0YXNrX3JlZ3MoY2hpbGQpLT5pYW9xWzBdICYgfjMpOwotCQkJc2kuc2lfc2lnbm8gPSBTSUdUUkFQOwotCQkJc2kuc2lfZXJybm8gPSAwOwotCQkJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJnNpLCBjaGlsZCk7Ci0JCQkvL25vdGlmeV9wYXJlbnQoY2hpbGQsIFNJR0NITEQpOwotCQkJLy9yZXQgPSAwOwotCQkJZ290byBvdXRfd2FrZTsKLQkJfQotCi0JCS8qIEVuYWJsZSByZWNvdmVyeSBjb3VudGVyIHRyYXBzLiAgVGhlIHJlY292ZXJ5IGNvdW50ZXIKLQkJICogaXRzZWxmIHdpbGwgYmUgc2V0IHRvIHplcm8gb24gYSB0YXNrIHN3aXRjaC4gIElmIHRoZQotCQkgKiB0YXNrIGlzIHN1c3BlbmRlZCBvbiBhIHN5c2NhbGwgdGhlbiB0aGUgc3lzY2FsbCByZXR1cm4KLQkJICogcGF0aCB3aWxsIG92ZXJ3cml0ZSB0aGUgcmVjb3ZlcnkgY291bnRlciB3aXRoIGEgc3VpdGFibGUKLQkJICogdmFsdWUgc3VjaCB0aGF0IGl0IHRyYXBzIG9uY2UgYmFjayBpbiB1c2VyIHNwYWNlLiAgV2UKLQkJICogZGlzYWJsZSBpbnRlcnJ1cHRzIGluIHRoZSBjaGlsZHMgUFNXIGhlcmUgYWxzbywgdG8gYXZvaWQKLQkJICogaW50ZXJydXB0cyB3aGlsZSB0aGUgcmVjb3ZlcnkgY291bnRlciBpcyBkZWNyZW1lbnRpbmcuCi0JCSAqLwotCQlwYV9wc3coY2hpbGQpLT5yID0gMTsKLQkJcGFfcHN3KGNoaWxkKS0+dCA9IDA7Ci0JCXBhX3BzdyhjaGlsZCktPmggPSAwOwotCQlwYV9wc3coY2hpbGQpLT5sID0gMDsKLQkJLyogZ2l2ZSBpdCBhIGNoYW5jZSB0byBydW4uICovCi0JCWdvdG8gb3V0X3dha2U7Ci0KLQljYXNlIFBUUkFDRV9HRVRFVkVOVE1TRzoKLSAgICAgICAgICAgICAgICByZXQgPSBwdXRfdXNlcihjaGlsZC0+cHRyYWNlX21lc3NhZ2UsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGRhdGEpOwotCQlnb3RvIG91dF90c2s7CisJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwotCQlnb3RvIG91dF90c2s7CisJCXJldCA9IGNvbXBhdF9wdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CisJCWJyZWFrOwogCX0KIAotb3V0X3dha2Vfbm90cmFwOgotCXB0cmFjZV9kaXNhYmxlKGNoaWxkKTsKLW91dF93YWtlOgotCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JcmV0ID0gMDsKLW91dF90c2s6Ci0JREJHKCJhcmNoX3B0cmFjZSglbGQsICVkLCAlbHgsICVseCkgcmV0dXJuaW5nICVsZFxuIiwKLQkJcmVxdWVzdCwgcGlkLCBvYWRkciwgb2RhdGEsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgorCiAKIHZvaWQgc3lzY2FsbF90cmFjZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3JlYWwyLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcmVhbDIuUwppbmRleCA3YTkyNjk1Li41ZjNkM2ExIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcmVhbDIuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcmVhbDIuUwpAQCAtOCwxMiArOCwyNCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8YXNtL3BkYy5oPgogI2luY2x1ZGUgPGFzbS9wc3cuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibHkuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAorCiAJLnNlY3Rpb24JLmJzcworCisJLmV4cG9ydCBwZGNfcmVzdWx0CisJLmV4cG9ydCBwZGNfcmVzdWx0MgorCS5hbGlnbiA4CitwZGNfcmVzdWx0OgorCS5ibG9jawlBU01fUERDX1JFU1VMVF9TSVpFCitwZGNfcmVzdWx0MjoKKwkuYmxvY2sJQVNNX1BEQ19SRVNVTFRfU0laRQorCiAJLmV4cG9ydCByZWFsX3N0YWNrCiAJLmV4cG9ydCByZWFsMzJfc3RhY2sKIAkuZXhwb3J0IHJlYWw2NF9zdGFjawpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NldHVwLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYwppbmRleCAzOWU3YzVhLi43ZDI3ODUzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9wZGNfY2hhc3Npcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBjb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOwogCkBAIC0xMjMsNiArMTI0LDcgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlleHRlcm4gaW50IHBhcmlzY19uYXJyb3dfZmlybXdhcmU7CiAjZW5kaWYKKwl1bndpbmRfaW5pdCgpOwogCiAJaW5pdF9wZXJfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CS8qIFNldCBNb2RlcyAmIEVuYWJsZSBGUCAqLwogCkBAIC0zNjgsNiArMzcwLDMxIEBACiAKIAlyZXR1cm4gMDsKIH0KLQogYXJjaF9pbml0Y2FsbChwYXJpc2NfaW5pdCk7CiAKK3ZvaWQgc3RhcnRfcGFyaXNjKHZvaWQpCit7CisJZXh0ZXJuIHZvaWQgc3RhcnRfa2VybmVsKHZvaWQpOworCisJaW50IHJldCwgY3B1bnVtOworCXN0cnVjdCBwZGNfY29wcm9jX2NmZyBjb3Byb2NfY2ZnOworCisJY3B1bnVtID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJc2V0X2Zpcm13YXJlX3dpZHRoX3VubG9ja2VkKCk7CisKKwlyZXQgPSBwZGNfY29wcm9jX2NmZ191bmxvY2tlZCgmY29wcm9jX2NmZyk7CisJaWYgKHJldCA+PSAwICYmIGNvcHJvY19jZmcuY2NyX2Z1bmN0aW9uYWwpIHsKKwkJbXRjdGwoY29wcm9jX2NmZy5jY3JfZnVuY3Rpb25hbCwgMTApOworCisJCWNwdV9kYXRhW2NwdW51bV0uZnBfcmV2ID0gY29wcm9jX2NmZy5yZXZpc2lvbjsKKwkJY3B1X2RhdGFbY3B1bnVtXS5mcF9tb2RlbCA9IGNvcHJvY19jZmcubW9kZWw7CisKKwkJYXNtIHZvbGF0aWxlICgiZnN0ZAklZnIwLDgoJXNwKSIpOworCX0gZWxzZSB7CisJCXBhbmljKCJtdXN0IGhhdmUgYW4gZnB1IHRvIGJvb3QgbGludXgiKTsKKwl9CisKKwlzdGFydF9rZXJuZWwoKTsKKwkvLyBub3QgcmVhY2hlZAorfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggYzdlNTlmNS4uMzAzZDJiNiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC04Nyw3ICs4Nyw3IEBACiAJRU5UUllfU0FNRShzZXR1aWQpCiAJRU5UUllfU0FNRShnZXR1aWQpCiAJRU5UUllfQ09NUChzdGltZSkJCS8qIDI1ICovCi0JRU5UUllfU0FNRShwdHJhY2UpCisJRU5UUllfQ09NUChwdHJhY2UpCiAJRU5UUllfU0FNRShhbGFybSkKIAkvKiBzZWUgc3RhdCBjb21tZW50ICovCiAJRU5UUllfQ09NUChuZXdmc3RhdCkKQEAgLTQwNyw2ICs0MDcsMTIgQEAKIAlFTlRSWV9TQU1FKHRpbWVyZmRfY3JlYXRlKQogCUVOVFJZX0NPTVAodGltZXJmZF9zZXR0aW1lKQogCUVOVFJZX0NPTVAodGltZXJmZF9nZXR0aW1lKQorCUVOVFJZX0NPTVAoc2lnbmFsZmQ0KQorCUVOVFJZX1NBTUUoZXZlbnRmZDIpCQkvKiAzMTAgKi8KKwlFTlRSWV9TQU1FKGVwb2xsX2NyZWF0ZTEpCisJRU5UUllfU0FNRShkdXAzKQorCUVOVFJZX1NBTUUocGlwZTIpCisJRU5UUllfU0FNRShpbm90aWZ5X2luaXQxKQogCiAJLyogTm90aGluZyB5ZXQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKaW5kZXggMjRiZTg2Yi4uNGQwOTIwMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMjE1LDYgKzIxNiwyNCBAQAogCWNwdV9kYXRhW2NwdV0uaXRfdmFsdWUgPSBuZXh0X3RpY2s7CiB9CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX3BhcmlzY19kZXYgPSB7CisJLm5hbWUgPSAicnRjLXBhcmlzYyIsCisJLmlkID0gLTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBydGNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19wYXJpc2NfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgcnRjIGRldmljZS4uLlxuIik7CisKKwkvKiBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgKi8KKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHJ0Y19pbml0KTsKKwogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJc3RhdGljIHN0cnVjdCBwZGNfdG9kIHRvZF9kYXRhOwpAQCAtMjQ1LDQgKzI2NCwzIEBACiAJCXh0aW1lLnR2X25zZWMgPSAwOwogCX0KIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCmluZGV4IDcwMWIyZDIuLjY3NzNjNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogfQogCiAvKiBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoIHRvIGltcG9ydCB0aGUga2VybmVsIHVud2luZCBpbmZvICovCi1zdGF0aWMgaW50IHVud2luZF9pbml0KHZvaWQpCitpbnQgdW53aW5kX2luaXQodm9pZCkKIHsKIAlsb25nIHN0YXJ0LCBzdG9wOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZ3AgX19hc21fXyAoInIyNyIpOwpAQCAtNDE3LDUgKzQxNywzIEBACiAKIAlyZXR1cm4gcmV0OwogfQotCi1tb2R1bGVfaW5pdCh1bndpbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDM4MGJhYTEuLjkzOTExOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0yMzAsNiArMjMwLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNjRlMTQ0NS4uNWFjNTFlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMCw5ICsxMCwxMyBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20va2R1bXAuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyoKICAqIE9uIFBQQzMyIHBhZ2Ugc2l6ZSBpcyA0Sy4gRm9yIFBQQzY0IHdlIHN1cHBvcnQgZWl0aGVyIDRLIG9yIDY0SyBzb2Z0d2FyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggYWUyZWE4MC4uOTA0N2FmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC03NCw2ICs3NCwxMyBAQAogCXVuc2lnbmVkIGxvbmcgcGNpX2lvX3NpemU7CiAjZW5kaWYKIAorCS8qIFNvbWUgbWFjaGluZXMgaGF2ZSBhIHNwZWNpYWwgcmVnaW9uIHRvIGZvcndhcmQgdGhlIElTQQorCSAqICJtZW1vcnkiIGN5Y2xlcyBzdWNoIGFzIFZHQSBtZW1vcnkgcmVnaW9ucy4gTGVmdCB0byAwCisJICogaWYgdW5zdXBwb3J0ZWQKKwkgKi8KKwlyZXNvdXJjZV9zaXplX3QJaXNhX21lbV9waHlzOworCXJlc291cmNlX3NpemVfdAlpc2FfbWVtX3NpemU7CisKIAlzdHJ1Y3QgcGNpX29wcyAqb3BzOwogCXVuc2lnbmVkIGludCBfX2lvbWVtICpjZmdfYWRkcjsKIAl2b2lkIF9faW9tZW0gKmNmZ19kYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDBlNTJjNzguLjM5ZDU0N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTEyMyw2ICsxMjMsMTYgQEAKIC8qIFRlbGwgZHJpdmVycy9wY2kvcHJvYy5jIHRoYXQgd2UgaGF2ZSBwY2lfbW1hcF9wYWdlX3JhbmdlKCkgKi8KICNkZWZpbmUgSEFWRV9QQ0lfTU1BUAkxCiAKK2V4dGVybiBpbnQgcGNpX2xlZ2FjeV9yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIGxvZmZfdCBwb3J0LCB1MzIgKnZhbCwKKwkJCSAgIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IHBjaV9sZWdhY3lfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgbG9mZl90IHBvcnQsIHUzMiB2YWwsCisJCQkgICBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCBwY2lfbW1hcF9sZWdhY3lfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSk7CisKKyNkZWZpbmUgSEFWRV9QQ0lfTEVHQUNZCTEKKwogI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpCiAvKgogICogRm9yIDY0LWJpdCBrZXJuZWxzLCBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AuCkBAIC0yMjYsNSArMjM2LDYgQEAKIGV4dGVybiB2b2lkIHBjaWJpb3NfZG9fYnVzX3NldHVwKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgcGNpYmlvc19maXh1cF9vZl9wcm9iZWRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCisKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fUE9XRVJQQ19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaAppbmRleCBmZGE5ODcxLi41YWEyMmNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaApAQCAtNjc4LDYgKzY3OCw4IEBACiAJdTggYnVmW1BTM0FWX1BLVF9BVkJfUEFSQU1fTUFYX0JVRl9TSVpFXTsKIH07CiAKKy8qIGNoYW5uZWwgc3RhdHVzICovCitleHRlcm4gdTggcHMzYXZfbW9kZV9jc19pbmZvW107CiAKIC8qKiBjb21tYW5kIHN0YXR1cyAqKi8KICNkZWZpbmUgUFMzQVZfU1RBVFVTX1NVQ0NFU1MJCQkweDAwMDAJLyogc3VjY2VzcyAqLwpAQCAtNzM1LDYgKzczNyw3IEBACiBleHRlcm4gaW50IHBzM2F2X3ZpZGVvX21vZGUycmVzKHUzMiwgdTMyICosIHUzMiAqKTsKIGV4dGVybiBpbnQgcHMzYXZfdmlkZW9fbXV0ZShpbnQpOwogZXh0ZXJuIGludCBwczNhdl9hdWRpb19tdXRlKGludCk7CitleHRlcm4gaW50IHBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKGludCk7CiBleHRlcm4gaW50IHBzM2F2X2Rldl9vcGVuKHZvaWQpOwogZXh0ZXJuIGludCBwczNhdl9kZXZfY2xvc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBwczNhdl9yZWdpc3Rlcl9mbGlwX2N0bCh2b2lkICgqZmxpcF9jdGwpKGludCBvbiwgdm9pZCAqZGF0YSksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNzM0ZTA3NS4uMjgwYTkwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAjZGVmaW5lIENIRUNLX0ZVTExfUkVHUyhyZWdzKQkJCQkJCSAgICAgIFwKIGRvIHsJCQkJCQkJCQkgICAgICBcCiAJaWYgKChyZWdzKS0+dHJhcCAmIDEpCQkJCQkJICAgICAgXAotCQlwcmludGsoS0VSTl9DUklUICIlczogcGFydGlhbCByZWdpc3RlciBzZXRcbiIsIF9fRlVOQ1RJT05fXyk7IFwKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IHBhcnRpYWwgcmVnaXN0ZXIgc2V0XG4iLCBfX2Z1bmNfXyk7IFwKIH0gd2hpbGUgKDApCiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IGEzMjNjOWIuLjk3ZTA1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC0yNyw2ICsyNyw5IEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogdm9pZCBfX2luaXQgcmVzZXJ2ZV9rZHVtcF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbG1iX3Jlc2VydmUoMCwgS0RVTVBfUkVTRVJWRV9MSU1JVCk7CkBAIC02Niw3ICs2OSwxMSBAQAogCURCRygiIDwtIHNldHVwX2tkdW1wX3RyYW1wb2xpbmUoKVxuIik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLwogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZWxmY29yZWhkcihjaGFyICpwKQogewogCWlmIChwKQpAQCAtNzUsNyArODIsNiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiZWxmY29yZWhkcj0iLCBwYXJzZV9lbGZjb3JlaGRyKTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9zYXZlbWF4bWVtKGNoYXIgKnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDAxY2U4YzMuLjM4MTVkODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC00NTEsNyArNDUxLDggQEAKIAkJcGNpX2Rldl9wdXQocGRldik7CiAJfQogCi0JREJHKCJub24tUENJIG1hcCBmb3IgJWx4LCBwcm90OiAlbHhcbiIsIG9mZnNldCwgcHJvdCk7CisJREJHKCJub24tUENJIG1hcCBmb3IgJWxseCwgcHJvdDogJWx4XG4iLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwgcHJvdCk7CiAKIAlyZXR1cm4gX19wZ3Byb3QocHJvdCk7CiB9CkBAIC00OTAsNiArNDkxLDEzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFRoaXMgcHJvdmlkZXMgbGVnYWN5IElPIHJlYWQgYWNjZXNzIG9uIGEgYnVzICovCitpbnQgcGNpX2xlZ2FjeV9yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIGxvZmZfdCBwb3J0LCB1MzIgKnZhbCwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CisJc3RydWN0IHJlc291cmNlICpycCA9ICZob3NlLT5pb19yZXNvdXJjZTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwkvKiBDaGVjayBpZiBwb3J0IGNhbiBiZSBzdXBwb3J0ZWQgYnkgdGhhdCBidXMuIFdlIG9ubHkgY2hlY2sKKwkgKiB0aGUgcmFuZ2VzIG9mIHRoZSBQSEIgdGhvdWdoLCBub3QgdGhlIGJ1cyBpdHNlbGYgYXMgdGhlIHJ1bGVzCisJICogZm9yIGZvcndhcmRpbmcgbGVnYWN5IGN5Y2xlcyBkb3duIGJyaWRnZXMgYXJlIG5vdCBvdXIgcHJvYmxlbQorCSAqIGhlcmUuIFNvIGlmIHRoZSBob3N0IGJyaWRnZSBzdXBwb3J0cyBpdCwgd2UgZG8gaXQuCisJICovCisJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7CisJb2Zmc2V0ICs9IHBvcnQ7CisKKwlpZiAoIShycC0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwlpZiAob2Zmc2V0IDwgcnAtPnN0YXJ0IHx8IChvZmZzZXQgKyBzaXplKSA+IHJwLT5lbmQpCisJCXJldHVybiAtRU5YSU87CisJYWRkciA9IGhvc2UtPmlvX2Jhc2VfdmlydCArIHBvcnQ7CisKKwlzd2l0Y2goc2l6ZSkgeworCWNhc2UgMToKKwkJKigodTggKil2YWwpID0gaW5fOChhZGRyKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAyOgorCQlpZiAocG9ydCAmIDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKigodTE2ICopdmFsKSA9IGluX2xlMTYoYWRkcik7CisJCXJldHVybiAyOworCWNhc2UgNDoKKwkJaWYgKHBvcnQgJiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCSooKHUzMiAqKXZhbCkgPSBpbl9sZTMyKGFkZHIpOworCQlyZXR1cm4gNDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIFRoaXMgcHJvdmlkZXMgbGVnYWN5IElPIHdyaXRlIGFjY2VzcyBvbiBhIGJ1cyAqLworaW50IHBjaV9sZWdhY3lfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgbG9mZl90IHBvcnQsIHUzMiB2YWwsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOworCXN0cnVjdCByZXNvdXJjZSAqcnAgPSAmaG9zZS0+aW9fcmVzb3VyY2U7CisJdm9pZCBfX2lvbWVtICphZGRyOworCisJLyogQ2hlY2sgaWYgcG9ydCBjYW4gYmUgc3VwcG9ydGVkIGJ5IHRoYXQgYnVzLiBXZSBvbmx5IGNoZWNrCisJICogdGhlIHJhbmdlcyBvZiB0aGUgUEhCIHRob3VnaCwgbm90IHRoZSBidXMgaXRzZWxmIGFzIHRoZSBydWxlcworCSAqIGZvciBmb3J3YXJkaW5nIGxlZ2FjeSBjeWNsZXMgZG93biBicmlkZ2VzIGFyZSBub3Qgb3VyIHByb2JsZW0KKwkgKiBoZXJlLiBTbyBpZiB0aGUgaG9zdCBicmlkZ2Ugc3VwcG9ydHMgaXQsIHdlIGRvIGl0LgorCSAqLworCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKWhvc2UtPmlvX2Jhc2VfdmlydCAtIF9JT19CQVNFOworCW9mZnNldCArPSBwb3J0OworCisJaWYgKCEocnAtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpCisJCXJldHVybiAtRU5YSU87CisJaWYgKG9mZnNldCA8IHJwLT5zdGFydCB8fCAob2Zmc2V0ICsgc2l6ZSkgPiBycC0+ZW5kKQorCQlyZXR1cm4gLUVOWElPOworCWFkZHIgPSBob3NlLT5pb19iYXNlX3ZpcnQgKyBwb3J0OworCisJLyogV0FSTklORzogVGhlIGdlbmVyaWMgY29kZSBpcyBpZGlvdGljLiBJdCBnZXRzIHBhc3NlZCBhIHBvaW50ZXIKKwkgKiB0byB3aGF0IGNhbiBiZSBhIDEsIDIgb3IgNCBieXRlIHF1YW50aXR5IGFuZCBhbHdheXMgcmVhZHMgdGhhdAorCSAqIGFzIGEgdTMyLCB3aGljaCBtZWFucyB0aGF0IHdlIGhhdmUgdG8gY29ycmVjdCB0aGUgbG9jYXRpb24gb2YKKwkgKiB0aGUgZGF0YSByZWFkIHdpdGhpbiB0aG9zZSAzMiBiaXRzIGZvciBzaXplIDEgYW5kIDIKKwkgKi8KKwlzd2l0Y2goc2l6ZSkgeworCWNhc2UgMToKKwkJb3V0XzgoYWRkciwgdmFsID4+IDI0KTsKKwkJcmV0dXJuIDE7CisJY2FzZSAyOgorCQlpZiAocG9ydCAmIDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJb3V0X2xlMTYoYWRkciwgdmFsID4+IDE2KTsKKwkJcmV0dXJuIDI7CisJY2FzZSA0OgorCQlpZiAocG9ydCAmIDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJb3V0X2xlMzIoYWRkciwgdmFsKTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBUaGlzIHByb3ZpZGVzIGxlZ2FjeSBJTyBvciBtZW1vcnkgbW1hcCBhY2Nlc3Mgb24gYSBidXMgKi8KK2ludCBwY2lfbW1hcF9sZWdhY3lfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0KKwkJKChyZXNvdXJjZV9zaXplX3Qpdm1hLT52bV9wZ29mZikgPDwgUEFHRV9TSElGVDsKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJwOworCisJcHJfZGVidWcoInBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKCUwNHg6JTAyeCwgJXMgQCVsbHguLiVsbHgpXG4iLAorCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlciwKKwkJIG1tYXBfc3RhdGUgPT0gcGNpX21tYXBfbWVtID8gIk1FTSIgOiAiSU8iLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKShvZmZzZXQgKyBzaXplIC0gMSkpOworCisJaWYgKG1tYXBfc3RhdGUgPT0gcGNpX21tYXBfbWVtKSB7CisJCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBob3NlLT5pc2FfbWVtX3NpemUpCisJCQlyZXR1cm4gLUVOWElPOworCQlvZmZzZXQgKz0gaG9zZS0+aXNhX21lbV9waHlzOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7CisJCXVuc2lnbmVkIGxvbmcgcm9mZnNldCA9IG9mZnNldCArIGlvX29mZnNldDsKKwkJcnAgPSAmaG9zZS0+aW9fcmVzb3VyY2U7CisJCWlmICghKHJwLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pKQorCQkJcmV0dXJuIC1FTlhJTzsKKwkJaWYgKHJvZmZzZXQgPCBycC0+c3RhcnQgfHwgKHJvZmZzZXQgKyBzaXplKSA+IHJwLT5lbmQpCisJCQlyZXR1cm4gLUVOWElPOworCQlvZmZzZXQgKz0gaG9zZS0+aW9fYmFzZV9waHlzOworCX0KKwlwcl9kZWJ1ZygiIC0+IG1hcHBpbmcgcGh5cyAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCk7CisKKwl2bWEtPnZtX3Bnb2ZmID0gb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7CisJdm1hLT52bV9wYWdlX3Byb3QgfD0gX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEOworCXJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3Bnb2ZmLAorCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCSAgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisKIHZvaWQgcGNpX3Jlc291cmNlX3RvX3VzZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwKIAkJCSAgY29uc3Qgc3RydWN0IHJlc291cmNlICpyc3JjLAogCQkJICByZXNvdXJjZV9zaXplX3QgKnN0YXJ0LCByZXNvdXJjZV9zaXplX3QgKmVuZCkKQEAgLTU5Miw2ICs3MTgsMTIgQEAKIAkJY3B1X2FkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhkZXYsIHJhbmdlcyArIDMpOwogCQlzaXplID0gb2ZfcmVhZF9udW1iZXIocmFuZ2VzICsgcG5hICsgMywgMik7CiAJCXJhbmdlcyArPSBucDsKKworCQkvKiBJZiB3ZSBmYWlsZWQgdHJhbnNsYXRpb24gb3IgZ290IGEgemVyby1zaXplZCByZWdpb24KKwkJICogKHNvbWUgRlcgdHJ5IHRvIGZlZWQgdXMgd2l0aCBub24gc2Vuc2ljYWwgemVybyBzaXplZCByZWdpb25zCisJCSAqIHN1Y2ggYXMgcG93ZXIzIHdoaWNoIGxvb2sgbGlrZSBzb21lIGtpbmQgb2YgYXR0ZW1wdCBhdCBleHBvc2luZworCQkgKiB0aGUgVkdBIG1lbW9yeSBob2xlKQorCQkgKi8KIAkJaWYgKGNwdV9hZGRyID09IE9GX0JBRF9BRERSIHx8IHNpemUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCkBAIC02NjUsNiArNzk3LDggQEAKIAkJCQlpc2FfaG9sZSA9IG1lbW5vOwogCQkJCWlmIChwcmltYXJ5IHx8IGlzYV9tZW1fYmFzZSA9PSAwKQogCQkJCQlpc2FfbWVtX2Jhc2UgPSBjcHVfYWRkcjsKKwkJCQlob3NlLT5pc2FfbWVtX3BoeXMgPSBjcHVfYWRkcjsKKwkJCQlob3NlLT5pc2FfbWVtX3NpemUgPSBzaXplOwogCQkJfQogCiAJCQkvKiBXZSBnZXQgdGhlIFBDSS9NZW0gb2Zmc2V0IGZyb20gdGhlIGZpcnN0IHJhbmdlIG9yCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggOThkN2JmOS4uYjllMWExZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtMTM0LDIzICsxMzQsNiBAQAogCiAJcmV0dXJuIF9fYWRkX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogfQotCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JaW50IHJldDsKLQotCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIChzaXplID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IG9mZmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBlbmRfcGZuLCAxMjAgKiBIWik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JLyogQXJjaC1zcGVjaWZpYyBjYWxscyBnbyBoZXJlIC0gbmV4dCBwYXRjaCAqLwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHV0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmMKaW5kZXggOTJkMjBlOS4uMmVjZTM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmMKQEAgLTIzMiw2ICsyMzIsNyBAQAogCiAJcmVtb3ZlX3Byb2NfZW50cnkoInNwdXRyYWNlIiwgTlVMTCk7CiAJa2ZyZWUoc3B1dHJhY2VfbG9nKTsKKwltYXJrZXJfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwogfQogCiBtb2R1bGVfaW5pdChzcHV0cmFjZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggYmM1ODFkOC4uNzBiNzY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTc4LDYgKzc4LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQmFzZSBzZXR1cCIKIAogY29tbWVudCAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBlYTQwYTlkLi5kZTNmYWQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTksNiArOTksNyBAQAogI2RlZmluZSBUSUZfMzFCSVQJCTE4CS8qIDMyYml0IHByb2Nlc3MgKi8gCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE5CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJMjAJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkyMQkvKiB0aHJlYWQgaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMTEyLDYgKzExMyw3IEBACiAjZGVmaW5lIF9USUZfVVNFREZQVQkJKDE8PFRJRl9VU0VERlBVKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfMzFCSVQJCSgxPDxUSUZfMzFCSVQpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggMTE2OTEzMC4uMTU4YjBkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xODksMTQgKzE4OSwzIEBACiAJcmV0dXJuIHJjOwogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwotCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0KLQlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOwotCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOwotfQotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNTEzMWQ1MC4uY2IyYzg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTIsNiArMTIsNyBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJaGVscAogCSAgVGhlIFN1cGVySCBpcyBhIFJJU0MgcHJvY2Vzc29yIHRhcmdldGVkIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcwogCSAgYW5kIGNvbnN1bWVyIGVsZWN0cm9uaWNzOyBpdCB3YXMgYWxzbyB1c2VkIGluIHRoZSBTZWdhIERyZWFtY2FzdApAQCAtMjAsNiArMjEsMTAgQEAKIAogY29uZmlnIFNVUEVSSDMyCiAJZGVmX2Jvb2wgIVNVUEVSSDY0CisJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSworCXNlbGVjdCBIQVZFX0ZUUkFDRQogCiBjb25maWcgU1VQRVJINjQKIAlkZWZfYm9vbCB5IGlmIENQVV9TSDUKQEAgLTU0LDggKzU5LDExIEBACiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0dQSU8KKwlkZWZfYm9vbCBuCisKIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQotCWRlZl9ib29sIHkKKwlib29sCiAKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAJYm9vbApAQCAtNjYsNiArNzQsOSBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCBuCiAKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAorCWJvb2wKKwogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKQEAgLTkyLDYgKzEwMywxMCBAQAogY29uZmlnIExPQ0tERVBfU1VQUE9SVAogCWRlZl9ib29sIHkKIAorY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gIVNNUAorCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCiAJZGVmX2Jvb2wgbgogCkBAIC0xMDYsNiArMTIxLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiU3lzdGVtIHR5cGUiCiAKICMKQEAgLTMyMyw2ICszNDAsNyBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCBpZiBTTVAKIAogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtNDkwLDcgKzUwOCw2IEBACiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKIAkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggNGQyZDEwMi4uZTZkMmM4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgNEtTVEFDS1MKIAlib29sICJVc2UgNEtiIGZvciBrZXJuZWwgc3RhY2tzIGluc3RlYWQgb2YgOEtiIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKSAmJiAhUEFHRV9TSVpFXzY0S0IKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUga2VybmVsIHdpbGwgdXNlIGEgNEtiIHN0YWNrc2l6ZSBmb3IgdGhlCiAJICBrZXJuZWwgc3RhY2sgYXR0YWNoZWQgdG8gZWFjaCBwcm9jZXNzL3RocmVhZC4gVGhpcyBmYWNpbGl0YXRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggMDFkODVjNy4uMWY0MDliZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC03Niw4ICs3NiwxMCBAQAogIyBlcnJvciBtZXNzYWdlcyBkdXJpbmcgbGlua2luZy4KICMKIGlmZGVmIENPTkZJR19TVVBFUkgzMgorVVRTX01BQ0hJTkUJOj0gc2gKIExERkxBR1Nfdm1saW51eAkrPSAtZSBfc3RleHQKIGVsc2UKK1VUU19NQUNISU5FCTo9IHNoNjQKIExERkxBR1Nfdm1saW51eAkrPSAtLWRlZnN5bSBwaHlzX3N0ZXh0PV9zdGV4dC0kKENPTkZJR19QQUdFX09GRlNFVCkgXAogCQkgICAtLWRlZnN5bSBwaHlzX3N0ZXh0X3NobWVkaWE9cGh5c19zdGV4dCsxIFwKIAkJICAgLWUgcGh5c19zdGV4dF9zaG1lZGlhCkBAIC0xMjMsNiArMTI1LDkgQEAKIAkgICAgICQoZmlsdGVyLW91dCAuLCAkKHBhdHN1YnN0ICUsJS8sJChtYWNoZGlyLXkpKSkpCiBlbmRpZgogCisjIENvbW1vbiBtYWNoaW5lIHR5cGUgaGVhZGVycy4gTm90IHBhcnQgb2YgdGhlIGFyY2gvc2gvYm9hcmRzLyBoaWVyYXJjaHkuCittYWNoZGlyLXkJKz0gbWFjaC1jb21tb24KKwogIyBDb21wYW5pb24gY2hpcHMKIGNvcmUtJChDT05GSUdfSEQ2NDQ2WF9TRVJJRVMpCSs9IGFyY2gvc2gvY2NoaXBzL2hkNjQ0NngvCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IGFlMTk0ODYuLjUwNDY3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTI4LDYgKzEyOCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogY29uZmlnIFNIX1NESzc3ODAKQEAgLTE2Miw2ICsxNjMsNyBAQAogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNjksNiArMTcxLDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMworCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODQsNiArMTg3LDEzIEBACiAJYm9vbCAiRURPU0s3NzA1IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA1CiAKK2NvbmZpZyBTSF9FRE9TSzc3NjAKKwlib29sICJFRE9TSzc3NjAiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjAKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBFRE9TSzc3NjAKKwkgIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9TSDQyMDJfTUlDUk9ERVYKIAlib29sICJTSDQtMjAyIE1pY3JvRGV2IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g0XzIwMgpAQCAtMjI4LDYgKzIzOCw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAorCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDQ2MzAyMmMuLmQ5ZWZhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1NIX1JTSzcyMDMpCSs9IGJvYXJkLXJzazcyMDMubwogb2JqLSQoQ09ORklHX1NIX1NINzc4NUxDUikJKz0gYm9hcmQtc2g3Nzg1bGNyLm8KIG9iai0kKENPTkZJR19TSF9TSE1JTikJCSs9IGJvYXJkLXNobWluLm8KK29iai0kKENPTkZJR19TSF9FRE9TSzc3NjApCSs9IGJvYXJkLWVkb3NrNzc2MC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCBmZDE2MTI1Li43Yzc4NzRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE4LDExICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncyA9IFNNQzkxMVhfVVNFXzMyQklULApAQCAtNTIsMjAgKzU0LDMzIEBACiAJfSwKIH07CiAKKy8qCisgKiBBUDMyMCBhbmQgQVAzMjVSWEEgaGFzIENQTEQgZGF0YSBpbiBOT1IgRmxhc2goMHhBODAwMDAtMHhBQkZGRkYpLgorICogSWYgdGhpcyBhcmVhIGVyYXNlZCwgdGhpcyBib2FyZCBjYW4gbm90IGJvb3QuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhcDMyNXJ4YV9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJIC5uYW1lID0gInVib290IiwKLQkJIC5vZmZzZXQgPSAwLAotCQkgLnNpemUgPSAoMSAqIDEwMjQgKiAxMDI0KSwKLQkJIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJCS5uYW1lID0gInVib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDEgKiAxMDI0ICogMTAyNCksCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCiAJfSwgewotCQkgLm5hbWUgPSAia2VybmVsIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAorCQkubmFtZSA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAogCX0sIHsKLQkJIC5uYW1lID0gIm90aGVyIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5uYW1lID0gImZyZWUtYXJlYTAiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgoNyAqIDEwMjQgKiAxMDI0KSArICg1MTIgKiAxMDI0KSksCisJfSwgeworCQkubmFtZSA9ICJDUExELURhdGEiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCQkuc2l6ZSA9ICgxMDI0ICogMTI4ICogMiksCisJfSwgeworCQkubmFtZSA9ICJmcmVlLWFyZWExIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwogCkBAIC05NiwxNyArMTExLDcgQEAKICNkZWZpbmUgRlBHQV9MQ0RSRUcJMHhCNDEwMDE4MAogI2RlZmluZSBGUEdBX0JLTFJFRwkweEI0MTAwMjEyCiAjZGVmaW5lIEZQR0FfTENEUkVHX1ZBTAkweDAwMTgKLSNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEUKLSNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTQKLSNkZWZpbmUgUE9SVF9QTUNSCTB4QTQwNTAxMTYKLSNkZWZpbmUgUE9SVF9QUkNSCTB4QTQwNTAxMUMKLSNkZWZpbmUgUE9SVF9QU0NSCTB4QTQwNTAxMUUKLSNkZWZpbmUgUE9SVF9QWkNSCTB4QTQwNTAxNEMKLSNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE1OAogI2RlZmluZSBQT1JUX01TRUxDUkIJMHhBNDA1MDE4MgotI2RlZmluZSBQT1JUX1BTRFIJMHhBNDA1MDEzRQotI2RlZmluZSBQT1JUX1BaRFIJMHhBNDA1MDE2QwotI2RlZmluZSBQT1JUX1BTRUxECTB4QTQwNTAxNTQKIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhKQogewpAQCAtMTE2LDggKzEyMSw3IEBACiAJY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTQ1IpICYgfjB4MDBDMCkgfCAweDQwLCBQT1JUX1BTQ1IpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BTRFIpICYgfjB4MDgsIFBPUlRfUFNEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIApAQCAtMjgxLDEyICsyODUsODQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhcDMyNXJ4YV9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXAzMjVyeGFfZGV2aWNlc19zZXR1cCh2b2lkKQogewotCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7IC8qIExDREMgKi8KLQljbGtfYWx3YXlzX2VuYWJsZSgibXN0cDIwMyIpOyAvKiBDRVUgKi8KKwkvKiBMRDMgYW5kIExENCBMRURzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRYNSwgTlVMTCk7IC8qIFJVTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWDUsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUFRYNSwgMCk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QVFg0LCBOVUxMKTsgLyogSU5ESUNBVE9SICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRYNCwgMCk7CisJZ3Bpb19leHBvcnQoR1BJT19QVFg0LCAwKTsKKworCS8qIFNXMSBpbnB1dCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BURjcsIE5VTEwpOyAvKiBNT0RFICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEY3KTsKKwlncGlvX2V4cG9ydChHUElPX1BURjcsIDApOworCisJLyogTENEQyAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEtfUFRSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKworCS8qIExDRCBiYWNrbGlnaHQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFMzLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFMzLCAxKTsKKworCS8qIENFVSAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAzIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUWjcsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjcsIDApOyAvKiBPRV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo2LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo2LCAwKTsgLyogU1RCWV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo1LCAxKTsgLyogUlNUX0NBTSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUWjQsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjQsIDApOyAvKiBTQUREUiAqLworCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZjZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKQEAgLTMwMCwxOCArMzc2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFwMzI1cnhhX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JLyogTENEQyBjb25maWd1cmF0aW9uICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEhDUikgJiB+MHhmZmZmLCBQT1JUX1BIQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BMQ1IpICYgfjB4ZmZmZiwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QTUNSKSAmIH4weGZmZmYsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFJDUikgJiB+MHgwM2ZmLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMUMwLCBQT1JUX0hJWkNSQSk7Ci0KLQkvKiBDRVUgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMywgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4ZmYwMCkgfCAweDU1MDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXRiKChjdHJsX2luYihQT1JUX1BaRFIpICYgfjB4ZjApIHwgMHgyMCwgUE9SVF9QWkRSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9hcDMyNXJ4YSBfX2luaXRtdiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZWRvc2s3NzYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYzA5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogUmVuZXNhcyBFdXJvcGUgRURPU0s3NzYwIEJvYXJkIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU1BFUyBTb2NpZXRhJyBQcm9nZXR0YXppb25lIEVsZXR0cm9uaWNhIGUgU29mdHdhcmUgTHRkLgorICogQXV0aG9yOiBMdWNhIFNhbnRpbmkgPGx1Y2Euc2FudGluaUBzcGVzb25saW5lLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2kyYy1zaDc3NjAuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyogQnVzIHN0YXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGZvciBDUzQgYXJlYSAqLworI2RlZmluZSBCU0NfQ1M0QkNSCTB4QTRGRDAwMTAKKyNkZWZpbmUgQlNDX0NTNFdDUgkweEE0RkQwMDMwCisKKyNkZWZpbmUgU01DX0lPQkFTRQkweEEyMDAwMDAwCisjZGVmaW5lIFNNQ19JT19PRkZTRVQJMHgzMDAKKyNkZWZpbmUgU01DX0lPQUREUgkoU01DX0lPQkFTRSArIFNNQ19JT19PRkZTRVQpCisKKyNkZWZpbmUgRVRIRVJORVRfSVJRCTUKKworLyogTk9SIGZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMjU2SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gImtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMk0sCisJfSwgeworCQkubmFtZSA9ICJmcyIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMjZNLAorCX0sIHsKKwkJLm5hbWUgPSAib3RoZXIiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwKKwkucGFydHMJCT0gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk5PUiBGbGFzaCIsCisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDAwMDAwMDAwICsgU1pfMzJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5yZXNvdXJjZQk9IGVkb3NrNzc2MF9ub3JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShlZG9zazc3NjBfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogaTJjIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBzaDc3NjBfaTJjX3BsYXRkYXRhIGkyY19wZCA9IHsKKwkuc3BlZWRfa2h6CT0gNDAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NjBfaTJjMV9yZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFNINzc2MF9JMkMxX01NSU8sCisJCS5lbmQJPSBTSDc3NjBfSTJDMV9NTUlPRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LHsKKwkJLnN0YXJ0CT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZW5kCT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2g3NzYwX2kyYzFfZGV2ID0geworCS5kZXYgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wZCwKKwl9LAorCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMxX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzFfcmVzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzYwX2kyYzBfcmVzW10gPSB7CisJeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9NTUlPLAorCQkuZW5kCT0gU0g3NzYwX0kyQzBfTU1JT0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5lbmQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaDc3NjBfaTJjMF9kZXYgPSB7CisJLmRldiAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaTJjX3BkLAorCX0sCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMwX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzBfcmVzKSwKK307CisKKy8qIGV0aCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfSU9fU0hJRlRfMSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTTUNfSU9BRERSLAorCQkuZW5kCT0gU01DX0lPQUREUiArIFNaXzMyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEVUSEVSTkVUX0lSUSwKKwkJLmVuZAk9IEVUSEVSTkVUX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXYgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzLAorCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jOTF4X2luZm8sCisJfSwKK307CisKKy8qIHBsYXRmb3JtIGluaXQgY29kZSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVkb3NrNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21jOTF4X2RldiwKKwkmZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UsCisJJnNoNzc2MF9pMmMwX2RldiwKKwkmc2g3NzYwX2kyYzFfZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9lZG9zazc3NjBfZGV2aWNlcyh2b2lkKQoreworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlZG9zazc3NjBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShlZG9zazc3NjBfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChpbml0X2Vkb3NrNzc2MF9kZXZpY2VzKTsKKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfZWRvc2s3NzYwIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIkVET1NLNzc2MCIsCisJLm12X25yX2lycXMJPSAxMjgsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwppbmRleCBmM2I4YjA3Li4zZGUyMmNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwpAQCAtMTMsMTIgKzEzLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hZ2ljcGFuZWxyMi5oPgorI2luY2x1ZGUgPG1hY2gvbWFnaWNwYW5lbHIyLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjAuaD4KIAogI2RlZmluZSBMQU45MTE1X1JFQURZCShjdHJsX2lubCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQogCkBAIC0xNzAsNyArMTcyLDE0IEBACiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QUkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMTksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EwLCBOVUxMKTsKIAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMKaW5kZXggZmZiZWRjNS4uZGVkNzk5YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXJzazcyMDMuYwpAQCAtMTYsOCArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NoNzIwMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncwkJPSBTTUM5MTFYX1VTRV8xNkJJVCwKQEAgLTEyMiw2ICsxMjQsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgcnNrNzIwM19kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJLyogU2VsZWN0IHBpbnMgZm9yIFNDSUYwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVFhEMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUlhEMCwgTlVMTCk7CisKKwkvKiBMaXQgTEVEMCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BFMTAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BFMTAsIDApOworCWdwaW9fZXhwb3J0KEdQSU9fUEUxMCwgMCk7CisKIAlzZXRfbXRkX3BhcnRpdGlvbnMoKTsKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocnNrNzIwM19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKHJzazcyMDNfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBiOTVkNjc0Li40MDhiYmRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NoNzc4NWxjci5oPgorI2luY2x1ZGUgPG1hY2gvc2g3Nzg1bGNyLmg+CiAKIC8qCiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKaW5kZXggMTZlNWRhZS4uNWNjMDg2N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vc2htaW4uaD4KKyNpbmNsdWRlIDxtYWNoL3NobWluLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9pby5jCmluZGV4IDU0MWNlYTIuLjdkMTUzZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvaW8uYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Vkb3NrNzcwNS9pby5oPgorI2luY2x1ZGUgPG1hY2gvZWRvc2s3NzA1Lmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiAjZGVmaW5lIFNNQ19JT0FERFIJMHhBMjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L3NldHVwLmMKaW5kZXggZjA3NmM0NS4uYWIzZjQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9zZXR1cC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vZWRvc2s3NzA1L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9lZG9zazc3MDUuaD4KIAogc3RhdGljIHZvaWQgX19pbml0IHNoX2Vkb3NrNzcwNV9pbml0X2lycSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwppbmRleCBhZTFjZmNiLi44M2MyOGJjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCmluZGV4IDlkMzkyMWYuLmI3MjFlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKaW5kZXggODk2YzA0NS4uMzgxMWIwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCmluZGV4IGJlOGQ1NDcuLjM3YjFhMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KICNpbmNsdWRlIDxhc20vcHVzaC1zd2l0Y2guaD4KIAogc3RhdGljIGlycXJldHVybl90IHBzd19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCmluZGV4IGJjNzlhZmIuLmM1YTQwZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bmV0L2F4ODg3OTYuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKaW5kZXggMTc3ZjRmMC4uZTg1MjEyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FkYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogLyogcGVyY2VudGFnZSB2YWx1ZXMgKi8KICNkZWZpbmUgQVBNX0NSSVRJQ0FMCQkJMTAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwppbmRleCBlOTY2ODRkLi42NGFmMWYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogI2luY2x1ZGUgPGNwdS9kYWMuaD4KICNpbmNsdWRlIDxhc20vcG0uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IDQ3NWI0NmMuLjQ4ZmVjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgogCiAjZGVmaW5lCVNDUENSCTB4YTQwMDAxMTYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYwppbmRleCA1YTFjM2JiLi44YWExNzFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCmluZGV4IGM3NDQ0MGQuLjJiMGI1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xib3hyZTIuaD4KKyNpbmNsdWRlIDxtYWNoL2xib3hyZTIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKaW5kZXggOWY4YTU0MC4uNTJkZDc0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAKIAkvKgogCSAqCXdlIG5lZWQgdG8gaGF2ZSBhICdzYWZlJyBhZGRyZXNzIHRvIHJlLWRpcmVjdCBhbGwgSS9PIHJlcXVlc3RzCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwppbmRleCA0ZDMzNTA3Li43MDI3NTNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9taWNyb2Rldi5oPgogCiAjZGVmaW5lIE5VTV9FWFRFUk5BTF9JUlFTIDE2CS8qIElSTDAgLi4gSVJMMTUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jCmluZGV4IGZjOGNkMDYuLmE5MjAyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDx2aWRlby9zMWQxM3h4eGZiLmg+Ci0jaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9taWNyb2Rldi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYwppbmRleCA2ZTk2MDk1Li5kZTkwMTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL2xjZF9xdmdhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jCkBAIC0xNyw4ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDxhc20vbWlnb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisjaW5jbHVkZSA8bWFjaC9taWdvci5oPgogCiAvKiBMQ0QgTW9kdWxlIGlzIGEgUEgyNDAzMjBUIGFjY29yZGluZyB0byBib2FyZCBzY2hlbWF0aWNzLiBUaGlzIG1vZHVsZQogICogaXMgbWFkZSB1cCBvZiBhIDI0MHgzMjAgTENEIGhvb2tlZCB1cCB0byBhIFI2MTUwNVUgKG9yIEhYODM0Ny1BMDE/KQpAQCAtMzAsOSArMzIsOSBAQAogCiBzdGF0aWMgdm9pZCByZXNldF9sY2RfbW9kdWxlKHZvaWQpCiB7Ci0JY3RybF9vdXRiKGN0cmxfaW5iKFBPUlRfUEhEUikgJiB+MHgwNCwgUE9SVF9QSERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUSDIsIDApOwogCW1kZWxheSgyKTsKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QSERSKSB8IDB4MDQsIFBPUlRfUEhEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEgyLCAxKTsKIAltZGVsYXkoMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCA3MTRkY2U5Li43NjlkNjMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC0xNywxNCArMTcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2hfa2V5c2MuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDxhc20vbWlnb3IuaD4KKyNpbmNsdWRlIDxtYWNoL21pZ29yLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCiAvKiBBZGRyZXNzICAgICBJUlEgIFNpemUgIEJ1cyAgRGVzY3JpcHRpb24KICAqIDB4MDAwMDAwMDAgICAgICAgNjRNQiAgMTYgICBOT1IgRmxhc2ggKFNQMjlQTDI1Nk4pCkBAIC0zNSw3ICszNyw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7Ci0JLmZsYWdzID0gU01DOTFYX1VTRV8xNkJJVCwKKwkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X2V0aF9yZXNvdXJjZXNbXSA9IHsKQEAgLTE2OSw3ICsxNzEsNyBAQAogCiBzdGF0aWMgaW50IG1pZ29yX25hbmRfZmxhc2hfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKFBPUlRfUEFEUikgJiAweDAyOyAvKiBQVEExICovCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRBMSk7IC8qIE5BTkRfUkJuICovCiB9CiAKIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgbWlnb3JfbmFuZF9mbGFzaF9kYXRhID0gewpAQCAtMjg2LDIyICsyODgsMTUgQEAKIAogc3RhdGljIHZvaWQgY2FtZXJhX3Bvd2VyX29uKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciB2YWx1ZTsKLQogCWNhbWVyYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aWRlb19jbGsiKTsKIAljbGtfc2V0X3JhdGUoY2FtZXJhX2NsaywgMjQwMDAwMDApOwogCWNsa19lbmFibGUoY2FtZXJhX2Nsayk7CS8qIHN0YXJ0IFZJT19DS08gKi8KIAorCS8qIHVzZSBWSU9fUlNUIHRvIHRha2UgY2FtZXJhIG91dCBvZiByZXNldCAqLwogCW1kZWxheSgxMCk7Ci0JdmFsdWUgPSBjdHJsX2luYihQT1JUX1BURFIpOwotCXZhbHVlICY9IH4weDA5OwotI2lmbmRlZiBDT05GSUdfU0hfTUlHT1JfUlRBX1dWR0EKLQl2YWx1ZSB8PSAweDAxOwotI2VuZGlmCi0JY3RybF9vdXRiKHZhbHVlLCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7CiAJbWRlbGF5KDEwKTsKLQotCWN0cmxfb3V0Yih2YWx1ZSB8IDgsIFBPUlRfUFREUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFQzLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgY2FtZXJhX3Bvd2VyX29mZih2b2lkKQpAQCAtMzA5LDcgKzMwNCw3IEBACiAJY2xrX2Rpc2FibGUoY2FtZXJhX2Nsayk7IC8qIHN0b3AgVklPX0NLTyAqLwogCWNsa19wdXQoY2FtZXJhX2Nsayk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QVERSKSAmIH4weDA4LCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSTJDCkBAIC00NTgsNzUgKzQ1MywxMzUgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWlnb3JfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIExpdCBEMTEgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKKworCS8qIExpdCBEMTIgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKKworCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOworCWN0cmxfb3V0bCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKKwljdHJsX291dGwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CisKKwkvKiBLRVlTQyAqLwogCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjE0Iik7IC8qIEtFWVNDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNF9JTjYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlONCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNV9JTjUsIE5VTEwpOworCisJLyogTkFORCBGbGFzaCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NTNkFfQ0UyQiwgTlVMTCk7CisJY3RybF9vdXRsKChjdHJsX2lubChCU0NfQ1M2QUJDUikgJiB+MHgwNjAwKSB8IDB4MDIwMCwgQlNDX0NTNkFCQ1IpOworCWdwaW9fcmVxdWVzdChHUElPX1BUQTEsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRBMSk7CisKKwkvKiBUb3VjaCBQYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTYsIE5VTEwpOworCisJLyogTENEIFBhbmVsICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDAiKTsgLyogTENEQyAqLworI2lmZGVmIENPTkZJR19TSF9NSUdPUl9RVkdBIC8qIExDREMgLSBRVkdBIC0gRW5hYmxlIFNZUyBJbnRlcmZhY2Ugc2lnbmFscyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFJTLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RDUywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEUkQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFdSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVEgyLCBOVUxMKTsgLyogTENEX0RPTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSDIsIDEpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBIC8qIExDREMgLSBXVkdBIC0gRW5hYmxlIFJHQiBJbnRlcmZhY2Ugc2lnbmFscyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE0LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDExLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ5LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKyNlbmRpZgorCisJLyogQ0VVICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDMiKTsgLyogQ0VVICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUVDMsIE5VTEwpOyAvKiBWSU9fUlNUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMywgMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMiwgTlVMTCk7IC8qIFRWX0lOX0VOICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMiwgMSk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMCwgTlVMTCk7IC8qIENBTV9FTiAqLworI2lmZGVmIENPTkZJR19TSF9NSUdPUl9SVEFfV1ZHQQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVDAsIDApOworI2Vsc2UKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFQwLCAxKTsKKyNlbmRpZgorCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgyMDAwLCBQT1JUX01TRUxDUkIpOyAvKiBEMTUtPkQ4ICovCiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJm1pZ29yX2NldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1pZ29yX2kyY19kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobWlnb3JfaTJjX2RldmljZXMpKTsKLSAKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtaWdvcl9kZXZpY2VzLCBBUlJBWV9TSVpFKG1pZ29yX2RldmljZXMpKTsKIH0KIF9faW5pdGNhbGwobWlnb3JfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaWdvcl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEpDUikgJiB+MHgwMDAzLCBQT1JUX1BKQ1IpOwotCi0JLyogS0VZU0MgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWUNSKSAmIH4weDBmZmYsIFBPUlRfUFlDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFpDUikgJiB+MHgwZmYwLCBQT1JUX1BaQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxBKSAmIH4weDQxMDAsIFBPUlRfUFNFTEEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHg0MDAwLCBQT1JUX0hJWkNSQSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JDKSAmIH4weGMwMDAsIFBPUlRfSElaQ1JDKTsKLQotCS8qIE5BTkQgRmxhc2ggKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWENSKSAmIDB4MGZmZiwgUE9SVF9QWENSKTsKLQljdHJsX291dGwoKGN0cmxfaW5sKEJTQ19DUzZBQkNSKSAmIH4weDAwMDAwNjAwKSB8IDB4MDAwMDAyMDAsCi0JCSAgQlNDX0NTNkFCQ1IpOwotCi0JLyogVG91Y2ggUGFuZWwgLSBFbmFibGUgSVJRNiAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4YywgUE9SVF9QWkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEEpIHwgMHg4MDAwKSwgUE9SVF9QU0VMQSk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkNSQykgJiB+MHg0MDAwKSwgUE9SVF9ISVpDUkMpOwotCi0jaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBCi0JLyogTENEQyAtIFdWR0EgLSBFbmFibGUgUkdCIEludGVyZmFjZSBzaWduYWxzICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEFDUikgJiB+MHgwMDAzLCBQT1JUX1BBQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDAwZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwZCkgfCAweDA0MDAsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpICYgfjB4MDEwMCwgUE9SVF9NU0VMQ1JCKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MDFlMCwgUE9SVF9ISVpDUkEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NIX01JR09SX1FWR0EKLQkvKiBMQ0RDIC0gUVZHQSAtIEVuYWJsZSBTWVMgSW50ZXJmYWNlIHNpZ25hbHMgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDAwMDMsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BIQ1IpICYgfjB4Y2ZmZikgfCAweDAwMTAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDMwZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMSkgfCAweDA0MjAsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgwMTAwLCBQT1JUX01TRUxDUkIpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMWUwLCBQT1JUX0hJWkNSQSk7Ci0jZW5kaWYKLQotCS8qIENFVSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QVENSKSAmIH4weDAzYzMpIHwgMHgwMDUxLCBQT1JUX1BUQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BVQ1IpICYgfjB4MDNmZiwgUE9SVF9QVUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QVkNSKSAmIH4weDAzZmYsIFBPUlRfUFZDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFdDUikgJiB+MHgzYzAwLCBQT1JUX1BXQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxDKSB8IDB4MDAwMSwgUE9SVF9QU0VMQyk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MjAwMCwgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEUpIHwgMHgwMDBmLCBQT1JUX1BTRUxFKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSB8IDB4MjIwMCwgUE9SVF9NU0VMQ1JCKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MGEwMCwgUE9SVF9ISVpDUkEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQikgJiB+MHgwMDAzLCBQT1JUX0hJWkNSQik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfbWlnb3IgX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCmluZGV4IDhlNDlmNmUuLmM3MGZlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAKICNkZWZpbmUgUjJEX05SX0lSTCAxMwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwppbmRleCAyMzA4ZTg3Li5jNTg1YmUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KICNpbmNsdWRlIDxhc20vc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKaW5kZXggODdjZGM1Ny4uODU1NTU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9zZGs3NzgwLmg+CisjaW5jbHVkZSA8bWFjaC9zZGs3NzgwLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCmluZGV4IGFjYzU5MzIuLmFhZDk0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vc2RrNzc4MC5oPgorI2luY2x1ZGUgPG1hY2gvc2RrNzc4MC5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCmluZGV4IGZkODUwYmEuLmQ4ZWJmYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaDc3NjNyZHAuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzc2M3JkcC5oPgogCiAjZGVmaW5lIElOVENfQkFTRQkJKDB4RkZEMDAwMDApCiAjZGVmaW5lIElOVENfSU5UMlBSSTcgICAoSU5UQ19CQVNFKzB4NDAwMUMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCAyMzg1MGRhLi42ZjkyNmZkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vc2g3NzYzcmRwLmg+CisjaW5jbHVkZSA8bWFjaC9zaDc3NjNyZHAuaD4KICNpbmNsdWRlIDxhc20vc2hfZXRoLmg+CiAjaW5jbHVkZSA8YXNtL3NoNzc2MGZiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYwppbmRleCBhNWUzNDlkLi5hMzI3N2EyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci5oPgorI2luY2x1ZGUgPG1hY2gvc25hcGdlYXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8Y3B1L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCmluZGV4IDFiNzY3ZTEuLmRlYzNkYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWg3NzUxLmg+CisjaW5jbHVkZSA8bWFjaC9zeXN0ZW1oNzc1MS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCmluZGV4IDYwMWM5YzguLjUzODQwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KICNpbmNsdWRlIDxhc20vc21jMzdjOTN4Lmg+CiAKIC8qIGFkZHJlc3Mgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKaW5kZXggZWU3OGFmOC4uMjE5ZmQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KIAogZXh0ZXJuIHZvaWQgbWFrZV9zeXN0ZW1oX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCmluZGV4IDQ3MzBjMWQuLjRiYWRhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpdGFuLmg+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwppbmRleCA1ZGUzYjJhLi44MWU3ZTBmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCmluZGV4IGI2NzE4ZGUuLmFhZDVlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCkBAIC0xICsxLDQgQEAKIHpJbWFnZQordm1saW51eC5zcmVjCit1SW1hZ2UKK3VJbWFnZS5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggNWI1NDk2NS4uYzE2Y2NkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMzMsMTAgKzMzLDE2IEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKK2lmZXEgKCQoQ09ORklHXzMyQklUKSx5KQorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbHNlCiBLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbmRpZgogCiBLRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKaW5kZXggNDc2ODVmNi4uMzAxZTZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKQEAgLTIzLDYgKzIzLDExIEBACiAKIExJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCiAKK2lmZXEgKCQoQ09ORklHX0ZUUkFDRSkseSkKK09SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKK0tCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKK2VuZGlmCisKIExERkxBR1Nfdm1saW51eCA6PSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgLVQgJChvYmopLy4uLy4uL2tlcm5lbC92bWxpbnV4LmxkcwogCiAkKG9iaikvdm1saW51eDogJChPQkpFQ1RTKSAkKG9iaikvcGlnZ3kubyAkKExJQkdDQykgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYwppbmRleCBmMzg2OTk3Li5lZmRiYTZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjXzMyLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzY18zMi5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogdm9pZCBkZWNvbXByZXNzX2tlcm5lbCh2b2lkKQogewotCW91dHB1dF9kYXRhID0gMDsKKwlvdXRwdXRfZGF0YSA9IE5VTEw7CiAJb3V0cHV0X3B0ciA9IFBIWVNBRERSKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR18yOUJJVAogCW91dHB1dF9wdHIgfD0gUDJTRUc7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBUdWUgQXVnIDI2IDExOjM2OjA5IDIwMDgKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSJfZWRvc2s3NzYwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX0VET1NLNzc2MD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworQ09ORklHX1NIX0RNQV9BUEk9eQorQ09ORklHX1NIX0RNQT15CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9ETUFCUkcgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMjAwMDAwMAorIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5U0MyLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9MTkyLjE2OC4wLjM6L3NjcmlwdHMvZmlsZXN5cyBpcD0xOTIuMTY4LjAuNCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRFJJVkVSPXkKK0NPTkZJR19ERUJVR19ERVZSRVM9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOD15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzI9eQorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorQ09ORklHX01URF9DRklfSTQ9eQorQ09ORklHX01URF9DRklfSTg9eQorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPXkKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmZmZmZmZmYKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yNjAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTk0IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0kyQ19TSDc3NjA9eQorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPW0KKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX01CODYyOTBfNjQwWDQ4MF8xNkJQUCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIFNVUEVSSCBkZXZpY2VzCisjCisKKyMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworQ09ORklHX1NORF9TT0M9eQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKworIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIworIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mjc5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfcWVtdV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzIKKyMgTW9uIEF1ZyAxOCAyMjoxNzo0NCAyMDA4CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAorQ09ORklHX1NIX1JUUzc3NTFSMkQ9eQorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9MQk9YX1JFMiBpcyBub3Qgc2V0CisKKyMKKyMgUlRTNzc1MVIyRCBCb2FyZCBSZXZpc2lvbgorIworQ09ORklHX1JUUzc3NTFSMkRfUExVUz15CisjIENPTkZJR19SVFM3NzUxUjJEXzEgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CisjIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfU1VQRVJIPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1BSSU1FPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1I5NzAxPXkKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMKaW5kZXggYTEzY2I3Ni4uODZjMGI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGJveHJlMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWxib3hyZTIuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgY2hhciBsYm94cmUyX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCmluZGV4IDVmZGFkYWUuLjg1NTUyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1yNzc4MHJwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCmluZGV4IGIzZmEzZTIuLmQ2Y2E3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgdTggcnRzNzc1MXIyZF9pcnFfdGFiW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYwppbmRleCA2NmE5YjQwLi40ZGNjNjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zZGs3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2RrNzc4MC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3Nkazc3ODAuaD4KKyNpbmNsdWRlIDxtYWNoL3Nkazc3ODAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCmluZGV4IGFjOGVlMjMuLmE4Zjc4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtdGl0YW4uYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKIHN0YXRpYyBjaGFyIHRpdGFuX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjhlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX19BU01fU0hfQklUT1BTX0xMU0NfSAorI2RlZmluZSBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHNldF9iaXQJCVxuXHQiCisJCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjbGVhcl9iaXQJCVxuXHQiCisJCSJhbmQJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKKwkJOiAiMSIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjaGFuZ2VfYml0CQlcblx0IgorCQkieG9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpCisJCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJIm9yCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImFuZAkJJTUsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJ4b3IJCSU0LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0JJVE9QU19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGQ3ZDM4MmYuLjM2NzkzMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaWZkZWYgQ09ORklHX0dVU0FfUkIKICNpbmNsdWRlIDxhc20vYml0b3BzLWdyYi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjaW5jbHVkZSA8YXNtL2JpdG9wcy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9iaXRvcHMtaXJxLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCA3MjBkZmFiLi5mOWM4ODU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0zOSw2ICszOSw3IEBACiAKIC8qIFNob3VsZCBiZSBkZWZpbmVkIGJ5IHByb2Nlc3Nvci1zcGVjaWZpYyBjb2RlICovCiB2b2lkIGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqLCBpbnQgdHlwZSk7CitpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCk7CiAKIC8qIGFyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jICovCiBpbnQgY2xrX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUzYmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisjZGVmaW5lIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3UzMglcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCkKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3U4KHZvbGF0aWxlIHU4ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191OAlcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImNtcC9lcQkJJTIsICU0CQkJCVxuXHQiCisJCSJiZgkJMmYJCQkJXG5cdCIKKwkJIm1vdgkJJTUsICUwCQkJCVxuXHQiCisJCSIyOgkJCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBlZTAyZGIxLi45ZWI5MDM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICNkZWZpbmUgZWxmX2NoZWNrX2ZkcGljKHgpCQkoKHgpLT5lX2ZsYWdzICYgRUZfU0hfRkRQSUMpCiAjZGVmaW5lIGVsZl9jaGVja19jb25zdF9kaXNwbGFjZW1lbnQoeCkJKCh4KS0+ZV9mbGFncyAmIEVGX1NIX1BJQykKIAorI2lmZGVmIENPTkZJR19TVVBFUkgzMgorLyoKKyAqIEVuYWJsZSBkdW1wIHVzaW5nIHJlZ3NldC4KKyAqIFRoaXMgY292ZXJzIGFsbCBvZiBnZW5lcmFsL0RTUC9GUFUgcmVncy4KKyAqLworI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAorI2VuZGlmCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0ZEUElDX0NPUkVfRUZMQUdTCUVGX1NIX0ZEUElDCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQpAQCAtMTkwLDEyICsxOTgsNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKQotc3RydWN0IHRhc2tfc3RydWN0OwotZXh0ZXJuIGludCBkdW1wX3Rhc2tfcmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9ncmVnc2V0X3QgKik7Ci1leHRlcm4gaW50IGR1bXBfdGFza19mcHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZnByZWdzZXRfdCAqKTsKLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyh0c2ssIGVsZl9yZWdzKSBkdW1wX3Rhc2tfcmVncyh0c2ssIGVsZl9yZWdzKQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBlbGZfZnByZWdzKQogCiAjaWZkZWYgQ09ORklHX1ZTWVNDQUxMCiAvKiB2RFNPIGhhcyBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IDkxNDYyZmUuLjFkM2FlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtMzAsOCArMzAsMTUgQEAKIH0KICNlbmRpZgogCitzdHJ1Y3QgdXNlcl9yZWdzZXQ7CisKIGV4dGVybiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQsIHN0cnVjdCBwdF9yZWdzICopOwogCitleHRlcm4gaW50IGZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKTsKKwogc3RhdGljIGlubGluZSB2b2lkIHVubGF6eV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtNTAsNiArNTcsMTggQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodHNrX3VzZWRfbWF0aCh0c2spKSB7CisJCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSAmJiB0c2sgPT0gY3VycmVudCkKKwkJCXVubGF6eV9mcHUodHNrLCB0YXNrX3B0X3JlZ3ModHNrKSk7CisJCXJldHVybiAwOworCX0KKworCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0c2spOworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX0FTTV9TSF9GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlZDM2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX1NIX0ZUUkFDRV9ICisjZGVmaW5lIF9fQVNNX1NIX0ZUUkFDRV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBtY291bnQodm9pZCk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IGNmMzJiZDIuLjk2NTBlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqICBpbmNsdWRlL2FzbS1zaC9ncGlvLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBCcnVubmVyLCBNYXJrIEpvbmFzCisgKiBHZW5lcmljIEdQSU8gQVBJIGFuZCBwaW5tdXggdGFibGUgc3VwcG9ydCBmb3IgU3VwZXJILgogICoKLSAqICBBZGRyZXNzZXMgZm9yIHRoZSBQaW4gRnVuY3Rpb24gQ29udHJvbGxlcgorICogQ29weXJpZ2h0IChjKSAyMDA4IE1hZ251cyBEYW1tCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE2LDQgKzE2LDkyIEBACiAjaW5jbHVkZSA8Y3B1L2dwaW8uaD4KICNlbmRpZgogCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpbm11eF9lbnVtX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgcGlubXV4X2ZsYWdfdDsKKworI2RlZmluZSBQSU5NVVhfVFlQRV9OT05FICAgICAgICAgICAgMAorI2RlZmluZSBQSU5NVVhfVFlQRV9GVU5DVElPTiAgICAgICAgMQorI2RlZmluZSBQSU5NVVhfVFlQRV9HUElPICAgICAgICAgICAgMgorI2RlZmluZSBQSU5NVVhfVFlQRV9PVVRQVVQgICAgICAgICAgMworI2RlZmluZSBQSU5NVVhfVFlQRV9JTlBVVCAgICAgICAgICAgNAorI2RlZmluZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMVVAgICAgNQorI2RlZmluZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMRE9XTiAgNgorCisjZGVmaW5lIFBJTk1VWF9GTEFHX1RZUEUgICAgICAgICAgICAoMHg3KQorI2RlZmluZSBQSU5NVVhfRkxBR19XQU5UX1BVTExVUCAgICAgKDEgPDwgMykKKyNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMRE9XTiAgICgxIDw8IDQpCisKK3N0cnVjdCBwaW5tdXhfZ3BpbyB7CisJcGlubXV4X2VudW1fdCBlbnVtX2lkOworCXBpbm11eF9mbGFnX3QgZmxhZ3M7Cit9OworCisjZGVmaW5lIFBJTk1VWF9HUElPKGdwaW8sIGRhdGFfb3JfbWFyaykgW2dwaW9dID0geyBkYXRhX29yX21hcmsgfQorI2RlZmluZSBQSU5NVVhfREFUQShkYXRhX29yX21hcmssIGlkcy4uLikgZGF0YV9vcl9tYXJrLCBpZHMsIDAKKworc3RydWN0IHBpbm11eF9jZmdfcmVnIHsKKwl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aDsKKwl1bnNpZ25lZCBsb25nICpjbnQ7CisJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7Cit9OworCisjZGVmaW5lIFBJTk1VWF9DRkdfUkVHKG5hbWUsIHIsIHJfd2lkdGgsIGZfd2lkdGgpIFwKKwkucmVnID0gciwgLnJlZ193aWR0aCA9IHJfd2lkdGgsIC5maWVsZF93aWR0aCA9IGZfd2lkdGgsCQlcCisJLmNudCA9ICh1bnNpZ25lZCBsb25nIFtyX3dpZHRoIC8gZl93aWR0aF0pIHt9LCBcCisJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgWyhyX3dpZHRoIC8gZl93aWR0aCkgKiAoMSA8PCBmX3dpZHRoKV0pIFwKKworc3RydWN0IHBpbm11eF9kYXRhX3JlZyB7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aDsKKwlwaW5tdXhfZW51bV90ICplbnVtX2lkczsKK307CisKKyNkZWZpbmUgUElOTVVYX0RBVEFfUkVHKG5hbWUsIHIsIHJfd2lkdGgpIFwKKwkucmVnID0gciwgLnJlZ193aWR0aCA9IHJfd2lkdGgsCVwKKwkuZW51bV9pZHMgPSAocGlubXV4X2VudW1fdCBbcl93aWR0aF0pIFwKKworc3RydWN0IHBpbm11eF9yYW5nZSB7CisJcGlubXV4X2VudW1fdCBiZWdpbjsKKwlwaW5tdXhfZW51bV90IGVuZDsKK307CisKK3N0cnVjdCBwaW5tdXhfaW5mbyB7CisJY2hhciAqbmFtZTsKKwlwaW5tdXhfZW51bV90IHJlc2VydmVkX2lkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgZGF0YTsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGlucHV0OworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgaW5wdXRfcGQ7CisJc3RydWN0IHBpbm11eF9yYW5nZSBpbnB1dF9wdTsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIG91dHB1dDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIG1hcms7CisJc3RydWN0IHBpbm11eF9yYW5nZSBmdW5jdGlvbjsKKworCXVuc2lnbmVkIGZpcnN0X2dwaW8sIGxhc3RfZ3BpbzsKKworCXN0cnVjdCBwaW5tdXhfZ3BpbyAqZ3Bpb3M7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjZmdfcmVnczsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZ3M7CisKKwlwaW5tdXhfZW51bV90ICpncGlvX2RhdGE7CisJdW5zaWduZWQgaW50IGdwaW9fZGF0YV9zaXplOworCisJdW5zaWduZWQgbG9uZyAqZ3Bpb19pbl91c2U7Cit9OworCitpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKTsKKworaW50IF9fZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8pOworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXJldHVybiBfX2dwaW9fcmVxdWVzdChncGlvKTsKK30KK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOworaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwordm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19leHBvcnQodW5zaWduZWQgZ3BpbywgYm9vbCBkaXJlY3Rpb25fbWF5X2NoYW5nZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIF9fQVNNX1NIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZDU1N2IwMC4uNjAzY2RkZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9IV19JUlFfSAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIGV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwpAQCAtMjMsMTAxICsyNCwxMiBAQAogCiB2b2lkIHJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKHN0cnVjdCBpcHJfZGVzYyAqKTsKIAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGludGNfZW51bTsKLQotc3RydWN0IGludGNfdmVjdCB7Ci0JaW50Y19lbnVtIGVudW1faWQ7Ci0JdW5zaWduZWQgc2hvcnQgdmVjdDsKLX07Ci0KLSNkZWZpbmUgSU5UQ19WRUNUKGVudW1faWQsIHZlY3QpIHsgZW51bV9pZCwgdmVjdCB9Ci0jZGVmaW5lIElOVENfSVJRKGVudW1faWQsIGlycSkgSU5UQ19WRUNUKGVudW1faWQsIGlycTJldnQoaXJxKSkKLQotc3RydWN0IGludGNfZ3JvdXAgewotCWludGNfZW51bSBlbnVtX2lkOwotCWludGNfZW51bSBlbnVtX2lkc1szMl07Ci19OwotCi0jZGVmaW5lIElOVENfR1JPVVAoZW51bV9pZCwgaWRzLi4uKSB7IGVudW1faWQsIHsgaWRzIH0gfQotCi1zdHJ1Y3QgaW50Y19tYXNrX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGg7Ci0JaW50Y19lbnVtIGVudW1faWRzWzMyXTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyBzbXA7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBpbnRjX3ByaW9fcmVnIHsKLQl1bnNpZ25lZCBsb25nIHNldF9yZWcsIGNscl9yZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7Ci0JaW50Y19lbnVtIGVudW1faWRzWzE2XTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyBzbXA7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBpbnRjX3NlbnNlX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7Ci0JaW50Y19lbnVtIGVudW1faWRzWzE2XTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElOVENfU01QKHN0cmlkZSwgbnIpIC5zbXAgPSAoc3RyaWRlKSB8ICgobnIpIDw8IDgpCi0jZWxzZQotI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKQotI2VuZGlmCi0KLXN0cnVjdCBpbnRjX2Rlc2MgewotCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3RvcnM7Ci0JdW5zaWduZWQgaW50IG5yX3ZlY3RvcnM7Ci0Jc3RydWN0IGludGNfZ3JvdXAgKmdyb3VwczsKLQl1bnNpZ25lZCBpbnQgbnJfZ3JvdXBzOwotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptYXNrX3JlZ3M7Ci0JdW5zaWduZWQgaW50IG5yX21hc2tfcmVnczsKLQlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHJpb19yZWdzOwotCXVuc2lnbmVkIGludCBucl9wcmlvX3JlZ3M7Ci0Jc3RydWN0IGludGNfc2Vuc2VfcmVnICpzZW5zZV9yZWdzOwotCXVuc2lnbmVkIGludCBucl9zZW5zZV9yZWdzOwotCWNoYXIgKm5hbWU7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0Jc3RydWN0IGludGNfbWFza19yZWcgKmFja19yZWdzOwotCXVuc2lnbmVkIGludCBucl9hY2tfcmVnczsKLSNlbmRpZgotfTsKLQotI2RlZmluZSBfSU5UQ19BUlJBWShhKSBhLCBzaXplb2YoYSkvc2l6ZW9mKCphKQotI2RlZmluZSBERUNMQVJFX0lOVENfREVTQyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCQlcCi0JbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MpCQkJCVwKLXN0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCi0JX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAotCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAotCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAotCWNoaXBuYW1lLAkJCQkJCQlcCi19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLSNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0NfQUNLKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJXAotCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncykJCQlcCi1zdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotCV9JTlRDX0FSUkFZKGFja19yZWdzKSwJCQkJCQlcCi19Ci0jZW5kaWYKLQotdm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpOwotaW50IGludGNfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmlvKTsKLQogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCk7Ci0jaWZkZWYgQ09ORklHX0NQVV9TSDMKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3NoMyh2b2lkKTsKLSNlbmRpZgordm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXBfcGlucyhpbnQgbW9kZSk7CiAKIGVudW0geyBJUlFfTU9ERV9JUlEsIElSUV9NT0RFX0lSUTc2NTQsIElSUV9NT0RFX0lSUTMyMTAsCiAgICAgICAgSVJRX01PREVfSVJMNzY1NF9NQVNLLCBJUlFfTU9ERV9JUkwzMjEwX01BU0ssCiAgICAgICAgSVJRX01PREVfSVJMNzY1NCwgSVJRX01PREVfSVJMMzIxMCB9Owotdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXBfcGlucyhpbnQgbW9kZSk7CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGE0ZmJmMGMuLjQzNmMyODUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEsMjcgKzEsMjYgQEAKICNpZm5kZWYgX19BU01fU0hfSU9fSAogI2RlZmluZSBfX0FTTV9TSF9JT19ICi0KIC8qCiAgKiBDb252ZW50aW9uOgotICogICAgcmVhZHtiLHcsbH0vd3JpdGV7Yix3LGx9IGFyZSBmb3IgUENJLAorICogICAgcmVhZHtiLHcsbCxxfS93cml0ZXtiLHcsbCxxfSBhcmUgZm9yIFBDSSwKICAqICAgIHdoaWxlIGlue2IsdyxsfS9vdXR7Yix3LGx9IGFyZSBmb3IgSVNBCi0gKiBUaGVzZSBtYXkgKHdpbGwpIGJlIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uLgorICoKICAqIEluIGFkZGl0aW9uIHdlIGhhdmUgJ3BhdXNpbmcnIHZlcnNpb25zOiBpbntiLHcsbH1fcC9vdXR7Yix3LGx9X3AKICAqIGFuZCAnc3RyaW5nJyB2ZXJzaW9uczogaW5ze2IsdyxsfS9vdXRze2IsdyxsfQotICogRm9yIHJlYWR7Yix3LGx9IGFuZCB3cml0ZXtiLHcsbH0gdGhlcmUgYXJlIGFsc28gX19yYXcgdmVyc2lvbnMsIHdoaWNoCi0gKiBkbyBub3QgaGF2ZSBhIG1lbW9yeSBiYXJyaWVyIGFmdGVyIHRoZW0uCiAgKgotICogSW4gYWRkaXRpb24sIHdlIGhhdmUKLSAqICAgY3RybF9pbntiLHcsbH0vY3RybF9vdXR7Yix3LGx9IGZvciBTdXBlckggc3BlY2lmaWMgSS9PLgotICogICB3aGljaCBhcmUgcHJvY2Vzc29yIHNwZWNpZmljLgotICovCi0KLS8qCi0gKiBXZSBmb2xsb3cgdGhlIEFscGhhIGNvbnZlbnRpb24gaGVyZToKLSAqICBfX2luYiBleHBhbmRzIHRvIGFuIGlubGluZSBmdW5jdGlvbiBjYWxsICh3aGljaCBjYWxscyB2aWEgdGhlIG12KQotICogIF9pbmIgIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsIChub3RlIF9fX3JhdyBmbnMgYXJlIF8gdmVyc2lvbiBvZiBfX3JhdykKLSAqICBpbmIgICBieSBkZWZhdWx0IGV4cGFuZHMgdG8gX2luYiwgYnV0IHRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5Ci0gKiAgICAgICAgZGVmaW5lIGl0IHRvIF9faW5iIGlmIGl0IGNob29zZXMuCisgKiBXaGlsZSByZWFke2IsdyxsLHF9IGFuZCB3cml0ZXtiLHcsbCxxfSBjb250YWluIG1lbW9yeSBiYXJyaWVycworICogYXV0b21hdGljYWxseSwgdGhlcmUgYXJlIGFsc28gX19yYXcgdmVyc2lvbnMsIHdoaWNoIGRvIG5vdC4KKyAqCisgKiBIaXN0b3JpY2FsbHksIHdlIGhhdmUgYWxzbyBoYWQgY3RybF9pbntiLHcsbCxxfS9jdHJsX291dHtiLHcsbCxxfSBmb3IKKyAqIFN1cGVySCBzcGVjaWZpYyBJL08gKHJhdyBJL08gdG8gb24tY2hpcCBDUFUgcGVyaXBoZXJhbHMpLiBJbiBwcmFjdGljZQorICogdGhlc2UgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIF9fcmF3IHZhcmlhbnRzLCBhbmQgYXMgc3VjaCwgYWxsCisgKiBuZXcgY29kZSBzaG91bGQgYmUgdXNpbmcgdGhlIF9fcmF3IHZlcnNpb25zLgorICoKKyAqIEFsbCBJU0EgSS9PIHJvdXRpbmVzIGFyZSB3cmFwcGVkIHRocm91Z2ggdGhlIG1hY2hpbmUgdmVjdG9yLiBJZiBhCisgKiBib2FyZCBkb2VzIG5vdCBwcm92aWRlIG92ZXJyaWRlcywgYSBnZW5lcmljIHNldCB0aGF0IGFyZSBjb3BpZWQgaW4KKyAqIGZyb20gdGhlIGRlZmF1bHQgbWFjaGluZSB2ZWN0b3IgYXJlIHVzZWQgaW5zdGVhZC4gVGhlc2UgYXJlIGxhcmdlbHkKKyAqIGZvciBvbGQgY29tcGF0IGNvZGUgZm9yIEkvTyBvZmZzZXRpbmcgdG8gU3VwZXJJT3MsIGFsbCBvZiB3aGljaCBhcmUKKyAqIGJldHRlciBoYW5kbGVkIHRocm91Z2ggdGhlIG1hY2h2ZWMgaW9wb3J0IG1hcHBpbmcgcm91dGluZXMgdGhlc2UgZGF5cy4KICAqLwogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTMxLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogRGVwZW5kaW5nIG9uIHdoaWNoIHBsYXRmb3JtIHdlIGFyZSBydW5uaW5nIG9uLCB3ZSBuZWVkIGRpZmZlcmVudAogICogSS9PIGZ1bmN0aW9ucy4KQEAgLTQwLDEwNSArMzgsNjggQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9pb190cmFwcGVkLmg+CiAKLSNkZWZpbmUgbWF5YmViYWRpbyhwb3J0KSBcCi0gIHByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCi0JIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIChwb3J0KSwgKHUzMilfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisjZGVmaW5lIGluYihwKQkJCXNoX212Lm12X2luYigocCkpCisjZGVmaW5lIGludyhwKQkJCXNoX212Lm12X2ludygocCkpCisjZGVmaW5lIGlubChwKQkJCXNoX212Lm12X2lubCgocCkpCisjZGVmaW5lIG91dGIoeCxwKQkJc2hfbXYubXZfb3V0YigoeCksKHApKQorI2RlZmluZSBvdXR3KHgscCkJCXNoX212Lm12X291dHcoKHgpLChwKSkKKyNkZWZpbmUgb3V0bCh4LHApCQlzaF9tdi5tdl9vdXRsKCh4KSwocCkpCiAKLS8qCi0gKiBTaW5jZSBib2FyZHMgYXJlIGFibGUgdG8gZGVmaW5lIHRoZWlyIG93biBzZXQgb2YgSS9PIHJvdXRpbmVzIHRocm91Z2gKLSAqIHRoZWlyIHJlc3BlY3RpdmUgbWFjaGluZSB2ZWN0b3IsIHdlIGFsd2F5cyB3cmFwIHRocm91Z2ggdGhlIG12LgotICoKLSAqIEFsc28sIGluIHRoZSBldmVudCB0aGF0IGEgYm9hcmQgaGFzbid0IHByb3ZpZGVkIGl0cyBvd24gZGVmaW5pdGlvbiBmb3IKLSAqIGEgZ2l2ZW4gcm91dGluZSwgaXQgd2lsbCBiZSB3cmFwcGVkIHRvIGdlbmVyaWMgY29kZSBhdCBydW4tdGltZS4KLSAqLworI2RlZmluZSBpbmJfcChwKQkJc2hfbXYubXZfaW5iX3AoKHApKQorI2RlZmluZSBpbndfcChwKQkJc2hfbXYubXZfaW53X3AoKHApKQorI2RlZmluZSBpbmxfcChwKQkJc2hfbXYubXZfaW5sX3AoKHApKQorI2RlZmluZSBvdXRiX3AoeCxwKQkJc2hfbXYubXZfb3V0Yl9wKCh4KSwocCkpCisjZGVmaW5lIG91dHdfcCh4LHApCQlzaF9tdi5tdl9vdXR3X3AoKHgpLChwKSkKKyNkZWZpbmUgb3V0bF9wKHgscCkJCXNoX212Lm12X291dGxfcCgoeCksKHApKQogCi0jZGVmaW5lIF9faW5iKHApCXNoX212Lm12X2luYigocCkpCi0jZGVmaW5lIF9faW53KHApCXNoX212Lm12X2ludygocCkpCi0jZGVmaW5lIF9faW5sKHApCXNoX212Lm12X2lubCgocCkpCi0jZGVmaW5lIF9fb3V0Yih4LHApCXNoX212Lm12X291dGIoKHgpLChwKSkKLSNkZWZpbmUgX19vdXR3KHgscCkJc2hfbXYubXZfb3V0dygoeCksKHApKQotI2RlZmluZSBfX291dGwoeCxwKQlzaF9tdi5tdl9vdXRsKCh4KSwocCkpCisjZGVmaW5lIGluc2IocCxiLGMpCQlzaF9tdi5tdl9pbnNiKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIGluc3cocCxiLGMpCQlzaF9tdi5tdl9pbnN3KChwKSwgKGIpLCAoYykpCisjZGVmaW5lIGluc2wocCxiLGMpCQlzaF9tdi5tdl9pbnNsKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIG91dHNiKHAsYixjKQkJc2hfbXYubXZfb3V0c2IoKHApLCAoYiksIChjKSkKKyNkZWZpbmUgb3V0c3cocCxiLGMpCQlzaF9tdi5tdl9vdXRzdygocCksIChiKSwgKGMpKQorI2RlZmluZSBvdXRzbChwLGIsYykJCXNoX212Lm12X291dHNsKChwKSwgKGIpLCAoYykpCiAKLSNkZWZpbmUgX19pbmJfcChwKQlzaF9tdi5tdl9pbmJfcCgocCkpCi0jZGVmaW5lIF9faW53X3AocCkJc2hfbXYubXZfaW53X3AoKHApKQotI2RlZmluZSBfX2lubF9wKHApCXNoX212Lm12X2lubF9wKChwKSkKLSNkZWZpbmUgX19vdXRiX3AoeCxwKQlzaF9tdi5tdl9vdXRiX3AoKHgpLChwKSkKLSNkZWZpbmUgX19vdXR3X3AoeCxwKQlzaF9tdi5tdl9vdXR3X3AoKHgpLChwKSkKLSNkZWZpbmUgX19vdXRsX3AoeCxwKQlzaF9tdi5tdl9vdXRsX3AoKHgpLChwKSkKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1OCAgX19mb3JjZSAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MTYgX19mb3JjZSAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGVsKHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MzIgX19mb3JjZSAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19yYXdfd3JpdGVxKHYsYSkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShhKSA9ICh2KSkKIAotI2RlZmluZSBfX2luc2IocCxiLGMpCXNoX212Lm12X2luc2IoKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19pbnN3KHAsYixjKQlzaF9tdi5tdl9pbnN3KChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIF9faW5zbChwLGIsYykJc2hfbXYubXZfaW5zbCgocCksIChiKSwgKGMpKQotI2RlZmluZSBfX291dHNiKHAsYixjKQlzaF9tdi5tdl9vdXRzYigocCksIChiKSwgKGMpKQotI2RlZmluZSBfX291dHN3KHAsYixjKQlzaF9tdi5tdl9vdXRzdygocCksIChiKSwgKGMpKQotI2RlZmluZSBfX291dHNsKHAsYixjKQlzaF9tdi5tdl9vdXRzbCgocCksIChiKSwgKGMpKQorI2RlZmluZSBfX3Jhd19yZWFkYihhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1OCAgX19mb3JjZSAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWRsKGEpCQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkcShhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShhKSkKIAotI2RlZmluZSBfX3JlYWRiKGEpCXNoX212Lm12X3JlYWRiKChhKSkKLSNkZWZpbmUgX19yZWFkdyhhKQlzaF9tdi5tdl9yZWFkdygoYSkpCi0jZGVmaW5lIF9fcmVhZGwoYSkJc2hfbXYubXZfcmVhZGwoKGEpKQotI2RlZmluZSBfX3dyaXRlYih2LGEpCXNoX212Lm12X3dyaXRlYigodiksKGEpKQotI2RlZmluZSBfX3dyaXRldyh2LGEpCXNoX212Lm12X3dyaXRldygodiksKGEpKQotI2RlZmluZSBfX3dyaXRlbCh2LGEpCXNoX212Lm12X3dyaXRlbCgodiksKGEpKQorI2RlZmluZSByZWFkYihhKQkJKHsgdTggIHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkdyhhKQkJKHsgdTE2IHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkbChhKQkJKHsgdTMyIHJfID0gX19yYXdfcmVhZGwoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkcShhKQkJKHsgdTY0IHJfID0gX19yYXdfcmVhZHEoYSk7IG1iKCk7IHJfOyB9KQogCi0jZGVmaW5lIGluYgkJX19pbmIKLSNkZWZpbmUgaW53CQlfX2ludwotI2RlZmluZSBpbmwJCV9faW5sCi0jZGVmaW5lIG91dGIJCV9fb3V0YgotI2RlZmluZSBvdXR3CQlfX291dHcKLSNkZWZpbmUgb3V0bAkJX19vdXRsCisjZGVmaW5lIHdyaXRlYih2LGEpCQkoeyBfX3Jhd193cml0ZWIoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRldyh2LGEpCQkoeyBfX3Jhd193cml0ZXcoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRlbCh2LGEpCQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRlcSh2LGEpCQkoeyBfX3Jhd193cml0ZXEoKHYpLChhKSk7IG1iKCk7IH0pCiAKLSNkZWZpbmUgaW5iX3AJCV9faW5iX3AKLSNkZWZpbmUgaW53X3AJCV9faW53X3AKLSNkZWZpbmUgaW5sX3AJCV9faW5sX3AKLSNkZWZpbmUgb3V0Yl9wCQlfX291dGJfcAotI2RlZmluZSBvdXR3X3AJCV9fb3V0d19wCi0jZGVmaW5lIG91dGxfcAkJX19vdXRsX3AKKy8qIFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgY3RybF9pbmIJCV9fcmF3X3JlYWRiCisjZGVmaW5lIGN0cmxfaW53CQlfX3Jhd19yZWFkdworI2RlZmluZSBjdHJsX2lubAkJX19yYXdfcmVhZGwKKyNkZWZpbmUgY3RybF9pbnEJCV9fcmF3X3JlYWRxCiAKLSNkZWZpbmUgaW5zYgkJX19pbnNiCi0jZGVmaW5lIGluc3cJCV9faW5zdwotI2RlZmluZSBpbnNsCQlfX2luc2wKLSNkZWZpbmUgb3V0c2IJCV9fb3V0c2IKLSNkZWZpbmUgb3V0c3cJCV9fb3V0c3cKLSNkZWZpbmUgb3V0c2wJCV9fb3V0c2wKKyNkZWZpbmUgY3RybF9vdXRiCQlfX3Jhd193cml0ZWIKKyNkZWZpbmUgY3RybF9vdXR3CQlfX3Jhd193cml0ZXcKKyNkZWZpbmUgY3RybF9vdXRsCQlfX3Jhd193cml0ZWwKKyNkZWZpbmUgY3RybF9vdXRxCQlfX3Jhd193cml0ZXEKIAotI2RlZmluZSBfX3Jhd19yZWFkYihhKQkJX19yZWFkYigodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd19yZWFkdyhhKQkJX19yZWFkdygodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd19yZWFkbChhKQkJX19yZWFkbCgodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd193cml0ZWIodiwgYSkJX193cml0ZWIodiwgKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfd3JpdGV3KHYsIGEpCV9fd3JpdGV3KHYsICh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fcmF3X3dyaXRlbCh2LCBhKQlfX3dyaXRlbCh2LCAodm9pZCBfX2lvbWVtICopKGEpKQotCi12b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Ci12b2lkIF9fcmF3X3JlYWRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKLQotLyoKLSAqIFRoZSBwbGF0Zm9ybSBoZWFkZXIgZmlsZXMgbWF5IGRlZmluZSBzb21lIG9mIHRoZXNlIG1hY3JvcyB0byB1c2UKLSAqIHRoZSBpbmxpbmVkIHZlcnNpb25zIHdoZXJlIGFwcHJvcHJpYXRlLiAgVGhlc2UgbWFjcm9zIG1heSBhbHNvIGJlCi0gKiByZWRlZmluZWQgYnkgdXNlcmxldmVsIHByb2dyYW1zLgotICovCi0jaWZkZWYgX19yZWFkYgotIyBkZWZpbmUgcmVhZGIoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQorc3RhdGljIGlubGluZSB2b2lkIGN0cmxfZGVsYXkodm9pZCkKK3sKKyNpZmRlZiBQMlNFRworCV9fcmF3X3JlYWR3KFAyU0VHKTsKICNlbmRpZgotI2lmZGVmIF9fcmF3X3JlYWR3Ci0jIGRlZmluZSByZWFkdyhhKQkoeyB1bnNpZ25lZCBpbnQgcl8gPSBfX3Jhd19yZWFkdyhhKTsgbWIoKTsgcl87IH0pCi0jZW5kaWYKLSNpZmRlZiBfX3Jhd19yZWFkbAotIyBkZWZpbmUgcmVhZGwoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZGwoYSk7IG1iKCk7IHJfOyB9KQotI2VuZGlmCi0KLSNpZmRlZiBfX3Jhd193cml0ZWIKLSMgZGVmaW5lIHdyaXRlYih2LGEpCSh7IF9fcmF3X3dyaXRlYigodiksKGEpKTsgbWIoKTsgfSkKLSNlbmRpZgotI2lmZGVmIF9fcmF3X3dyaXRldwotIyBkZWZpbmUgd3JpdGV3KHYsYSkJKHsgX19yYXdfd3JpdGV3KCh2KSwoYSkpOyBtYigpOyB9KQotI2VuZGlmCi0jaWZkZWYgX19yYXdfd3JpdGVsCi0jIGRlZmluZSB3cml0ZWwodixhKQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCi0jZW5kaWYKK30KIAogI2RlZmluZSBfX0JVSUxEX01FTU9SWV9TVFJJTkcoYndscSwgdHlwZSkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKIAkJCQljb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCVwKIHsJCQkJCQkJCQlcCiAJY29uc3Qgdm9sYXRpbGUgdHlwZSAqX19hZGRyID0gYWRkcjsJCQkJXApAQCAtMTQ5LDggKzExMCw4IEBACiAJfQkJCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwgdm9pZCAqYWRkciwJXAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZHMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKKwkJCSAgICAgICB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgY291bnQpCQlcCiB7CQkJCQkJCQkJXAogCXZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0xNjIsMTA2ICsxMjMsNzEgQEAKIAogX19CVUlMRF9NRU1PUllfU1RSSU5HKGIsIHU4KQogX19CVUlMRF9NRU1PUllfU1RSSU5HKHcsIHUxNikKLSNkZWZpbmUgd3JpdGVzbCBfX3Jhd193cml0ZXNsCi0jZGVmaW5lIHJlYWRzbCAgX19yYXdfcmVhZHNsCitfX0JVSUxEX01FTU9SWV9TVFJJTkcocSwgdTY0KQogCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkgcmVhZGIoYSkKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKSByZWFkdyhhKQotI2RlZmluZSByZWFkbF9yZWxheGVkKGEpIHJlYWRsKGEpCit2b2lkIF9fcmF3X3dyaXRlc2wodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Cit2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKKworI2RlZmluZSB3cml0ZXNiCQkJX19yYXdfd3JpdGVzYgorI2RlZmluZSB3cml0ZXN3CQkJX19yYXdfd3JpdGVzdworI2RlZmluZSB3cml0ZXNsCQkJX19yYXdfd3JpdGVzbAorCisjZGVmaW5lIHJlYWRzYgkJCV9fcmF3X3JlYWRzYgorI2RlZmluZSByZWFkc3cJCQlfX3Jhd19yZWFkc3cKKyNkZWZpbmUgcmVhZHNsCQkJX19yYXdfcmVhZHNsCisKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhKQlyZWFkYihhKQorI2RlZmluZSByZWFkd19yZWxheGVkKGEpCXJlYWR3KGEpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYSkJcmVhZGwoYSkKKyNkZWZpbmUgcmVhZHFfcmVsYXhlZChhKQlyZWFkcShhKQogCiAvKiBTaW1wbGUgTU1JTyAqLwotI2RlZmluZSBpb3JlYWQ4KGEpCQlyZWFkYihhKQotI2RlZmluZSBpb3JlYWQxNihhKQkJcmVhZHcoYSkKKyNkZWZpbmUgaW9yZWFkOChhKQkJX19yYXdfcmVhZGIoYSkKKyNkZWZpbmUgaW9yZWFkMTYoYSkJCV9fcmF3X3JlYWR3KGEpCiAjZGVmaW5lIGlvcmVhZDE2YmUoYSkJCWJlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KChhKSkpCi0jZGVmaW5lIGlvcmVhZDMyKGEpCQlyZWFkbChhKQorI2RlZmluZSBpb3JlYWQzMihhKQkJX19yYXdfcmVhZGwoYSkKICNkZWZpbmUgaW9yZWFkMzJiZShhKQkJYmUzMl90b19jcHUoX19yYXdfcmVhZGwoKGEpKSkKIAotI2RlZmluZSBpb3dyaXRlOCh2LGEpCQl3cml0ZWIoKHYpLChhKSkKLSNkZWZpbmUgaW93cml0ZTE2KHYsYSkJCXdyaXRldygodiksKGEpKQorI2RlZmluZSBpb3dyaXRlOCh2LGEpCQlfX3Jhd193cml0ZWIoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTE2KHYsYSkJCV9fcmF3X3dyaXRldygodiksKGEpKQogI2RlZmluZSBpb3dyaXRlMTZiZSh2LGEpCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodikpLChhKSkKLSNkZWZpbmUgaW93cml0ZTMyKHYsYSkJCXdyaXRlbCgodiksKGEpKQorI2RlZmluZSBpb3dyaXRlMzIodixhKQkJX19yYXdfd3JpdGVsKCh2KSwoYSkpCiAjZGVmaW5lIGlvd3JpdGUzMmJlKHYsYSkJX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKCh2KSksKGEpKQogCi0jZGVmaW5lIGlvcmVhZDhfcmVwKGEsIGQsIGMpCXJlYWRzYigoYSksIChkKSwgKGMpKQotI2RlZmluZSBpb3JlYWQxNl9yZXAoYSwgZCwgYykJcmVhZHN3KChhKSwgKGQpLCAoYykpCi0jZGVmaW5lIGlvcmVhZDMyX3JlcChhLCBkLCBjKQlyZWFkc2woKGEpLCAoZCksIChjKSkKKyNkZWZpbmUgaW9yZWFkOF9yZXAoYSwgZCwgYykJX19yYXdfcmVhZHNiKChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDE2X3JlcChhLCBkLCBjKQlfX3Jhd19yZWFkc3coKGEpLCAoZCksIChjKSkKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKGEsIGQsIGMpCV9fcmF3X3JlYWRzbCgoYSksIChkKSwgKGMpKQogCi0jZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQl3cml0ZXNiKChhKSwgKHMpLCAoYykpCi0jZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJd3JpdGVzdygoYSksIChzKSwgKGMpKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCXdyaXRlc2woKGEpLCAocyksIChjKSkKKyNkZWZpbmUgaW93cml0ZThfcmVwKGEsIHMsIGMpCV9fcmF3X3dyaXRlc2IoKGEpLCAocyksIChjKSkKKyNkZWZpbmUgaW93cml0ZTE2X3JlcChhLCBzLCBjKQlfX3Jhd193cml0ZXN3KChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGUzMl9yZXAoYSwgcywgYykJX19yYXdfd3JpdGVzbCgoYSksIChzKSwgKGMpKQogCi0jZGVmaW5lIG1taW93YigpCXdtYigpCS8qIHN5bmNvIG9uIFNILTRBLCBvdGhlcndpc2UgYSBub3AgKi8KKy8qIHN5bmNvIG9uIFNILTRBLCBvdGhlcndpc2UgYSBub3AgKi8KKyNkZWZpbmUgbW1pb3diKCkJCXdtYigpCiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7CisKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEgYm9hcmQtc3BlY2lmaWMKLSAqIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUgYXJiaXRyYXJ5IHBvcnQgYmFzZS4KKyAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZXRob2QgZm9yIHRoZSBnZW5lcmljIGNhc2Ugd2hlcmUgYQorICogYm9hcmQtc3BlY2lmaWMgaW9wb3J0X21hcCBzaW1wbHkgbmVlZHMgdG8gcmV0dXJuIHRoZSBwb3J0ICsgc29tZQorICogYXJiaXRyYXJ5IHBvcnQgYmFzZS4KICAqCiAgKiBXZSB1c2UgdGhpcyBhdCBib2FyZCBzZXR1cCB0aW1lIHRvIGltcGxpY2l0bHkgc2V0IHRoZSBwb3J0IGJhc2UsIGFuZAogICogYXMgYSByZXN1bHQsIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgaW9wb3J0X21hcC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2lvX3BvcnRfYmFzZSh1bnNpZ25lZCBsb25nIHBiYXNlKQogewotCWV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKLQogCWdlbmVyaWNfaW9fYmFzZSA9IHBiYXNlOwogfQogCiAjZGVmaW5lIF9faW9wb3J0X21hcChwLCBuKSBzaF9tdi5tdl9pb3BvcnRfbWFwKChwKSwgKG4pKQogCiAvKiBXZSByZWFsbHkgd2FudCB0byB0cnkgYW5kIGdldCB0aGVzZSB0byBtZW1jcHkgZXRjICovCi1leHRlcm4gdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGludCwgdW5zaWduZWQgbG9uZyk7Ci0KLS8qIFN1cGVySCBvbi1jaGlwIEkvTyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjdHJsX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBjdHJsX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGN0cmxfaW5sKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBjdHJsX2lucSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nKilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRiKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkciA9IGI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX291dHcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0gICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX291dHEodW5zaWduZWQgbG9uZyBsb25nIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyopYWRkciA9IGI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX2RlbGF5KHZvaWQpCi17Ci0jaWZkZWYgUDJTRUcKLQljdHJsX2ludyhQMlNFRyk7Ci0jZW5kaWYKLX0KK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgaW50LCB1bnNpZ25lZCBsb25nKTsKIAogLyogUXVhZC13b3JkIHJlYWwtbW9kZSBJL08sIGRvbid0IGFzay4uICovCiB1bnNpZ25lZCBsb25nIGxvbmcgcGVla19yZWFsX2FkZHJlc3NfcSh1bnNpZ25lZCBsb25nIGxvbmcgYWRkcik7CkBAIC0zNDcsOSArMjczLDE1IEBACiAJX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX1BBR0VfQ0FDSEFCTEUpCiAjZGVmaW5lIHAzX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCQlcCiAJX19pb3JlbWFwKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCisjZGVmaW5lIGlvcmVtYXBfcHJvdChvZmZzZXQsIHNpemUsIGZsYWdzKQkJXAorCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCiAjZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJCVwKIAlfX2lvdW5tYXAoKGFkZHIpKQogCisjZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAorCXByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCisJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgKHBvcnQpLCAodTMyKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKwogLyoKICAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KICAqIGFjY2VzcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaAppbmRleCA5MmZjNjA3Li4xZTVkMzc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaApAQCAtMzMsMTMgKzMzLDYgQEAKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHN3KSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0c2wpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLXU4IElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkYikodm9pZCBfX2lvbWVtICopOwotdTE2IElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkdykodm9pZCBfX2lvbWVtICopOwotdTMyIElPX0NPTkNBVChfX0lPX1BSRUZJWCxyZWFkbCkodm9pZCBfX2lvbWVtICopOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGViKSh1OCwgdm9pZCBfX2lvbWVtICopOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsd3JpdGV3KSh1MTYsIHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlbCkodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0KIHZvaWQgKklPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3JlbWFwKSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvdW5tYXApKHZvaWQgKmFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCA2MTk1YTUzLi5kMzE5YmFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTQxLDYgKzQxLDkgQEAKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAjZGVmaW5lIGlycV9kZW11eChpcnEpCQlzaF9tdi5tdl9pcnFfZGVtdXgoaXJxKQogCit2b2lkIGluaXRfSVJRKHZvaWQpOworYXNtbGlua2FnZSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIGV4dGVybiB2b2lkIGlycV9jdHhfaW5pdChpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGlycV9jdHhfZXhpdChpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3OGQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0wLDAgKzEsNTggQEAKKyNpZm5kZWYgX19BU01fU0hfS1BST0JFU19ICisjZGVmaW5lIF9fQVNNX1NIX0tQUk9CRVNfSAorCisjaWZkZWYgQ09ORklHX0tQUk9CRVMKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKK3R5cGVkZWYgdTE2IGtwcm9iZV9vcGNvZGVfdDsKKyNkZWZpbmUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTgkweGMzM2EKKworI2RlZmluZSBNQVhfSU5TTl9TSVpFIDE2CisjZGVmaW5lIE1BWF9TVEFDS19TSVpFIDY0CisjZGVmaW5lIE1JTl9TVEFDS19TSVpFKEFERFIpICgoKE1BWF9TVEFDS19TSVpFKSA8IFwKKwkoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBUSFJFQURfU0laRSAtIChBRERSKSkpIFwKKwk/IChNQVhfU1RBQ0tfU0laRSkgXAorCTogKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKQorCisjZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpCQkoKHJlZ3MpLT5yZWdzWzBdKQorI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUga3JldHByb2JlX2JsYWNrbGlzdF9zaXplCTAKKworc3RydWN0IGtwcm9iZTsKKwordm9pZCBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqKTsKK3ZvaWQga3JldHByb2JlX3RyYW1wb2xpbmUodm9pZCk7Cit2b2lkIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpOworCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCitzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKKwkvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCWtwcm9iZV9vcGNvZGVfdCBpbnNuW01BWF9JTlNOX1NJWkVdOworfTsKKworc3RydWN0IHByZXZfa3Byb2JlIHsKKwlzdHJ1Y3Qga3Byb2JlICprcDsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKK307CisKKy8qIHBlci1jcHUga3Byb2JlIGNvbnRyb2wgYmxvY2sgKi8KK3N0cnVjdCBrcHJvYmVfY3RsYmxrIHsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBqcHJvYmVfc2F2ZWRfcjE1OworCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOworCWtwcm9iZV9vcGNvZGVfdCBqcHJvYmVzX3N0YWNrW01BWF9TVEFDS19TSVpFXTsKKwlzdHJ1Y3QgcHJldl9rcHJvYmUgcHJldl9rcHJvYmU7Cit9OworCitleHRlcm4gaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKTsKK2V4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBrcHJvYmVfaGFuZGxlX2lsbHNsb3QodW5zaWduZWQgbG9uZyBwYyk7CisjZWxzZQorCisjZGVmaW5lIGtwcm9iZV9oYW5kbGVfaWxsc2xvdChwYykJKC0xKQorCisjZW5kaWYgLyogQ09ORklHX0tQUk9CRVMgKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9LUFJPQkVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKaW5kZXggYjJlNDEyNC4uZjFiYWUwMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKQEAgLTQyLDEzICs0Miw2IEBACiAJdm9pZCAoKm12X291dHN3KSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCXZvaWQgKCptdl9vdXRzbCkodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAotCXU4ICgqbXZfcmVhZGIpKHZvaWQgX19pb21lbSAqKTsKLQl1MTYgKCptdl9yZWFkdykodm9pZCBfX2lvbWVtICopOwotCXUzMiAoKm12X3JlYWRsKSh2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRlYikodTgsIHZvaWQgX19pb21lbSAqKTsKLQl2b2lkICgqbXZfd3JpdGV3KSh1MTYsIHZvaWQgX19pb21lbSAqKTsKLQl2b2lkICgqbXZfd3JpdGVsKSh1MzIsIHZvaWQgX19pb21lbSAqKTsKLQogCWludCAoKm12X2lycV9kZW11eCkoaW50IGlycSk7CiAKIAl2b2lkICgqbXZfaW5pdF9pcnEpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXpvbmUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW16b25lLmgKaW5kZXggMjk2OTI1My4uN2Y1MzYzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXpvbmUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oCkBAIC00LDYgKzQsOCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorCiBleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKICNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShub2RlX2RhdGFbbmlkXSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA3N2ZiOGJmLi41ODcxZDc4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA0LDYgKzEwNCw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKIAorI2RlZmluZSBwdGVfcGdwcm90KHgpIF9fcGdwcm90KHB0ZV92YWwoeCkgJiBQVEVfRkxBR1NfTUFTSykKKwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYTRhOGY4Yi4uNTIyMjBkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTc2LDYgKzc2LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIFBURV9QSFlTX01BU0sJCShQSFlTX0FERFJfTUFTSyAmIFBBR0VfTUFTSykKKyNkZWZpbmUgUFRFX0ZMQUdTX01BU0sJCSh+KFBURV9QSFlTX01BU0spIDw8IFBBR0VfU0hJRlQpCiAKICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkoUDNTRUcpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAxNWQ5ZjkyLi42OTMzNjRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCkBAIC00MywxMSArNDQsNTIgQEAKIAlDUFVfU0hfTk9ORQogfTsKIAorLyoKKyAqIFRMQiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBEZWZpbmVkIGZvciBib3RoIEkgYW5kIEQgdGxiLCBwZXItcHJvY2Vzc29yLgorICovCitzdHJ1Y3QgdGxiX2luZm8geworCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXh0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXJzdDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKKworCXVuc2lnbmVkIGludCBlbnRyaWVzOworCXVuc2lnbmVkIGludCBzdGVwOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKK3N0cnVjdCBzaF9jcHVpbmZvIHsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwlpbnQgY3V0X21ham9yLCBjdXRfbWlub3I7CisJdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisJdW5zaWduZWQgbG9uZyBhc2lkX2NhY2hlOworCisJc3RydWN0IGNhY2hlX2luZm8gaWNhY2hlOwkvKiBQcmltYXJ5IEktY2FjaGUgKi8KKwlzdHJ1Y3QgY2FjaGVfaW5mbyBkY2FjaGU7CS8qIFByaW1hcnkgRC1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9pbmZvIHNjYWNoZTsJLyogU2Vjb25kYXJ5IGNhY2hlICovCisKKwkvKiBUTEIgaW5mbyAqLworCXN0cnVjdCB0bGJfaW5mbyBpdGxiOworCXN0cnVjdCB0bGJfaW5mbyBkdGxiOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoTDFfQ0FDSEVfQllURVMpKSk7CisKK2V4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBjcHVfZGF0YVtdOworI2RlZmluZSBib290X2NwdV9kYXRhIGNwdV9kYXRhWzBdCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorI2RlZmluZSByYXdfY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXQorCiAvKiBGb3J3YXJkIGRlY2wgKi8KLXN0cnVjdCBzaF9jcHVpbmZvOworc3RydWN0IHNlcV9vcGVyYXRpb25zOworCitleHRlcm4gc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7CiAKIC8qIGFyY2gvc2gva2VybmVsL3NldHVwLmMgKi8KIGNvbnN0IGNoYXIgKmdldF9jcHVfc3VidHlwZShzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyk7CitleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3A7CiAKICNpZmRlZiBDT05GSUdfVlNZU0NBTEwKIGludCB2c3lzY2FsbF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggMGRhZGQ3NS4uYTQ2YTAyMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC0xMCw5ICsxMCw5IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIC8qCkBAIC0yNiwyMyArMjYsNyBAQAogI2RlZmluZSBDQ05fQ1ZSCQkweGZmMDAwMDQwCiAjZGVmaW5lIENDTl9QUlIJCTB4ZmYwMDAwNDQKIAotc3RydWN0IHNoX2NwdWluZm8gewotCXVuc2lnbmVkIGludCB0eXBlOwotCWludCBjdXRfbWFqb3IsIGN1dF9taW5vcjsKLQl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKLQl1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7Ci0KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLwotCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsJLyogUHJpbWFyeSBELWNhY2hlICovCi0Jc3RydWN0IGNhY2hlX2luZm8gc2NhY2hlOwkvKiBTZWNvbmRhcnkgY2FjaGUgKi8KLQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSkpOwotCi1leHRlcm4gc3RydWN0IHNoX2NwdWluZm8gY3B1X2RhdGFbXTsKLSNkZWZpbmUgYm9vdF9jcHVfZGF0YSBjcHVfZGF0YVswXQotI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0KLSNkZWZpbmUgcmF3X2N1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0KK2FzbWxpbmthZ2Ugdm9pZCBfX2luaXQgc2hfY3B1X2luaXQodm9pZCk7CiAKIC8qCiAgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMkdCLgpAQCAtMTk2LDYgKzE4MCw4IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+cGMpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+cmVnc1sxNV0pCiAKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQorCiAjZGVmaW5lIGNwdV9zbGVlcCgpCV9fYXNtX18gX192b2xhdGlsZV9fICgic2xlZXAiIDogOiA6ICJtZW1vcnkiKQogI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKaW5kZXggNzcwZDUxNi4uYjBiNDgyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxjcHUvcmVnaXN0ZXJzLmg+CiAKQEAgLTM2LDQ2ICszNSw2IEBACiAJOiAiMSIgKF9fZHVtbXkpKTsgXAogcGM7IH0pCiAKLS8qCi0gKiBUTEIgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0gKgotICogRGVmaW5lZCBmb3IgYm90aCBJIGFuZCBEIHRsYiwgcGVyLXByb2Nlc3Nvci4KLSAqLwotc3RydWN0IHRsYl9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbmV4dDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgZmlyc3Q7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxhc3Q7Ci0KLQl1bnNpZ25lZCBpbnQgZW50cmllczsKLQl1bnNpZ25lZCBpbnQgc3RlcDsKLQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci19OwotCi1zdHJ1Y3Qgc2hfY3B1aW5mbyB7Ci0JZW51bSBjcHVfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwotCXVuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZTsKLQotCXVuc2lnbmVkIGludCBjcHVfY2xvY2ssIG1hc3Rlcl9jbG9jaywgYnVzX2Nsb2NrLCBtb2R1bGVfY2xvY2s7Ci0KLQkvKiBDYWNoZSBpbmZvICovCi0Jc3RydWN0IGNhY2hlX2luZm8gaWNhY2hlOwotCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsKLQlzdHJ1Y3QgY2FjaGVfaW5mbyBzY2FjaGU7Ci0KLQkvKiBUTEIgaW5mbyAqLwotCXN0cnVjdCB0bGJfaW5mbyBpdGxiOwotCXN0cnVjdCB0bGJfaW5mbyBkdGxiOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX07Ci0KLWV4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBjcHVfZGF0YVtdOwotI2RlZmluZSBib290X2NwdV9kYXRhIGNwdV9kYXRhWzBdCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQotI2RlZmluZSByYXdfY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXQotCiAjZW5kaWYKIAogLyoKQEAgLTE2OSw4ICsxMjgsNiBAQAogI2RlZmluZSBJTklUX01NQVAgXAogeyAmaW5pdF9tbSwgMCwgMCwgTlVMTCwgUEFHRV9TSEFSRUQsIFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMsIDEsIE5VTEwsIE5VTEwgfQogCi1leHRlcm4gIHN0cnVjdCBwdF9yZWdzIGZha2Vfc3dhcHBlcl9yZWdzOwotCiAjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCVwKIAkuc3AJCT0gc2l6ZW9mKGluaXRfc3RhY2spICsJXAogCQkJICAobG9uZykgJmluaXRfc3RhY2ssCVwKQEAgLTI2OSw2ICsyMjYsOCBAQAogI2RlZmluZSBLU1RLX0VJUCh0c2spICAoKHRzayktPnRocmVhZC5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKCh0c2spLT50aHJlYWQuc3ApCiAKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnNwKQorCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBiODZhZWFiLi4zYWQxOGU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTg3LDEyICs4NywxOCBAQAogCXVuc2lnbmVkIGxvbmcJbW9kOwogfTsKIAorI2RlZmluZSBQVFJBQ0VfR0VUUkVHUwkJMTIJLyogR2VuZXJhbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1MJCTEzCisKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUwkxNAkvKiBGUFUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MJMTUKKwogI2RlZmluZSBQVFJBQ0VfR0VURkRQSUMJCTMxCS8qIGdldCB0aGUgRUxGIGZkcGljIGxvYWRtYXAgYWRkcmVzcyAqLwogCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19FWEVDCTAJLyogW2FkZHJdIHJlcXVlc3QgdGhlIGV4ZWN1dGFibGUgbG9hZG1hcCAqLwogI2RlZmluZSBQVFJBQ0VfR0VURkRQSUNfSU5URVJQCTEJLyogW2FkZHJdIHJlcXVlc3QgdGhlIGludGVycHJldGVyIGxvYWRtYXAgKi8KIAotI2RlZmluZQlQVFJBQ0VfR0VURFNQUkVHUwk1NQorI2RlZmluZQlQVFJBQ0VfR0VURFNQUkVHUwk1NQkvKiBEU1AgcmVnaXN0ZXJzICovCiAjZGVmaW5lCVBUUkFDRV9TRVREU1BSRUdTCTU2CiAjZW5kaWYKIApAQCAtMTE3LDYgKzEyMyw5IEBACiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAogCQkgLSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisjZGVmaW5lIHRhc2tfcHRfZHNwcmVncyh0YXNrKSBcCisJKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAorCQkgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKICNlbHNlCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydGMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRjLmgKaW5kZXggMTgxM2Y0Mi4uZjdiMDEwZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydGMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1JUQ19ICiAjZGVmaW5lIF9BU01fUlRDX0gKIAordm9pZCB0aW1lX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiBleHRlcm4gdm9pZCAoKnJ0Y19zaF9nZXRfdGltZSkoc3RydWN0IHRpbWVzcGVjICopOwogZXh0ZXJuIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCA1NWEyYmQzLi5kNDUwYmNmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC00LDcgKzQsNiBAQAogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyNTYKIAogI2lmZGVmIF9fS0VSTkVMX18KLQogLyoKICAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQogICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpemVzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpemVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExZmI5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisvKiBETyBOT1QgRURJVCEhIC0gdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAgICAgZnJvbSAucyBmaWxlIGJ5IGF3ayAtZiBzMmguYXdrCisgKi8KKy8qICBTaXplIGRlZmluaXRpb25zCisgKiAgQ29weXJpZ2h0IChDKSBBUk0gTGltaXRlZCAxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX19zaXplc19oCisjZGVmaW5lIF9fc2l6ZXNfaCAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBoYW5keSBzaXplcyAqLworI2RlZmluZSBTWl8xNgkJCQkweDAwMDAwMDEwCisjZGVmaW5lIFNaXzMyCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU1pfNjQJCQkJMHgwMDAwMDA0MAorI2RlZmluZSBTWl8xMjgJCQkJMHgwMDAwMDA4MAorI2RlZmluZSBTWl8yNTYJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBTWl81MTIJCQkJMHgwMDAwMDIwMAorCisjZGVmaW5lIFNaXzFLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBTWl80SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgU1pfOEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFNaXzE2SyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBTWl8zMksJCQkJMHgwMDAwODAwMAorI2RlZmluZSBTWl82NEsgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgU1pfMTI4SyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFNaXzI1NksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBTWl81MTJLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKworI2RlZmluZSBTWl8xTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgU1pfMk0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFNaXzRNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBTWl84TSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgU1pfMTZNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFNaXzI2TQkJCQkweDAxYTAwMDAwCisjZGVmaW5lIFNaXzMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBTWl82NE0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgU1pfMTI4TSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFNaXzI1Nk0gICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBTWl81MTJNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKworI2RlZmluZSBTWl8xRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU1pfMkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKyNlbmRpZgorCisvKiAgICAgICAgIEVORCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNTkzMzQzYy4uODViNjYwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0yMSwyNSArMjEsMjkgQEAKIGV4dGVybiBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107CiAjZGVmaW5lIGNwdV9sb2dpY2FsX21hcChjcHUpICBfX2NwdV9sb2dpY2FsX21hcFtjcHVdCiAKLS8qIEkndmUgbm8gaWRlYSB3aGF0IHRoZSByZWFsIG1lYW5pbmcgb2YgdGhpcyBpcyAqLwotI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCitlbnVtIHsKKwlTTVBfTVNHX0ZVTkNUSU9OLAorCVNNUF9NU0dfUkVTQ0hFRFVMRSwKKwlTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRSwKKwlTTVBfTVNHX1RJTUVSLAogCi0jZGVmaW5lIE5PX1BST0NfSUQJKC0xKQorCVNNUF9NU0dfTlIsCS8qIG11c3QgYmUgbGFzdCAqLworfTsKIAotI2RlZmluZSBTTVBfTVNHX0ZVTkNUSU9OCTAKLSNkZWZpbmUgU01QX01TR19SRVNDSEVEVUxFCTEKLSNkZWZpbmUgU01QX01TR19GVU5DVElPTl9TSU5HTEUJMgotI2RlZmluZSBTTVBfTVNHX05SCQkzCit2b2lkIHNtcF9tZXNzYWdlX3JlY3YodW5zaWduZWQgaW50IG1zZyk7Cit2b2lkIHNtcF90aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spOworCit2b2lkIGxvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKK3ZvaWQgbG9jYWxfdGltZXJfc2V0dXAodW5zaWduZWQgaW50IGNwdSk7CiAKIHZvaWQgcGxhdF9zbXBfc2V0dXAodm9pZCk7CiB2b2lkIHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cyk7CiBpbnQgcGxhdF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwogdm9pZCBwbGF0X3N0YXJ0X2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGVudHJ5X3BvaW50KTsKIHZvaWQgcGxhdF9zZW5kX2lwaSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWVzc2FnZSk7Ci1pbnQgcGxhdF9yZWdpc3Rlcl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgbWVzc2FnZSwKLQkJCSAgICAgIHZvaWQgKCpoYW5kbGVyKSh2b2lkICopLCB2b2lkICphcmcpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzayk7CisKK3ZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKK3ZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTM4MTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMX0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTF9ICisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyMgaW5jbHVkZSAic3lzY2FsbF8zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAic3lzY2FsbF82NC5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3NzNmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbF8zMi5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfMzJfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMXzMyX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKiBUaGUgc3lzdGVtIGNhbGwgbnVtYmVyIGlzIGdpdmVuIGJ5IHRoZSB1c2VyIGluICVnMSAqLworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAocmVncy0+dHJhID49IDApID8gcmVncy0+cmVnc1szXSA6IC0xTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfcm9sbGJhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKgorCSAqIFhYWDogVGhpcyBuZWVkcyBzb21lIHRob3VnaHQuIE9uIFNIIHdlIGRvbid0CisJICogc2F2ZSBhd2F5IHRoZSBvcmlnaW5hbCByMCB2YWx1ZSBhbnl3aGVyZS4KKwkgKi8KK30KKworc3RhdGljIGlubGluZSBib29sIHN5c2NhbGxfaGFzX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAocmVncy0+c3IgJiAweDEpID8gdHJ1ZSA6IGZhbHNlOworfQorc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPnNyIHw9IDB4MTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2NsZWFyX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPnNyICY9IH4weDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9lcnJvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gc3lzY2FsbF9oYXNfZXJyb3IocmVncykgPyByZWdzLT5yZWdzWzBdIDogMDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+cmVnc1swXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgIGludCBlcnJvciwgbG9uZyB2YWwpCit7CisJaWYgKGVycm9yKSB7CisJCXN5c2NhbGxfc2V0X2Vycm9yKHJlZ3MpOworCQlyZWdzLT5yZWdzWzBdID0gLWVycm9yOworCX0gZWxzZSB7CisJCXN5c2NhbGxfY2xlYXJfZXJyb3IocmVncyk7CisJCXJlZ3MtPnJlZ3NbMF0gPSB2YWw7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCQkJCQkgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwkvKgorCSAqIERvIHRoaXMgc2ltcGx5IGZvciBub3cuIElmIHdlIG5lZWQgdG8gc3RhcnQgc3VwcG9ydGluZworCSAqIGZldGNoaW5nIGFyZ3VtZW50cyBmcm9tIGFyYml0cmFyeSBpbmRpY2VzLCB0aGlzIHdpbGwgbmVlZCBzb21lCisJICogZXh0cmEgbG9naWMuIFByZXNlbnRseSB0aGVyZSBhcmUgbm8gaW4tdHJlZSB1c2VycyB0aGF0IGRlcGVuZAorCSAqIG9uIHRoaXMgYmVoYXZpb3VyLgorCSAqLworCUJVR19PTihpKTsKKworCS8qIEFyZ3VtZW50IHBhdHRlcm4gaXM6IFI0LCBSNSwgUjYsIFI3LCBSMCwgUjEgKi8KKwlzd2l0Y2ggKG4pIHsKKwljYXNlIDY6IGFyZ3NbNV0gPSByZWdzLT5yZWdzWzFdOworCWNhc2UgNTogYXJnc1s0XSA9IHJlZ3MtPnJlZ3NbMF07CisJY2FzZSA0OiBhcmdzWzNdID0gcmVncy0+cmVnc1s3XTsKKwljYXNlIDM6IGFyZ3NbMl0gPSByZWdzLT5yZWdzWzZdOworCWNhc2UgMjogYXJnc1sxXSA9IHJlZ3MtPnJlZ3NbNV07CisJY2FzZSAxOglhcmdzWzBdID0gcmVncy0+cmVnc1s0XTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgaW50IGksIHVuc2lnbmVkIGludCBuLAorCQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwkvKiBTYW1lIG5vdGUgYXMgYWJvdmUgYXBwbGllcyAqLworCUJVR19PTihpKTsKKworCXN3aXRjaCAobikgeworCWNhc2UgNjogcmVncy0+cmVnc1sxXSA9IGFyZ3NbNV07CisJY2FzZSA1OiByZWdzLT5yZWdzWzBdID0gYXJnc1s0XTsKKwljYXNlIDQ6IHJlZ3MtPnJlZ3NbN10gPSBhcmdzWzNdOworCWNhc2UgMzogcmVncy0+cmVnc1s2XSA9IGFyZ3NbMl07CisJY2FzZSAyOiByZWdzLT5yZWdzWzVdID0gYXJnc1sxXTsKKwljYXNlIDE6IHJlZ3MtPnJlZ3NbNF0gPSBhcmdzWzBdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbF82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhYWE4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbF82NC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMXzY0X0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTF82NF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zeXNjYWxsLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWUyYjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTFNfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBvbGRfdXRzbmFtZTsKKworYXNtbGlua2FnZSBpbnQgb2xkX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCWludCBmZCwgdW5zaWduZWQgbG9uZyBvZmYpOworYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOworYXNtbGlua2FnZSBpbnQgc3lzX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKKwkJICAgICAgIGludCB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCk7Cithc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSk7CisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyMgaW5jbHVkZSAic3lzY2FsbHNfMzIuaCIKKyNlbHNlCisjIGluY2x1ZGUgInN5c2NhbGxzXzY0LmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0YzVlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExTXzMyX0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTFNfMzJfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK2FzbWxpbmthZ2UgaW50IHN5c19mb3JrKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19jbG9uZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld3NwLAorCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3RpZHB0ciwKKwkJCSB1bnNpZ25lZCBsb25nIGNoaWxkX3RpZHB0ciwKKwkJCSBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3Zmb3JrKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqdWZpbGVuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqdWFyZ3YsCisJCQkgIGNoYXIgX191c2VyICogX191c2VyICp1ZW52cCwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKG9sZF9zaWdzZXRfdCBtYXNrLCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqYWN0LAorCQkJICAgICBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKm9hY3QpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QgX191c2VyICp1c3MsIHN0YWNrX3QgX191c2VyICp1b3NzLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdyZXR1cm4odW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19ydF9zaWdyZXR1cm4odW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfcGlwZSh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHNzaXplX3Qgc3lzX3ByZWFkX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHdyaXRlX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9uZyBkdW1teSwgbG9mZl90IHBvcyk7Cithc21saW5rYWdlIGludCBzeXNfZmFkdmlzZTY0XzY0X3dyYXBwZXIoaW50IGZkLCB1MzIgb2Zmc2V0MCwgdTMyIG9mZnNldDEsCisJCQkJCXUzMiBsZW4wLCB1MzIgbGVuMSwgaW50IGFkdmljZSk7CisKKy8qIE1pc2Mgc3lzY2FsbCByZWxhdGVkIGJpdHMgKi8KK2FzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19ub3RpZnlfcmVzdW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgc2F2ZV9yMCwKKwkJCQkgdW5zaWduZWQgbG9uZyB0aHJlYWRfaW5mb19mbGFncyk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fU0hfU1lTQ0FMTFNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsc182NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsc182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MWZkODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMU182NF9ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExTXzY0X0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCithc21saW5rYWdlIGludCBzeXNfZm9yayh1bnNpZ25lZCBsb25nIHIyLCB1bnNpZ25lZCBsb25nIHIzLAorCQkJdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQkgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJIHN0cnVjdCBwdF9yZWdzICpwcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfdmZvcmsodW5zaWduZWQgbG9uZyByMiwgdW5zaWduZWQgbG9uZyByMywKKwkJCSB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19leGVjdmUoY2hhciAqdWZpbGVuYW1lLCBjaGFyICoqdWFyZ3YsCisJCQkgIGNoYXIgKip1ZW52cCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKKworLyogTWlzYyBzeXNjYWxsIHJlbGF0ZWQgYml0cyAqLworYXNtbGlua2FnZSBsb25nIGxvbmcgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9fc3lzY2FsbF90cmFjZV9sZWF2ZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fU0hfU1lTQ0FMTFNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggMDU2ZDY4Yy4uNjE2MGZlNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC03MCw2ICs3MCw4IEBACiAKICNpZmRlZiBDT05GSUdfR1VTQV9SQgogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLWdyYi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjaW5jbHVkZSA8YXNtL2NtcHhjaGctbGxzYy5oPgogI2Vsc2UKICNpbmNsdWRlIDxhc20vY21weGNoZy1pcnEuaD4KICNlbmRpZgpAQCAtMTI1LDYgKzEyNyw4IEBACiAgIH0pCiAKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Cit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKK3ZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogZXh0ZXJuIHZvaWQgKnNldF9leGNlcHRpb25fdGFibGVfdmVjKHVuc2lnbmVkIGludCB2ZWMsIHZvaWQgKmhhbmRsZXIpOwogCkBAIC0xNzcsOCArMTgxLDggQEAKICNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKIAogc3RydWN0IG1lbV9hY2Nlc3MgewotCXVuc2lnbmVkIGxvbmcgKCpmcm9tKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwotCXVuc2lnbmVkIGxvbmcgKCp0bykodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKKwl1bnNpZ25lZCBsb25nICgqZnJvbSkodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBsb25nIGNudCk7CisJdW5zaWduZWQgbG9uZyAoKnRvKSh2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKIH07CiAKICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IGYxMWJjZjAuLmE3MjZkNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtNTgsNyArNTgsOCBAQAogCWxhc3QgPSBfX2xhc3Q7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnVuY2FjaGVkLnRleHQiKSkpCisjZGVmaW5lIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIFwKKwlub2lubGluZSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKIAogLyoKICAqIEp1bXAgdG8gdW5jYWNoZWQgYXJlYS4KQEAgLTk2LDcgKzk3LDQ4IEBACiAJCTogIj0mciIgKF9fZHVtbXkpKTsJCQlcCiB9IHdoaWxlICgwKQogCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfU1JfUkIKKyNkZWZpbmUgbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoKQlcCisoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX3ZlYzsJCVwKKwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCVwKKwkJInN0YyByMl9iYW5rLCAlMFxuXHQiCVwKKwkJOiAiPXIiIChfdmVjKQkJXAorCSk7CQkJCVwKKwkJCQkJXAorCV92ZWM7CQkJCVwKK30pCisjZWxzZQorI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfdmVjOwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCVwKKwkJIm1vdiByNCwgJTBcblx0IglcCisJCTogIj1yIiAoX3ZlYykJCVwKKwkpOwkJCQlcCisJCQkJCVwKKwlfdmVjOwkJCQlcCit9KQorI2VuZGlmCisKIGludCBoYW5kbGVfdW5hbGlnbmVkX2FjY2VzcyhvcGNvZGVfdCBpbnN0cnVjdGlvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkgICAgc3RydWN0IG1lbV9hY2Nlc3MgKm1hKTsKIAorYXNtbGlua2FnZSB2b2lkIGRvX2FkZHJlc3NfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJIHVuc2lnbmVkIGxvbmcgd3JpdGVhY2Nlc3MsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Cithc21saW5rYWdlIHZvaWQgZG9fZGl2aWRlX2Vycm9yKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCQlzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX3Jlc2VydmVkX2luc3QodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9faWxsZWdhbF9zbG90X2luc3QodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9fZXhjZXB0aW9uX2Vycm9yKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkJICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCQkgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworCiAjZW5kaWYgLyogX19BU01fU0hfU1lTVEVNXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwYTg5NGNhLi5mMDlhYzQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0zMywyMCArMzMsMTIgQEAKICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4MTAwMDAwMDAKIAogI2lmIGRlZmluZWQoQ09ORklHXzRLU1RBQ0tTKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV80S0IpCi0jZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgxKQotI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzhLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfMTZLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfNjRLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDApCisjZGVmaW5lIFRIUkVBRF9TSElGVAkxMgogI2Vsc2UKLSNlcnJvciAiVW5rbm93biB0aHJlYWQgc2l6ZSIKKyNkZWZpbmUgVEhSRUFEX1NISUZUCTEzCiAjZW5kaWYKIAotI2RlZmluZSBUSFJFQURfU0laRQkoUEFHRV9TSVpFIDw8IFRIUkVBRF9TSVpFX09SREVSKQorI2RlZmluZSBUSFJFQURfU0laRQkoMSA8PCBUSFJFQURfU0hJRlQpCiAjZGVmaW5lIFNUQUNLX1dBUk4JKFRIUkVBRF9TSVpFID4+IDMpCiAKIC8qCkBAIC05NCwxNSArODYsMTkgQEAKIAlyZXR1cm4gdGk7CiB9CiAKKy8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCisjaWYgVEhSRUFEX1NISUZUID49IFBBR0VfU0hJRlQKKworI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoVEhSRUFEX1NISUZUIC0gUEFHRV9TSElGVCkKKworI2Vsc2UgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLworCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgogCi0vKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwotI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0aSkJa3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKLSNlbHNlCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRpKQlrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQotI2VuZGlmCi0jZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCWtmcmVlKHRpKQorZXh0ZXJuIHN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKTsKKyAKKyNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCA1NTgwZmQ0Li41NmZkMjBiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtMjYsMTYgKzI2LDIwIEBACiAJcmV0dmFsID0gMDsJCQkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJXAogCWNhc2UgMToJCQkJCQkJXAotCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9iKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2IoKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSAyOgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3coeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fdygodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fbCh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9sKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgODoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9xKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3EoKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJZGVmYXVsdDoJCQkJCQlcCiAJCV9fZ2V0X3VzZXJfdW5rbm93bigpOwkJCQlcCkBAIC01NCwxNiArNTgsMjAgQEAKIAlyZXR2YWwgPSAwOwkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fYigodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fdyh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV93KCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9sKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2woKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fcSgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCVwKIAkJX19wdXRfdXNlcl91bmtub3duKCk7CQkJCVwKQEAgLTc3LDUgKzg1LDcgQEAKIGV4dGVybiB2b2lkIF9fcHV0X3VzZXJfdW5rbm93bih2b2lkKTsKIAogZXh0ZXJuIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciAqX19zLCBsb25nIF9fbik7CitleHRlcm4gaW50IF9fc3RybmNweV9mcm9tX3VzZXIodW5zaWduZWQgbG9uZyBfX2Rlc3QsCisJICAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyIF9fc3JjLCBpbnQgX19jb3VudCk7CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9VQUNDRVNTXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMmEvY3B1L3NoNzIwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjkzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMmEvY3B1L3NoNzIwMy5oCkBAIC0wLDAgKzEsMTQzIEBACisjaWZuZGVmIF9fQVNNX1NINzIwM19IX18KKyNkZWZpbmUgX19BU01fU0g3MjAzX0hfXworCitlbnVtIHsKKwkvKiBQQSAqLworCUdQSU9fUEE3LCBHUElPX1BBNiwgR1BJT19QQTUsIEdQSU9fUEE0LAorCUdQSU9fUEEzLCBHUElPX1BBMiwgR1BJT19QQTEsIEdQSU9fUEEwLAorCisJLyogUEIgKi8KKwlHUElPX1BCMTIsCisJR1BJT19QQjExLCBHUElPX1BCMTAsIEdQSU9fUEI5LCBHUElPX1BCOCwKKwlHUElPX1BCNywgR1BJT19QQjYsIEdQSU9fUEI1LCBHUElPX1BCNCwKKwlHUElPX1BCMywgR1BJT19QQjIsIEdQSU9fUEIxLCBHUElPX1BCMCwKKworCS8qIFBDICovCisJR1BJT19QQzE0LCBHUElPX1BDMTMsIEdQSU9fUEMxMiwKKwlHUElPX1BDMTEsIEdQSU9fUEMxMCwgR1BJT19QQzksIEdQSU9fUEM4LAorCUdQSU9fUEM3LCBHUElPX1BDNiwgR1BJT19QQzUsIEdQSU9fUEM0LAorCUdQSU9fUEMzLCBHUElPX1BDMiwgR1BJT19QQzEsIEdQSU9fUEMwLAorCisJLyogUEQgKi8KKwlHUElPX1BEMTUsIEdQSU9fUEQxNCwgR1BJT19QRDEzLCBHUElPX1BEMTIsCisJR1BJT19QRDExLCBHUElPX1BEMTAsIEdQSU9fUEQ5LCBHUElPX1BEOCwKKwlHUElPX1BENywgR1BJT19QRDYsIEdQSU9fUEQ1LCBHUElPX1BENCwKKwlHUElPX1BEMywgR1BJT19QRDIsIEdQSU9fUEQxLCBHUElPX1BEMCwKKworCS8qIFBFICovCisJR1BJT19QRTE1LCBHUElPX1BFMTQsIEdQSU9fUEUxMywgR1BJT19QRTEyLAorCUdQSU9fUEUxMSwgR1BJT19QRTEwLCBHUElPX1BFOSwgR1BJT19QRTgsCisJR1BJT19QRTcsIEdQSU9fUEU2LCBHUElPX1BFNSwgR1BJT19QRTQsCisJR1BJT19QRTMsIEdQSU9fUEUyLCBHUElPX1BFMSwgR1BJT19QRTAsCisKKwkvKiBQRiAqLworCUdQSU9fUEYzMCwgR1BJT19QRjI5LCBHUElPX1BGMjgsCisJR1BJT19QRjI3LCBHUElPX1BGMjYsIEdQSU9fUEYyNSwgR1BJT19QRjI0LAorCUdQSU9fUEYyMywgR1BJT19QRjIyLCBHUElPX1BGMjEsIEdQSU9fUEYyMCwKKwlHUElPX1BGMTksIEdQSU9fUEYxOCwgR1BJT19QRjE3LCBHUElPX1BGMTYsCisJR1BJT19QRjE1LCBHUElPX1BGMTQsIEdQSU9fUEYxMywgR1BJT19QRjEyLAorCUdQSU9fUEYxMSwgR1BJT19QRjEwLCBHUElPX1BGOSwgR1BJT19QRjgsCisJR1BJT19QRjcsIEdQSU9fUEY2LCBHUElPX1BGNSwgR1BJT19QRjQsCisJR1BJT19QRjMsIEdQSU9fUEYyLCBHUElPX1BGMSwgR1BJT19QRjAsCisKKwkvKiBJTlRDOiBJUlEgYW5kIFBJTlQgb24gUEIvUEQvUEUgKi8KKwlHUElPX0ZOX1BJTlQ3X1BCLCBHUElPX0ZOX1BJTlQ2X1BCLCBHUElPX0ZOX1BJTlQ1X1BCLCBHUElPX0ZOX1BJTlQ0X1BCLAorCUdQSU9fRk5fUElOVDNfUEIsIEdQSU9fRk5fUElOVDJfUEIsIEdQSU9fRk5fUElOVDFfUEIsIEdQSU9fRk5fUElOVDBfUEIsCisJR1BJT19GTl9QSU5UN19QRCwgR1BJT19GTl9QSU5UNl9QRCwgR1BJT19GTl9QSU5UNV9QRCwgR1BJT19GTl9QSU5UNF9QRCwKKwlHUElPX0ZOX1BJTlQzX1BELCBHUElPX0ZOX1BJTlQyX1BELCBHUElPX0ZOX1BJTlQxX1BELCBHUElPX0ZOX1BJTlQwX1BELAorCUdQSU9fRk5fSVJRN19QQiwgR1BJT19GTl9JUlE2X1BCLCBHUElPX0ZOX0lSUTVfUEIsIEdQSU9fRk5fSVJRNF9QQiwKKwlHUElPX0ZOX0lSUTNfUEIsIEdQSU9fRk5fSVJRMl9QQiwgR1BJT19GTl9JUlExX1BCLCBHUElPX0ZOX0lSUTBfUEIsCisJR1BJT19GTl9JUlE3X1BELCBHUElPX0ZOX0lSUTZfUEQsIEdQSU9fRk5fSVJRNV9QRCwgR1BJT19GTl9JUlE0X1BELAorCUdQSU9fRk5fSVJRM19QRCwgR1BJT19GTl9JUlEyX1BELCBHUElPX0ZOX0lSUTFfUEQsIEdQSU9fRk5fSVJRMF9QRCwKKwlHUElPX0ZOX0lSUTdfUEUsIEdQSU9fRk5fSVJRNl9QRSwgR1BJT19GTl9JUlE1X1BFLCBHUElPX0ZOX0lSUTRfUEUsCisJR1BJT19GTl9JUlEzX1BFLCBHUElPX0ZOX0lSUTJfUEUsIEdQSU9fRk5fSVJRMV9QRSwgR1BJT19GTl9JUlEwX1BFLAorCisJR1BJT19GTl9XRFRPVkYsIEdQSU9fRk5fSVJRT1VULCBHUElPX0ZOX1JFRk9VVCwgR1BJT19GTl9JUlFPVVRfUkVGT1VULAorCUdQSU9fRk5fVUJDVFJHLAorCisJLyogQ0FOICovCisJR1BJT19GTl9DVFgxLCBHUElPX0ZOX0NSWDEsIEdQSU9fRk5fQ1RYMCwgR1BJT19GTl9DVFgwX0NUWDEsCisJR1BJT19GTl9DUlgwLCBHUElPX0ZOX0NSWDBfQ1JYMSwKKworCS8qIElJQzMgKi8KKwlHUElPX0ZOX1NEQTMsIEdQSU9fRk5fU0NMMywKKwlHUElPX0ZOX1NEQTIsIEdQSU9fRk5fU0NMMiwKKwlHUElPX0ZOX1NEQTEsIEdQSU9fRk5fU0NMMSwKKwlHUElPX0ZOX1NEQTAsIEdQSU9fRk5fU0NMMCwKKworCS8qIERNQUMgKi8KKwlHUElPX0ZOX1RFTkQwX1BELCBHUElPX0ZOX1RFTkQwX1BFLCBHUElPX0ZOX0RBQ0swX1BELAorCUdQSU9fRk5fREFDSzBfUEUsIEdQSU9fRk5fRFJFUTBfUEQsIEdQSU9fRk5fRFJFUTBfUEUsCisJR1BJT19GTl9URU5EMV9QRCwgR1BJT19GTl9URU5EMV9QRSwgR1BJT19GTl9EQUNLMV9QRCwKKwlHUElPX0ZOX0RBQ0sxX1BFLCBHUElPX0ZOX0RSRVExX1BELCBHUElPX0ZOX0RSRVExX1BFLAorCUdQSU9fRk5fREFDSzIsIEdQSU9fRk5fRFJFUTIsCisJR1BJT19GTl9EQUNLMywgR1BJT19GTl9EUkVRMywKKworCS8qIEFEQyAqLworCUdQSU9fRk5fQURUUkdfUEQsIEdQSU9fRk5fQURUUkdfUEUsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0QzMSwgR1BJT19GTl9EMzAsIEdQSU9fRk5fRDI5LCBHUElPX0ZOX0QyOCwKKwlHUElPX0ZOX0QyNywgR1BJT19GTl9EMjYsIEdQSU9fRk5fRDI1LCBHUElPX0ZOX0QyNCwKKwlHUElPX0ZOX0QyMywgR1BJT19GTl9EMjIsIEdQSU9fRk5fRDIxLCBHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0QxOSwgR1BJT19GTl9EMTgsIEdQSU9fRk5fRDE3LCBHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX0EyNSwgR1BJT19GTl9BMjQsIEdQSU9fRk5fQTIzLCBHUElPX0ZOX0EyMiwKKwlHUElPX0ZOX0EyMSwgR1BJT19GTl9DUzQsIEdQSU9fRk5fTVJFUywgR1BJT19GTl9CUywKKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9DUzEsIEdQSU9fRk5fQ1M2X0NFMUIsCisJR1BJT19GTl9DRTJCLCBHUElPX0ZOX0NTNV9DRTFBLCBHUElPX0ZOX0NFMkEsCisJR1BJT19GTl9GUkFNRSwgR1BJT19GTl9XQUlULCBHUElPX0ZOX1JEV1IsCisJR1BJT19GTl9DS0UsIEdQSU9fRk5fQ0FTVSwgR1BJT19GTl9CUkVRLCBHUElPX0ZOX1JBU1UsCisJR1BJT19GTl9CQUNLLCBHUElPX0ZOX0NBU0wsIEdQSU9fRk5fUkFTTCwKKwlHUElPX0ZOX1dFM19EUU1VVV9BSF9JQ0lPX1dSLCBHUElPX0ZOX1dFMl9EUU1VTF9JQ0lPUkQsCisJR1BJT19GTl9XRTFfRFFNTFVfV0UsIEdQSU9fRk5fV0UwX0RRTUxMLAorCUdQSU9fRk5fQ1MzLCBHUElPX0ZOX0NTMiwgR1BJT19GTl9BMSwgR1BJT19GTl9BMCwgR1BJT19GTl9DUzcsCisKKwkvKiBUTVUgKi8KKwlHUElPX0ZOX1RJT0M0RCwgR1BJT19GTl9USU9DNEMsIEdQSU9fRk5fVElPQzRCLCBHUElPX0ZOX1RJT0M0QSwKKwlHUElPX0ZOX1RJT0MzRCwgR1BJT19GTl9USU9DM0MsIEdQSU9fRk5fVElPQzNCLCBHUElPX0ZOX1RJT0MzQSwKKwlHUElPX0ZOX1RJT0MyQiwgR1BJT19GTl9USU9DMUIsIEdQSU9fRk5fVElPQzJBLCBHUElPX0ZOX1RJT0MxQSwKKwlHUElPX0ZOX1RJT0MwRCwgR1BJT19GTl9USU9DMEMsIEdQSU9fRk5fVElPQzBCLCBHUElPX0ZOX1RJT0MwQSwKKwlHUElPX0ZOX1RDTEtEX1BELCBHUElPX0ZOX1RDTEtDX1BELCBHUElPX0ZOX1RDTEtCX1BELCBHUElPX0ZOX1RDTEtBX1BELAorCUdQSU9fRk5fVENMS0RfUEYsIEdQSU9fRk5fVENMS0NfUEYsIEdQSU9fRk5fVENMS0JfUEYsIEdQSU9fRk5fVENMS0FfUEYsCisKKwkvKiBTU1UgKi8KKwlHUElPX0ZOX1NDUzBfUEQsIEdQSU9fRk5fU1NPMF9QRCwgR1BJT19GTl9TU0kwX1BELCBHUElPX0ZOX1NTQ0swX1BELAorCUdQSU9fRk5fU0NTMF9QRiwgR1BJT19GTl9TU08wX1BGLCBHUElPX0ZOX1NTSTBfUEYsIEdQSU9fRk5fU1NDSzBfUEYsCisJR1BJT19GTl9TQ1MxX1BELCBHUElPX0ZOX1NTTzFfUEQsIEdQSU9fRk5fU1NJMV9QRCwgR1BJT19GTl9TU0NLMV9QRCwKKwlHUElPX0ZOX1NDUzFfUEYsIEdQSU9fRk5fU1NPMV9QRiwgR1BJT19GTl9TU0kxX1BGLCBHUElPX0ZOX1NTQ0sxX1BGLAorCisJLyogU0NJRiAqLworCUdQSU9fRk5fVFhEMCwgR1BJT19GTl9SWEQwLCBHUElPX0ZOX1NDSzAsCisJR1BJT19GTl9UWEQxLCBHUElPX0ZOX1JYRDEsIEdQSU9fRk5fU0NLMSwKKwlHUElPX0ZOX1RYRDIsIEdQSU9fRk5fUlhEMiwgR1BJT19GTl9TQ0syLAorCUdQSU9fRk5fUlRTMywgR1BJT19GTl9DVFMzLCBHUElPX0ZOX1RYRDMsIEdQSU9fRk5fUlhEMywgR1BJT19GTl9TQ0szLAorCisJLyogU1NJICovCisJR1BJT19GTl9BVURJT19DTEssCisJR1BJT19GTl9TU0lEQVRBMywgR1BJT19GTl9TU0lXUzMsIEdQSU9fRk5fU1NJU0NLMywKKwlHUElPX0ZOX1NTSURBVEEyLCBHUElPX0ZOX1NTSVdTMiwgR1BJT19GTl9TU0lTQ0syLAorCUdQSU9fRk5fU1NJREFUQTEsIEdQSU9fRk5fU1NJV1MxLCBHUElPX0ZOX1NTSVNDSzEsCisJR1BJT19GTl9TU0lEQVRBMCwgR1BJT19GTl9TU0lXUzAsIEdQSU9fRk5fU1NJU0NLMCwKKworCS8qIEZMQ1RMICovCisJR1BJT19GTl9GQ0UsIEdQSU9fRk5fRlJCLAorCUdQSU9fRk5fTkFGNywgR1BJT19GTl9OQUY2LCBHUElPX0ZOX05BRjUsIEdQSU9fRk5fTkFGNCwKKwlHUElPX0ZOX05BRjMsIEdQSU9fRk5fTkFGMiwgR1BJT19GTl9OQUYxLCBHUElPX0ZOX05BRjAsCisJR1BJT19GTl9GU0MsIEdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZDREUsIEdQSU9fRk5fRldFLAorCisJLyogTENEQyAqLworCUdQSU9fRk5fTENEX1ZFUFdDLCBHUElPX0ZOX0xDRF9WQ1BXQywKKwlHUElPX0ZOX0xDRF9DTEssIEdQSU9fRk5fTENEX0ZMTSwKKwlHUElPX0ZOX0xDRF9NX0RJU1AsIEdQSU9fRk5fTENEX0NMMiwKKwlHUElPX0ZOX0xDRF9DTDEsIEdQSU9fRk5fTENEX0RPTiwKKwlHUElPX0ZOX0xDRF9EQVRBMTUsIEdQSU9fRk5fTENEX0RBVEExNCwKKwlHUElPX0ZOX0xDRF9EQVRBMTMsIEdQSU9fRk5fTENEX0RBVEExMiwKKwlHUElPX0ZOX0xDRF9EQVRBMTEsIEdQSU9fRk5fTENEX0RBVEExMCwKKwlHUElPX0ZOX0xDRF9EQVRBOSwgR1BJT19GTl9MQ0RfREFUQTgsCisJR1BJT19GTl9MQ0RfREFUQTcsIEdQSU9fRk5fTENEX0RBVEE2LAorCUdQSU9fRk5fTENEX0RBVEE1LCBHUElPX0ZOX0xDRF9EQVRBNCwKKwlHUElPX0ZOX0xDRF9EQVRBMywgR1BJT19GTl9MQ0RfREFUQTIsCisJR1BJT19GTl9MQ0RfREFUQTEsIEdQSU9fRk5fTENEX0RBVEEwLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzIwM19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9zaDc3MjAuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9zaDc3MjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWMxNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oCkBAIC0wLDAgKzEsMTc0IEBACisjaWZuZGVmIF9fQVNNX1NINzcyMF9IX18KKyNkZWZpbmUgX19BU01fU0g3NzIwX0hfXworCitlbnVtIHsKKwkvKiBQVEEgKi8KKwlHUElPX1BUQTcsIEdQSU9fUFRBNiwgR1BJT19QVEE1LCBHUElPX1BUQTQsCisJR1BJT19QVEEzLCBHUElPX1BUQTIsIEdQSU9fUFRBMSwgR1BJT19QVEEwLAorCisJLyogUFRCICovCisJR1BJT19QVEI3LCBHUElPX1BUQjYsIEdQSU9fUFRCNSwgR1BJT19QVEI0LAorCUdQSU9fUFRCMywgR1BJT19QVEIyLCBHUElPX1BUQjEsIEdQSU9fUFRCMCwKKworCS8qIFBUQyAqLworCUdQSU9fUFRDNywgR1BJT19QVEM2LCBHUElPX1BUQzUsIEdQSU9fUFRDNCwKKwlHUElPX1BUQzMsIEdQSU9fUFRDMiwgR1BJT19QVEMxLCBHUElPX1BUQzAsCisKKwkvKiBQVEQgKi8KKwlHUElPX1BURDcsIEdQSU9fUFRENiwgR1BJT19QVEQ1LCBHUElPX1BURDQsCisJR1BJT19QVEQzLCBHUElPX1BURDIsIEdQSU9fUFREMSwgR1BJT19QVEQwLAorCisJLyogUFRFICovCisJR1BJT19QVEU2LCBHUElPX1BURTUsIEdQSU9fUFRFNCwgR1BJT19QVEUzLAorCUdQSU9fUFRFMiwgR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjYsIEdQSU9fUFRGNSwgR1BJT19QVEY0LCBHUElPX1BURjMsCisJR1BJT19QVEYyLCBHUElPX1BURjEsIEdQSU9fUFRGMCwgR1BJT19QVEc2LAorCisJLyogUFRHICovCisJR1BJT19QVEc1LCBHUElPX1BURzQsIEdQSU9fUFRHMywgR1BJT19QVEcyLAorCUdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg2LCBHUElPX1BUSDUsIEdQSU9fUFRINCwgR1BJT19QVEgzLAorCUdQSU9fUFRIMiwgR1BJT19QVEgxLCBHUElPX1BUSDAsCisKKwkvKiBQVEogKi8KKwlHUElPX1BUSjYsIEdQSU9fUFRKNSwgR1BJT19QVEo0LCBHUElPX1BUSjMsCisJR1BJT19QVEoyLCBHUElPX1BUSjEsIEdQSU9fUFRKMCwKKworCS8qIFBUSyAqLworCUdQSU9fUFRLMywgR1BJT19QVEsyLCBHUElPX1BUSzEsIEdQSU9fUFRLMCwKKworCS8qIFBUTCAqLworCUdQSU9fUFRMNywgR1BJT19QVEw2LCBHUElPX1BUTDUsIEdQSU9fUFRMNCwgR1BJT19QVEwzLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUUCAqLworCUdQSU9fUFRQNCwgR1BJT19QVFAzLCBHUElPX1BUUDIsIEdQSU9fUFRQMSwgR1BJT19QVFAwLAorCisJLyogUFRSICovCisJR1BJT19QVFI3LCBHUElPX1BUUjYsIEdQSU9fUFRSNSwgR1BJT19QVFI0LAorCUdQSU9fUFRSMywgR1BJT19QVFIyLCBHUElPX1BUUjEsIEdQSU9fUFRSMCwKKworCS8qIFBUUyAqLworCUdQSU9fUFRTNCwgR1BJT19QVFMzLCBHUElPX1BUUzIsIEdQSU9fUFRTMSwgR1BJT19QVFMwLAorCisJLyogUFRUICovCisJR1BJT19QVFQ0LCBHUElPX1BUVDMsIEdQSU9fUFRUMiwgR1BJT19QVFQxLCBHUElPX1BUVDAsCisKKwkvKiBQVFUgKi8KKwlHUElPX1BUVTQsIEdQSU9fUFRVMywgR1BJT19QVFUyLCBHUElPX1BUVTEsIEdQSU9fUFRVMCwKKworCS8qIFBUViAqLworCUdQSU9fUFRWNCwgR1BJT19QVFYzLCBHUElPX1BUVjIsIEdQSU9fUFRWMSwgR1BJT19QVFYwLAorCisJLyogQlNDICovCisJR1BJT19GTl9EMzEsIEdQSU9fRk5fRDMwLCBHUElPX0ZOX0QyOSwgR1BJT19GTl9EMjgsCisJR1BJT19GTl9EMjcsIEdQSU9fRk5fRDI2LCBHUElPX0ZOX0QyNSwgR1BJT19GTl9EMjQsCisJR1BJT19GTl9EMjMsIEdQSU9fRk5fRDIyLCBHUElPX0ZOX0QyMSwgR1BJT19GTl9EMjAsCisJR1BJT19GTl9EMTksIEdQSU9fRk5fRDE4LCBHUElPX0ZOX0QxNywgR1BJT19GTl9EMTYsCisJR1BJT19GTl9JT0lTMTYsIEdQSU9fRk5fUkFTLCBHUElPX0ZOX0NBUywgR1BJT19GTl9DS0UsCisJR1BJT19GTl9DUzVCX0NFMUEsIEdQSU9fRk5fQ1M2Ql9DRTFCLAorCUdQSU9fRk5fQTI1LCBHUElPX0ZOX0EyNCwgR1BJT19GTl9BMjMsIEdQSU9fRk5fQTIyLAorCUdQSU9fRk5fQTIxLCBHUElPX0ZOX0EyMCwgR1BJT19GTl9BMTksIEdQSU9fRk5fQTAsCisJR1BJT19GTl9SRUZPVVQsIEdQSU9fRk5fSVJRT1VULAorCisJLyogTENEQyAqLworCUdQSU9fRk5fTENEX0RBVEExNSwgR1BJT19GTl9MQ0RfREFUQTE0LAorCUdQSU9fRk5fTENEX0RBVEExMywgR1BJT19GTl9MQ0RfREFUQTEyLAorCUdQSU9fRk5fTENEX0RBVEExMSwgR1BJT19GTl9MQ0RfREFUQTEwLAorCUdQSU9fRk5fTENEX0RBVEE5LCBHUElPX0ZOX0xDRF9EQVRBOCwKKwlHUElPX0ZOX0xDRF9EQVRBNywgR1BJT19GTl9MQ0RfREFUQTYsCisJR1BJT19GTl9MQ0RfREFUQTUsIEdQSU9fRk5fTENEX0RBVEE0LAorCUdQSU9fRk5fTENEX0RBVEEzLCBHUElPX0ZOX0xDRF9EQVRBMiwKKwlHUElPX0ZOX0xDRF9EQVRBMSwgR1BJT19GTl9MQ0RfREFUQTAsCisJR1BJT19GTl9MQ0RfTV9ESVNQLAorCUdQSU9fRk5fTENEX0NMMSwgR1BJT19GTl9MQ0RfQ0wyLAorCUdQSU9fRk5fTENEX0RPTiwgR1BJT19GTl9MQ0RfRkxNLAorCUdQSU9fRk5fTENEX1ZFUFdDLCBHUElPX0ZOX0xDRF9WQ1BXQywKKworCS8qIEFGRUlGICovCisJR1BJT19GTl9BRkVfUlhJTiwgR1BJT19GTl9BRkVfUkRFVCwKKwlHUElPX0ZOX0FGRV9GUywgR1BJT19GTl9BRkVfVFhPVVQsCisJR1BJT19GTl9BRkVfU0NMSywgR1BJT19GTl9BRkVfUkxZQ05ULAorCUdQSU9fRk5fQUZFX0hDMSwKKworCS8qIElJQyAqLworCUdQSU9fRk5fSUlDX1NDTCwgR1BJT19GTl9JSUNfU0RBLAorCisJLyogREFDICovCisJR1BJT19GTl9EQTEsIEdQSU9fRk5fREEwLAorCisJLyogQURDICovCisJR1BJT19GTl9BTjMsIEdQSU9fRk5fQU4yLCBHUElPX0ZOX0FOMSwgR1BJT19GTl9BTjAsIEdQSU9fRk5fQURUUkcsCisKKwkvKiBVU0IgKi8KKwlHUElPX0ZOX1VTQjFEX1JDViwgR1BJT19GTl9VU0IxRF9UWFNFMCwKKwlHUElPX0ZOX1VTQjFEX1RYRFBMUywgR1BJT19GTl9VU0IxRF9ETU5TLAorCUdQSU9fRk5fVVNCMURfRFBMUywgR1BJT19GTl9VU0IxRF9TUEVFRCwKKwlHUElPX0ZOX1VTQjFEX1RYRU5MLCBHUElPX0ZOX1VTQjJfUFdSX0VOLAorCUdQSU9fRk5fVVNCMV9QV1JfRU5fVVNCRl9VUExVUCwgR1BJT19GTl9VU0IxRF9TVVNQRU5ELAorCisJLyogSU5UQyAqLworCUdQSU9fRk5fSVJRNSwgR1BJT19GTl9JUlE0LAorCUdQSU9fRk5fSVJRM19JUkwzLCBHUElPX0ZOX0lSUTJfSVJMMiwKKwlHUElPX0ZOX0lSUTFfSVJMMSwgR1BJT19GTl9JUlEwX0lSTDAsCisKKwkvKiBQQ0MgKi8KKwlHUElPX0ZOX1BDQ19SRUcsIEdQSU9fRk5fUENDX0RSViwKKwlHUElPX0ZOX1BDQ19CVkQyLCBHUElPX0ZOX1BDQ19CVkQxLAorCUdQSU9fRk5fUENDX0NEMiwgR1BJT19GTl9QQ0NfQ0QxLAorCUdQSU9fRk5fUENDX1JFU0VULCBHUElPX0ZOX1BDQ19SRFksCisJR1BJT19GTl9QQ0NfVlMyLCBHUElPX0ZOX1BDQ19WUzEsCisKKwkvKiBIVURJICovCisJR1BJT19GTl9BVURBVEEzLCBHUElPX0ZOX0FVREFUQTIsIEdQSU9fRk5fQVVEQVRBMSwgR1BJT19GTl9BVURBVEEwLAorCUdQSU9fRk5fQVVEQ0ssIEdQSU9fRk5fQVVEU1lOQywgR1BJT19GTl9BU0VCUktBSywgR1BJT19GTl9UUlNULAorCUdQSU9fRk5fVE1TLCBHUElPX0ZOX1RETywgR1BJT19GTl9UREksIEdQSU9fRk5fVENLLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fREFDSzEsIEdQSU9fRk5fRFJFUTEsIEdQSU9fRk5fREFDSzAsIEdQSU9fRk5fRFJFUTAsCisJR1BJT19GTl9URU5EMSwgR1BJT19GTl9URU5EMCwKKworCS8qIFNJT0YwICovCisJR1BJT19GTl9TSU9GMF9TWU5DLCBHUElPX0ZOX1NJT0YwX01DTEssCisJR1BJT19GTl9TSU9GMF9UWEQsIEdQSU9fRk5fU0lPRjBfUlhELAorCUdQSU9fRk5fU0lPRjBfU0NLLAorCisJLyogU0lPRjEgKi8KKwlHUElPX0ZOX1NJT0YxX1NZTkMsIEdQSU9fRk5fU0lPRjFfTUNMSywKKwlHUElPX0ZOX1NJT0YxX1RYRCwgR1BJT19GTl9TSU9GMV9SWEQsCisJR1BJT19GTl9TSU9GMV9TQ0ssCisKKwkvKiBTQ0lGMCAqLworCUdQSU9fRk5fU0NJRjBfVFhELCBHUElPX0ZOX1NDSUYwX1JYRCwKKwlHUElPX0ZOX1NDSUYwX1JUUywgR1BJT19GTl9TQ0lGMF9DVFMsIEdQSU9fRk5fU0NJRjBfU0NLLAorCisJLyogU0NJRjEgKi8KKwlHUElPX0ZOX1NDSUYxX1RYRCwgR1BJT19GTl9TQ0lGMV9SWEQsCisJR1BJT19GTl9TQ0lGMV9SVFMsIEdQSU9fRk5fU0NJRjFfQ1RTLCBHUElPX0ZOX1NDSUYxX1NDSywKKworCS8qIFRQVSAqLworCUdQSU9fRk5fVFBVX1RPMSwgR1BJT19GTl9UUFVfVE8wLAorCUdQSU9fRk5fVFBVX1RJM0IsIEdQSU9fRk5fVFBVX1RJM0EsCisJR1BJT19GTl9UUFVfVEkyQiwgR1BJT19GTl9UUFVfVEkyQSwKKwlHUElPX0ZOX1RQVV9UTzMsIEdQSU9fRk5fVFBVX1RPMiwKKworCS8qIFNJTSAqLworCUdQSU9fRk5fU0lNX0QsIEdQSU9fRk5fU0lNX0NMSywgR1BJT19GTl9TSU1fUlNULAorCisJLyogTU1DICovCisJR1BJT19GTl9NTUNfREFULCBHUElPX0ZOX01NQ19DTUQsCisJR1BJT19GTl9NTUNfQ0xLLCBHUElPX0ZOX01NQ19WRERPTiwKKwlHUElPX0ZOX01NQ19PRE1PRCwKKworCS8qIFNZU0MgKi8KKwlHUElPX0ZOX1NUQVRVUzAsIEdQSU9fRk5fU1RBVFVTMSwKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDc3MjBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIyLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMDk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApAQCAtMCwwICsxLDIxMCBAQAorI2lmbmRlZiBfX0FTTV9TSDc3MjJfSF9fCisjZGVmaW5lIF9fQVNNX1NINzcyMl9IX18KKworZW51bSB7CisJLyogUFRBICovCisJR1BJT19QVEE3LCBHUElPX1BUQTYsIEdQSU9fUFRBNSwgR1BJT19QVEE0LAorCUdQSU9fUFRBMywgR1BJT19QVEEyLCBHUElPX1BUQTEsIEdQSU9fUFRBMCwKKworCS8qIFBUQiAqLworCUdQSU9fUFRCNywgR1BJT19QVEI2LCBHUElPX1BUQjUsIEdQSU9fUFRCNCwKKwlHUElPX1BUQjMsIEdQSU9fUFRCMiwgR1BJT19QVEIxLCBHUElPX1BUQjAsCisKKwkvKiBQVEMgKi8KKwlHUElPX1BUQzcsIEdQSU9fUFRDNSwgR1BJT19QVEM0LCBHUElPX1BUQzMsCisJR1BJT19QVEMyLCBHUElPX1BUQzAsCisKKwkvKiBQVEQgKi8KKwlHUElPX1BURDcsIEdQSU9fUFRENiwgR1BJT19QVEQ1LCBHUElPX1BURDQsCisJR1BJT19QVEQzLCBHUElPX1BURDIsIEdQSU9fUFREMSwgR1BJT19QVEQwLAorCisJLyogUFRFICovCisJR1BJT19QVEU3LCBHUElPX1BURTYsIEdQSU9fUFRFNSwgR1BJT19QVEU0LAorCUdQSU9fUFRFMSwgR1BJT19QVEUwLAorCisJLyogUFRGICovCisJR1BJT19QVEY2LCBHUElPX1BURjUsIEdQSU9fUFRGNCwgR1BJT19QVEYzLAorCUdQSU9fUFRGMiwgR1BJT19QVEYxLCBHUElPX1BURjAsCisKKwkvKiBQVEcgKi8KKwlHUElPX1BURzQsIEdQSU9fUFRHMywgR1BJT19QVEcyLCBHUElPX1BURzEsIEdQSU9fUFRHMCwKKworCS8qIFBUSCAqLworCUdQSU9fUFRINywgR1BJT19QVEg2LCBHUElPX1BUSDUsIEdQSU9fUFRINCwKKwlHUElPX1BUSDMsIEdQSU9fUFRIMiwgR1BJT19QVEgxLCBHUElPX1BUSDAsCisKKwkvKiBQVEogKi8KKwlHUElPX1BUSjcsIEdQSU9fUFRKNiwgR1BJT19QVEo1LCBHUElPX1BUSjEsIEdQSU9fUFRKMCwKKworCS8qIFBUSyAqLworCUdQSU9fUFRLNiwgR1BJT19QVEs1LCBHUElPX1BUSzQsIEdQSU9fUFRLMywKKwlHUElPX1BUSzIsIEdQSU9fUFRLMSwgR1BJT19QVEswLAorCisJLyogUFRMICovCisJR1BJT19QVEw3LCBHUElPX1BUTDYsIEdQSU9fUFRMNSwgR1BJT19QVEw0LAorCUdQSU9fUFRMMywgR1BJT19QVEwyLCBHUElPX1BUTDEsIEdQSU9fUFRMMCwKKworCS8qIFBUTSAqLworCUdQSU9fUFRNNywgR1BJT19QVE02LCBHUElPX1BUTTUsIEdQSU9fUFRNNCwKKwlHUElPX1BUTTMsIEdQSU9fUFRNMiwgR1BJT19QVE0xLCBHUElPX1BUTTAsCisKKwkvKiBQVE4gKi8KKwlHUElPX1BUTjcsIEdQSU9fUFRONiwgR1BJT19QVE41LCBHUElPX1BUTjQsCisJR1BJT19QVE4zLCBHUElPX1BUTjIsIEdQSU9fUFROMSwgR1BJT19QVE4wLAorCisJLyogUFRRICovCisJR1BJT19QVFE3LCBHUElPX1BUUTYsIEdQSU9fUFRRNSwgR1BJT19QVFE0LAorCUdQSU9fUFRRMywgR1BJT19QVFEyLCBHUElPX1BUUTEsIEdQSU9fUFRRMCwKKworCS8qIFBUUiAqLworCUdQSU9fUFRSNCwgR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM0LCBHUElPX1BUUzMsIEdQSU9fUFRTMiwgR1BJT19QVFMxLCBHUElPX1BUUzAsCisKKwkvKiBQVFQgKi8KKwlHUElPX1BUVDQsIEdQSU9fUFRUMywgR1BJT19QVFQyLCBHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNCwgR1BJT19QVFUzLCBHUElPX1BUVTIsIEdQSU9fUFRVMSwgR1BJT19QVFUwLAorCisJLyogUFRWICovCisJR1BJT19QVFY0LCBHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBQVFcgKi8KKwlHUElPX1BUVzYsIEdQSU9fUFRXNSwgR1BJT19QVFc0LCBHUElPX1BUVzMsCisJR1BJT19QVFcyLCBHUElPX1BUVzEsIEdQSU9fUFRXMCwKKworCS8qIFBUWCAqLworCUdQSU9fUFRYNiwgR1BJT19QVFg1LCBHUElPX1BUWDQsIEdQSU9fUFRYMywKKwlHUElPX1BUWDIsIEdQSU9fUFRYMSwgR1BJT19QVFgwLAorCisJLyogUFRZICovCisJR1BJT19QVFk1LCBHUElPX1BUWTQsIEdQSU9fUFRZMywgR1BJT19QVFkyLAorCUdQSU9fUFRZMSwgR1BJT19QVFkwLAorCisJLyogUFRaICovCisJR1BJT19QVFo1LCBHUElPX1BUWjQsIEdQSU9fUFRaMywgR1BJT19QVFoyLCBHUElPX1BUWjEsCisKKwkvKiBTQ0lGMCAqLworCUdQSU9fRk5fU0NJRjBfVFhELCBHUElPX0ZOX1NDSUYwX1JYRCwKKwlHUElPX0ZOX1NDSUYwX1JUUywgR1BJT19GTl9TQ0lGMF9DVFMsIEdQSU9fRk5fU0NJRjBfU0NLLAorCisJLyogU0NJRjEgKi8KKwlHUElPX0ZOX1NDSUYxX1RYRCwgR1BJT19GTl9TQ0lGMV9SWEQsCisJR1BJT19GTl9TQ0lGMV9SVFMsIEdQSU9fRk5fU0NJRjFfQ1RTLCBHUElPX0ZOX1NDSUYxX1NDSywKKworCS8qIFNDSUYyICovCisJR1BJT19GTl9TQ0lGMl9UWEQsIEdQSU9fRk5fU0NJRjJfUlhELAorCUdQSU9fRk5fU0NJRjJfUlRTLCBHUElPX0ZOX1NDSUYyX0NUUywgR1BJT19GTl9TQ0lGMl9TQ0ssCisKKwkvKiBTSU8gKi8KKwlHUElPX0ZOX1NJT1RYRCwgR1BJT19GTl9TSU9SWEQsCisJR1BJT19GTl9TSU9ELCBHUElPX0ZOX1NJT1NUUkIwLCBHUElPX0ZOX1NJT1NUUkIxLAorCUdQSU9fRk5fU0lPU0NLLCBHUElPX0ZOX1NJT01DSywKKworCS8qIENFVSAqLworCUdQSU9fRk5fVklPX0QxNSwgR1BJT19GTl9WSU9fRDE0LCBHUElPX0ZOX1ZJT19EMTMsIEdQSU9fRk5fVklPX0QxMiwKKwlHUElPX0ZOX1ZJT19EMTEsIEdQSU9fRk5fVklPX0QxMCwgR1BJT19GTl9WSU9fRDksIEdQSU9fRk5fVklPX0Q4LAorCUdQSU9fRk5fVklPX0Q3LCBHUElPX0ZOX1ZJT19ENiwgR1BJT19GTl9WSU9fRDUsIEdQSU9fRk5fVklPX0Q0LAorCUdQSU9fRk5fVklPX0QzLCBHUElPX0ZOX1ZJT19EMiwgR1BJT19GTl9WSU9fRDEsIEdQSU9fRk5fVklPX0QwLAorCUdQSU9fRk5fVklPX0ZMRCwgR1BJT19GTl9WSU9fQ0tPLCBHUElPX0ZOX1ZJT19TVEVYLCBHUElPX0ZOX1ZJT19TVEVNLAorCUdQSU9fRk5fVklPX1ZELCBHUElPX0ZOX1ZJT19IRCwgR1BJT19GTl9WSU9fQ0xLLAorCUdQSU9fRk5fVklPX1ZEMiwgR1BJT19GTl9WSU9fSEQyLCBHUElPX0ZOX1ZJT19DTEsyLAorCisJLyogTENEQyAqLworCUdQSU9fRk5fTENERDIzLCBHUElPX0ZOX0xDREQyMiwgR1BJT19GTl9MQ0REMjEsIEdQSU9fRk5fTENERDIwLAorCUdQSU9fRk5fTENERDE5LCBHUElPX0ZOX0xDREQxOCwgR1BJT19GTl9MQ0REMTcsIEdQSU9fRk5fTENERDE2LAorCUdQSU9fRk5fTENERDE1LCBHUElPX0ZOX0xDREQxNCwgR1BJT19GTl9MQ0REMTMsIEdQSU9fRk5fTENERDEyLAorCUdQSU9fRk5fTENERDExLCBHUElPX0ZOX0xDREQxMCwgR1BJT19GTl9MQ0REOSwgR1BJT19GTl9MQ0REOCwKKwlHUElPX0ZOX0xDREQ3LCBHUElPX0ZOX0xDREQ2LCBHUElPX0ZOX0xDREQ1LCBHUElPX0ZOX0xDREQ0LAorCUdQSU9fRk5fTENERDMsIEdQSU9fRk5fTENERDIsIEdQSU9fRk5fTENERDEsIEdQSU9fRk5fTENERDAsCisJR1BJT19GTl9MQ0RMQ0xLLAorCS8qIE1haW4gTENEICovCisJR1BJT19GTl9MQ0RET04sIEdQSU9fRk5fTENEVkNQV0MsIEdQSU9fRk5fTENEVkVQV0MsIEdQSU9fRk5fTENEVlNZTiwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENESFNZTiwgR1BJT19GTl9MQ0RESVNQLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlHUElPX0ZOX0xDRFJTLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRFdSLCBHUElPX0ZOX0xDRFJELAorCS8qIFN1YiBMQ0QgLSBTWVMgTW9kZSAqLworCUdQSU9fRk5fTENERE9OMiwgR1BJT19GTl9MQ0RWQ1BXQzIsIEdQSU9fRk5fTENEVkVQV0MyLAorCUdQSU9fRk5fTENEVlNZTjIsIEdQSU9fRk5fTENEQ1MyLAorCisJLyogQlNDICovCisJR1BJT19GTl9JT0lTMTYsIEdQSU9fRk5fQTI1LCBHUElPX0ZOX0EyNCwgR1BJT19GTl9BMjMsIEdQSU9fRk5fQTIyLAorCUdQSU9fRk5fQlMsIEdQSU9fRk5fQ1M2Ql9DRTFCLCBHUElPX0ZOX1dBSVQsIEdQSU9fRk5fQ1M2QV9DRTJCLAorCisJLyogU0JTQyAqLworCUdQSU9fRk5fSFBENjMsIEdQSU9fRk5fSFBENjIsIEdQSU9fRk5fSFBENjEsIEdQSU9fRk5fSFBENjAsCisJR1BJT19GTl9IUEQ1OSwgR1BJT19GTl9IUEQ1OCwgR1BJT19GTl9IUEQ1NywgR1BJT19GTl9IUEQ1NiwKKwlHUElPX0ZOX0hQRDU1LCBHUElPX0ZOX0hQRDU0LCBHUElPX0ZOX0hQRDUzLCBHUElPX0ZOX0hQRDUyLAorCUdQSU9fRk5fSFBENTEsIEdQSU9fRk5fSFBENTAsIEdQSU9fRk5fSFBENDksIEdQSU9fRk5fSFBENDgsCisJR1BJT19GTl9IUERRTTcsIEdQSU9fRk5fSFBEUU02LCBHUElPX0ZOX0hQRFFNNSwgR1BJT19GTl9IUERRTTQsCisKKwkvKiBJUlEgKi8KKwlHUElPX0ZOX0lSUTAsIEdQSU9fRk5fSVJRMSwgR1BJT19GTl9JUlEyLCBHUElPX0ZOX0lSUTMsCisJR1BJT19GTl9JUlE0LCBHUElPX0ZOX0lSUTUsIEdQSU9fRk5fSVJRNiwgR1BJT19GTl9JUlE3LAorCisJLyogU0RISSAqLworCUdQSU9fRk5fU0RISUNELCBHUElPX0ZOX1NESElXUCwgR1BJT19GTl9TREhJRDMsIEdQSU9fRk5fU0RISUQyLAorCUdQSU9fRk5fU0RISUQxLCBHUElPX0ZOX1NESElEMCwgR1BJT19GTl9TREhJQ01ELCBHUElPX0ZOX1NESElDTEssCisKKwkvKiBTSVUgLSBQb3J0IEEgKi8KKwlHUElPX0ZOX1NJVUFPTFIsIEdQSU9fRk5fU0lVQU9CVCwgR1BJT19GTl9TSVVBSVNMRCwgR1BJT19GTl9TSVVBSUxSLAorCUdQSU9fRk5fU0lVQUlCVCwgR1BJT19GTl9TSVVBT1NMRCwgR1BJT19GTl9TSVVNQ0tBLCBHUElPX0ZOX1NJVUZDS0EsCisKKwkvKiBTSVUgLSBQb3J0IEIgKi8KKwlHUElPX0ZOX1NJVUJPTFIsIEdQSU9fRk5fU0lVQk9CVCwgR1BJT19GTl9TSVVCSVNMRCwgR1BJT19GTl9TSVVCSUxSLAorCUdQSU9fRk5fU0lVQklCVCwgR1BJT19GTl9TSVVCT1NMRCwgR1BJT19GTl9TSVVNQ0tCLCBHUElPX0ZOX1NJVUZDS0IsCisKKwkvKiBBVUQgKi8KKwlHUElPX0ZOX0FVRFNZTkMsIEdQSU9fRk5fQVVEQVRBMywgR1BJT19GTl9BVURBVEEyLCBHUElPX0ZOX0FVREFUQTEsCisJR1BJT19GTl9BVURBVEEwLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fREFDSywgR1BJT19GTl9EUkVRMCwKKworCS8qIFZPVSAqLworCUdQSU9fRk5fRFZfQ0xLSSwgR1BJT19GTl9EVl9DTEssIEdQSU9fRk5fRFZfSFNZTkMsIEdQSU9fRk5fRFZfVlNZTkMsCisJR1BJT19GTl9EVl9EMTUsIEdQSU9fRk5fRFZfRDE0LCBHUElPX0ZOX0RWX0QxMywgR1BJT19GTl9EVl9EMTIsCisJR1BJT19GTl9EVl9EMTEsIEdQSU9fRk5fRFZfRDEwLCBHUElPX0ZOX0RWX0Q5LCBHUElPX0ZOX0RWX0Q4LAorCUdQSU9fRk5fRFZfRDcsIEdQSU9fRk5fRFZfRDYsIEdQSU9fRk5fRFZfRDUsIEdQSU9fRk5fRFZfRDQsCisJR1BJT19GTl9EVl9EMywgR1BJT19GTl9EVl9EMiwgR1BJT19GTl9EVl9EMSwgR1BJT19GTl9EVl9EMCwKKworCS8qIENQRyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9QRFNUQVRVUywKKworCS8qIFNJT0YwICovCisJR1BJT19GTl9TSU9GMF9NQ0ssIEdQSU9fRk5fU0lPRjBfU0NLLAorCUdQSU9fRk5fU0lPRjBfU1lOQywgR1BJT19GTl9TSU9GMF9TUzEsIEdQSU9fRk5fU0lPRjBfU1MyLAorCUdQSU9fRk5fU0lPRjBfVFhELCBHUElPX0ZOX1NJT0YwX1JYRCwKKworCS8qIFNJT0YxICovCisJR1BJT19GTl9TSU9GMV9NQ0ssIEdQSU9fRk5fU0lPRjFfU0NLLAorCUdQSU9fRk5fU0lPRjFfU1lOQywgR1BJT19GTl9TSU9GMV9TUzEsIEdQSU9fRk5fU0lPRjFfU1MyLAorCUdQSU9fRk5fU0lPRjFfVFhELCBHUElPX0ZOX1NJT0YxX1JYRCwKKworCS8qIFNJTSAqLworCUdQSU9fRk5fU0lNX0QsIEdQSU9fRk5fU0lNX0NMSywgR1BJT19GTl9TSU1fUlNULAorCisJLyogVFNJRiAqLworCUdQSU9fRk5fVFNfU0RBVCwgR1BJT19GTl9UU19TQ0ssIEdQSU9fRk5fVFNfU0RFTiwgR1BJT19GTl9UU19TUFNZTkMsCisKKwkvKiBJUkRBICovCisJR1BJT19GTl9JUkRBX0lOLCBHUElPX0ZOX0lSREFfT1VULAorCisJLyogVFBVICovCisJR1BJT19GTl9UUFVUTywKKworCS8qIEZMQ1RMICovCisJR1BJT19GTl9GQ0UsIEdQSU9fRk5fTkFGNywgR1BJT19GTl9OQUY2LCBHUElPX0ZOX05BRjUsIEdQSU9fRk5fTkFGNCwKKwlHUElPX0ZOX05BRjMsIEdQSU9fRk5fTkFGMiwgR1BJT19GTl9OQUYxLCBHUElPX0ZOX05BRjAsIEdQSU9fRk5fRkNERSwKKwlHUElPX0ZOX0ZPRSwgR1BJT19GTl9GU0MsIEdQSU9fRk5fRldFLCBHUElPX0ZOX0ZSQiwKKworCS8qIEtFWVNDICovCisJR1BJT19GTl9LRVlJTjAsIEdQSU9fRk5fS0VZSU4xLCBHUElPX0ZOX0tFWUlOMiwgR1BJT19GTl9LRVlJTjMsCisJR1BJT19GTl9LRVlJTjQsIEdQSU9fRk5fS0VZT1VUMCwgR1BJT19GTl9LRVlPVVQxLCBHUElPX0ZOX0tFWU9VVDIsCisJR1BJT19GTl9LRVlPVVQzLCBHUElPX0ZOX0tFWU9VVDRfSU42LCBHUElPX0ZOX0tFWU9VVDVfSU41LAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzcyMl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDJmNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oCkBAIC0wLDAgKzEsMjU0IEBACisjaWZuZGVmIF9fQVNNX1NINzcyM19IX18KKyNkZWZpbmUgX19BU01fU0g3NzIzX0hfXworCitlbnVtIHsKKwkvKiBQVEEgKi8KKwlHUElPX1BUQTcsIEdQSU9fUFRBNiwgR1BJT19QVEE1LCBHUElPX1BUQTQsCisJR1BJT19QVEEzLCBHUElPX1BUQTIsIEdQSU9fUFRBMSwgR1BJT19QVEEwLAorCisJLyogUFRCICovCisJR1BJT19QVEI3LCBHUElPX1BUQjYsIEdQSU9fUFRCNSwgR1BJT19QVEI0LAorCUdQSU9fUFRCMywgR1BJT19QVEIyLCBHUElPX1BUQjEsIEdQSU9fUFRCMCwKKworCS8qIFBUQyAqLworCUdQSU9fUFRDNywgR1BJT19QVEM2LCBHUElPX1BUQzUsIEdQSU9fUFRDNCwKKwlHUElPX1BUQzMsIEdQSU9fUFRDMiwgR1BJT19QVEMxLCBHUElPX1BUQzAsCisKKwkvKiBQVEQgKi8KKwlHUElPX1BURDcsIEdQSU9fUFRENiwgR1BJT19QVEQ1LCBHUElPX1BURDQsCisJR1BJT19QVEQzLCBHUElPX1BURDIsIEdQSU9fUFREMSwgR1BJT19QVEQwLAorCisJLyogUFRFICovCisJR1BJT19QVEU1LCBHUElPX1BURTQsIEdQSU9fUFRFMywgR1BJT19QVEUyLAorCUdQSU9fUFRFMSwgR1BJT19QVEUwLAorCisJLyogUFRGICovCisJR1BJT19QVEY3LCBHUElPX1BURjYsIEdQSU9fUFRGNSwgR1BJT19QVEY0LAorCUdQSU9fUFRGMywgR1BJT19QVEYyLCBHUElPX1BURjEsIEdQSU9fUFRGMCwKKworCS8qIFBURyAqLworCUdQSU9fUFRHNSwgR1BJT19QVEc0LCBHUElPX1BURzMsIEdQSU9fUFRHMiwKKwlHUElPX1BURzEsIEdQSU9fUFRHMCwKKworCS8qIFBUSCAqLworCUdQSU9fUFRINywgR1BJT19QVEg2LCBHUElPX1BUSDUsIEdQSU9fUFRINCwKKwlHUElPX1BUSDMsIEdQSU9fUFRIMiwgR1BJT19QVEgxLCBHUElPX1BUSDAsCisKKwkvKiBQVEogKi8KKwlHUElPX1BUSjcsIEdQSU9fUFRKNSwgR1BJT19QVEozLCBHUElPX1BUSjIsCisJR1BJT19QVEoxLCBHUElPX1BUSjAsCisKKwkvKiBQVEsgKi8KKwlHUElPX1BUSzcsIEdQSU9fUFRLNiwgR1BJT19QVEs1LCBHUElPX1BUSzQsCisJR1BJT19QVEszLCBHUElPX1BUSzIsIEdQSU9fUFRLMSwgR1BJT19QVEswLAorCisJLyogUFRMICovCisJR1BJT19QVEw3LCBHUElPX1BUTDYsIEdQSU9fUFRMNSwgR1BJT19QVEw0LAorCUdQSU9fUFRMMywgR1BJT19QVEwyLCBHUElPX1BUTDEsIEdQSU9fUFRMMCwKKworCS8qIFBUTSAqLworCUdQSU9fUFRNNywgR1BJT19QVE02LCBHUElPX1BUTTUsIEdQSU9fUFRNNCwKKwlHUElPX1BUTTMsIEdQSU9fUFRNMiwgR1BJT19QVE0xLCBHUElPX1BUTTAsCisKKwkvKiBQVE4gKi8KKwlHUElPX1BUTjcsIEdQSU9fUFRONiwgR1BJT19QVE41LCBHUElPX1BUTjQsCisJR1BJT19QVE4zLCBHUElPX1BUTjIsIEdQSU9fUFROMSwgR1BJT19QVE4wLAorCisJLyogUFRRICovCisJR1BJT19QVFEzLCBHUElPX1BUUTIsIEdQSU9fUFRRMSwgR1BJT19QVFEwLAorCisJLyogUFRSICovCisJR1BJT19QVFI3LCBHUElPX1BUUjYsIEdQSU9fUFRSNSwgR1BJT19QVFI0LAorCUdQSU9fUFRSMywgR1BJT19QVFIyLCBHUElPX1BUUjEsIEdQSU9fUFRSMCwKKworCS8qIFBUUyAqLworCUdQSU9fUFRTNywgR1BJT19QVFM2LCBHUElPX1BUUzUsIEdQSU9fUFRTNCwKKwlHUElPX1BUUzMsIEdQSU9fUFRTMiwgR1BJT19QVFMxLCBHUElPX1BUUzAsCisKKwkvKiBQVFQgKi8KKwlHUElPX1BUVDUsIEdQSU9fUFRUNCwgR1BJT19QVFQzLCBHUElPX1BUVDIsCisJR1BJT19QVFQxLCBHUElPX1BUVDAsCisKKwkvKiBQVFUgKi8KKwlHUElPX1BUVTUsIEdQSU9fUFRVNCwgR1BJT19QVFUzLCBHUElPX1BUVTIsCisJR1BJT19QVFUxLCBHUElPX1BUVTAsCisKKwkvKiBQVFYgKi8KKwlHUElPX1BUVjcsIEdQSU9fUFRWNiwgR1BJT19QVFY1LCBHUElPX1BUVjQsCisJR1BJT19QVFYzLCBHUElPX1BUVjIsIEdQSU9fUFRWMSwgR1BJT19QVFYwLAorCisJLyogUFRXICovCisJR1BJT19QVFc3LCBHUElPX1BUVzYsIEdQSU9fUFRXNSwgR1BJT19QVFc0LAorCUdQSU9fUFRXMywgR1BJT19QVFcyLCBHUElPX1BUVzEsIEdQSU9fUFRXMCwKKworCS8qIFBUWCAqLworCUdQSU9fUFRYNywgR1BJT19QVFg2LCBHUElPX1BUWDUsIEdQSU9fUFRYNCwKKwlHUElPX1BUWDMsIEdQSU9fUFRYMiwgR1BJT19QVFgxLCBHUElPX1BUWDAsCisKKwkvKiBQVFkgKi8KKwlHUElPX1BUWTcsIEdQSU9fUFRZNiwgR1BJT19QVFk1LCBHUElPX1BUWTQsCisJR1BJT19QVFkzLCBHUElPX1BUWTIsIEdQSU9fUFRZMSwgR1BJT19QVFkwLAorCisJLyogUFRaICovCisJR1BJT19QVFo3LCBHUElPX1BUWjYsIEdQSU9fUFRaNSwgR1BJT19QVFo0LAorCUdQSU9fUFRaMywgR1BJT19QVFoyLCBHUElPX1BUWjEsIEdQSU9fUFRaMCwKKworCS8qIFNDSUYwIChTQ0lGOiAzIHBpbiBQVFQvUFRVKSAqLworCUdQSU9fRk5fU0NJRjBfUFRUX1RYRCwgR1BJT19GTl9TQ0lGMF9QVFRfUlhELCBHUElPX0ZOX1NDSUYwX1BUVF9TQ0ssCisJR1BJT19GTl9TQ0lGMF9QVFVfVFhELCBHUElPX0ZOX1NDSUYwX1BUVV9SWEQsIEdQSU9fRk5fU0NJRjBfUFRVX1NDSywKKworCS8qIFNDSUYxIChTQ0lGOiAzIHBpbiBQVFMvUFRWKSAqLworCUdQSU9fRk5fU0NJRjFfUFRTX1RYRCwgR1BJT19GTl9TQ0lGMV9QVFNfUlhELCBHUElPX0ZOX1NDSUYxX1BUU19TQ0ssCisJR1BJT19GTl9TQ0lGMV9QVFZfVFhELCBHUElPX0ZOX1NDSUYxX1BUVl9SWEQsIEdQSU9fRk5fU0NJRjFfUFRWX1NDSywKKworCS8qIFNDSUYyIChTQ0lGOiAzIHBpbiBQVFQvUFRVKSAqLworCUdQSU9fRk5fU0NJRjJfUFRUX1RYRCwgR1BJT19GTl9TQ0lGMl9QVFRfUlhELCBHUElPX0ZOX1NDSUYyX1BUVF9TQ0ssCisJR1BJT19GTl9TQ0lGMl9QVFVfVFhELCBHUElPX0ZOX1NDSUYyX1BUVV9SWEQsIEdQSU9fRk5fU0NJRjJfUFRVX1NDSywKKworCS8qIFNDSUYzIChTQ0lGQTogNSBwaW4gUFRTL1BUVikgKi8KKwlHUElPX0ZOX1NDSUYzX1BUU19UWEQsIEdQSU9fRk5fU0NJRjNfUFRTX1JYRCwgR1BJT19GTl9TQ0lGM19QVFNfU0NLLAorCUdQSU9fRk5fU0NJRjNfUFRTX1JUUywgR1BJT19GTl9TQ0lGM19QVFNfQ1RTLAorCUdQSU9fRk5fU0NJRjNfUFRWX1RYRCwgR1BJT19GTl9TQ0lGM19QVFZfUlhELCBHUElPX0ZOX1NDSUYzX1BUVl9TQ0ssCisJR1BJT19GTl9TQ0lGM19QVFZfUlRTLCBHUElPX0ZOX1NDSUYzX1BUVl9DVFMsCisKKwkvKiBTQ0lGNCAoU0NJRkE6IDMgcGluIFBURS9QVE4pICovCisJR1BJT19GTl9TQ0lGNF9QVEVfVFhELCBHUElPX0ZOX1NDSUY0X1BURV9SWEQsIEdQSU9fRk5fU0NJRjRfUFRFX1NDSywKKwlHUElPX0ZOX1NDSUY0X1BUTl9UWEQsIEdQSU9fRk5fU0NJRjRfUFROX1JYRCwgR1BJT19GTl9TQ0lGNF9QVE5fU0NLLAorCisJLyogU0NJRjUgKFNDSUZBOiAzIHBpbiBQVEUvUFROKSAqLworCUdQSU9fRk5fU0NJRjVfUFRFX1RYRCwgR1BJT19GTl9TQ0lGNV9QVEVfUlhELCBHUElPX0ZOX1NDSUY1X1BURV9TQ0ssCisJR1BJT19GTl9TQ0lGNV9QVE5fVFhELCBHUElPX0ZOX1NDSUY1X1BUTl9SWEQsIEdQSU9fRk5fU0NJRjVfUFROX1NDSywKKworCS8qIENFVSAqLworCUdQSU9fRk5fVklPX0QxNSwgR1BJT19GTl9WSU9fRDE0LCBHUElPX0ZOX1ZJT19EMTMsIEdQSU9fRk5fVklPX0QxMiwKKwlHUElPX0ZOX1ZJT19EMTEsIEdQSU9fRk5fVklPX0QxMCwgR1BJT19GTl9WSU9fRDksIEdQSU9fRk5fVklPX0Q4LAorCUdQSU9fRk5fVklPX0Q3LCBHUElPX0ZOX1ZJT19ENiwgR1BJT19GTl9WSU9fRDUsIEdQSU9fRk5fVklPX0Q0LAorCUdQSU9fRk5fVklPX0QzLCBHUElPX0ZOX1ZJT19EMiwgR1BJT19GTl9WSU9fRDEsIEdQSU9fRk5fVklPX0QwLAorCUdQSU9fRk5fVklPX0ZMRCwgR1BJT19GTl9WSU9fQ0tPLAorCUdQSU9fRk5fVklPX1ZEMSwgR1BJT19GTl9WSU9fSEQxLCBHUElPX0ZOX1ZJT19DTEsxLAorCUdQSU9fRk5fVklPX1ZEMiwgR1BJT19GTl9WSU9fSEQyLCBHUElPX0ZOX1ZJT19DTEsyLAorCisJLyogTENEQyAqLworCUdQSU9fRk5fTENERDIzLCBHUElPX0ZOX0xDREQyMiwgR1BJT19GTl9MQ0REMjEsIEdQSU9fRk5fTENERDIwLAorCUdQSU9fRk5fTENERDE5LCBHUElPX0ZOX0xDREQxOCwgR1BJT19GTl9MQ0REMTcsIEdQSU9fRk5fTENERDE2LAorCUdQSU9fRk5fTENERDE1LCBHUElPX0ZOX0xDREQxNCwgR1BJT19GTl9MQ0REMTMsIEdQSU9fRk5fTENERDEyLAorCUdQSU9fRk5fTENERDExLCBHUElPX0ZOX0xDREQxMCwgR1BJT19GTl9MQ0REOSwgR1BJT19GTl9MQ0REOCwKKwlHUElPX0ZOX0xDREQ3LCBHUElPX0ZOX0xDREQ2LCBHUElPX0ZOX0xDREQ1LCBHUElPX0ZOX0xDREQ0LAorCUdQSU9fRk5fTENERDMsIEdQSU9fRk5fTENERDIsIEdQSU9fRk5fTENERDEsIEdQSU9fRk5fTENERDAsCisJR1BJT19GTl9MQ0RMQ0xLX1BUUiwgR1BJT19GTl9MQ0RMQ0xLX1BUVywKKwkvKiBNYWluIExDRCAqLworCUdQSU9fRk5fTENERE9OLCBHUElPX0ZOX0xDRFZDUFdDLCBHUElPX0ZOX0xDRFZFUFdDLCBHUElPX0ZOX0xDRFZTWU4sCisJLyogTWFpbiBMQ0QgLSBSR0IgTW9kZSAqLworCUdQSU9fRk5fTENERENLLCBHUElPX0ZOX0xDREhTWU4sIEdQSU9fRk5fTENERElTUCwKKwkvKiBNYWluIExDRCAtIFNZUyBNb2RlICovCisJR1BJT19GTl9MQ0RSUywgR1BJT19GTl9MQ0RDUywgR1BJT19GTl9MQ0RXUiwgR1BJT19GTl9MQ0RSRCwKKworCS8qIElSUSAqLworCUdQSU9fRk5fSVJRMCwgR1BJT19GTl9JUlExLCBHUElPX0ZOX0lSUTIsIEdQSU9fRk5fSVJRMywKKwlHUElPX0ZOX0lSUTQsIEdQSU9fRk5fSVJRNSwgR1BJT19GTl9JUlE2LCBHUElPX0ZOX0lSUTcsCisKKwkvKiBBVUQgKi8KKwlHUElPX0ZOX0FVREFUQTMsIEdQSU9fRk5fQVVEQVRBMiwgR1BJT19GTl9BVURBVEExLCBHUElPX0ZOX0FVREFUQTAsCisJR1BJT19GTl9BVURDSywgR1BJT19GTl9BVURTWU5DLAorCisJLyogU0RISTAgKFBURCkgKi8KKwlHUElPX0ZOX1NESEkwQ0RfUFRELCBHUElPX0ZOX1NESEkwV1BfUFRELAorCUdQSU9fRk5fU0RISTBEM19QVEQsIEdQSU9fRk5fU0RISTBEMl9QVEQsCisJR1BJT19GTl9TREhJMEQxX1BURCwgR1BJT19GTl9TREhJMEQwX1BURCwKKwlHUElPX0ZOX1NESEkwQ01EX1BURCwgR1BJT19GTl9TREhJMENMS19QVEQsCisKKwkvKiBTREhJMCAoUFRTKSAqLworCUdQSU9fRk5fU0RISTBDRF9QVFMsIEdQSU9fRk5fU0RISTBXUF9QVFMsCisJR1BJT19GTl9TREhJMEQzX1BUUywgR1BJT19GTl9TREhJMEQyX1BUUywKKwlHUElPX0ZOX1NESEkwRDFfUFRTLCBHUElPX0ZOX1NESEkwRDBfUFRTLAorCUdQSU9fRk5fU0RISTBDTURfUFRTLCBHUElPX0ZOX1NESEkwQ0xLX1BUUywKKworCS8qIFNESEkxICovCisJR1BJT19GTl9TREhJMUNELCBHUElPX0ZOX1NESEkxV1AsIEdQSU9fRk5fU0RISTFEMywgR1BJT19GTl9TREhJMUQyLAorCUdQSU9fRk5fU0RISTFEMSwgR1BJT19GTl9TREhJMUQwLCBHUElPX0ZOX1NESEkxQ01ELCBHUElPX0ZOX1NESEkxQ0xLLAorCisJLyogU0lVQSAqLworCUdQSU9fRk5fU0lVQUZDSywgR1BJT19GTl9TSVVBSUxSLCBHUElPX0ZOX1NJVUFJQlQsIEdQSU9fRk5fU0lVQUlTTEQsCisJR1BJT19GTl9TSVVBT0xSLCBHUElPX0ZOX1NJVUFPQlQsIEdQSU9fRk5fU0lVQU9TTEQsIEdQSU9fRk5fU0lVQU1DSywKKwlHUElPX0ZOX1NJVUFJU1BELCBHUElPX0ZOX1NJVU9TUEQsCisKKwkvKiBTSVVCICovCisJR1BJT19GTl9TSVVCRkNLLCBHUElPX0ZOX1NJVUJJTFIsIEdQSU9fRk5fU0lVQklCVCwgR1BJT19GTl9TSVVCSVNMRCwKKwlHUElPX0ZOX1NJVUJPTFIsIEdQSU9fRk5fU0lVQk9CVCwgR1BJT19GTl9TSVVCT1NMRCwgR1BJT19GTl9TSVVCTUNLLAorCisJLyogSVJEQSAqLworCUdQSU9fRk5fSVJEQV9JTiwgR1BJT19GTl9JUkRBX09VVCwKKworCS8qIFZPVSAqLworCUdQSU9fRk5fRFZfQ0xLSSwgR1BJT19GTl9EVl9DTEssIEdQSU9fRk5fRFZfSFNZTkMsIEdQSU9fRk5fRFZfVlNZTkMsCisJR1BJT19GTl9EVl9EMTUsIEdQSU9fRk5fRFZfRDE0LCBHUElPX0ZOX0RWX0QxMywgR1BJT19GTl9EVl9EMTIsCisJR1BJT19GTl9EVl9EMTEsIEdQSU9fRk5fRFZfRDEwLCBHUElPX0ZOX0RWX0Q5LCBHUElPX0ZOX0RWX0Q4LAorCUdQSU9fRk5fRFZfRDcsIEdQSU9fRk5fRFZfRDYsIEdQSU9fRk5fRFZfRDUsIEdQSU9fRk5fRFZfRDQsCisJR1BJT19GTl9EVl9EMywgR1BJT19GTl9EVl9EMiwgR1BJT19GTl9EVl9EMSwgR1BJT19GTl9EVl9EMCwKKworCS8qIEtFWVNDICovCisJR1BJT19GTl9LRVlJTjAsIEdQSU9fRk5fS0VZSU4xLCBHUElPX0ZOX0tFWUlOMiwgR1BJT19GTl9LRVlJTjMsCisJR1BJT19GTl9LRVlJTjQsIEdQSU9fRk5fS0VZT1VUMCwgR1BJT19GTl9LRVlPVVQxLCBHUElPX0ZOX0tFWU9VVDIsCisJR1BJT19GTl9LRVlPVVQzLCBHUElPX0ZOX0tFWU9VVDRfSU42LCBHUElPX0ZOX0tFWU9VVDVfSU41LAorCisJLyogTVNJT0YwIChQVEYpICovCisJR1BJT19GTl9NU0lPRjBfUFRGX1RYRCwgR1BJT19GTl9NU0lPRjBfUFRGX1JYRCwgR1BJT19GTl9NU0lPRjBfUFRGX01DSywKKwlHUElPX0ZOX01TSU9GMF9QVEZfVFNZTkMsIEdQSU9fRk5fTVNJT0YwX1BURl9UU0NLLAorCUdQSU9fRk5fTVNJT0YwX1BURl9SU1lOQywgR1BJT19GTl9NU0lPRjBfUFRGX1JTQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRGX1NTMSwgR1BJT19GTl9NU0lPRjBfUFRGX1NTMiwKKworCS8qIE1TSU9GMCAoUFRUK1BUWCkgKi8KKwlHUElPX0ZOX01TSU9GMF9QVFRfVFhELCBHUElPX0ZOX01TSU9GMF9QVFRfUlhELCBHUElPX0ZOX01TSU9GMF9QVFhfTUNLLAorCUdQSU9fRk5fTVNJT0YwX1BUVF9UU1lOQywgR1BJT19GTl9NU0lPRjBfUFRUX1RTQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRUX1JTWU5DLCBHUElPX0ZOX01TSU9GMF9QVFRfUlNDSywKKwlHUElPX0ZOX01TSU9GMF9QVFRfU1MxLCBHUElPX0ZOX01TSU9GMF9QVFRfU1MyLAorCisJLyogTVNJT0YxICovCisJR1BJT19GTl9NU0lPRjFfVFhELCBHUElPX0ZOX01TSU9GMV9SWEQsIEdQSU9fRk5fTVNJT0YxX01DSywKKwlHUElPX0ZOX01TSU9GMV9UU1lOQywgR1BJT19GTl9NU0lPRjFfVFNDSywKKwlHUElPX0ZOX01TSU9GMV9SU1lOQywgR1BJT19GTl9NU0lPRjFfUlNDSywKKwlHUElPX0ZOX01TSU9GMV9TUzEsIEdQSU9fRk5fTVNJT0YxX1NTMiwKKworCS8qIFRTSUYgKi8KKwlHUElPX0ZOX1RTMF9TREFULCBHUElPX0ZOX1RTMF9TQ0ssIEdQSU9fRk5fVFMwX1NERU4sIEdQSU9fRk5fVFMwX1NQU1lOQywKKworCS8qIEZMQ1RMICovCisJR1BJT19GTl9GQ0UsIEdQSU9fRk5fTkFGNywgR1BJT19GTl9OQUY2LCBHUElPX0ZOX05BRjUsIEdQSU9fRk5fTkFGNCwKKwlHUElPX0ZOX05BRjMsIEdQSU9fRk5fTkFGMiwgR1BJT19GTl9OQUYxLCBHUElPX0ZOX05BRjAsIEdQSU9fRk5fRkNERSwKKwlHUElPX0ZOX0ZPRSwgR1BJT19GTl9GU0MsIEdQSU9fRk5fRldFLCBHUElPX0ZOX0ZSQiwKKworCS8qIERNQUMgKi8KKwlHUElPX0ZOX0RBQ0sxLCBHUElPX0ZOX0RSRVExLCBHUElPX0ZOX0RBQ0swLCBHUElPX0ZOX0RSRVEwLAorCisJLyogQURDICovCisJR1BJT19GTl9BTjMsIEdQSU9fRk5fQU4yLCBHUElPX0ZOX0FOMSwgR1BJT19GTl9BTjAsIEdQSU9fRk5fQURUUkcsCisKKwkvKiBDUEcgKi8KKwlHUElPX0ZOX1NUQVRVUzAsIEdQSU9fRk5fUERTVEFUVVMsCisKKwkvKiBUUFUgKi8KKwlHUElPX0ZOX1RQVVRPMywgR1BJT19GTl9UUFVUTzIsIEdQSU9fRk5fVFBVVE8xLCBHUElPX0ZOX1RQVVRPMCwKKworCS8qIEJTQyAqLworCUdQSU9fRk5fRDMxLCBHUElPX0ZOX0QzMCwgR1BJT19GTl9EMjksIEdQSU9fRk5fRDI4LAorCUdQSU9fRk5fRDI3LCBHUElPX0ZOX0QyNiwgR1BJT19GTl9EMjUsIEdQSU9fRk5fRDI0LAorCUdQSU9fRk5fRDIzLCBHUElPX0ZOX0QyMiwgR1BJT19GTl9EMjEsIEdQSU9fRk5fRDIwLAorCUdQSU9fRk5fRDE5LCBHUElPX0ZOX0QxOCwgR1BJT19GTl9EMTcsIEdQSU9fRk5fRDE2LAorCUdQSU9fRk5fSU9JUzE2LCBHUElPX0ZOX1dBSVQsIEdQSU9fRk5fQlMsCisJR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9DUzZCX0NFMUIsIEdQSU9fRk5fQ1M2QV9DRTJCLAorCUdQSU9fRk5fQ1M1Ql9DRTFBLCBHUElPX0ZOX0NTNUFfQ0UyQSwKKwlHUElPX0ZOX1dFM19JQ0lPV1IsIEdQSU9fRk5fV0UyX0lDSU9SRCwKKworCS8qIEFUQVBJICovCisJR1BJT19GTl9JREVEMTUsIEdQSU9fRk5fSURFRDE0LCBHUElPX0ZOX0lERUQxMywgR1BJT19GTl9JREVEMTIsCisJR1BJT19GTl9JREVEMTEsIEdQSU9fRk5fSURFRDEwLCBHUElPX0ZOX0lERUQ5LCBHUElPX0ZOX0lERUQ4LAorCUdQSU9fRk5fSURFRDcsIEdQSU9fRk5fSURFRDYsIEdQSU9fRk5fSURFRDUsIEdQSU9fRk5fSURFRDQsCisJR1BJT19GTl9JREVEMywgR1BJT19GTl9JREVEMiwgR1BJT19GTl9JREVEMSwgR1BJT19GTl9JREVEMCwKKwlHUElPX0ZOX0RJUkVDVElPTiwgR1BJT19GTl9FWEJVRl9FTkIsIEdQSU9fRk5fSURFUlNULCBHUElPX0ZOX0lPREFDSywKKwlHUElPX0ZOX0lPRFJFUSwgR1BJT19GTl9JREVJT1JEWSwgR1BJT19GTl9JREVJTlQsIEdQSU9fRk5fSURFSU9XUiwKKwlHUElPX0ZOX0lERUlPUkQsIEdQSU9fRk5fSURFQ1MxLCBHUElPX0ZOX0lERUNTMCwgR1BJT19GTl9JREVBMiwKKwlHUElPX0ZOX0lERUExLCBHUElPX0ZOX0lERUEwLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzcyM19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZWRvc2s3NzA1LmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9lZG9zazc3MDUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9lZG9zazc3MDUuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvZWRvc2s3NzA1LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcjc3ODBycC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaGlnaGxhbmRlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3I3NzgwcnAuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaGlnaGxhbmRlci5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2hwNnh4LmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9ocDZ4eC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2hwNnh4LmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hwNnh4LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbGJveHJlMi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbGJveHJlMi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2xib3hyZTIuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbGJveHJlMi5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hZ2ljcGFuZWxyMi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbWFnaWNwYW5lbHIyLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21pY3JvZGV2LmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9taWNyb2Rldi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL21pY3JvZGV2LmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pY3JvZGV2LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9taWdvci5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9taWdvci5oCmluZGV4IGMxMmI2MzIuLmU0NTFmMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9taWdvci5oCkBAIC01Miw5ICs1MiwxMSBAQAogI2RlZmluZSBQT1JUX0hJWkNSQiAweGE0MDUwMTVhCiAjZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKIAorI2RlZmluZSBCU0NfQ1M0QkNSIDB4ZmVjMTAwMTAKICNkZWZpbmUgQlNDX0NTNkFCQ1IgMHhmZWMxMDAxYworI2RlZmluZSBCU0NfQ1M0V0NSIDB4ZmVjMTAwMzAKIAotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAKIGludCBtaWdvcl9sY2RfcXZnYV9zZXR1cCh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzeXNfb3BzX2hhbmRsZSwKIAkJCSBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydHM3NzUxcjJkLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yMmQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9ydHM3NzUxcjJkLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3IyZC5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Nkazc3ODAuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3Nkazc3ODAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zZGs3NzgwLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3Nkazc3ODAuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3NjNyZHAuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NoNzc2M3JkcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3NoNzc2M3JkcC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3NjNyZHAuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3ODVsY3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NoNzc4NWxjci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3NoNzc4NWxjci5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3ODVsY3IuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaG1pbi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2htaW4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaG1pbi5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaG1pbi5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NuYXBnZWFyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zbmFwZ2Vhci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3NuYXBnZWFyLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NuYXBnZWFyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtaDc3NTEuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3N5c3RlbWg3NzUxLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtaDc3NTEuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc3lzdGVtaDc3NTEuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aXRhbi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdGl0YW4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS90aXRhbi5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC90aXRhbi5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMiBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCmluZGV4IDBlNjkwNWYuLjQ4ZWRmYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCkBAIC0yMSw3ICsyMSw4IEBACiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcC5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkJKz0gc3RhY2t0cmFjZS5vCi1vYmotJChDT05GSUdfRUxGX0NPUkUpCQkrPSBkdW1wX3Rhc2subwogb2JqLSQoQ09ORklHX0lPX1RSQVBQRUQpCSs9IGlvX3RyYXBwZWQubworb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV82NAppbmRleCA2ZWRmNTNiLi5jOTc2NjBiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV82NAorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV82NApAQCAtMTcsNyArMTcsNyBAQAogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwotb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYpCSs9IGR1bXBfdGFzay5vCiBvYmotJChDT05GSUdfSU9fVFJBUFBFRCkJKz0gaW9fdHJhcHBlZC5vCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKaW5kZXggZjVlYjU2ZS4uYjdlNDZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKQEAgLTI5NCw5ICsyOTQsMTAgQEAKIHsKIH0KIAotdm9pZCBfX2luaXQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQoraW50IF9faW5pdCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCiBhcmNoX2Nsa19pbml0KHZvaWQpCiB7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2hvd19jbG9ja3MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKQEAgLTMzMSw3ICszMzIsNyBAQAogCQlyZXQgfD0gY2xrX3JlZ2lzdGVyKGNsayk7CiAJfQogCi0JYXJjaF9jbGtfaW5pdCgpOworCXJldCB8PSBhcmNoX2Nsa19pbml0KCk7CiAKIAkvKiBLaWNrIHRoZSBjaGlsZCBjbG9ja3MuLiAqLwogCXByb3BhZ2F0ZV9yYXRlKCZtYXN0ZXJfY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlCmluZGV4IDQ2MmE4ZjYuLmYwYzcwMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQpAQCAtMSw4ICsxLDYgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9TdXBlckggQ1BVLXNwZWNpZmMgSVJRIGhhbmRsZXJzLgogIwotb2JqLXkJKz0gaW50Yy5vCi0KIG9iai0kKENPTkZJR19TVVBFUkgzMikJCQkrPSBpbWFzay5vCiBvYmotJChDT05GSUdfQ1BVX1NINSkJCQkrPSBpbnRjLXNoNS5vCiBvYmotJChDT05GSUdfQ1BVX0hBU19JUFJfSVJRKQkJKz0gaXByLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IDU2ZWE3YjIuLjNlYjE3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBpcHJfZGF0YSAqcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2lwcl9kZXNjKGlycSktPmlwcl9vZmZzZXRzW3AtPmlwcl9pZHhdOwogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQxLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgaXByX2RhdGEgKnAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9pcHJfZGVzYyhpcnEpLT5pcHJfb2Zmc2V0c1twLT5pcHJfaWR4XTsKIAkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgfCAocC0+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+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgogICogTm90aGluZyB0b28gdGVycmlibHkgZXhjaXRpbmcgaGVyZSAuLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDBhMTFjYzA4Li5kNGZiMTFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0zMCw2ICszMCw3IEBACiBEUkVBTUNBU1QJCVNIX0RSRUFNQ0FTVAogU05BUEdFQVIJCVNIX1NFQ1VSRUVER0U1NDEwCiBFRE9TSzc3MDUJCVNIX0VET1NLNzcwNQorRURPU0s3NzYwCQlTSF9FRE9TSzc3NjAKIFNINDIwMl9NSUNST0RFVgkJU0hfU0g0MjAyX01JQ1JPREVWCiBTSDAzCQkJU0hfU0gwMwogTEFORElTSwkJCVNIX0xBTkRJU0sKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCA5NzY3MWRhLi5lNTk0NTU5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0zNyw2ICszNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkdlbmVyYWwgbWFjaGluZSBzZXR1cCIKIAogY29uZmlnIFNNUApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oCmluZGV4IDI5ODk5ZmQuLjgwZmU1NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzMyLmgKQEAgLTEzNSw2ICsxMzUsNyBAQAogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJOQkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKIAkJCQkJICogVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxMAorI2RlZmluZSBUSUZfRlJFRVpFCQkxMQkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKQEAgLTE0OCw2ICsxNDksNyBAQAogI2RlZmluZSBfVElGX0RPX05PVElGWV9SRVNVTUVfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FIHwgXAogCQkJCQkgX1RJRl9TSUdQRU5ESU5HIHwgXAogCQkJCQkgX1RJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCmluZGV4IGMwYTczN2QuLjYzOWFjODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogI2RlZmluZSBUSUZfQUJJX1BFTkRJTkcJCTEyCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTEzCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNAorI2RlZmluZSBUSUZfRlJFRVpFCQkxNQkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCkBAIC0yNDksNiArMjUwLDcgQEAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKICNkZWZpbmUgX1RJRl9BQklfUEVORElORwkoMTw8VElGX0FCSV9QRU5ESU5HKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLCSgoMHhmZiA8PCBUSV9GTEFHX1dTQVZFRF9TSElGVCkgfCBcCiAJCQkJIF9USUZfRE9fTk9USUZZX1JFU1VNRV9NQVNLIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCA1NDQ2ZTJhLi4wMzViMTVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtOTYsNiArOTYsNyBAQAogCWRlZl9ib29sIHkKIAogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnIGIvYXJjaC91bS9LY29uZmlnCmluZGV4IDY5NzY4MTIuLjM5M2JjY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZworKysgYi9hcmNoL3VtL0tjb25maWcKQEAgLTIyOSw2ICsyMjksOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBzb3VyY2UgImRyaXZlcnMvYmxvY2svS2NvbmZpZyIKIAogc291cmNlICJhcmNoL3VtL0tjb25maWcuY2hhciIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IGZkMGMyNWEuLjEyOTY0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtMTc5LDcgKzE3OSw4IEBACiAJaWYgKGhhdmVfZnB4X3JlZ3MpIHsKIAkJc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgZnB4OwogCi0JCWVyciA9IGNvcHlfZnJvbV91c2VyKCZmcHgsICZzYy5mcHN0YXRlLT5fZnhzcl9lbnZbMF0sCisJCWVyciA9IGNvcHlfZnJvbV91c2VyKCZmcHgsCisJCQkmKChzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICopc2MuZnBzdGF0ZSktPl9meHNyX2VudlswXSwKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCkpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCBiZDNjMmM1Li41YjliMTIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTI2LDYgKzI2LDcgQEAKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUworCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVFJBQ0UKIAlzZWxlY3QgSEFWRV9LVk0gaWYgKChYODZfMzIgJiYgIVg4Nl9WT1lBR0VSICYmICFYODZfVklTV1MgJiYgIVg4Nl9OVU1BUSkgfHwgWDg2XzY0KQpAQCAtMTkzLDYgKzE5NCw3IEBACiBjb25maWcgS1RJTUVfU0NBTEFSCiAJZGVmX2Jvb2wgWDg2XzMyCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCkBAIC0xMjQxLDE0ICsxMjQzLDYgQEAKICAgCXJlc3VsdGFudCBrZXJuZWwgc2hvdWxkIGNvbnRpbnVlIHRvIGJvb3Qgb24gZXhpc3Rpbmcgbm9uLUVGSQogICAJcGxhdGZvcm1zLgogCi1jb25maWcgSVJRQkFMQU5DRQotCWRlZl9ib29sIHkKLQlwcm9tcHQgIkVuYWJsZSBrZXJuZWwgaXJxIGJhbGFuY2luZyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBTTVAgJiYgWDg2X0lPX0FQSUMKLQloZWxwCi0JICBUaGUgZGVmYXVsdCB5ZXMgd2lsbCBhbGxvdyB0aGUga2VybmVsIHRvIGRvIGlycSBsb2FkIGJhbGFuY2luZy4KLQkgIFNheWluZyBubyB3aWxsIGtlZXAgdGhlIGtlcm5lbCBmcm9tIGRvaW5nIGlycSBsb2FkIGJhbGFuY2luZy4KLQogY29uZmlnIFNFQ0NPTVAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCA1MmQwMzU5Li4xM2I4Yzg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTI4Nyw3ICsyODcsNiBAQAogIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldAogQ09ORklHX1g4Nl9QQVQ9eQogQ09ORklHX0VGST15Ci0jIENPTkZJR19JUlFCQUxBTkNFIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDBkNDFmMDMuLmQ3ZTVhNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIENGTEFHU190c2MubwkJOj0gJChub3N0YWNrcCkKIAogb2JqLXkJCQk6PSBwcm9jZXNzXyQoQklUUykubyBzaWduYWxfJChCSVRTKS5vIGVudHJ5XyQoQklUUykubwotb2JqLXkJCQkrPSB0cmFwcy5vIGlycV8kKEJJVFMpLm8gZHVtcHN0YWNrXyQoQklUUykubworb2JqLXkJCQkrPSB0cmFwcy5vIGlycS5vIGlycV8kKEJJVFMpLm8gZHVtcHN0YWNrXyQoQklUUykubwogb2JqLXkJCQkrPSB0aW1lXyQoQklUUykubyBpb3BvcnQubyBsZHQubwogb2JqLXkJCQkrPSBzZXR1cC5vIGk4MjU5Lm8gaXJxaW5pdF8kKEJJVFMpLm8gc2V0dXBfcGVyY3B1Lm8KIG9iai0kKENPTkZJR19YODZfVklTV1MpCSs9IHZpc3dzX3F1aXJrcy5vCkBAIC02MCw4ICs2MCw4IEBACiBvYmotJChDT05GSUdfWDg2XzY0X1NNUCkJKz0gdHNjX3N5bmMubyBzbXBjb21tb24ubwogb2JqLSQoQ09ORklHX1g4Nl9UUkFNUE9MSU5FKQkrPSB0cmFtcG9saW5lXyQoQklUUykubwogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KLW9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpY18kKEJJVFMpLm8gbm1pLm8KLW9iai0kKENPTkZJR19YODZfSU9fQVBJQykJKz0gaW9fYXBpY18kKEJJVFMpLm8KK29iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCitvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubwogb2JqLSQoQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMpCSs9IHJlYm9vdF9maXh1cHNfMzIubwogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlY18kKEJJVFMpLm8KQEAgLTEwOCw3ICsxMDgsNyBAQAogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKICAgICAgICAgb2JqLXkJCQkJKz0gZ2VuYXBpY182NC5vIGdlbmFwaWNfZmxhdF82NC5vIGdlbngyYXBpY191dl94Lm8gdGxiX3V2Lm8KLQlvYmoteQkJCQkrPSBiaW9zX3V2Lm8KKwlvYmoteQkJCQkrPSBiaW9zX3V2Lm8gdXZfaXJxLm8gdXZfc3lzZnMubwogICAgICAgICBvYmoteQkJCQkrPSBnZW54MmFwaWNfY2x1c3Rlci5vCiAgICAgICAgIG9iai15CQkJCSs9IGdlbngyYXBpY19waHlzLm8KICAgICAgICAgb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggZWI4NzVjZC4uMGQxYzI2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0lOVEVSUlVQVF9PVkVSUklERSwgYWNwaV9wYXJzZV9pbnRfc3JjX292ciwKLQkJCQkgIE5SX0lSUV9WRUNUT1JTKTsKKwkJCQkgIG5yX2lycXMpOwogCWlmIChjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAogCQkgICAgICAgIkVycm9yIHBhcnNpbmcgaW50ZXJydXB0IHNvdXJjZSBvdmVycmlkZXMgZW50cnlcbiIpOwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKIAogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX05NSV9TT1VSQ0UsIGFjcGlfcGFyc2Vfbm1pX3NyYywKLQkJCQkgIE5SX0lSUV9WRUNUT1JTKTsKKwkJCQkgIG5yX2lycXMpOwogCWlmIChjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgcGFyc2luZyBOTUkgU1JDIGVudHJ5XG4iKTsKIAkJLyogVEJEOiBDbGVhbnVwIHRvIGFsbG93IGZhbGxiYWNrIHRvIE1QUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKaW5kZXggNDI2ZTVkOS4uYzQ0Y2Q2ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KIAogI2luY2x1ZGUgInJlYWxtb2RlL3dha2V1cC5oIgogI2luY2x1ZGUgInNsZWVwLmgiCkBAIC05OCw2ICs5OSw4IEBACiAJaGVhZGVyLT50cmFtcG9saW5lX3NlZ21lbnQgPSBzZXR1cF90cmFtcG9saW5lKCkgPj4gNDsKICNpZmRlZiBDT05GSUdfU01QCiAJc3RhY2tfc3RhcnQuc3AgPSB0ZW1wX3N0YWNrICsgNDA5NjsKKwllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9CisJCQkodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmCiAJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpd2FrZXVwX2xvbmc2NDsKIAlzYXZlZF9tYWdpYyA9IDB4MTIzNDU2Nzg5YWJjZGVmMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9hcGljLmMKaW5kZXggMjFjODMxZC4uMDRhN2Y5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCkBAIC0yMywxMSArMjMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGlfcG10bXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtMzYsOCArMzgsMTQgQEAKICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9pODI1My5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CiAKICNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KICNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KQEAgLTUwLDE2ICs1OCw1OCBAQAogIyBlcnJvciBTUFVSSU9VU19BUElDX1ZFQ1RPUiBkZWZpbml0aW9uIGVycm9yCiAjZW5kaWYKIAotdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwotCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogLyoKICAqIEtub2IgdG8gY29udHJvbCBvdXIgd2lsbGluZ25lc3MgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDLgogICoKICAqICsxPWZvcmNlLWVuYWJsZQogICovCiBzdGF0aWMgaW50IGZvcmNlX2VuYWJsZV9sb2NhbF9hcGljOwotaW50IGRpc2FibGVfYXBpYzsKKy8qCisgKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljKGNoYXIgKmFyZykKK3sKKwlmb3JjZV9lbmFibGVfbG9jYWxfYXBpYyA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibGFwaWMiLCBwYXJzZV9sYXBpYyk7CisvKiBMb2NhbCBBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsICovCitzdGF0aWMgaW50IGVuYWJsZWRfdmlhX2FwaWNiYXNlOwogCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbnQgYXBpY19jYWxpYnJhdGVfcG10bXIgX19pbml0ZGF0YTsKK3N0YXRpYyBfX2luaXQgaW50IHNldHVwX2FwaWNwbXRpbWVyKGNoYXIgKnMpCit7CisJYXBpY19jYWxpYnJhdGVfcG10bXIgPSAxOworCW5vdHNjX3NldHVwKE5VTEwpOworCXJldHVybiAwOworfQorX19zZXR1cCgiYXBpY3BtdGltZXIiLCBzZXR1cF9hcGljcG10aW1lcik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgSEFWRV9YMkFQSUMKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9YMkFQSUMKK2ludCB4MmFwaWM7CisvKiB4MmFwaWMgZW5hYmxlZCBiZWZvcmUgT1MgaGFuZG92ZXIgKi8KK2ludCB4MmFwaWNfcHJlZW5hYmxlZDsKK2ludCBkaXNhYmxlX3gyYXBpYzsKK3N0YXRpYyBfX2luaXQgaW50IHNldHVwX25veDJhcGljKGNoYXIgKnN0cikKK3sKKwlkaXNhYmxlX3gyYXBpYyA9IDE7CisJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9YMkFQSUMpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5veDJhcGljIiwgc2V0dXBfbm94MmFwaWMpOworI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKK2ludCBkaXNhYmxlX2FwaWM7CiAvKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KIHN0YXRpYyBpbnQgZGlzYWJsZV9hcGljX3RpbWVyIF9fY3B1aW5pdGRhdGE7CiAvKiBMb2NhbCBBUElDIHRpbWVyIHdvcmtzIGluIEMyICovCkBAIC0xMTAsOSArMTYwLDYgQEAKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGFwaWNfZXZlbnRzKTsKIAotLyogTG9jYWwgQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCAqLwotc3RhdGljIGludCBlbmFibGVkX3ZpYV9hcGljYmFzZTsKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBpY19waHlzOwogCiAvKgpAQCAtMjAyLDYgKzI0OSw0MiBAQAogc3RydWN0IGFwaWNfb3BzIF9fcmVhZF9tb3N0bHkgKmFwaWNfb3BzID0gJnhhcGljX29wczsKIEVYUE9SVF9TWU1CT0xfR1BMKGFwaWNfb3BzKTsKIAorI2lmZGVmIEhBVkVfWDJBUElDCitzdGF0aWMgdm9pZCB4MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCisJcmV0dXJuOworfQorCitzdGF0aWMgdTMyIHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwkvKiBubyBuZWVkIHRvIHdhaXQgZm9yIGljciBpZGxlIGluIHgyYXBpYyAqLworCXJldHVybiAwOworfQorCit2b2lkIHgyYXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQoreworCXdybXNybChBUElDX0JBU0VfTVNSICsgKEFQSUNfSUNSID4+IDQpLCAoKF9fdTY0KSBpZCkgPDwgMzIgfCBsb3cpOworfQorCit1NjQgeDJhcGljX2ljcl9yZWFkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlyZG1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgc3RydWN0IGFwaWNfb3BzIHgyYXBpY19vcHMgPSB7CisJLnJlYWQgPSBuYXRpdmVfYXBpY19tc3JfcmVhZCwKKwkud3JpdGUgPSBuYXRpdmVfYXBpY19tc3Jfd3JpdGUsCisJLmljcl9yZWFkID0geDJhcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUgPSB4MmFwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlID0geDJhcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCit9OworI2VuZGlmCisKIC8qKgogICogZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgLSBlbmFibGUgTk1JIHRocm91Z2ggbG9jYWwgdmVjdG9yIHRhYmxlIDAKICAqLwpAQCAtMjE5LDYgKzMwMiw3IEBACiAJYXBpY193cml0ZShBUElDX0xWVDAsIHYpOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogLyoqCiAgKiBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0IC0gR2V0IG51bWJlciBvZiBwaHlzaWNhbCBicm9hZGNhc3QgSURzCiAgKi8KQEAgLTIyNiw2ICszMTAsNyBAQAogewogCXJldHVybiBtb2Rlcm5fYXBpYygpID8gMHhmZiA6IDB4ZjsKIH0KKyNlbmRpZgogCiAvKioKICAqIGxhcGljX2dldF9tYXhsdnQgLSBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHZlY3RvciB0YWJsZSBlbnRyaWVzCkBAIC0yNDcsMTEgKzMzMiw3IEBACiAgKi8KIAogLyogQ2xvY2sgZGl2aXNvciAqLwotI2lmZGVmIENPTkZHX1g4Nl82NAotI2RlZmluZSBBUElDX0RJVklTT1IgMQotI2Vsc2UKICNkZWZpbmUgQVBJQ19ESVZJU09SIDE2Ci0jZW5kaWYKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciwgd2l0aCBhIHRpbWVvdXQgb2YKQEAgLTM4Myw3ICs0NjQsNyBAQAogICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWxpemVkIHZhbHVlcwogICogb2YgdGhlIGJvb3QgQ1BVIGFuZCByZWdpc3RlciB0aGUgY2xvY2sgZXZlbnQgaW4gdGhlIGZyYW1ld29yay4KICAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHNldHVwX0FQSUNfdGltZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBzZXR1cF9BUElDX3RpbWVyKHZvaWQpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CiAKQEAgLTQ1MywxNCArNTM0LDUxIEBACiAJfQogfQogCitzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfYnlfcG10aW1lcihsb25nIGRlbHRhcG0sIGxvbmcgKmRlbHRhKQoreworCWNvbnN0IGxvbmcgcG1fMTAwbXMgPSBQTVRNUl9USUNLU19QRVJfU0VDIC8gMTA7CisJY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcyAvIDEwMDsKKwl1bnNpZ25lZCBsb25nIG11bHQ7CisJdTY0IHJlczsKKworI2lmbmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCisJcmV0dXJuIC0xOworI2VuZGlmCisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOworCisJLyogQ2hlY2ssIGlmIHRoZSBQTSB0aW1lciBpcyBhdmFpbGFibGUgKi8KKwlpZiAoIWRlbHRhcG0pCisJCXJldHVybiAtMTsKKworCW11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsIDIyKTsKKworCWlmIChkZWx0YXBtID4gKHBtXzEwMG1zIC0gcG1fdGhyZXNoKSAmJgorCSAgICBkZWx0YXBtIDwgKHBtXzEwMG1zICsgcG1fdGhyZXNoKSkgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKKwl9IGVsc2UgeworCQlyZXMgPSAoKCh1NjQpZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7CisJCWRvX2RpdihyZXMsIDEwMDAwMDApOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIGNhbGlicmF0aW9uIG5vdCBjb25zaXN0ZW50ICIKKwkJCSJ3aXRoIFBNIFRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLAorCQkJKGxvbmcpcmVzKTsKKwkJLyogQ29ycmVjdCB0aGUgbGFwaWMgY291bnRlciB2YWx1ZSAqLworCQlyZXMgPSAoKCh1NjQpKCpkZWx0YSkpICogcG1fMTAwbXMpOworCQlkb19kaXYocmVzLCBkZWx0YXBtKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVBJQyBkZWx0YSBhZGp1c3RlZCB0byBQTS1UaW1lcjogIgorCQkJIiVsdSAoJWxkKVxuIiwgKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGEpOworCQkqZGVsdGEgPSAobG9uZylyZXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7Ci0JY29uc3QgbG9uZyBwbV8xMDBtcyA9IFBNVE1SX1RJQ0tTX1BFUl9TRUMvMTA7Ci0JY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcy8xMDA7CiAJdm9pZCAoKnJlYWxfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKIAl1bnNpZ25lZCBsb25nIGRlbHRhajsKLQlsb25nIGRlbHRhLCBkZWx0YXBtOworCWxvbmcgZGVsdGE7CiAJaW50IHBtX3JlZmVyZW5jZWQgPSAwOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTQ3MCwxMCArNTg4LDEwIEBACiAJZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7CiAKIAkvKgotCSAqIFNldHVwIHRoZSBBUElDIGNvdW50ZXIgdG8gMWU5LiBUaGVyZSBpcyBubyB3YXkgdGhlIGxhcGljCisJICogU2V0dXAgdGhlIEFQSUMgY291bnRlciB0byBtYXhpbXVtLiBUaGVyZSBpcyBubyB3YXkgdGhlIGxhcGljCiAJICogY2FuIHVuZGVyZmxvdyBpbiB0aGUgMTAwbXMgZGV0ZWN0aW9uIHRpbWUgZnJhbWUKIAkgKi8KLQlfX3NldHVwX0FQSUNfTFZUVCgxMDAwMDAwMDAwLCAwLCAwKTsKKwlfX3NldHVwX0FQSUNfTFZUVCgweGZmZmZmZmZmLCAwLCAwKTsKIAogCS8qIExldCB0aGUgaW50ZXJydXB0cyBydW4gKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC00OTAsMzQgKzYwOCw5IEBACiAJZGVsdGEgPSBsYXBpY19jYWxfdDEgLSBsYXBpY19jYWxfdDI7CiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGxhcGljIGRlbHRhID0gJWxkXG4iLCBkZWx0YSk7CiAKLQkvKiBDaGVjaywgaWYgdGhlIFBNIHRpbWVyIGlzIGF2YWlsYWJsZSAqLwotCWRlbHRhcG0gPSBsYXBpY19jYWxfcG0yIC0gbGFwaWNfY2FsX3BtMTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOwotCi0JaWYgKGRlbHRhcG0pIHsKLQkJdW5zaWduZWQgbG9uZyBtdWx0OwotCQl1NjQgcmVzOwotCi0JCW11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsIDIyKTsKLQotCQlpZiAoZGVsdGFwbSA+IChwbV8xMDBtcyAtIHBtX3RocmVzaCkgJiYKLQkJICAgIGRlbHRhcG0gPCAocG1fMTAwbXMgKyBwbV90aHJlc2gpKSB7Ci0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyA9ICgoKHU2NCkgZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7Ci0JCQlkb19kaXYocmVzLCAxMDAwMDAwKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgY2FsaWJyYXRpb24gbm90IGNvbnNpc3RlbnQgIgotCQkJICAgICAgICJ3aXRoIFBNIFRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLAotCQkJICAgICAgIChsb25nKXJlcyk7Ci0JCQkvKiBDb3JyZWN0IHRoZSBsYXBpYyBjb3VudGVyIHZhbHVlICovCi0JCQlyZXMgPSAoKCh1NjQpIGRlbHRhKSAqIHBtXzEwMG1zKTsKLQkJCWRvX2RpdihyZXMsIGRlbHRhcG0pOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQVBJQyBkZWx0YSBhZGp1c3RlZCB0byBQTS1UaW1lcjogIgotCQkJICAgICAgICIlbHUgKCVsZClcbiIsICh1bnNpZ25lZCBsb25nKSByZXMsIGRlbHRhKTsKLQkJCWRlbHRhID0gKGxvbmcpIHJlczsKLQkJfQotCQlwbV9yZWZlcmVuY2VkID0gMTsKLQl9CisJLyogd2UgdHJ1c3QgdGhlIFBNIGJhc2VkIGNhbGlicmF0aW9uIGlmIHBvc3NpYmxlICovCisJcG1fcmVmZXJlbmNlZCA9ICFjYWxpYnJhdGVfYnlfcG10aW1lcihsYXBpY19jYWxfcG0yIC0gbGFwaWNfY2FsX3BtMSwKKwkJCQkJJmRlbHRhKTsKIAogCS8qIENhbGN1bGF0ZSB0aGUgc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yICovCiAJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGRlbHRhLCBUSUNLX05TRUMgKiBMQVBJQ19DQUxfTE9PUFMsCkBAIC01NTksNyArNjUyLDEwIEBACiAKIAlsZXZ0LT5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CiAKLQkvKiBXZSB0cnVzdCB0aGUgcG0gdGltZXIgYmFzZWQgY2FsaWJyYXRpb24gKi8KKwkvKgorCSAqIFBNIHRpbWVyIGNhbGlicmF0aW9uIGZhaWxlZCBvciBub3QgdHVybmVkIG9uCisJICogc28gbGV0cyB0cnkgQVBJQyB0aW1lciBiYXNlZCBjYWxpYnJhdGlvbgorCSAqLwogCWlmICghcG1fcmVmZXJlbmNlZCkgewogCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gdmVyaWZ5IEFQSUMgdGltZXJcbiIpOwogCkBAIC02NTIsNyArNzQ4LDcgQEAKIAlzZXR1cF9BUElDX3RpbWVyKCk7CiB9CiAKLXZvaWQgX19kZXZpbml0IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKQogewogCXNldHVwX0FQSUNfdGltZXIoKTsKIH0KQEAgLTcxOCw2ICs4MTQsOSBAQAogCSAqIEJlc2lkZXMsIGlmIHdlIGRvbid0IHRpbWVyIGludGVycnVwdHMgaWdub3JlIHRoZSBnbG9iYWwKIAkgKiBpbnRlcnJ1cHQgbG9jaywgd2hpY2ggaXMgdGhlIFdyb25nVGhpbmcgKHRtKSB0byBkby4KIAkgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJZXhpdF9pZGxlKCk7CisjZW5kaWYKIAlpcnFfZW50ZXIoKTsKIAlsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCgpOwogCWlycV9leGl0KCk7CkBAIC05OTEsNDAgKzEwOTAsNDMgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGxhcGljX3NldHVwX2Vzcih2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgb2xkdmFsdWUsIHZhbHVlLCBtYXhsdnQ7Ci0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSAmJiAhZXNyX2Rpc2FibGUpIHsKLQkJaWYgKGVzcl9kaXNhYmxlKSB7Ci0JCQkvKgotCQkJICogU29tZXRoaW5nIHVudHJhY2VhYmxlIGlzIGNyZWF0aW5nIGJhZCBpbnRlcnJ1cHRzIG9uCi0JCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQotCQkJICogRVNSIGRpc2FibGVkIC0gd2UgY2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlCi0JCQkgKiBlcnJvcnMgYW55d2F5IC0gbWJsaWdoCi0JCQkgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIkxlYXZpbmcgRVNSIGRpc2FibGVkLlxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogITgyNDg5RFggKi8KLQkJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlvbGR2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7CisJdW5zaWduZWQgaW50IG9sZHZhbHVlLCB2YWx1ZSwgbWF4bHZ0OwogCi0JCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KLQkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOwotCQkvKgotCQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KLQkJICovCi0JCWlmIChtYXhsdnQgPiAzKQotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJaWYgKHZhbHVlICE9IG9sZHZhbHVlKQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCi0JCQkJInZlY3RvcjogMHglMDhseCAgYWZ0ZXI6IDB4JTA4bHhcbiIsCi0JCQkJb2xkdmFsdWUsIHZhbHVlKTsKLQl9IGVsc2UgeworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIk5vIEVTUiBmb3IgODI0ODlEWC5cbiIpOworCQlyZXR1cm47CiAJfQorCisJaWYgKGVzcl9kaXNhYmxlKSB7CisJCS8qCisJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgorCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQorCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKKwkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAorCQkgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiTGVhdmluZyBFU1IgZGlzYWJsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKwlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCisJLyogZW5hYmxlcyBzZW5kaW5nIGVycm9ycyAqLworCXZhbHVlID0gRVJST1JfQVBJQ19WRUNUT1I7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOworCisJLyoKKwkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KKwkgKi8KKwlpZiAobWF4bHZ0ID4gMykKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCisJCQkidmVjdG9yOiAweCUwOHggIGFmdGVyOiAweCUwOHhcbiIsCisJCQlvbGR2YWx1ZSwgdmFsdWUpOwogfQogCiAKQEAgLTEwMzMsMjQgKzExMzUsMjcgQEAKICAqLwogdm9pZCBfX2NwdWluaXQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdmFsdWUsIGludGVncmF0ZWQ7CisJdW5zaWduZWQgaW50IHZhbHVlOwogCWludCBpLCBqOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qIFBvdW5kIHRoZSBFU1IgcmVhbGx5IGhhcmQgb3ZlciB0aGUgaGVhZCB3aXRoIGEgYmlnIGhhbW1lciAtIG1ibGlnaCAqLwotCWlmIChlc3JfZGlzYWJsZSkgeworCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkgJiYgZXNyX2Rpc2FibGUpIHsKIAkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwogCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKIAkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJfQorI2VuZGlmCiAKLQlpbnRlZ3JhdGVkID0gbGFwaWNfaXNfaW50ZWdyYXRlZCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJLyoKIAkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCisJICogVGhpcyBpcyBtZWFuaW5nbGVzcyBpbiBjbHVzdGVyZWQgYXBpYyBtb2RlLCBzbyB3ZSBza2lwIGl0LgogCSAqLwogCWlmICghYXBpY19pZF9yZWdpc3RlcmVkKCkpCi0JCVdBUk5fT05fT05DRSgxKTsKKwkJQlVHKCk7CiAKIAkvKgogCSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCkBAIC0xMDk2LDYgKzEyMDEsNyBAQAogCSAqLwogCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyoKIAkgKiBTb21lIHVua25vd24gSW50ZWwgSU8vQVBJQyAob3IgQVBJQykgZXJyYXRhIGlzIGJpdGluZyB1cyB3aXRoCiAJICogY2VydGFpbiBuZXR3b3JraW5nIGNhcmRzLiBJZiBoaWdoIGZyZXF1ZW5jeSBpbnRlcnJ1cHRzIGFyZQpAQCAtMTExNiw4ICsxMjIyLDEzIEBACiAJICogU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gZW5kX2xldmVsX2lvYXBpY19pcnEoKS4gIC0tbWFjcm8KIAkgKi8KIAotCS8qIEVuYWJsZSBmb2N1cyBwcm9jZXNzb3IgKGJpdD09MCkgKi8KKwkvKgorCSAqIC0gZW5hYmxlIGZvY3VzIHByb2Nlc3NvciAoYml0PT0wKQorCSAqIC0gNjRiaXQgbW9kZSBhbHdheXMgdXNlIHByb2Nlc3NvciBmb2N1cworCSAqICAgc28gbm8gbmVlZCB0byBzZXQgaXQKKwkgKi8KIAl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOworI2VuZGlmCiAKIAkvKgogCSAqIFNldCBzcHVyaW91cyBJUlEgdmVjdG9yCkBAIC0xMTU0LDkgKzEyNjUsMTEgQEAKIAkJdmFsdWUgPSBBUElDX0RNX05NSTsKIAllbHNlCiAJCXZhbHVlID0gQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQ7Ci0JaWYgKCFpbnRlZ3JhdGVkKQkJLyogODI0ODlEWCAqLworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLwogCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQpAQCAtMTE3Nyw2ICsxMjkwLDE1MyBAQAogCWFwaWNfcG1fYWN0aXZhdGUoKTsKIH0KIAorI2lmZGVmIEhBVkVfWDJBUElDCit2b2lkIGNoZWNrX3gyYXBpYyh2b2lkKQoreworCWludCBtc3IsIG1zcjI7CisKKwlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKKworCWlmIChtc3IgJiBYMkFQSUNfRU5BQkxFKSB7CisJCXByaW50aygieDJhcGljIGVuYWJsZWQgYnkgQklPUywgc3dpdGNoaW5nIHRvIHgyYXBpYyBvcHNcbiIpOworCQl4MmFwaWNfcHJlZW5hYmxlZCA9IHgyYXBpYyA9IDE7CisJCWFwaWNfb3BzID0gJngyYXBpY19vcHM7CisJfQorfQorCit2b2lkIGVuYWJsZV94MmFwaWModm9pZCkKK3sKKwlpbnQgbXNyLCBtc3IyOworCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7CisJaWYgKCEobXNyICYgWDJBUElDX0VOQUJMRSkpIHsKKwkJcHJpbnRrKCJFbmFibGluZyB4MmFwaWNcbiIpOworCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyIHwgWDJBUElDX0VOQUJMRSwgMCk7CisJfQorfQorCit2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1X2hhc194MmFwaWMpCisJCXJldHVybjsKKworCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgZGlzYWJsZV94MmFwaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIlNraXBwZWQgZW5hYmxpbmcgeDJhcGljIGFuZCBJbnRlcnJ1cHQtcmVtYXBwaW5nICIKKwkJICAgICAgICJiZWNhdXNlIG9mIG5veDJhcGljXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykKKwkJcGFuaWMoIkJpb3MgYWxyZWFkeSBlbmFibGVkIHgyYXBpYywgY2FuJ3QgZW5mb3JjZSBub3gyYXBpYyIpOworCisJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBza2lwX2lvYXBpY19zZXR1cCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgorCQkgICAgICAgImJlY2F1c2Ugb2Ygc2tpcHBpbmcgaW8tYXBpYyBzZXR1cFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBkbWFyX3RhYmxlX2luaXQoKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJkbWFyX3RhYmxlX2luaXQoKSBmYWlsZWQgd2l0aCAlZDpcbiIsIHJldCk7CisKKwkJaWYgKHgyYXBpY19wcmVlbmFibGVkKQorCQkJcGFuaWMoIngyYXBpYyBlbmFibGVkIGJ5IGJpb3MuIEJ1dCBJUiBlbmFibGluZyBmYWlsZWQiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltYXNrXzgyNTlBKCk7CisKKwlyZXQgPSBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2F2aW5nIElPLUFQSUMgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlbmQ7CisJfQorCisJcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOworCisJaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7CisJfQorCisJaWYgKHJldCkKKwkJZ290byBlbmRfcmVzdG9yZTsKKworCWlmICgheDJhcGljKSB7CisJCXgyYXBpYyA9IDE7CisJCWFwaWNfb3BzID0gJngyYXBpY19vcHM7CisJCWVuYWJsZV94MmFwaWMoKTsKKwl9CisKK2VuZF9yZXN0b3JlOgorCWlmIChyZXQpCisJCS8qCisJCSAqIElSIGVuYWJsaW5nIGZhaWxlZAorCQkgKi8KKwkJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7CisJZWxzZQorCQlyZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKHgyYXBpY19wcmVlbmFibGVkKTsKKworZW5kOgorCXVubWFza184MjU5QSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlmICghcmV0KSB7CisJCWlmICgheDJhcGljX3ByZWVuYWJsZWQpCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIkVuYWJsZWQgeDJhcGljIGFuZCBpbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJGYWlsZWQgdG8gZW5hYmxlIEludGVycnVwdC1yZW1hcHBpbmcgYW5kIHgyYXBpY1xuIik7CisjZWxzZQorCWlmICghY3B1X2hhc194MmFwaWMpCisJCXJldHVybjsKKworCWlmICh4MmFwaWNfcHJlZW5hYmxlZCkKKwkJcGFuaWMoIngyYXBpYyBlbmFibGVkIHByaW9yIE9TIGhhbmRvdmVyLCIKKwkJICAgICAgIiBlbmFibGUgQ09ORklHX0lOVFJfUkVNQVAiKTsKKworCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBDT05GSUdfSU5UUl9SRU1BUCBmb3IgZW5hYmxpbmcgaW50ci1yZW1hcHBpbmcgIgorCSAgICAgICAiIGFuZCB4MmFwaWNcbiIpOworI2VuZGlmCisKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogSEFWRV9YMkFQSUMgKi8KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qCisgKiBEZXRlY3QgYW5kIGVuYWJsZSBsb2NhbCBBUElDcyBvbiBub24tU01QIGJvYXJkcy4KKyAqIE9yaWdpbmFsIGNvZGUgd3JpdHRlbiBieSBLZWlyIEZyYXNlci4KKyAqIE9uIEFNRDY0IHdlIHRydXN0IHRoZSBCSU9TIC0gaWYgaXQgc2F5cyBubyBBUElDIGl0IGlzIGxpa2VseQorICogbm90IGNvcnJlY3RseSBzZXQgdXAgKHVzdWFsbHkgdGhlIEFQSUMgdGltZXIgd29uJ3Qgd29yayBldGMuKQorICovCitzdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCit7CisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbG9jYWwgQVBJQyBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IDA7CisJcmV0dXJuIDA7Cit9CisjZWxzZQogLyoKICAqIERldGVjdCBhbmQgaW5pdGlhbGl6ZSBBUElDCiAgKi8KQEAgLTEyNTUsMTIgKzE1MTUsNDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICJObyBsb2NhbCBBUElDIHByZXNlbnQgb3IgaGFyZHdhcmUgZGlzYWJsZWRcbiIpOwogCXJldHVybiAtMTsKIH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CisKKwkvKgorCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0CisJICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZykKKwkJcmV0dXJuOworCisJcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKKworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCisJCSAgICBBUElDX0JBU0UsIHBoeXNfYWRkcik7CisKKwkvKgorCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKKwkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgorCSAqLworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOworfQorI2VuZGlmCiAKIC8qKgogICogaW5pdF9hcGljX21hcHBpbmdzIC0gaW5pdGlhbGl6ZSBBUElDIG1hcHBpbmdzCiAgKi8KIHZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQogeworI2lmZGVmIEhBVkVfWDJBUElDCisJaWYgKHgyYXBpYykgeworCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCiAJLyoKIAkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCiAJICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKQEAgLTEyNzMsOCArMTU2Nyw4IEBACiAJCWFwaWNfcGh5cyA9IG1wX2xhcGljX2FkZHI7CiAKIAlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgYXBpY19waHlzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAibWFwcGVkIEFQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwgQVBJQ19CQVNFLAotCSAgICAgICBhcGljX3BoeXMpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUwOGx4ICglMDhseClcbiIsCisJCQkJQVBJQ19CQVNFLCBhcGljX3BoeXMpOwogCiAJLyoKIAkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCkBAIC0xMjgyLDE4ICsxNTc2LDI3IEBACiAJICovCiAJaWYgKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9PSAtMVUpCiAJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwotCiB9CiAKIC8qCiAgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKICAqIGEgVVAga2VybmVsLgogICovCi0KIGludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKIAogaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChkaXNhYmxlX2FwaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXBpYyBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJZGlzYWJsZV9hcGljID0gMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXBpYyBkaXNhYmxlZCBieSBCSU9TXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbHNlCiAJaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCiAJCXJldHVybiAtMTsKIApAQCAtMTMwMiwzOSArMTYwNSw2OCBAQAogCSAqLwogCWlmICghY3B1X2hhc19hcGljICYmCiAJICAgIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAjJWQgbm90IGRldGVjdGVkIS4uLlxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAweCV4IG5vdCBkZXRlY3RlZCEuLi5cbiIsCiAJCSAgICAgICBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwogCQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKIAkJcmV0dXJuIC0xOwogCX0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9YMkFQSUMKKwllbmFibGVfSVJfeDJhcGljKCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0dXBfYXBpY19yb3V0aW5nKCk7CisjZW5kaWYKIAogCXZlcmlmeV9sb2NhbF9BUElDKCk7Ci0KIAljb25uZWN0X2JzcF9BUElDKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJYXBpY193cml0ZShBUElDX0lELCBTRVRfQVBJQ19JRChib290X2NwdV9waHlzaWNhbF9hcGljaWQpKTsKKyNlbHNlCiAJLyoKIAkgKiBIYWNrOiBJbiBjYXNlIG9mIGtkdW1wLCBhZnRlciBhIGNyYXNoLCBrZXJuZWwgbWlnaHQgYmUgYm9vdGluZwogCSAqIG9uIGEgY3B1IHdpdGggbm9uLXplcm8gbGFwaWMgaWQuIEJ1dCBib290X2NwdV9waHlzaWNhbF9hcGljaWQKIAkgKiBtaWdodCBiZSB6ZXJvIGlmIHJlYWQgZnJvbSBNUCB0YWJsZXMuIEdldCBpdCBmcm9tIExBUElDLgogCSAqLwotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCisjIGlmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CisjIGVuZGlmCiAjZW5kaWYKIAlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQogCXNldHVwX2xvY2FsX0FQSUMoKTsKIAorI2lmZGVmIENPTkZJR19YODZfNjQKKwkvKgorCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQworCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgdmVjdG9yIG9uIEJQCisJICovCisJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQorCQllbmFibGVfSU9fQVBJQygpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAoIXNtcF9mb3VuZF9jb25maWcgfHwgc2tpcF9pb2FwaWNfc2V0dXAgfHwgIW5yX2lvYXBpY3MpCiAjZW5kaWYKIAkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7CiAJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCWlmIChzbXBfZm91bmRfY29uZmlnKQotCQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCQlzZXR1cF9JT19BUElDKCk7CisJaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCisJCXNldHVwX0lPX0FQSUMoKTsKKyMgaWZkZWYgQ09ORklHX1g4Nl82NAorCWVsc2UKKwkJbnJfaW9hcGljcyA9IDA7CisjIGVuZGlmCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKKwljaGVja19ubWlfd2F0Y2hkb2coKTsKKyNlbHNlCiAJc2V0dXBfYm9vdF9jbG9jaygpOworI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDgsOCArMTY4MCwxMSBAQAogICovCiB2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyB2OworCXUzMiB2OwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWV4aXRfaWRsZSgpOworI2VuZGlmCiAJaXJxX2VudGVyKCk7CiAJLyoKIAkgKiBDaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIHNwdXJpb3VzIGludGVycnVwdCBhbmQgQUNLIGl0CkBAIC0xMzYwLDEwICsxNjk1LDE0IEBACiAJaWYgKHYgJiAoMSA8PCAoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDFmKSkpCiAJCWFja19BUElDX2lycSgpOwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFkZF9wZGEoaXJxX3NwdXJpb3VzX2NvdW50LCAxKTsKKyNlbHNlCiAJLyogc2VlIHN3LWRldi1tYW4gdm9sIDMsIGNoYXB0ZXIgNy40LjEzLjUgKi8KIAlwcmludGsoS0VSTl9JTkZPICJzcHVyaW91cyBBUElDIGludGVycnVwdCBvbiBDUFUjJWQsICIKIAkgICAgICAgInNob3VsZCBuZXZlciBoYXBwZW4uXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9zcHVyaW91c19jb3VudCsrOworI2VuZGlmCiAJaXJxX2V4aXQoKTsKIH0KIApAQCAtMTM3Miw4ICsxNzExLDExIEBACiAgKi8KIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIHYsIHYxOworCXUzMiB2LCB2MTsKIAorI2lmZGVmIENPTkZJR19YODZfNjQKKwlleGl0X2lkbGUoKTsKKyNlbmRpZgogCWlycV9lbnRlcigpOwogCS8qIEZpcnN0IHRpY2tsZSB0aGUgaGFyZHdhcmUsIG9ubHkgdGhlbiByZXBvcnQgd2hhdCB3ZW50IG9uLiAtLSBSRVcgKi8KIAl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKQEAgLTEzOTIsNyArMTczNCw3IEBACiAJICAgNjogUmVjZWl2ZWQgaWxsZWdhbCB2ZWN0b3IKIAkgICA3OiBJbGxlZ2FsIHJlZ2lzdGVyIGFkZHJlc3MKIAkqLwotCXByaW50ayhLRVJOX0RFQlVHICJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJseCglMDJseClcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIkFQSUMgZXJyb3Igb24gQ1BVJWQ6ICUwMngoJTAyeClcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKIAlpcnFfZXhpdCgpOwogfQpAQCAtMTU2NSw2ICsxOTA3LDEzIEBACiAJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfYXBpY19pZCgpOworfQorI2VuZGlmCisKIC8qCiAgKiBQb3dlciBtYW5hZ2VtZW50CiAgKi8KQEAgLTE2NDAsNyArMTk4OSw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CisjaWZkZWYgSEFWRV9YMkFQSUMKIAlpZiAoeDJhcGljKQogCQllbmFibGVfeDJhcGljKCk7CiAJZWxzZQpAQCAtMTcwMiw3ICsyMDUxLDcgQEAKIAkuY2xzCT0gJmxhcGljX3N5c2NsYXNzLAogfTsKIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGFwaWNfcG1fYWN0aXZhdGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpCiB7CiAJYXBpY19wbV9zdGF0ZS5hY3RpdmUgPSAxOwogfQpAQCAtMTcyOCwxNiArMjA3Nyw4NyBAQAogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogYXBpY19pc19jbHVzdGVyZWRfYm94KCkgLS0gQ2hlY2sgaWYgd2UgY2FuIGV4cGVjdCBnb29kIFRTQworICoKKyAqIFRodXMgZmFyLCB0aGUgbWFqb3IgdXNlciBvZiB0aGlzIGlzIElCTSdzIFN1bW1pdDIgc2VyaWVzOgorICoKKyAqIENsdXN0ZXJlZCBib3hlcyBtYXkgaGF2ZSB1bnN5bmNlZCBUU0MgcHJvYmxlbXMgaWYgdGhleSBhcmUKKyAqIG11bHRpLWNoYXNzaXMuIFVzZSBhdmFpbGFibGUgZGF0YSB0byB0YWtlIGEgZ29vZCBndWVzcy4KKyAqIElmIGluIGRvdWJ0LCBnbyBIUEVULgorICovCitfX2NwdWluaXQgaW50IGFwaWNfaXNfY2x1c3RlcmVkX2JveCh2b2lkKQoreworCWludCBpLCBjbHVzdGVycywgemVyb3M7CisJdW5zaWduZWQgaWQ7CisJdTE2ICpiaW9zX2NwdV9hcGljaWQ7CisJREVDTEFSRV9CSVRNQVAoY2x1c3Rlcm1hcCwgTlVNX0FQSUNfQ0xVU1RFUlMpOworCisJLyoKKwkgKiB0aGVyZSBpcyBub3QgdGhpcyBraW5kIG9mIGJveCB3aXRoIEFNRCBDUFUgeWV0LgorCSAqIFNvbWUgQU1EIGJveCB3aXRoIHF1YWRjb3JlIGNwdSBhbmQgOCBzb2NrZXRzIGFwaWNpZAorCSAqIHdpbGwgYmUgWzQsIDB4MjNdIG9yIFs4LCAweDI3XSBjb3VsZCBiZSB0aG91Z2h0IHRvCisJICogdnNtcCBib3ggc3RpbGwgbmVlZCBjaGVja2luZy4uLgorCSAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAhaXNfdnNtcF9ib3goKSkKKwkJcmV0dXJuIDA7CisKKwliaW9zX2NwdV9hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKTsKKwliaXRtYXBfemVybyhjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCisJCWlmIChiaW9zX2NwdV9hcGljaWQpIHsKKwkJCWlkID0gYmlvc19jcHVfYXBpY2lkW2ldOworCQl9CisJCWVsc2UgaWYgKGkgPCBucl9jcHVfaWRzKSB7CisJCQlpZiAoY3B1X3ByZXNlbnQoaSkpCisJCQkJaWQgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGkpOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UKKwkJCWJyZWFrOworCisJCWlmIChpZCAhPSBCQURfQVBJQ0lEKQorCQkJX19zZXRfYml0KEFQSUNfQ0xVU1RFUklEKGlkKSwgY2x1c3Rlcm1hcCk7CisJfQorCisJLyogUHJvYmxlbTogIFBhcnRpYWxseSBwb3B1bGF0ZWQgY2hhc3NpcyBtYXkgbm90IGhhdmUgQ1BVcyBpbiBzb21lIG9mCisJICogdGhlIEFQSUMgY2x1c3RlcnMgdGhleSBoYXZlIGJlZW4gYWxsb2NhdGVkLiAgT25seSBwcmVzZW50IENQVXMgaGF2ZQorCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgZW50cmllcywgdGh1cyBjYXVzaW5nIHplcm9lcyBpbiB0aGUgYml0bWFwLgorCSAqIFNpbmNlIGNsdXN0ZXJzIGFyZSBhbGxvY2F0ZWQgc2VxdWVudGlhbGx5LCBjb3VudCB6ZXJvcyBvbmx5IGlmCisJICogdGhleSBhcmUgYm91bmRlZCBieSBvbmVzLgorCSAqLworCWNsdXN0ZXJzID0gMDsKKwl6ZXJvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTV9BUElDX0NMVVNURVJTOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIGNsdXN0ZXJtYXApKSB7CisJCQljbHVzdGVycyArPSAxICsgemVyb3M7CisJCQl6ZXJvcyA9IDA7CisJCX0gZWxzZQorCQkJKyt6ZXJvczsKKwl9CisKKwkvKiBTY2FsZU1QIHZTTVBvd2VyZWQgYm94ZXMgaGF2ZSBvbmUgY2x1c3RlciBwZXIgYm9hcmQgYW5kIFRTQ3MgYXJlCisJICogbm90IGd1YXJhbnRlZWQgdG8gYmUgc3luY2VkIGJldHdlZW4gYm9hcmRzCisJICovCisJaWYgKGlzX3ZzbXBfYm94KCkgJiYgY2x1c3RlcnMgPiAxKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogSWYgY2x1c3RlcnMgPiAyLCB0aGVuIHNob3VsZCBiZSBtdWx0aS1jaGFzc2lzLgorCSAqIE1heSBoYXZlIHRvIHJldmlzaXQgdGhpcyB3aGVuIG11bHRpLWNvcmUgKyBoeXBlcnRocmVhZGVkIENQVXMgY29tZQorCSAqIG91dCwgYnV0IEFGQUlLIHRoaXMgd2lsbCB3b3JrIGV2ZW4gZm9yIHRoZW0uCisJICovCisJcmV0dXJuIChjbHVzdGVycyA+IDIpOworfQorI2VuZGlmCisKIC8qCiAgKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljKGNoYXIgKmFyZykKLXsKLQlmb3JjZV9lbmFibGVfbG9jYWxfYXBpYyA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibGFwaWMiLCBwYXJzZV9sYXBpYyk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVhcGljKGNoYXIgKmFyZykKIHsKIAlkaXNhYmxlX2FwaWMgPSAxOwpAQCAtMTc3OSw3ICsyMTk5LDYgQEAKIAlpZiAoIWFyZykgIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCXNraXBfaW9hcGljX3NldHVwID0gMDsKLQkJaW9hcGljX2ZvcmNlID0gMTsKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY182NC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkZGI2OWEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NDggKzAsMCBAQAotLyoKLSAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCi0gKgotICoJKGMpIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkuCi0gKglNYWNpZWogVy4gUm96eWNraQk6CVZhcmlvdXMgdXBkYXRlcyBhbmQgZml4ZXMuCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBvd2VyIE1hbmFnZW1lbnQgZm9yIFVQLUFQSUMuCi0gKglQYXZlbCBNYWNoZWsgYW5kCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vaHBldC5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KLQotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0KLS8qIERpc2FibGUgbG9jYWwgQVBJQyB0aW1lciBmcm9tIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUgb3IgdmlhIGRtaSBxdWlyayAqLwotc3RhdGljIGludCBkaXNhYmxlX2FwaWNfdGltZXIgX19jcHVpbml0ZGF0YTsKLXN0YXRpYyBpbnQgYXBpY19jYWxpYnJhdGVfcG10bXIgX19pbml0ZGF0YTsKLWludCBkaXNhYmxlX2FwaWM7Ci1pbnQgZGlzYWJsZV94MmFwaWM7Ci1pbnQgeDJhcGljOwotCi0vKiB4MmFwaWMgZW5hYmxlZCBiZWZvcmUgT1MgaGFuZG92ZXIgKi8KLWludCB4MmFwaWNfcHJlZW5hYmxlZDsKLQotLyogTG9jYWwgQVBJQyB0aW1lciB3b3JrcyBpbiBDMiAqLwotaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7Ci1FWFBPUlRfU1lNQk9MX0dQTChsb2NhbF9hcGljX3RpbWVyX2MyX29rKTsKLQotLyoKLSAqIERlYnVnIGxldmVsLCBleHBvcnRlZCBmb3IgaW9fYXBpYy5jCi0gKi8KLXVuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKLQotLyogSGF2ZSB3ZSBmb3VuZCBhbiBNUCB0YWJsZSAqLwotaW50IHNtcF9mb3VuZF9jb25maWc7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGFwaWNfcmVzb3VyY2UgPSB7Ci0JLm5hbWUgPSAiTG9jYWwgQVBJQyIsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1ksCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGlicmF0aW9uX3Jlc3VsdDsKLQotc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCi0JCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7Ci1zdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpOwotCi0vKgotICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIHVzZWQgZm9yIGFueSBmdW5jdGlvbiB3aGljaCBpcyBDUFUgbG9jYWwuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGxhcGljX2Nsb2NrZXZlbnQgPSB7Ci0JLm5hbWUJCT0gImxhcGljIiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QKLQkJCXwgQ0xPQ0tfRVZUX0ZFQVRfQzNTVE9QIHwgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVksCi0JLnNoaWZ0CQk9IDMyLAotCS5zZXRfbW9kZQk9IGxhcGljX3RpbWVyX3NldHVwLAotCS5zZXRfbmV4dF9ldmVudAk9IGxhcGljX25leHRfZXZlbnQsCi0JLmJyb2FkY2FzdAk9IGxhcGljX3RpbWVyX2Jyb2FkY2FzdCwKLQkucmF0aW5nCQk9IDEwMCwKLQkuaXJxCQk9IC0xLAotfTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBsYXBpY19ldmVudHMpOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcGljX3BoeXM7Ci0KLXVuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKLQotLyoKLSAqIEdldCB0aGUgTEFQSUMgdmVyc2lvbgotICovCi1zdGF0aWMgaW5saW5lIGludCBsYXBpY19nZXRfdmVyc2lvbih2b2lkKQotewotCXJldHVybiBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotfQotCi0vKgotICogQ2hlY2ssIGlmIHRoZSBBUElDIGlzIGludGVncmF0ZWQgb3IgYSBzZXBhcmF0ZSBjaGlwCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhcGljX2lzX2ludGVncmF0ZWQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmV0dXJuIDE7Ci0jZWxzZQotCXJldHVybiBBUElDX0lOVEVHUkFURUQobGFwaWNfZ2V0X3ZlcnNpb24oKSk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIENoZWNrLCB3aGV0aGVyIHRoaXMgaXMgYSBtb2Rlcm4gb3IgYSBmaXJzdCBnZW5lcmF0aW9uIEFQSUMKLSAqLwotc3RhdGljIGludCBtb2Rlcm5fYXBpYyh2b2lkKQotewotCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLwotCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLQkgICAgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gbGFwaWNfZ2V0X3ZlcnNpb24oKSA+PSAweDE0OwotfQotCi0vKgotICogUGFyYXZpcnQga2VybmVscyBhbHNvIG1pZ2h0IGJlIHVzaW5nIHRoZXNlIGJlbG93IG9wcy4gU28gd2Ugc3RpbGwKLSAqIHVzZSBnZW5lcmljIGFwaWNfcmVhZCgpL2FwaWNfd3JpdGUoKSwgd2hpY2ggbWlnaHQgYmUgcG9pbnRpbmcgdG8gZGlmZmVyZW50Ci0gKiBvcHMgaW4gUEFSQVZJUlQgY2FzZS4KLSAqLwotdm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0Jd2hpbGUgKGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZKQotCQljcHVfcmVsYXgoKTsKLX0KLQotdTMyIHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCXUzMiBzZW5kX3N0YXR1czsKLQlpbnQgdGltZW91dDsKLQotCXRpbWVvdXQgPSAwOwotCWRvIHsKLQkJc2VuZF9zdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWTsKLQkJaWYgKCFzZW5kX3N0YXR1cykKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTAwKTsKLQl9IHdoaWxlICh0aW1lb3V0KysgPCAxMDAwKTsKLQotCXJldHVybiBzZW5kX3N0YXR1czsKLX0KLQotdm9pZCB4YXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQotewotCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGlkKSk7Ci0JYXBpY193cml0ZShBUElDX0lDUiwgbG93KTsKLX0KLQotdTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpCi17Ci0JdTMyIGljcjEsIGljcjI7Ci0KLQlpY3IyID0gYXBpY19yZWFkKEFQSUNfSUNSMik7Ci0JaWNyMSA9IGFwaWNfcmVhZChBUElDX0lDUik7Ci0KLQlyZXR1cm4gaWNyMSB8ICgodTY0KWljcjIgPDwgMzIpOwotfQotCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIHhhcGljX29wcyA9IHsKLQkucmVhZCA9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAotCS53cml0ZSA9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKLQkuaWNyX3JlYWQgPSB4YXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0geGFwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0geGFwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94YXBpY193YWl0X2ljcl9pZGxlLAotfTsKLQotc3RydWN0IGFwaWNfb3BzIF9fcmVhZF9tb3N0bHkgKmFwaWNfb3BzID0gJnhhcGljX29wczsKLUVYUE9SVF9TWU1CT0xfR1BMKGFwaWNfb3BzKTsKLQotc3RhdGljIHZvaWQgeDJhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQkvKiBubyBuZWVkIHRvIHdhaXQgZm9yIGljciBpZGxlIGluIHgyYXBpYyAqLwotCXJldHVybjsKLX0KLQotc3RhdGljIHUzMiBzYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB4MmFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKLXsKLQl3cm1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgKChfX3U2NCkgaWQpIDw8IDMyIHwgbG93KTsKLX0KLQotdTY0IHgyYXBpY19pY3JfcmVhZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JcmRtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksIHZhbCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBhcGljX29wcyB4MmFwaWNfb3BzID0gewotCS5yZWFkID0gbmF0aXZlX2FwaWNfbXNyX3JlYWQsCi0JLndyaXRlID0gbmF0aXZlX2FwaWNfbXNyX3dyaXRlLAotCS5pY3JfcmVhZCA9IHgyYXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0geDJhcGljX2ljcl93cml0ZSwKLQkud2FpdF9pY3JfaWRsZSA9IHgyYXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSBzYWZlX3gyYXBpY193YWl0X2ljcl9pZGxlLAotfTsKLQotLyoqCi0gKiBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCAtIGVuYWJsZSBOTUkgdGhyb3VnaCBsb2NhbCB2ZWN0b3IgdGFibGUgMAotICovCi12b2lkIF9fY3B1aW5pdCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JLyogdW5tYXNrIGFuZCBzZXQgdG8gTk1JICovCi0JdiA9IEFQSUNfRE1fTk1JOwotCi0JLyogTGV2ZWwgdHJpZ2dlcmVkIGZvciA4MjQ4OURYICgzMmJpdCBtb2RlKSAqLwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQotCQl2IHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdik7Ci19Ci0KLS8qKgotICogbGFwaWNfZ2V0X21heGx2dCAtIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbG9jYWwgdmVjdG9yIHRhYmxlIGVudHJpZXMKLSAqLwotaW50IGxhcGljX2dldF9tYXhsdnQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCS8qCi0JICogLSB3ZSBhbHdheXMgaGF2ZSBBUElDIGludGVncmF0ZWQgb24gNjRiaXQgbW9kZQotCSAqIC0gODI0ODlEWHMgZG8gbm90IHJlcG9ydCAjIG9mIExWVCBlbnRyaWVzCi0JICovCi0JcmV0dXJuIEFQSUNfSU5URUdSQVRFRChHRVRfQVBJQ19WRVJTSU9OKHYpKSA/IEdFVF9BUElDX01BWExWVCh2KSA6IDI7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyCi0gKi8KLQotLyogQ2xvY2sgZGl2aXNvciAqLwotI2lmZGVmIENPTkZHX1g4Nl82NAotI2RlZmluZSBBUElDX0RJVklTT1IgMQotI2Vsc2UKLSNkZWZpbmUgQVBJQ19ESVZJU09SIDE2Ci0jZW5kaWYKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciwgd2l0aCBhIHRpbWVvdXQgb2YKLSAqICdjbG9ja3MnIEFQSUMgYnVzIGNsb2NrLiBEdXJpbmcgY2FsaWJyYXRpb24gd2UgYWN0dWFsbHkgY2FsbAotICogdGhpcyBmdW5jdGlvbiB0d2ljZSBvbiB0aGUgYm9vdCBDUFUsIG9uY2Ugd2l0aCBhIGJvZ3VzIHRpbWVvdXQKLSAqIHZhbHVlLCBzZWNvbmQgdGltZSBmb3IgcmVhbC4gVGhlIG90aGVyIChub25jYWxpYnJhdGluZykgQ1BVcwotICogY2FsbCB0aGlzIGZ1bmN0aW9uIG9ubHkgb25jZSwgd2l0aCB0aGUgcmVhbCwgY2FsaWJyYXRlZCB2YWx1ZS4KLSAqCi0gKiBXZSBkbyByZWFkcyBiZWZvcmUgd3JpdGVzIGV2ZW4gaWYgdW5uZWNlc3NhcnksIHRvIGdldCBhcm91bmQgdGhlCi0gKiBQNSBBUElDIGRvdWJsZSB3cml0ZSBidWcuCi0gKi8KLXN0YXRpYyB2b2lkIF9fc2V0dXBfQVBJQ19MVlRUKHVuc2lnbmVkIGludCBjbG9ja3MsIGludCBvbmVzaG90LCBpbnQgaXJxZW4pCi17Ci0JdW5zaWduZWQgaW50IGx2dHRfdmFsdWUsIHRtcF92YWx1ZTsKLQotCWx2dHRfdmFsdWUgPSBMT0NBTF9USU1FUl9WRUNUT1I7Ci0JaWYgKCFvbmVzaG90KQotCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX1RJTUVSX1BFUklPRElDOwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQotCQlsdnR0X3ZhbHVlIHw9IFNFVF9BUElDX1RJTUVSX0JBU0UoQVBJQ19USU1FUl9CQVNFX0RJVik7Ci0KLQlpZiAoIWlycWVuKQotCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX01BU0tFRDsKLQotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBsdnR0X3ZhbHVlKTsKLQotCS8qCi0JICogRGl2aWRlIFBJQ0xLIGJ5IDE2Ci0JICovCi0JdG1wX3ZhbHVlID0gYXBpY19yZWFkKEFQSUNfVERDUik7Ci0JYXBpY193cml0ZShBUElDX1REQ1IsCi0JCSh0bXBfdmFsdWUgJiB+KEFQSUNfVERSX0RJVl8xIHwgQVBJQ19URFJfRElWX1RNQkFTRSkpIHwKLQkJQVBJQ19URFJfRElWXzE2KTsKLQotCWlmICghb25lc2hvdCkKLQkJYXBpY193cml0ZShBUElDX1RNSUNULCBjbG9ja3MgLyBBUElDX0RJVklTT1IpOwotfQotCi0vKgotICogU2V0dXAgZXh0ZW5kZWQgTFZULCBBTUQgc3BlY2lmaWMgKEs4LCBmYW1pbHkgMTBoKQotICoKLSAqIFZlY3RvciBtYXBwaW5ncyBhcmUgaGFyZCBjb2RlZC4gT24gSzggb25seSBvZmZzZXQgMCAoQVBJQzUwMCkgYW5kCi0gKiBNQ0UgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkLiBUaHVzIE1DRSBvZmZzZXQgbXVzdCBiZSBzZXQgdG8gMC4KLSAqCi0gKiBJZiBtYXNrPTEsIHRoZSBMVlQgZW50cnkgZG9lcyBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyB3aGlsZSBtYXNrPTAKLSAqIGVuYWJsZXMgdGhlIHZlY3Rvci4gU2VlIGFsc28gdGhlIEJLREdzLgotICovCi0KLSNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfTUNFIDAKLSNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfSUJTIDEKLQotc3RhdGljIHZvaWQgc2V0dXBfQVBJQ19laWx2dCh1OCBsdnRfb2ZmLCB1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnID0gKGx2dF9vZmYgPDwgNCkgKyBBUElDX0VJTFZUMDsKLQl1bnNpZ25lZCBpbnQgIHYgICA9IChtYXNrIDw8IDE2KSB8IChtc2dfdHlwZSA8PCA4KSB8IHZlY3RvcjsKLQotCWFwaWNfd3JpdGUocmVnLCB2KTsKLX0KLQotdTggc2V0dXBfQVBJQ19laWx2dF9tY2UodTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX01DRSwgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7Ci0JcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX01DRTsKLX0KLQotdTggc2V0dXBfQVBJQ19laWx2dF9pYnModTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX0lCUywgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7Ci0JcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHNldHVwX0FQSUNfZWlsdnRfaWJzKTsKLQotLyoKLSAqIFByb2dyYW0gdGhlIG5leHQgZXZlbnQsIHJlbGF0aXZlIHRvIG5vdwotICovCi1zdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JYXBpY193cml0ZShBUElDX1RNSUNULCBkZWx0YSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgbGFwaWMgdGltZXIgaW4gcGVyaW9kaWMgb3Igb25lc2hvdCBtb2RlCi0gKi8KLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKiBMYXBpYyB1c2VkIGFzIGR1bW15IGZvciBicm9hZGNhc3QgPyAqLwotCWlmIChldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQlfX3NldHVwX0FQSUNfTFZUVChjYWxpYnJhdGlvbl9yZXN1bHQsCi0JCQkJICBtb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCQl2IHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdik7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgotCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KLQkJYnJlYWs7Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lciBicm9hZGNhc3QgZnVuY3Rpb24KLSAqLwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlzZW5kX0lQSV9tYXNrKG1hc2ssIExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyIGZvciB0aGlzIENQVS4gQ29weSB0aGUgaW5pdGlsaXplZCB2YWx1ZXMKLSAqIG9mIHRoZSBib290IENQVSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGluIHRoZSBmcmFtZXdvcmsuCi0gKi8KLXN0YXRpYyB2b2lkIHNldHVwX0FQSUNfdGltZXIodm9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gJl9fZ2V0X2NwdV92YXIobGFwaWNfZXZlbnRzKTsKLQotCW1lbWNweShsZXZ0LCAmbGFwaWNfY2xvY2tldmVudCwgc2l6ZW9mKCpsZXZ0KSk7Ci0JbGV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UobGV2dCk7Ci19Ci0KLS8qCi0gKiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGNhbGlicmF0ZSBBUElDIGJ1cyBjbG9ja3MgdG8gdGhlIGV4dGVybmFsCi0gKiB0aW1lci4gVW5mb3J0dW5hdGVseSB3ZSBjYW5ub3QgdXNlIGppZmZpZXMgYW5kIHRoZSB0aW1lciBpcnEKLSAqIHRvIGNhbGlicmF0ZSwgc2luY2Ugc29tZSBsYXRlciBib290dXAgY29kZSBkZXBlbmRzIG9uIGdldHRpbmcKLSAqIHRoZSBmaXJzdCBpcnE/IFVnaC4KLSAqCi0gKiBXZSB3YW50IHRvIGRvIHRoZSBjYWxpYnJhdGlvbiBvbmx5IG9uY2Ugc2luY2Ugd2UKLSAqIHdhbnQgdG8gaGF2ZSBsb2NhbCB0aW1lciBpcnFzIHN5bmNyb24uIENQVXMgY29ubmVjdGVkCi0gKiBieSB0aGUgc2FtZSBBUElDIGJ1cyBoYXZlIHRoZSB2ZXJ5IHNhbWUgYnVzIGZyZXF1ZW5jeS4KLSAqIEFuZCB3ZSB3YW50IHRvIGhhdmUgaXJxcyBvZmYgYW55d2F5cywgbm8gYWNjaWRlbnRhbAotICogQVBJQyBpcnEgdGhhdCB3YXkuCi0gKi8KLQotI2RlZmluZSBUSUNLX0NPVU5UIDEwMDAwMDAwMAotCi1zdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGFwaWMsIGFwaWNfc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyB0c2MsIHRzY19zdGFydDsKLQlpbnQgcmVzdWx0OwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCS8qCi0JICogUHV0IHdoYXRldmVyIGFyYml0cmFyeSAoYnV0IGxvbmcgZW5vdWdoKSB0aW1lb3V0Ci0JICogdmFsdWUgaW50byB0aGUgQVBJQyBjbG9jaywgd2UganVzdCB3YW50IHRvIGdldCB0aGUKLQkgKiBjb3VudGVyIHJ1bm5pbmcgZm9yIGNhbGlicmF0aW9uLgotCSAqCi0JICogTm8gaW50ZXJydXB0IGVuYWJsZSAhCi0JICovCi0JX19zZXR1cF9BUElDX0xWVFQoMjUwMDAwMDAwLCAwLCAwKTsKLQotCWFwaWNfc3RhcnQgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9QTV9USU1FUgotCWlmIChhcGljX2NhbGlicmF0ZV9wbXRtciAmJiBwbXRtcl9pb3BvcnQpIHsKLQkJcG10aW1lcl93YWl0KDUwMDApOyAgLyogNW1zIHdhaXQgKi8KLQkJYXBpYyA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQkJcmVzdWx0ID0gKGFwaWNfc3RhcnQgLSBhcGljKSAqIDEwMDBMIC8gNTsKLQl9IGVsc2UKLSNlbmRpZgotCXsKLQkJcmR0c2NsbCh0c2Nfc3RhcnQpOwotCi0JCWRvIHsKLQkJCWFwaWMgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0JCQlyZHRzY2xsKHRzYyk7Ci0JCX0gd2hpbGUgKCh0c2MgLSB0c2Nfc3RhcnQpIDwgVElDS19DT1VOVCAmJgotCQkJCShhcGljX3N0YXJ0IC0gYXBpYykgPCBUSUNLX0NPVU5UKTsKLQotCQlyZXN1bHQgPSAoYXBpY19zdGFydCAtIGFwaWMpICogMTAwMEwgKiB0c2Nfa2h6IC8KLQkJCQkJKHRzYyAtIHRzY19zdGFydCk7Ci0JfQotCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIkFQSUMgdGltZXIgY2FsaWJyYXRpb24gcmVzdWx0ICVkXG4iLCByZXN1bHQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRGV0ZWN0ZWQgJWQuJTAzZCBNSHogQVBJQyB0aW1lci5cbiIsCi0JCXJlc3VsdCAvIDEwMDAgLyAxMDAwLCByZXN1bHQgLyAxMDAwICUgMTAwMCk7Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLwotCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhyZXN1bHQsIE5TRUNfUEVSX1NFQywKLQkJCQkgICAgICAgbGFwaWNfY2xvY2tldmVudC5zaGlmdCk7Ci0JbGFwaWNfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGLCAmbGFwaWNfY2xvY2tldmVudCk7Ci0JbGFwaWNfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJmxhcGljX2Nsb2NrZXZlbnQpOwotCi0JY2FsaWJyYXRpb25fcmVzdWx0ID0gKHJlc3VsdCAqIEFQSUNfRElWSVNPUikgLyBIWjsKLQotCS8qCi0JICogRG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIEFQSUMgY2FsaWJyYXRpb24gcmVzdWx0Ci0JICovCi0JaWYgKGNhbGlicmF0aW9uX3Jlc3VsdCA8ICgxMDAwMDAwIC8gSFopKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJBUElDIGZyZXF1ZW5jeSB0b28gc2xvdywgZGlzYWJsaW5nIGFwaWMgdGltZXJcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgYm9vdCBBUElDCi0gKgotICogQ2FsaWJyYXRlIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdC4KLSAqLwotdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSBrZXJuZWwKLQkgKiBjb21tYW5kbGluZSBvciBmcm9tIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUuIFJlZ2lzdGVyIHRoZSBsYXBpYwotCSAqIHRpbWVyIGFzIGEgZHVtbXkgY2xvY2sgZXZlbnQgc291cmNlIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUKLQkgKiBicm9hZGNhc3QgbWVjaGFuaXNtIGlzIHVzZWQuIE9uIFVQIHN5c3RlbXMgc2ltcGx5IGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZGlzYWJsZV9hcGljX3RpbWVyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyBBUElDIHRpbWVyXG4iKTsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSB7Ci0JCQlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSAxOwotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJVc2luZyBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdHMuXG4iCi0JCSAgICAiY2FsaWJyYXRpbmcgQVBJQyB0aW1lciAuLi5cbiIpOwotCi0JaWYgKGNhbGlicmF0ZV9BUElDX2Nsb2NrKCkpIHsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiBubWlfd2F0Y2hkb2cgaXMgc2V0IHRvIElPX0FQSUMsIHdlIG5lZWQgdGhlCi0JICogUElUL0hQRVQgZ29pbmcuICBPdGhlcndpc2UgcmVnaXN0ZXIgbGFwaWMgYXMgYSBkdW1teQotCSAqIGRldmljZS4KLQkgKi8KLQlpZiAobm1pX3dhdGNoZG9nICE9IE5NSV9JT19BUElDKQotCQlsYXBpY19jbG9ja2V2ZW50LmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9EVU1NWTsKLQllbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgdGltZXIgcmVnaXN0ZXJlZCBhcyBkdW1teSwiCi0JCQkiIGR1ZSB0byBubWlfd2F0Y2hkb2c9JWQhXG4iLCBubWlfd2F0Y2hkb2cpOwotCi0JLyogU2V0dXAgdGhlIGxhcGljIG9yIHJlcXVlc3QgdGhlIGJyb2FkY2FzdCAqLwotCXNldHVwX0FQSUNfdGltZXIoKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCkKLXsKLQlzZXR1cF9BUElDX3RpbWVyKCk7Ci19Ci0KLS8qCi0gKiBUaGUgZ3V0cyBvZiB0aGUgYXBpYyB0aW1lciBpbnRlcnJ1cHQKLSAqLwotc3RhdGljIHZvaWQgbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZwZXJfY3B1KGxhcGljX2V2ZW50cywgY3B1KTsKLQotCS8qCi0JICogTm9ybWFsbHkgd2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHRpbGwgTEFQSUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnV0Ci0JICogaW4gc29tZSBjYXNlcyBsaWtlIGtkdW1wLCBpdHMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBhIHBlbmRpbmcgTEFQSUMKLQkgKiB0aW1lciBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwncyBjb250ZXh0IGFuZCBpcyBkZWxpdmVyZWQgaW4KLQkgKiBuZXcga2VybmVsIHRoZSBtb21lbnQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KLQkgKgotCSAqIEludGVycnVwdHMgYXJlIGVuYWJsZWQgZWFybHkgYW5kIExBUElDIGlzIHNldHVwIG11Y2ggbGF0ZXIsIGhlbmNlCi0JICogaXRzIHBvc3NpYmxlIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSBldnQtPmV2ZW50X2hhbmRsZXIgaXMgTlVMTC4KLQkgKiBDaGVjayBmb3IgZXZlbnRfaGFuZGxlciBiZWluZyBOVUxMIGFuZCBkaXNjYXJkIHRoZSBpbnRlcnJ1cHQgYXMKLQkgKiBzcHVyaW91cy4KLQkgKi8KLQlpZiAoIWV2dC0+ZXZlbnRfaGFuZGxlcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiU3B1cmlvdXMgTEFQSUMgdGltZXIgaW50ZXJydXB0IG9uIGNwdSAlZFxuIiwgY3B1KTsKLQkJLyogU3dpdGNoIGl0IG9mZiAqLwotCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgZXZ0KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogdGhlIE5NSSBkZWFkbG9jay1kZXRlY3RvciB1c2VzIHRoaXMuCi0JICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWFkZF9wZGEoYXBpY190aW1lcl9pcnFzLCAxKTsKLSNlbHNlCi0JcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5hcGljX3RpbWVyX2lycXMrKzsKLSNlbmRpZgotCi0JZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyIGludGVycnVwdC4gVGhpcyBpcyB0aGUgbW9zdCBuYXR1cmFsIHdheSBmb3IgZG9pbmcKLSAqIGxvY2FsIGludGVycnVwdHMsIGJ1dCBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzIGNhbiBiZSBlbXVsYXRlZCBieQotICogYnJvYWRjYXN0IGludGVycnVwdHMgdG9vLiBbaW4gY2FzZSB0aGUgaHcgZG9lc24ndCBzdXBwb3J0IEFQSUMgdGltZXJzXQotICoKLSAqIFsgaWYgYSBzaW5nbGUtQ1BVIHN5c3RlbSBydW5zIGFuIFNNUCBrZXJuZWwgdGhlbiB3ZSBjYWxsIHRoZSBsb2NhbAotICogICBpbnRlcnJ1cHQgYXMgd2VsbC4gVGh1cyB3ZSBjYW5ub3QgaW5saW5lIHRoZSBsb2NhbCBpcnEgLi4uIF0KLSAqLwotdm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCi0JLyoKLQkgKiBOT1RFISBXZSdkIGJldHRlciBBQ0sgdGhlIGlycSBpbW1lZGlhdGVseSwKLQkgKiBiZWNhdXNlIHRpbWVyIGhhbmRsaW5nIGNhbiBiZSBzbG93LgotCSAqLwotCWFja19BUElDX2lycSgpOwotCS8qCi0JICogdXBkYXRlX3Byb2Nlc3NfdGltZXMoKSBleHBlY3RzIHVzIHRvIGhhdmUgZG9uZSBpcnFfZW50ZXIoKS4KLQkgKiBCZXNpZGVzLCBpZiB3ZSBkb24ndCB0aW1lciBpbnRlcnJ1cHRzIGlnbm9yZSB0aGUgZ2xvYmFsCi0JICogaW50ZXJydXB0IGxvY2ssIHdoaWNoIGlzIHRoZSBXcm9uZ1RoaW5nICh0bSkgdG8gZG8uCi0JICovCi0JZXhpdF9pZGxlKCk7Ci0JaXJxX2VudGVyKCk7Ci0JbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQoKTsKLQlpcnFfZXhpdCgpOwotCi0Jc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKLX0KLQotaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotCi0vKgotICogTG9jYWwgQVBJQyBzdGFydCBhbmQgc2h1dGRvd24KLSAqLwotCi0vKioKLSAqIGNsZWFyX2xvY2FsX0FQSUMgLSBzaHV0ZG93biB0aGUgbG9jYWwgQVBJQwotICoKLSAqIFRoaXMgaXMgY2FsbGVkLCB3aGVuIGEgQ1BVIGlzIGRpc2FibGVkIGFuZCBiZWZvcmUgcmVib290aW5nLCBzbyB0aGUgc3RhdGUgb2YKLSAqIHRoZSBsb2NhbCBBUElDIGhhcyBubyBkYW5nbGluZyBsZWZ0b3ZlcnMuIEFsc28gdXNlZCB0byBjbGVhbm91dCBhbnkgQklPUwotICogbGVmdG92ZXJzIGR1cmluZyBib290LgotICovCi12b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCkKLXsKLQlpbnQgbWF4bHZ0OwotCXUzMiB2OwotCi0JLyogQVBJQyBoYXNuJ3QgYmVlbiBtYXBwZWQgeWV0ICovCi0JaWYgKCFhcGljX3BoeXMpCi0JCXJldHVybjsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQkvKgotCSAqIE1hc2tpbmcgYW4gTFZUIGVudHJ5IGNhbiB0cmlnZ2VyIGEgbG9jYWwgQVBJQyBlcnJvcgotCSAqIGlmIHRoZSB2ZWN0b3IgaXMgemVyby4gTWFzayBMVlRFUlIgZmlyc3QgdG8gcHJldmVudCB0aGlzLgotCSAqLwotCWlmIChtYXhsdnQgPj0gMykgewotCQl2ID0gRVJST1JfQVBJQ19WRUNUT1I7IC8qIGFueSBub24temVybyB2ZWN0b3Igd2lsbCBkbyAqLwotCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0JLyoKLQkgKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIHNldCBtYXNrcyBvbmx5IGZpcnN0IHRvIGRlYXNzZXJ0Ci0JICogYW55IGxldmVsLXRyaWdnZXJlZCBzb3VyY2VzLgotCSAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gNCkgewotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQotCS8qIGxldHMgbm90IHRvdWNoIHRoaXMgaWYgd2UgZGlkbid0IGZyb2IgaXQgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChYODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkgewotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0jZW5kaWYKLQkvKgotCSAqIENsZWFuIEFQSUMgc3RhdGUgZm9yIG90aGVyIE9TczoKLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDMpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfTFZUX01BU0tFRCk7Ci0KLQkvKiBJbnRlZ3JhdGVkIEFQSUMgKCE4MjQ4OURYKSA/ICovCi0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSkgewotCQlpZiAobWF4bHZ0ID4gMykKLQkJCS8qIENsZWFyIEVTUiBkdWUgdG8gUGVudGl1bSBlcnJhdGEgM0FQIGFuZCAxMUFQICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKLQl9Ci19Ci0KLS8qKgotICogZGlzYWJsZV9sb2NhbF9BUElDIC0gY2xlYXIgYW5kIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMKLSAqLwotdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQljbGVhcl9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIERpc2FibGUgQVBJQyAoaW1wbGllcyBjbGVhcmluZyBvZiByZWdpc3RlcnMKLQkgKiBmb3IgODI0ODlEWCEpLgotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFdoZW4gTEFQSUMgd2FzIGRpc2FibGVkIGJ5IHRoZSBCSU9TIGFuZCBlbmFibGVkIGJ5IHRoZSBrZXJuZWwsCi0JICogcmVzdG9yZSB0aGUgZGlzYWJsZWQgc3RhdGUuCi0JICovCi0JaWYgKGVuYWJsZWRfdmlhX2FwaWNiYXNlKSB7Ci0JCXVuc2lnbmVkIGludCBsLCBoOwotCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFOwotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JfQotI2VuZGlmCi19Ci0KLS8qCi0gKiBJZiBMaW51eCBlbmFibGVkIHRoZSBMQVBJQyBhZ2FpbnN0IHRoZSBCSU9TIGRlZmF1bHQgZGlzYWJsZSBpdCBkb3duIGJlZm9yZQotICogcmUtZW50ZXJpbmcgdGhlIEJJT1Mgb24gc2h1dGRvd24uICBPdGhlcndpc2UgdGhlIEJJT1MgbWF5IGdldCBjb25mdXNlZCBhbmQKLSAqIG5vdCBwb3dlci1vZmYuICBBZGRpdGlvbmFsbHkgY2xlYXIgYWxsIExWVCBlbnRyaWVzIGJlZm9yZSBkaXNhYmxlX2xvY2FsX0FQSUMKLSAqIGZvciB0aGUgY2FzZSB3aGVyZSBMaW51eCBkaWRuJ3QgZW5hYmxlIHRoZSBMQVBJQy4KLSAqLwotdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmICghZW5hYmxlZF92aWFfYXBpY2Jhc2UpCi0JCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQllbHNlCi0jZW5kaWYKLQkJZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdG8gdmVyaWZ5IHRoYXQgd2UncmUgbG9va2luZyBhdCBhIHJlYWwgbG9jYWwgQVBJQy4KLSAqIENoZWNrIHRoZXNlIGFnYWluc3QgeW91ciBib2FyZCBpZiB0aGUgQ1BVcyBhcmVuJ3QgZ2V0dGluZwotICogc3RhcnRlZCBmb3Igbm8gYXBwYXJlbnQgcmVhc29uLgotICovCi1pbnQgX19pbml0IHZlcmlmeV9sb2NhbF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHJlZzAsIHJlZzE7Ci0KLQkvKgotCSAqIFRoZSB2ZXJzaW9uIHJlZ2lzdGVyIGlzIHJlYWQtb25seSBpbiBhIHJlYWwgQVBJQy4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBWRVJTSU9OOiAleFxuIiwgcmVnMCk7Ci0JYXBpY193cml0ZShBUElDX0xWUiwgcmVnMCBeIEFQSUNfTFZSX01BU0spOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcxKTsKLQotCS8qCi0JICogVGhlIHR3byB2ZXJzaW9uIHJlYWRzIGFib3ZlIHNob3VsZCBwcmludCB0aGUgc2FtZQotCSAqIG51bWJlcnMuICBJZiB0aGUgc2Vjb25kIG9uZSBpcyBkaWZmZXJlbnQsIHRoZW4gd2UKLQkgKiBwb2tlIGF0IGEgbm9uLUFQSUMuCi0JICovCi0JaWYgKHJlZzEgIT0gcmVnMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSB2ZXJzaW9uIGxvb2tzIHJlYXNvbmFibHkuCi0JICovCi0JcmVnMSA9IEdFVF9BUElDX1ZFUlNJT04ocmVnMCk7Ci0JaWYgKHJlZzEgPT0gMHgwMCB8fCByZWcxID09IDB4ZmYpCi0JCXJldHVybiAwOwotCXJlZzEgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JaWYgKHJlZzEgPCAweDAyIHx8IHJlZzEgPT0gMHhmZikKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoZSBJRCByZWdpc3RlciBpcyByZWFkL3dyaXRlIGluIGEgcmVhbCBBUElDLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgSUQ6ICV4XG4iLCByZWcwKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIHJlZzAgXiBBUElDX0lEX01BU0spOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgSUQ6ICV4XG4iLCByZWcxKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIHJlZzApOwotCWlmIChyZWcxICE9IChyZWcwIF4gQVBJQ19JRF9NQVNLKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoZSBuZXh0IHR3byBhcmUganVzdCB0byBzZWUgaWYgd2UgaGF2ZSBzYW5lIHZhbHVlcy4KLQkgKiBUaGV5J3JlIG9ubHkgcmVhbGx5IHJlbGV2YW50IGlmIHdlJ3JlIGluIFZpcnR1YWwgV2lyZQotCSAqIGNvbXBhdGliaWxpdHkgbW9kZSwgYnV0IG1vc3QgYm94ZXMgYXJlIGFueW1vcmUuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIExWVDA6ICV4XG4iLCByZWcwKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMTogJXhcbiIsIHJlZzEpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qKgotICogc3luY19BcmJfSURzIC0gc3luY2hyb25pemUgQVBJQyBidXMgYXJiaXRyYXRpb24gSURzCi0gKi8KLXZvaWQgX19pbml0IHN5bmNfQXJiX0lEcyh2b2lkKQotewotCS8qCi0JICogVW5zdXBwb3J0ZWQgb24gUDQgLSBzZWUgSW50ZWwgRGV2LiBNYW51YWwgVm9sLiAzLCBDaC4gOC42LjEgQW5kIG5vdAotCSAqIG5lZWRlZCBvbiBBTUQuCi0JICovCi0JaWYgKG1vZGVybl9hcGljKCkgfHwgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGlkbGUuCi0JICovCi0JYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiU3luY2hyb25pemluZyBBcmIgSURzLlxuIik7Ci0JYXBpY193cml0ZShBUElDX0lDUiwgQVBJQ19ERVNUX0FMTElOQyB8Ci0JCQlBUElDX0lOVF9MRVZFTFRSSUcgfCBBUElDX0RNX0lOSVQpOwotfQotCi0vKgotICogQW4gaW5pdGlhbCBzZXR1cCBvZiB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCi0gKi8KLXZvaWQgX19pbml0IGluaXRfYnNwX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQkvKgotCSAqIERvbid0IGRvIHRoZSBzZXR1cCBub3cgaWYgd2UgaGF2ZSBhIFNNUCBCSU9TIGFzIHRoZQotCSAqIHRocm91Z2gtSS9PLUFQSUMgdmlydHVhbCB3aXJlIG1vZGUgbWlnaHQgYmUgYWN0aXZlLgotCSAqLwotCWlmIChzbXBfZm91bmRfY29uZmlnIHx8ICFjcHVfaGFzX2FwaWMpCi0JCXJldHVybjsKLQotCS8qCi0JICogRG8gbm90IHRydXN0IHRoZSBsb2NhbCBBUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cC4KLQkgKi8KLQljbGVhcl9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIEVuYWJsZSBBUElDLgotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKiBUaGlzIGJpdCBpcyByZXNlcnZlZCBvbiBQNC9YZW9uIGFuZCBzaG91bGQgYmUgY2xlYXJlZCAqLwotCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpICYmCi0JICAgIChib290X2NwdV9kYXRhLng4NiA9PSAxNSkpCi0JCXZhbHVlICY9IH5BUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0JZWxzZQotI2VuZGlmCi0JCXZhbHVlIHw9IEFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLQl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JLyoKLQkgKiBTZXQgdXAgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7Ci0JdmFsdWUgPSBBUElDX0RNX05NSTsKLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkJCS8qIDgyNDg5RFggKi8KLQkJdmFsdWUgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbGFwaWNfc2V0dXBfZXNyKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBvbGR2YWx1ZSwgdmFsdWUsIG1heGx2dDsKLQlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpICYmICFlc3JfZGlzYWJsZSkgewotCQlpZiAoZXNyX2Rpc2FibGUpIHsKLQkJCS8qCi0JCQkgKiBTb21ldGhpbmcgdW50cmFjZWFibGUgaXMgY3JlYXRpbmcgYmFkIGludGVycnVwdHMgb24KLQkJCSAqIHNlY29uZGFyeSBxdWFkcyAuLi4gZm9yIHRoZSBtb21lbnQsIGp1c3QgbGVhdmUgdGhlCi0JCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKLQkJCSAqIGVycm9ycyBhbnl3YXkgLSBtYmxpZ2gKLQkJCSAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTGVhdmluZyBFU1IgZGlzYWJsZWQuXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiAhODI0ODlEWCAqLwotCQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JCWlmIChtYXhsdnQgPiAzKQkJLyogRHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLiAqLwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCW9sZHZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQotCQkvKiBlbmFibGVzIHNlbmRpbmcgZXJyb3JzICovCi0JCXZhbHVlID0gRVJST1JfQVBJQ19WRUNUT1I7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHZhbHVlKTsKLQkJLyoKLQkJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCi0JCSAqLwotCQlpZiAobWF4bHZ0ID4gMykKLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVTUiB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgIgotCQkJCSJ2ZWN0b3I6IDB4JTA4bHggIGFmdGVyOiAweCUwOGx4XG4iLAotCQkJCW9sZHZhbHVlLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gRVNSIGZvciA4MjQ4OURYLlxuIik7Ci0JfQotfQotCi0KLS8qKgotICogc2V0dXBfbG9jYWxfQVBJQyAtIHNldHVwIHRoZSBsb2NhbCBBUElDCi0gKi8KLXZvaWQgX19jcHVpbml0IHNldHVwX2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JaW50IGksIGo7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0KLQlCVUlMRF9CVUdfT04oKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgwZikgIT0gMHgwZik7Ci0KLQkvKgotCSAqIERvdWJsZS1jaGVjayB3aGV0aGVyIHRoaXMgQVBJQyBpcyByZWFsbHkgcmVnaXN0ZXJlZC4KLQkgKiBUaGlzIGlzIG1lYW5pbmdsZXNzIGluIGNsdXN0ZXJlZCBhcGljIG1vZGUsIHNvIHdlIHNraXAgaXQuCi0JICovCi0JaWYgKCFhcGljX2lkX3JlZ2lzdGVyZWQoKSkKLQkJQlVHKCk7Ci0KLQkvKgotCSAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwgTERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCi0JICogYW4gQVBJQy4gIFNlZSBlLmcuICJBUC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKLQkgKiBkb2N1bWVudCBudW1iZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgotCSAqLwotCWluaXRfYXBpY19sZHIoKTsKLQotCS8qCi0JICogU2V0IFRhc2sgUHJpb3JpdHkgdG8gJ2FjY2VwdCBhbGwnLiBXZSBuZXZlciBjaGFuZ2UgdGhpcwotCSAqIGxhdGVyIG9uLgotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7Ci0JdmFsdWUgJj0gfkFQSUNfVFBSSV9NQVNLOwotCWFwaWNfd3JpdGUoQVBJQ19UQVNLUFJJLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIEFmdGVyIGEgY3Jhc2gsIHdlIG5vIGxvbmdlciBzZXJ2aWNlIHRoZSBpbnRlcnJ1cHRzIGFuZCBhIHBlbmRpbmcKLQkgKiBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwgbWlnaHQgc3RpbGwgaGF2ZSBJU1IgYml0IHNldC4KLQkgKgotCSAqIE1vc3QgcHJvYmFibHkgYnkgbm93IENQVSBoYXMgc2VydmljZWQgdGhhdCBwZW5kaW5nIGludGVycnVwdCBhbmQKLQkgKiBpdCBtaWdodCBub3QgaGF2ZSBkb25lIHRoZSBhY2tfQVBJQ19pcnEoKSBiZWNhdXNlIGl0IHRob3VnaHQsCi0JICogaW50ZXJydXB0IGNhbWUgZnJvbSBpODI1OSBhcyBFeHRJbnQuIExBUElDIGRpZCBub3QgZ2V0IEVPSSBzbyBpdAotCSAqIGRvZXMgbm90IGNsZWFyIHRoZSBJU1IgYml0IGFuZCBjcHUgdGhpbmtzIGl0IGhhcyBhbHJlYWR5IHNlcml2Y2VkCi0JICogdGhlIGludGVycnVwdC4gSGVuY2UgYSB2ZWN0b3IgbWlnaHQgZ2V0IGxvY2tlZC4gSXQgd2FzIG5vdGljZWQKLQkgKiBmb3IgdGltZXIgaXJxICh2ZWN0b3IgMHgzMSkuIElzc3VlIGFuIGV4dHJhIEVPSSB0byBjbGVhciBJU1IuCi0JICovCi0JZm9yIChpID0gQVBJQ19JU1JfTlIgLSAxOyBpID49IDA7IGktLSkgewotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0lTUiArIGkqMHgxMCk7Ci0JCWZvciAoaiA9IDMxOyBqID49IDA7IGotLSkgewotCQkJaWYgKHZhbHVlICYgKDE8PGopKQotCQkJCWFja19BUElDX2lycSgpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBhcmUgYWxsIHNldCB1cCwgZW5hYmxlIHRoZSBBUElDCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQkvKgotCSAqIEVuYWJsZSBBUElDCi0JICovCi0JdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQotCS8qIFdlIGFsd2F5cyB1c2UgcHJvY2Vzc29yIGZvY3VzICovCi0KLQkvKgotCSAqIFNldCBzcHVyaW91cyBJUlEgdmVjdG9yCi0JICovCi0JdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCS8qCi0JICogU2V0IHVwIExWVDAsIExWVDE6Ci0JICoKLQkgKiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIG9uIHRoZSBCUCdzIExJTlQwLiBUaGlzIGlzIG5vdAotCSAqIHN0cmljdGx5IG5lY2Vzc2FyeSBpbiBwdXJlIHN5bW1ldHJpYy1JTyBtb2RlLCBidXQgc29tZXRpbWVzCi0JICogd2UgZGVsZWdhdGUgaW50ZXJydXB0cyB0byB0aGUgODI1OUEuCi0JICovCi0JLyoKLQkgKiBUT0RPOiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIGZyb20gdGhyb3VnaC1JL08tQVBJQz8gLS1tYWNybwotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCkgJiBBUElDX0xWVF9NQVNLRUQ7Ci0JaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkgJiYgIXZhbHVlKSB7Ci0JCXZhbHVlID0gQVBJQ19ETV9FWFRJTlQ7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImVuYWJsZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKLQkJCSAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCX0gZWxzZSB7Ci0JCXZhbHVlID0gQVBJQ19ETV9FWFRJTlQgfCBBUElDX0xWVF9NQVNLRUQ7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hc2tlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAotCQkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIG9ubHkgdGhlIEJQIHNob3VsZCBzZWUgdGhlIExJTlQxIE5NSSBzaWduYWwsIG9idmlvdXNseS4KLQkgKi8KLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJdmFsdWUgPSBBUElDX0RNX05NSTsKLQllbHNlCi0JCXZhbHVlID0gQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQ7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQotewotCWxhcGljX3NldHVwX2VzcigpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXsKLQkJdW5zaWduZWQgaW50IHZhbHVlOwotCQkvKiBEaXNhYmxlIHRoZSBsb2NhbCBhcGljIHRpbWVyICovCi0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCXZhbHVlIHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdmFsdWUpOwotCX0KLSNlbmRpZgotCi0Jc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7Ci0JYXBpY19wbV9hY3RpdmF0ZSgpOwotfQotCi12b2lkIGNoZWNrX3gyYXBpYyh2b2lkKQotewotCWludCBtc3IsIG1zcjI7Ci0KLQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKLQotCWlmIChtc3IgJiBYMkFQSUNfRU5BQkxFKSB7Ci0JCXByaW50aygieDJhcGljIGVuYWJsZWQgYnkgQklPUywgc3dpdGNoaW5nIHRvIHgyYXBpYyBvcHNcbiIpOwotCQl4MmFwaWNfcHJlZW5hYmxlZCA9IHgyYXBpYyA9IDE7Ci0JCWFwaWNfb3BzID0gJngyYXBpY19vcHM7Ci0JfQotfQotCi12b2lkIGVuYWJsZV94MmFwaWModm9pZCkKLXsKLQlpbnQgbXNyLCBtc3IyOwotCi0JcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7Ci0JaWYgKCEobXNyICYgWDJBUElDX0VOQUJMRSkpIHsKLQkJcHJpbnRrKCJFbmFibGluZyB4MmFwaWNcbiIpOwotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyIHwgWDJBUElDX0VOQUJMRSwgMCk7Ci0JfQotfQotCi12b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghY3B1X2hhc194MmFwaWMpCi0JCXJldHVybjsKLQotCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgZGlzYWJsZV94MmFwaWMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIlNraXBwZWQgZW5hYmxpbmcgeDJhcGljIGFuZCBJbnRlcnJ1cHQtcmVtYXBwaW5nICIKLQkJICAgICAgICJiZWNhdXNlIG9mIG5veDJhcGljXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykKLQkJcGFuaWMoIkJpb3MgYWxyZWFkeSBlbmFibGVkIHgyYXBpYywgY2FuJ3QgZW5mb3JjZSBub3gyYXBpYyIpOwotCi0JaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBza2lwX2lvYXBpY19zZXR1cCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgotCQkgICAgICAgImJlY2F1c2Ugb2Ygc2tpcHBpbmcgaW8tYXBpYyBzZXR1cFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXQgPSBkbWFyX3RhYmxlX2luaXQoKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJkbWFyX3RhYmxlX2luaXQoKSBmYWlsZWQgd2l0aCAlZDpcbiIsIHJldCk7Ci0KLQkJaWYgKHgyYXBpY19wcmVlbmFibGVkKQotCQkJcGFuaWMoIngyYXBpYyBlbmFibGVkIGJ5IGJpb3MuIEJ1dCBJUiBlbmFibGluZyBmYWlsZWQiKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXNrXzgyNTlBKCk7Ci0Jc2F2ZV9tYXNrX0lPX0FQSUNfc2V0dXAoKTsKLQotCXJldCA9IGVuYWJsZV9pbnRyX3JlbWFwcGluZygxKTsKLQotCWlmIChyZXQgJiYgeDJhcGljX3ByZWVuYWJsZWQpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlwYW5pYygieDJhcGljIGVuYWJsZWQgYnkgYmlvcy4gQnV0IElSIGVuYWJsaW5nIGZhaWxlZCIpOwotCX0KLQotCWlmIChyZXQpCi0JCWdvdG8gZW5kOwotCi0JaWYgKCF4MmFwaWMpIHsKLQkJeDJhcGljID0gMTsKLQkJYXBpY19vcHMgPSAmeDJhcGljX29wczsKLQkJZW5hYmxlX3gyYXBpYygpOwotCX0KLWVuZDoKLQlpZiAocmV0KQotCQkvKgotCQkgKiBJUiBlbmFibGluZyBmYWlsZWQKLQkJICovCi0JCXJlc3RvcmVfSU9fQVBJQ19zZXR1cCgpOwotCWVsc2UKLQkJcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyh4MmFwaWNfcHJlZW5hYmxlZCk7Ci0KLQl1bm1hc2tfODI1OUEoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpZiAoIXJldCkgewotCQlpZiAoIXgyYXBpY19wcmVlbmFibGVkKQotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJFbmFibGVkIHgyYXBpYyBhbmQgaW50ZXJydXB0LXJlbWFwcGluZ1xuIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiRW5hYmxlZCBJbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiRmFpbGVkIHRvIGVuYWJsZSBJbnRlcnJ1cHQtcmVtYXBwaW5nIGFuZCB4MmFwaWNcbiIpOwotI2Vsc2UKLQlpZiAoIWNwdV9oYXNfeDJhcGljKQotCQlyZXR1cm47Ci0KLQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBwcmlvciBPUyBoYW5kb3ZlciwiCi0JCSAgICAgICIgZW5hYmxlIENPTkZJR19JTlRSX1JFTUFQIik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJFbmFibGUgQ09ORklHX0lOVFJfUkVNQVAgZm9yIGVuYWJsaW5nIGludHItcmVtYXBwaW5nICIKLQkgICAgICAgIiBhbmQgeDJhcGljXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuOwotfQotCi0vKgotICogRGV0ZWN0IGFuZCBlbmFibGUgbG9jYWwgQVBJQ3Mgb24gbm9uLVNNUCBib2FyZHMuCi0gKiBPcmlnaW5hbCBjb2RlIHdyaXR0ZW4gYnkgS2VpciBGcmFzZXIuCi0gKiBPbiBBTUQ2NCB3ZSB0cnVzdCB0aGUgQklPUyAtIGlmIGl0IHNheXMgbm8gQVBJQyBpdCBpcyBsaWtlbHkKLSAqIG5vdCBjb3JyZWN0bHkgc2V0IHVwICh1c3VhbGx5IHRoZSBBUElDIHRpbWVyIHdvbid0IHdvcmsgZXRjLikKLSAqLwotc3RhdGljIGludCBfX2luaXQgZGV0ZWN0X2luaXRfQVBJQyh2b2lkKQotewotCWlmICghY3B1X2hhc19hcGljKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5vIGxvY2FsIEFQSUMgcHJlc2VudFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQltcF9sYXBpY19hZGRyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSAwOwotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBlYXJseV9pbml0X2xhcGljX21hcHBpbmcodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKLQotCS8qCi0JICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBnbyBvdXQKLQkgKiA6IGl0IG1lYW5zIHRoZXJlIGlzIG5vIG1wYXRhYmxlIGFuZCBNQURUCi0JICovCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnKQotCQlyZXR1cm47Ci0KLQlwaHlzX2FkZHIgPSBtcF9sYXBpY19hZGRyOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIHBoeXNfYWRkcik7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIEFQSUMgdG8gJTE2bHggKCUxNmx4KVxuIiwKLQkJICAgIEFQSUNfQkFTRSwgcGh5c19hZGRyKTsKLQotCS8qCi0JICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQotCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiAob3IgdGhlIE1QIHRhYmxlIGlzIGJyb2tlbikuCi0JICovCi0JYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci19Ci0KLS8qKgotICogaW5pdF9hcGljX21hcHBpbmdzIC0gaW5pdGlhbGl6ZSBBUElDIG1hcHBpbmdzCi0gKi8KLXZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQotewotCWlmICh4MmFwaWMpIHsKLQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gc2V0IHVwIGEgZmFrZSBhbGwKLQkgKiB6ZXJvZXMgcGFnZSB0byBzaW11bGF0ZSB0aGUgbG9jYWwgQVBJQyBhbmQgYW5vdGhlcgotCSAqIG9uZSBmb3IgdGhlIElPLUFQSUMuCi0JICovCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnICYmIGRldGVjdF9pbml0X0FQSUMoKSkgewotCQlhcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotCQlhcGljX3BoeXMgPSBfX3BhKGFwaWNfcGh5cyk7Ci0JfSBlbHNlCi0JCWFwaWNfcGh5cyA9IG1wX2xhcGljX2FkZHI7Ci0KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgYXBpY19waHlzKTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXBwZWQgQVBJQyB0byAlMTZseCAoJTE2bHgpXG4iLAotCQkJCUFQSUNfQkFTRSwgYXBpY19waHlzKTsKLQotCS8qCi0JICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQotCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiAob3IgdGhlIE1QIHRhYmxlIGlzIGJyb2tlbikuCi0JICovCi0JYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKLSAqIGEgVVAga2VybmVsLgotICovCi1pbnQgYXBpY192ZXJzaW9uW01BWF9BUElDU107Ci0KLWludCBfX2luaXQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKQotewotCWlmIChkaXNhYmxlX2FwaWMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXBpYyBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCFjcHVfaGFzX2FwaWMpIHsKLQkJZGlzYWJsZV9hcGljID0gMTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXBpYyBkaXNhYmxlZCBieSBCSU9TXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWVuYWJsZV9JUl94MmFwaWMoKTsKLQlzZXR1cF9hcGljX3JvdXRpbmcoKTsKLQotCXZlcmlmeV9sb2NhbF9BUElDKCk7Ci0KLQljb25uZWN0X2JzcF9BUElDKCk7Ci0KLQlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIFNFVF9BUElDX0lEKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkpOwotCi0Jc2V0dXBfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBOb3cgZW5hYmxlIElPLUFQSUNzLCBhY3R1YWxseSBjYWxsIGNsZWFyX0lPX0FQSUMKLQkgKiBXZSBuZWVkIGNsZWFyX0lPX0FQSUMgYmVmb3JlIGVuYWJsaW5nIHZlY3RvciBvbiBCUAotCSAqLwotCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKLQkJZW5hYmxlX0lPX0FQSUMoKTsKLQotCWlmICghc21wX2ZvdW5kX2NvbmZpZyB8fCBza2lwX2lvYXBpY19zZXR1cCB8fCAhbnJfaW9hcGljcykKLQkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7Ci0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKLQotCWlmIChzbXBfZm91bmRfY29uZmlnICYmICFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQlzZXR1cF9JT19BUElDKCk7Ci0JZWxzZQotCQlucl9pb2FwaWNzID0gMDsKLQlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKLQljaGVja19ubWlfd2F0Y2hkb2coKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgaW50ZXJydXB0cwotICovCi0KLS8qCi0gKiBUaGlzIGludGVycnVwdCBzaG91bGQgX25ldmVyXyBoYXBwZW4gd2l0aCBvdXIgQVBJQy9TTVAgYXJjaGl0ZWN0dXJlCi0gKi8KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JZXhpdF9pZGxlKCk7Ci0JaXJxX2VudGVyKCk7Ci0JLyoKLQkgKiBDaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIHNwdXJpb3VzIGludGVycnVwdCBhbmQgQUNLIGl0Ci0JICogaWYgaXQgaXMgYSB2ZWN0b3JlZCBvbmUuICBKdXN0IGluIGNhc2UuLi4KLQkgKiBTcHVyaW91cyBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgQUNLZWQuCi0JICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0lTUiArICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiB+MHgxZikgPj4gMSkpOwotCWlmICh2ICYgKDEgPDwgKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgxZikpKQotCQlhY2tfQVBJQ19pcnEoKTsKLQotCWFkZF9wZGEoaXJxX3NwdXJpb3VzX2NvdW50LCAxKTsKLQlpcnFfZXhpdCgpOwotfQotCi0vKgotICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKLSAqLwotYXNtbGlua2FnZSB2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdiwgdjE7Ci0KLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQkvKiBGaXJzdCB0aWNrbGUgdGhlIGhhcmR3YXJlLCBvbmx5IHRoZW4gcmVwb3J0IHdoYXQgd2VudCBvbi4gLS0gUkVXICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JdjEgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFja19BUElDX2lycSgpOwotCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOwotCi0JLyogSGVyZSBpcyB3aGF0IHRoZSBBUElDIGVycm9yIGJpdHMgbWVhbjoKLQkgICAwOiBTZW5kIENTIGVycm9yCi0JICAgMTogUmVjZWl2ZSBDUyBlcnJvcgotCSAgIDI6IFNlbmQgYWNjZXB0IGVycm9yCi0JICAgMzogUmVjZWl2ZSBhY2NlcHQgZXJyb3IKLQkgICA0OiBSZXNlcnZlZAotCSAgIDU6IFNlbmQgaWxsZWdhbCB2ZWN0b3IKLQkgICA2OiBSZWNlaXZlZCBpbGxlZ2FsIHZlY3RvcgotCSAgIDc6IElsbGVnYWwgcmVnaXN0ZXIgYWRkcmVzcwotCSovCi0JcHJpbnRrKEtFUk5fREVCVUcgIkFQSUMgZXJyb3Igb24gQ1BVJWQ6ICUwMngoJTAyeClcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKLQlpcnFfZXhpdCgpOwotfQotCi0vKioKLSAqIGNvbm5lY3RfYnNwX0FQSUMgLSBhdHRhY2ggdGhlIEFQSUMgdG8gdGhlIGludGVycnVwdCBzeXN0ZW0KLSAqLwotdm9pZCBfX2luaXQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAocGljX21vZGUpIHsKLQkJLyoKLQkJICogRG8gbm90IHRydXN0IHRoZSBsb2NhbCBBUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cC4KLQkJICovCi0JCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQkJLyoKLQkJICogUElDIG1vZGUsIGVuYWJsZSBBUElDIG1vZGUgaW4gdGhlIElNQ1IsIGkuZS4gIGNvbm5lY3QgQlNQJ3MKLQkJICogbG9jYWwgQVBJQyB0byBJTlQgYW5kIE5NSSBsaW5lcy4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImxlYXZpbmcgUElDIG1vZGUsICIKLQkJCQkiZW5hYmxpbmcgQVBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMSwgMHgyMyk7Ci0JfQotI2VuZGlmCi0JZW5hYmxlX2FwaWNfbW9kZSgpOwotfQotCi0vKioKLSAqIGRpc2Nvbm5lY3RfYnNwX0FQSUMgLSBkZXRhY2ggdGhlIEFQSUMgZnJvbSB0aGUgaW50ZXJydXB0IHN5c3RlbQotICogQHZpcnRfd2lyZV9zZXR1cDoJaW5kaWNhdGVzLCB3aGV0aGVyIHZpcnR1YWwgd2lyZSBtb2RlIGlzIHNlbGVjdGVkCi0gKgotICogVmlydHVhbCB3aXJlIG1vZGUgaXMgbmVjZXNzYXJ5IHRvIGRlbGl2ZXIgbGVnYWN5IGludGVycnVwdHMgZXZlbiB3aGVuIHRoZQotICogQVBJQyBpcyBkaXNhYmxlZC4KLSAqLwotdm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBQdXQgdGhlIGJvYXJkIGJhY2sgaW50byBQSUMgbW9kZSAoaGFzIGFuIGVmZmVjdCBvbmx5IG9uCi0JCSAqIGNlcnRhaW4gb2xkZXIgYm9hcmRzKS4gIE5vdGUgdGhhdCBBUElDIGludGVycnVwdHMsIGluY2x1ZGluZwotCQkgKiBJUElzLCB3b24ndCB3b3JrIGJleW9uZCB0aGlzIHBvaW50ISAgVGhlIG9ubHkgZXhjZXB0aW9uIGFyZQotCQkgKiBJTklUIElQSXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJkaXNhYmxpbmcgQVBJQyBtb2RlLCAiCi0JCQkJImVudGVyaW5nIFBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMCwgMHgyMyk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQotCS8qIEdvIGJhY2sgdG8gVmlydHVhbCBXaXJlIGNvbXBhdGliaWxpdHkgbW9kZSAqLwotCi0JLyogRm9yIHRoZSBzcHVyaW91cyBpbnRlcnJ1cHQgdXNlIHZlY3RvciBGLCBhbmQgZW5hYmxlIGl0ICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCXZhbHVlIHw9IDB4ZjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JaWYgKCF2aXJ0X3dpcmVfc2V0dXApIHsKLQkJLyoKLQkJICogRm9yIExWVDAgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCi0JCSAqIGV4dGVybmFsIGFuZCBlbmFibGVkCi0JCSAqLwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAotCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAotCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQkJdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfRVhUSU5UKTsKLQkJYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIExWVDAgKi8KLQkJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyoKLQkgKiBGb3IgTFZUMSBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKLQkgKiBubWkgYW5kIGVuYWJsZWQKLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7Ci0JdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfTk1JKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotfQotCi12b2lkIF9fY3B1aW5pdCBnZW5lcmljX3Byb2Nlc3Nvcl9pbmZvKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCWludCBjcHU7Ci0JY3B1bWFza190IHRtcF9tYXA7Ci0KLQkvKgotCSAqIFZhbGlkYXRlIHZlcnNpb24KLQkgKi8KLQlpZiAodmVyc2lvbiA9PSAweDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQklPUyBidWcsIEFQSUMgdmVyc2lvbiBpcyAwIGZvciBDUFUjJWQhICIKLQkJCQkiZml4aW5nIHVwIHRvIDB4MTAuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKLQkJCQl2ZXJzaW9uKTsKLQkJdmVyc2lvbiA9IDB4MTA7Ci0JfQotCWFwaWNfdmVyc2lvblthcGljaWRdID0gdmVyc2lvbjsKLQotCWlmIChudW1fcHJvY2Vzc29ycyA+PSBOUl9DUFVTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IE5SX0NQVVMgbGltaXQgb2YgJWkgcmVhY2hlZC4iCi0JCQkiICBQcm9jZXNzb3IgaWdub3JlZC5cbiIsIE5SX0NQVVMpOwotCQlyZXR1cm47Ci0JfQotCi0JbnVtX3Byb2Nlc3NvcnMrKzsKLQljcHVzX2NvbXBsZW1lbnQodG1wX21hcCwgY3B1X3ByZXNlbnRfbWFwKTsKLQljcHUgPSBmaXJzdF9jcHUodG1wX21hcCk7Ci0KLQlwaHlzaWRfc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCWlmIChhcGljaWQgPT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSB7Ci0JCS8qCi0JCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBwcm9jZXNzb3JzIGxpc3RlZAotCQkgKiBpbiBzYW1lIG9yZGVyIGFzIGxvZ2ljYWwgY3B1IG51bWJlcnMuIEhlbmNlIHRoZSBmaXJzdAotCQkgKiBlbnRyeSBpcyBCU1AsIGFuZCBzbyBvbi4KLQkJICovCi0JCWNwdSA9IDA7Ci0JfQotCWlmIChhcGljaWQgPiBtYXhfcGh5c2ljYWxfYXBpY2lkKQotCQltYXhfcGh5c2ljYWxfYXBpY2lkID0gYXBpY2lkOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogV291bGQgYmUgcHJlZmVyYWJsZSB0byBzd2l0Y2ggdG8gYmlnc21wIHdoZW4gQ09ORklHX0hPVFBMVUdfQ1BVPXkKLQkgKiBidXQgd2UgbmVlZCB0byB3b3JrIG90aGVyIGRlcGVuZGVuY2llcyBsaWtlIFNNUF9TVVNQRU5EIGV0YwotCSAqIGJlZm9yZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgc29tZSBjb25mdXNpb24uCi0JICogaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgbnVtX3Byb2Nlc3NvcnMgPiA4KQotCSAqICAgICAgIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgotCSAqLwotCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpIHsKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKLQkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgotCQkJaWYgKCFBUElDX1hBUElDKHZlcnNpb24pKSB7Ci0JCQkJZGVmX3RvX2JpZ3NtcCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCQlkZWZfdG9fYmlnc21wID0gMTsKLQkJfQotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X1NNUCkgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCi0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKSkgewotCQl1MTYgKmNwdV90b19hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCk7Ci0JCXUxNiAqYmlvc19jcHVfYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0KLQkJY3B1X3RvX2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCQliaW9zX2NwdV9hcGljaWRbY3B1XSA9IGFwaWNpZDsKLQl9IGVsc2UgewotCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JfQotI2VuZGlmCi0KLQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7Ci0JY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7Ci19Ci0KLWludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gcmVhZF9hcGljX2lkKCk7Ci19Ci0KLS8qCi0gKiBQb3dlciBtYW5hZ2VtZW50Ci0gKi8KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHN0cnVjdCB7Ci0JLyoKLQkgKiAnYWN0aXZlJyBpcyB0cnVlIGlmIHRoZSBsb2NhbCBBUElDIHdhcyBlbmFibGVkIGJ5IHVzIGFuZAotCSAqIG5vdCB0aGUgQklPUzsgdGhpcyBzaWduaWZpZXMgdGhhdCB3ZSBhcmUgYWxzbyByZXNwb25zaWJsZQotCSAqIGZvciBkaXNhYmxpbmcgaXQgYmVmb3JlIGVudGVyaW5nIGFwbS9hY3BpIHN1c3BlbmQKLQkgKi8KLQlpbnQgYWN0aXZlOwotCS8qIHIvdyBhcGljIGZpZWxkcyAqLwotCXVuc2lnbmVkIGludCBhcGljX2lkOwotCXVuc2lnbmVkIGludCBhcGljX3Rhc2twcmk7Ci0JdW5zaWduZWQgaW50IGFwaWNfbGRyOwotCXVuc2lnbmVkIGludCBhcGljX2RmcjsKLQl1bnNpZ25lZCBpbnQgYXBpY19zcGl2OwotCXVuc2lnbmVkIGludCBhcGljX2x2dHQ7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0cGM7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0MDsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnQxOwotCXVuc2lnbmVkIGludCBhcGljX2x2dGVycjsKLQl1bnNpZ25lZCBpbnQgYXBpY190bWljdDsKLQl1bnNpZ25lZCBpbnQgYXBpY190ZGNyOwotCXVuc2lnbmVkIGludCBhcGljX3RobXI7Ci19IGFwaWNfcG1fc3RhdGU7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbWF4bHZ0OwotCi0JaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQlhcGljX3BtX3N0YXRlLmFwaWNfaWQgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbGRyID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfZGZyID0gYXBpY19yZWFkKEFQSUNfREZSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfc3BpdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnR0ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dDAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190bWljdCA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdGRjciA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkKLQkJYXBpY19wbV9zdGF0ZS5hcGljX3RobXIgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLSNlbmRpZgotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRpc2FibGVfbG9jYWxfQVBJQygpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgbCwgaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXhsdnQ7Ci0KLQlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAoeDJhcGljKQotCQllbmFibGVfeDJhcGljKCk7Ci0JZWxzZQotI2VuZGlmCi0JewotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIEFQSUNCQVNFIHBvaW50cyB0byB0aGUgcmlnaHQgYWRkcmVzcwotCQkgKgotCQkgKiBGSVhNRSEgVGhpcyB3aWxsIGJlIHdyb25nIGlmIHdlIGV2ZXIgc3VwcG9ydCBzdXNwZW5kIG9uCi0JCSAqIFNNUCEgV2UnbGwgbmVlZCB0byBkbyB0aGlzIGFzIHBhcnQgb2YgdGhlIENQVSByZXN0b3JlIQotCQkgKi8KLQkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IG1wX2xhcGljX2FkZHI7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQl9Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBFUlJPUl9BUElDX1ZFQ1RPUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZShBUElDX0lELCBhcGljX3BtX3N0YXRlLmFwaWNfaWQpOwotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIGFwaWNfcG1fc3RhdGUuYXBpY19kZnIpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIGFwaWNfcG1fc3RhdGUuYXBpY19sZHIpOwotCWFwaWNfd3JpdGUoQVBJQ19UQVNLUFJJLCBhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSk7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIGFwaWNfcG1fc3RhdGUuYXBpY19zcGl2KTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgYXBpY19wbV9zdGF0ZS5hcGljX3RobXIpOwotI2VuZGlmCi0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyk7Ci0JYXBpY193cml0ZShBUElDX0xWVFQsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnR0KTsKLQlhcGljX3dyaXRlKEFQSUNfVERDUiwgYXBpY19wbV9zdGF0ZS5hcGljX3RkY3IpOwotCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0KTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCWFwaWNfcmVhZChBUElDX0VTUik7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgZGV2aWNlIGhhcyBubyBzaHV0ZG93biBtZXRob2QgLSBmdWxseSBmdW5jdGlvbmluZyBsb2NhbCBBUElDcwotICogYXJlIG5lZWRlZCBvbiBldmVyeSBDUFUgdXAgdW50aWwgbWFjaGluZV9oYWx0L3Jlc3RhcnQvcG93ZXJvZmYuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGFwaWNfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImxhcGljIiwKLQkucmVzdW1lCQk9IGxhcGljX3Jlc3VtZSwKLQkuc3VzcGVuZAk9IGxhcGljX3N1c3BlbmQsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX2xhcGljID0gewotCS5pZAk9IDAsCi0JLmNscwk9ICZsYXBpY19zeXNjbGFzcywKLX07Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpCi17Ci0JYXBpY19wbV9zdGF0ZS5hY3RpdmUgPSAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xhcGljX3N5c2ZzKHZvaWQpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFjcHVfaGFzX2FwaWMpCi0JCXJldHVybiAwOwotCS8qIFhYWDogcmVtb3ZlIHN1c3BlbmQvcmVzdW1lIHByb2NzIGlmICFhcGljX3BtX3N0YXRlLmFjdGl2ZT8gKi8KLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZsYXBpY19zeXNjbGFzcyk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9sYXBpYyk7Ci0JcmV0dXJuIGVycm9yOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfbGFwaWNfc3lzZnMpOwotCi0jZWxzZQkvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKSB7IH0KLQotI2VuZGlmCS8qIENPTkZJR19QTSAqLwotCi0vKgotICogYXBpY19pc19jbHVzdGVyZWRfYm94KCkgLS0gQ2hlY2sgaWYgd2UgY2FuIGV4cGVjdCBnb29kIFRTQwotICoKLSAqIFRodXMgZmFyLCB0aGUgbWFqb3IgdXNlciBvZiB0aGlzIGlzIElCTSdzIFN1bW1pdDIgc2VyaWVzOgotICoKLSAqIENsdXN0ZXJlZCBib3hlcyBtYXkgaGF2ZSB1bnN5bmNlZCBUU0MgcHJvYmxlbXMgaWYgdGhleSBhcmUKLSAqIG11bHRpLWNoYXNzaXMuIFVzZSBhdmFpbGFibGUgZGF0YSB0byB0YWtlIGEgZ29vZCBndWVzcy4KLSAqIElmIGluIGRvdWJ0LCBnbyBIUEVULgotICovCi1fX2NwdWluaXQgaW50IGFwaWNfaXNfY2x1c3RlcmVkX2JveCh2b2lkKQotewotCWludCBpLCBjbHVzdGVycywgemVyb3M7Ci0JdW5zaWduZWQgaWQ7Ci0JdTE2ICpiaW9zX2NwdV9hcGljaWQ7Ci0JREVDTEFSRV9CSVRNQVAoY2x1c3Rlcm1hcCwgTlVNX0FQSUNfQ0xVU1RFUlMpOwotCi0JLyoKLQkgKiB0aGVyZSBpcyBub3QgdGhpcyBraW5kIG9mIGJveCB3aXRoIEFNRCBDUFUgeWV0LgotCSAqIFNvbWUgQU1EIGJveCB3aXRoIHF1YWRjb3JlIGNwdSBhbmQgOCBzb2NrZXRzIGFwaWNpZAotCSAqIHdpbGwgYmUgWzQsIDB4MjNdIG9yIFs4LCAweDI3XSBjb3VsZCBiZSB0aG91Z2h0IHRvCi0JICogdnNtcCBib3ggc3RpbGwgbmVlZCBjaGVja2luZy4uLgotCSAqLwotCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAhaXNfdnNtcF9ib3goKSkKLQkJcmV0dXJuIDA7Ci0KLQliaW9zX2NwdV9hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKTsKLQliaXRtYXBfemVybyhjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCi0JCWlmIChiaW9zX2NwdV9hcGljaWQpIHsKLQkJCWlkID0gYmlvc19jcHVfYXBpY2lkW2ldOwotCQl9Ci0JCWVsc2UgaWYgKGkgPCBucl9jcHVfaWRzKSB7Ci0JCQlpZiAoY3B1X3ByZXNlbnQoaSkpCi0JCQkJaWQgPSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGkpOwotCQkJZWxzZQotCQkJCWNvbnRpbnVlOwotCQl9Ci0JCWVsc2UKLQkJCWJyZWFrOwotCi0JCWlmIChpZCAhPSBCQURfQVBJQ0lEKQotCQkJX19zZXRfYml0KEFQSUNfQ0xVU1RFUklEKGlkKSwgY2x1c3Rlcm1hcCk7Ci0JfQotCi0JLyogUHJvYmxlbTogIFBhcnRpYWxseSBwb3B1bGF0ZWQgY2hhc3NpcyBtYXkgbm90IGhhdmUgQ1BVcyBpbiBzb21lIG9mCi0JICogdGhlIEFQSUMgY2x1c3RlcnMgdGhleSBoYXZlIGJlZW4gYWxsb2NhdGVkLiAgT25seSBwcmVzZW50IENQVXMgaGF2ZQotCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgZW50cmllcywgdGh1cyBjYXVzaW5nIHplcm9lcyBpbiB0aGUgYml0bWFwLgotCSAqIFNpbmNlIGNsdXN0ZXJzIGFyZSBhbGxvY2F0ZWQgc2VxdWVudGlhbGx5LCBjb3VudCB6ZXJvcyBvbmx5IGlmCi0JICogdGhleSBhcmUgYm91bmRlZCBieSBvbmVzLgotCSAqLwotCWNsdXN0ZXJzID0gMDsKLQl6ZXJvcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9BUElDX0NMVVNURVJTOyBpKyspIHsKLQkJaWYgKHRlc3RfYml0KGksIGNsdXN0ZXJtYXApKSB7Ci0JCQljbHVzdGVycyArPSAxICsgemVyb3M7Ci0JCQl6ZXJvcyA9IDA7Ci0JCX0gZWxzZQotCQkJKyt6ZXJvczsKLQl9Ci0KLQkvKiBTY2FsZU1QIHZTTVBvd2VyZWQgYm94ZXMgaGF2ZSBvbmUgY2x1c3RlciBwZXIgYm9hcmQgYW5kIFRTQ3MgYXJlCi0JICogbm90IGd1YXJhbnRlZWQgdG8gYmUgc3luY2VkIGJldHdlZW4gYm9hcmRzCi0JICovCi0JaWYgKGlzX3ZzbXBfYm94KCkgJiYgY2x1c3RlcnMgPiAxKQotCQlyZXR1cm4gMTsKLQotCS8qCi0JICogSWYgY2x1c3RlcnMgPiAyLCB0aGVuIHNob3VsZCBiZSBtdWx0aS1jaGFzc2lzLgotCSAqIE1heSBoYXZlIHRvIHJldmlzaXQgdGhpcyB3aGVuIG11bHRpLWNvcmUgKyBoeXBlcnRocmVhZGVkIENQVXMgY29tZQotCSAqIG91dCwgYnV0IEFGQUlLIHRoaXMgd2lsbCB3b3JrIGV2ZW4gZm9yIHRoZW0uCi0JICovCi0JcmV0dXJuIChjbHVzdGVycyA+IDIpOwotfQotCi1zdGF0aWMgX19pbml0IGludCBzZXR1cF9ub3gyYXBpYyhjaGFyICpzdHIpCi17Ci0JZGlzYWJsZV94MmFwaWMgPSAxOwotCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX1gyQVBJQyk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm94MmFwaWMiLCBzZXR1cF9ub3gyYXBpYyk7Ci0KLQotLyoKLSAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKLSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZGlzYWJsZWFwaWMoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpYyA9IDE7Ci0Jc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9BUElDKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlYXBpYyIsIHNldHVwX2Rpc2FibGVhcGljKTsKLQotLyogc2FtZSBhcyBkaXNhYmxlYXBpYywgZm9yIGNvbXBhdGliaWxpdHkgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX25vbGFwaWMoY2hhciAqYXJnKQotewotCXJldHVybiBzZXR1cF9kaXNhYmxlYXBpYyhhcmcpOwotfQotZWFybHlfcGFyYW0oIm5vbGFwaWMiLCBzZXR1cF9ub2xhcGljKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2soY2hhciAqYXJnKQotewotCWxvY2FsX2FwaWNfdGltZXJfYzJfb2sgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImxhcGljX3RpbWVyX2MyX29rIiwgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2spOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9hcGljdGltZXIiLCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2xhcGljX3RpbWVyKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vbGFwaWNfdGltZXIiLCBwYXJzZV9ub2xhcGljX3RpbWVyKTsKLQotc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfYXBpY3BtdGltZXIoY2hhciAqcykKLXsKLQlhcGljX2NhbGlicmF0ZV9wbXRtciA9IDE7Ci0Jbm90c2Nfc2V0dXAoTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci1fX3NldHVwKCJhcGljcG10aW1lciIsIHNldHVwX2FwaWNwbXRpbWVyKTsKLQotc3RhdGljIGludCBfX2luaXQgYXBpY19zZXRfdmVyYm9zaXR5KGNoYXIgKmFyZykKLXsKLQlpZiAoIWFyZykgIHsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCXNraXBfaW9hcGljX3NldHVwID0gMDsKLQkJaW9hcGljX2ZvcmNlID0gMTsKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHN0cmNtcCgiZGVidWciLCBhcmcpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKLQllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBhcmcpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOwotCWVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIFZlcmJvc2l0eSBsZXZlbCAlcyBub3QgcmVjb2duaXNlZCIKLQkJCSIgdXNlIGFwaWM9dmVyYm9zZSBvciBhcGljPWRlYnVnXG4iLCBhcmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJhcGljIiwgYXBpY19zZXRfdmVyYm9zaXR5KTsKLQotc3RhdGljIGludCBfX2luaXQgbGFwaWNfaW5zZXJ0X3Jlc291cmNlKHZvaWQpCi17Ci0JaWYgKCFhcGljX3BoeXMpCi0JCXJldHVybiAtMTsKLQotCS8qIFB1dCBsb2NhbCBBUElDIGludG8gdGhlIHJlc291cmNlIG1hcC4gKi8KLQlsYXBpY19yZXNvdXJjZS5zdGFydCA9IGFwaWNfcGh5czsKLQlsYXBpY19yZXNvdXJjZS5lbmQgPSBsYXBpY19yZXNvdXJjZS5zdGFydCArIFBBR0VfU0laRSAtIDE7Ci0JaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmxhcGljX3Jlc291cmNlKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogbmVlZCBjYWxsIGluc2VydCBhZnRlciBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKCkKLSAqIHRoYXQgaXMgdXNpbmcgcmVxdWVzdF9yZXNvdXJjZQotICovCi1sYXRlX2luaXRjYWxsKGxhcGljX2luc2VydF9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwppbmRleCBmZGQ1ODVmLi5mMGRmZTZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKQEAgLTEsOCArMSw2IEBACiAvKgogICogQklPUyBydW4gdGltZSBpbnRlcmZhY2Ugcm91dGluZXMuCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTE2LDMzICsxNCwxMjggQEAKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKyNpbmNsdWRlIDxhc20vZWZpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vdXYvYmlvcy5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KIAotY29uc3QgY2hhciAqCi14ODZfYmlvc19zdHJlcnJvcihsb25nIHN0YXR1cykKK3N0cnVjdCB1dl9zeXN0YWIgdXZfc3lzdGFiOworCitzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1KQogewotCWNvbnN0IGNoYXIgKnN0cjsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgIDA6IHN0ciA9ICJDYWxsIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yIjsJYnJlYWs7Ci0JY2FzZSAtMTogc3RyID0gIk5vdCBpbXBsZW1lbnRlZCI7CQlicmVhazsKLQljYXNlIC0yOiBzdHIgPSAiSW52YWxpZCBhcmd1bWVudCI7CQlicmVhazsKLQljYXNlIC0zOiBzdHIgPSAiQ2FsbCBjb21wbGV0ZWQgd2l0aCBlcnJvciI7CWJyZWFrOwotCWRlZmF1bHQ6IHN0ciA9ICJVbmtub3duIEJJT1Mgc3RhdHVzIGNvZGUiOwlicmVhazsKKwlzdHJ1Y3QgdXZfc3lzdGFiICp0YWIgPSAmdXZfc3lzdGFiOworCisJaWYgKCF0YWItPmZ1bmN0aW9uKQorCQkvKgorCQkgKiBCSU9TIGRvZXMgbm90IHN1cHBvcnQgVVYgc3lzdGFiCisJCSAqLworCQlyZXR1cm4gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKKworCXJldHVybiBlZmlfY2FsbDYoKHZvaWQgKilfX3ZhKHRhYi0+ZnVuY3Rpb24pLAorCQkJCQkodTY0KXdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworfQorCitzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywKKwkJCQkJdTY0IGE0LCB1NjQgYTUpCit7CisJdW5zaWduZWQgbG9uZyBiaW9zX2ZsYWdzOworCXM2NCByZXQ7CisKKwlsb2NhbF9pcnFfc2F2ZShiaW9zX2ZsYWdzKTsKKwlyZXQgPSB1dl9iaW9zX2NhbGwod2hpY2gsIGExLCBhMiwgYTMsIGE0LCBhNSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoYmlvc19mbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzNjQgdXZfYmlvc19jYWxsX3JlZW50cmFudChlbnVtIHV2X2Jpb3NfY21kIHdoaWNoLCB1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLAorCQkJCQl1NjQgYTQsIHU2NCBhNSkKK3sKKwlzNjQgcmV0OworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcmV0ID0gdXZfYmlvc19jYWxsKHdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK2xvbmcgc25fcGFydGl0aW9uX2lkOworRVhQT1JUX1NZTUJPTF9HUEwoc25fcGFydGl0aW9uX2lkKTsKK2xvbmcgdXZfY29oZXJlbmN5X2lkOworRVhQT1JUX1NZTUJPTF9HUEwodXZfY29oZXJlbmN5X2lkKTsKK2xvbmcgdXZfcmVnaW9uX3NpemU7CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9yZWdpb25fc2l6ZSk7CitpbnQgdXZfdHlwZTsKKworCitzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQgZmMsIGludCAqdXZ0eXBlLCBsb25nICpwYXJ0aWQsIGxvbmcgKmNvaGVyLAorCQlsb25nICpyZWdpb24pCit7CisJczY0IHJldDsKKwl1NjQgdjAsIHYxOworCXVuaW9uIHBhcnRpdGlvbl9pbmZvX3UgcGFydDsKKworCXJldCA9IHV2X2Jpb3NfY2FsbF9pcnFzYXZlKFVWX0JJT1NfR0VUX1NOX0lORk8sIGZjLAorCQkJCSh1NjQpKCZ2MCksICh1NjQpKCZ2MSksIDAsIDApOworCWlmIChyZXQgIT0gQklPU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIHJldDsKKworCXBhcnQudmFsID0gdjA7CisJaWYgKHV2dHlwZSkKKwkJKnV2dHlwZSA9IHBhcnQuaHViX3ZlcnNpb247CisJaWYgKHBhcnRpZCkKKwkJKnBhcnRpZCA9IHBhcnQucGFydGl0aW9uX2lkOworCWlmIChjb2hlcikKKwkJKmNvaGVyID0gcGFydC5jb2hlcmVuY2VfaWQ7CisJaWYgKHJlZ2lvbikKKwkJKnJlZ2lvbiA9IHBhcnQucmVnaW9uX3NpemU7CisJcmV0dXJuIHJldDsKK30KKworCitzNjQgdXZfYmlvc19mcmVxX2Jhc2UodTY0IGNsb2NrX3R5cGUsIHU2NCAqdGlja3NfcGVyX3NlY29uZCkKK3sKKwlyZXR1cm4gdXZfYmlvc19jYWxsKFVWX0JJT1NfRlJFUV9CQVNFLCBjbG9ja190eXBlLAorCQkJICAgKHU2NCl0aWNrc19wZXJfc2Vjb25kLCAwLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2Jpb3NfZnJlcV9iYXNlKTsKKworCisjaWZkZWYgQ09ORklHX0VGSQordm9pZCB1dl9iaW9zX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdXZfc3lzdGFiICp0YWI7CisKKwlpZiAoKGVmaS51dl9zeXN0YWIgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikgfHwKKwkgICAgKGVmaS51dl9zeXN0YWIgPT0gKHVuc2lnbmVkIGxvbmcpTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiTm8gRUZJIFVWIFN5c3RlbSBUYWJsZS5cbiIpOworCQl1dl9zeXN0YWIuZnVuY3Rpb24gPSAodW5zaWduZWQgbG9uZylOVUxMOworCQlyZXR1cm47CiAJfQotCXJldHVybiBzdHI7Ci19CiAKLWxvbmcKLXg4Nl9iaW9zX2ZyZXFfYmFzZSh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAotCQkgICB1bnNpZ25lZCBsb25nICpkcmlmdF9pbmZvKQotewotCXN0cnVjdCB1dl9iaW9zX3JldHZhbCBpc3J2OworCXRhYiA9IChzdHJ1Y3QgdXZfc3lzdGFiICopaW9yZW1hcChlZmkudXZfc3lzdGFiLAorCQkJCQlzaXplb2Yoc3RydWN0IHV2X3N5c3RhYikpOworCWlmIChzdHJuY21wKHRhYi0+c2lnbmF0dXJlLCAiVVZTVCIsIDQpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiYmFkIHNpZ25hdHVyZSBpbiBVViBzeXN0ZW0gdGFibGUhIik7CiAKLQlCSU9TX0NBTEwoaXNydiwgQklPU19GUkVRX0JBU0UsIHdoaWNoLCAwLCAwLCAwLCAwLCAwLCAwKTsKLQkqdGlja3NfcGVyX3NlY29uZCA9IGlzcnYudjA7Ci0JKmRyaWZ0X2luZm8gPSBpc3J2LnYxOwotCXJldHVybiBpc3J2LnN0YXR1czsKKwkvKgorCSAqIENvcHkgdGFibGUgdG8gcGVybWFuZW50IHNwb3QgZm9yIGxhdGVyIHVzZS4KKwkgKi8KKwltZW1jcHkoJnV2X3N5c3RhYiwgdGFiLCBzaXplb2Yoc3RydWN0IHV2X3N5c3RhYikpOworCWlvdW5tYXAodGFiKTsKKworCXByaW50ayhLRVJOX0lORk8gIkVGSSBVViBTeXN0ZW0gVGFibGUgUmV2aXNpb24gJWRcbiIsIHRhYi0+cmV2aXNpb24pOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoeDg2X2Jpb3NfZnJlcV9iYXNlKTsKKyNlbHNlCS8qICFDT05GSUdfRUZJICovCisKK3ZvaWQgdXZfYmlvc19pbml0KHZvaWQpIHsgfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvLmdpdGlnbm9yZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjdkZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK2NhcGZsYWdzLmMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDMyZTczNTIuLjhmMWUzMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJfQogCW51bWFfc2V0X25vZGUoY3B1LCBub2RlKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZC8leCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLzB4JXggLT4gTm9kZSAlZFxuIiwgY3B1LCBhcGljaWQsIG5vZGUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggMDZmY2NlNS4uYjA0NjE4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIChDKSAyMDAxLTIwMDQgIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqICAoQykgMjAwMS0yMDA0ICBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqICAoQykgMjAwMiAgUGFkcmFpZyBCcmFkeS4gPHBhZHJhaWdAYW50ZWZhY3RvLmNvbT4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIG1vZHVsZV9wYXJhbShyZXZpZF9lcnJhdGEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJldmlkX2VycmF0YSwgIklnbm9yZSBDUFUgUmV2aXNpb24gSUQiKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJMb25naGF1bCBkcml2ZXIgZm9yIFZJQSBDeXJpeCBwcm9jZXNzb3JzLiIpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwppbmRleCBiNWNlZDgwLi5jMWFjNTc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52QHJlZGhhdC5jb20+LCBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4sIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyTm93ISBkcml2ZXIgZm9yIEFNRCBLNi0yKyAvIEs2LTMrIHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggMGE2MTE1OS4uN2M3ZDU2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIEFNRCBLNyBQb3dlcm5vdyBkcml2ZXIuCi0gKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+IG9uIGJlaGFsZiBvZiBTdVNFIExhYnMuCisgKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyBvbiBiZWhhbGYgb2YgU3VTRSBMYWJzLgogICogIChDKSAyMDAzLTIwMDQgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtNjkyLDcgKzY5Miw3IEBACiBtb2R1bGVfcGFyYW0oYWNwaV9mb3JjZSwgIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZm9yY2UsICJGb3JjZSBBQ1BJIHRvIGJlIHVzZWQuIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiUG93ZXJub3cgZHJpdmVyIGZvciBBTUQgSzcgcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggODRiYjM5NS4uMDA4ZDIzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTcsNyArNyw3IEBACiAgKiAgU3VwcG9ydCA6IG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20KICAqCiAgKiAgQmFzZWQgb24gdGhlIHBvd2Vybm93LWs3LmMgbW9kdWxlIHdyaXR0ZW4gYnkgRGF2ZSBKb25lcy4KLSAqICAoQykgMjAwMyBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4gb24gYmVoYWxmIG9mIFN1U0UgTGFicworICogIChDKSAyMDAzIERhdmUgSm9uZXMgb24gYmVoYWxmIG9mIFN1U0UgTGFicwogICogIChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4KICAqICAoQykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggMTkxZjcyNi4uMDRkMDM3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCkBAIC00MzEsNyArNDMxLDcgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzIHdpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDk5NDY4ZGIuLmNjZTBiNjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCQlub2RlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwogCW51bWFfc2V0X25vZGUoY3B1LCBub2RlKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZC8leCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLzB4JXggLT4gTm9kZSAlZFxuIiwgY3B1LCBhcGljaWQsIG5vZGUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jCmluZGV4IGYzOTBjOWYuLmRkM2FmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svazcuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBBdGhsb24vSGFtbWVyIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZwotICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogQXRobG9uIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZworICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKaW5kZXggNzc0ZDg3Yy4uMGViZjNmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbWNlLmMgLSB4ODYgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCi0gKiAoYykgMjAwMiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiAoYykgMjAwMiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwppbmRleCBjYzFmY2NkLi5hNzRhZjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBOb24gRmF0YWwgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCiAgKgotICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gY2hlY2sgZm9yIG5vbi1mYXRhbCBNQ0VzIGV2ZXJ5IDE1cwogICoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggNmJmZjM4Mi4uOWFiZDQ4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbF9hcmNoX3BlcmZtb24uaD4KIApAQCAtMzM2LDcgKzMzOCw4IEBACiAJcmVsZWFzZV9wZXJmY3RyX25taSh3ZF9vcHMtPnBlcmZjdHIpOwogfQogCi1zdGF0aWMgdm9pZCBzaW5nbGVfbXNyX3JlYXJtKHN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCwgdW5zaWduZWQgbm1pX2h6KQorc3RhdGljIHZvaWQgX19rcHJvYmVzCitzaW5nbGVfbXNyX3JlYXJtKHN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCwgdW5zaWduZWQgbm1pX2h6KQogewogCS8qIHN0YXJ0IHRoZSBjeWNsZSBvdmVyIGFnYWluICovCiAJd3JpdGVfd2F0Y2hkb2dfY291bnRlcih3ZC0+cGVyZmN0cl9tc3IsIE5VTEwsIG5taV9oeik7CkBAIC00MDEsNyArNDA0LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcDZfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcDZfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCiB7CiAJLyoKIAkgKiBQNiBiYXNlZCBQZW50aXVtIE0gbmVlZCB0byByZS11bm1hc2sKQEAgLTYwNSw3ICs2MDgsNyBAQAogCXJlbGVhc2VfcGVyZmN0cl9ubWkoTVNSX1A0X0lRX1BFUkZDVFIwKTsKIH0KIAotc3RhdGljIHZvaWQgcDRfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcDRfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCiB7CiAJdW5zaWduZWQgZHVtbXk7CiAJLyoKQEAgLTc4NCw3ICs3ODcsNyBAQAogCXJldHVybiBoejsKIH0KIAotaW50IGxhcGljX3dkX2V2ZW50KHVuc2lnbmVkIG5taV9oeikKK2ludCBfX2twcm9iZXMgbGFwaWNfd2RfZXZlbnQodW5zaWduZWQgbm1pX2h6KQogewogCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwogCXU2NCBjdHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwppbmRleCA3MmQwYzU2Li5mN2NkYjNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKQEAgLTEzLDYgKzEzLDkgQEAKIAogc3RhdGljIHZvaWQgKmtkdW1wX2J1Zl9wYWdlOwogCisvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMKaW5kZXggZTkwYTYwZS4uMDQ1YjM2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jCkBAIC0xMCw2ICsxMCw5IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKy8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwordW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKaW5kZXggOTQ1YTMxYy4uMTExOWQyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwpAQCAtMzY3LDYgKzM2NywxMCBAQAogCQkJZWZpLnNtYmlvcyA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CiAJCQlwcmludGsoIiBTTUJJT1M9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CiAJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwKKwkJCQkJVVZfU1lTVEVNX1RBQkxFX0dVSUQpKSB7CisJCQllZmkudXZfc3lzdGFiID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKKwkJCXByaW50aygiIFVWc3lzdGFiPTB4JWx4ICIsIGNvbmZpZ190YWJsZXNbaV0udGFibGUpOworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChjb25maWdfdGFibGVzW2ldLmd1aWQsCiAJCQkJCUhDRFBfVEFCTEVfR1VJRCkpIHsKIAkJCWVmaS5oY2RwID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKIAkJCXByaW50aygiIEhDRFA9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IGIyMWZiZmEuLmMzNTY0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02MjksNyArNjI5LDcgQEAKIEVOVFJZKGlycV9lbnRyaWVzX3N0YXJ0KQogCVJJTkcwX0lOVF9GUkFNRQogdmVjdG9yPTAKLS5yZXB0IE5SX0lSUVMKKy5yZXB0IE5SX1ZFQ1RPUlMKIAlBTElHTgogIC5pZiB2ZWN0b3IKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKQEAgLTExNTMsMjAgKzExNTMsNiBAQAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCiBFTlRSWShtY291bnQpCi0JcHVzaGwgJWVheAotCXB1c2hsICVlY3gKLQlwdXNobCAlZWR4Ci0JbW92bCAweGMoJWVzcCksICVlYXgKLQlzdWJsICRNQ09VTlRfSU5TTl9TSVpFLCAlZWF4Ci0KLS5nbG9ibCBtY291bnRfY2FsbAotbWNvdW50X2NhbGw6Ci0JY2FsbCBmdHJhY2Vfc3R1YgotCi0JcG9wbCAlZWR4Ci0JcG9wbCAlZWN4Ci0JcG9wbCAlZWF4Ci0KIAlyZXQKIEVORChtY291bnQpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggMWRiNmNlNC4uMDllNzE0NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTY0LDMyICs2NCw2IEBACiAjaWZkZWYgQ09ORklHX0ZUUkFDRQogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogRU5UUlkobWNvdW50KQotCi0Jc3VicSAkMHgzOCwgJXJzcAotCW1vdnEgJXJheCwgKCVyc3ApCi0JbW92cSAlcmN4LCA4KCVyc3ApCi0JbW92cSAlcmR4LCAxNiglcnNwKQotCW1vdnEgJXJzaSwgMjQoJXJzcCkKLQltb3ZxICVyZGksIDMyKCVyc3ApCi0JbW92cSAlcjgsIDQwKCVyc3ApCi0JbW92cSAlcjksIDQ4KCVyc3ApCi0KLQltb3ZxIDB4MzgoJXJzcCksICVyZGkKLQlzdWJxICRNQ09VTlRfSU5TTl9TSVpFLCAlcmRpCi0KLS5nbG9ibCBtY291bnRfY2FsbAotbWNvdW50X2NhbGw6Ci0JY2FsbCBmdHJhY2Vfc3R1YgotCi0JbW92cSA0OCglcnNwKSwgJXI5Ci0JbW92cSA0MCglcnNwKSwgJXI4Ci0JbW92cSAzMiglcnNwKSwgJXJkaQotCW1vdnEgMjQoJXJzcCksICVyc2kKLQltb3ZxIDE2KCVyc3ApLCAlcmR4Ci0JbW92cSA4KCVyc3ApLCAlcmN4Ci0JbW92cSAoJXJzcCksICVyYXgKLQlhZGRxICQweDM4LCAlcnNwCi0KIAlyZXRxCiBFTkQobWNvdW50KQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYWIxMTVjZC4uZDA3M2Q5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMTEsMTcgKzExLDE4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAotI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vbm9wcy5oPgogCiAKIC8qIExvbmcgaXMgZmluZSwgZXZlbiBpZiBpdCBpcyBvbmx5IDQgYnl0ZXMgOy0pICovCi1zdGF0aWMgbG9uZyAqZnRyYWNlX25vcDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpmdHJhY2Vfbm9wOwogCiB1bmlvbiBmdHJhY2VfY29kZV91bmlvbiB7CiAJY2hhciBjb2RlW01DT1VOVF9JTlNOX1NJWkVdOwpAQCAtNjAsMTEgKzYxLDcgQEAKIGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBjaGFyICpvbGRfY29kZSwKIAkJICAgdW5zaWduZWQgY2hhciAqbmV3X2NvZGUpCiB7Ci0JdW5zaWduZWQgcmVwbGFjZWQ7Ci0JdW5zaWduZWQgb2xkID0gKih1bnNpZ25lZCAqKW9sZF9jb2RlOyAvKiA0IGJ5dGVzICovCi0JdW5zaWduZWQgbmV3ID0gKih1bnNpZ25lZCAqKW5ld19jb2RlOyAvKiA0IGJ5dGVzICovCi0JdW5zaWduZWQgY2hhciBuZXdjaCA9IG5ld19jb2RlWzRdOwotCWludCBmYXVsdGVkID0gMDsKKwl1bnNpZ25lZCBjaGFyIHJlcGxhY2VkW01DT1VOVF9JTlNOX1NJWkVdOwogCiAJLyoKIAkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgpAQCAtNzIsMjkgKzY5LDIwIEBACiAJICogIGFzIHdlbGwgYXMgY29kZSBjaGFuZ2luZy4KIAkgKgogCSAqIE5vIHJlYWwgbG9ja2luZyBuZWVkZWQsIHRoaXMgY29kZSBpcyBydW4gdGhyb3VnaAotCSAqIGtzdG9wX21hY2hpbmUuCisJICoga3N0b3BfbWFjaGluZSwgb3IgYmVmb3JlIFNNUCBzdGFydHMuCiAJICovCi0JYXNtIHZvbGF0aWxlICgKLQkJIjE6IGxvY2tcbiIKLQkJIiAgIGNtcHhjaGcgJTMsICglMilcbiIKLQkJIiAgIGpueiAyZlxuIgotCQkiICAgbW92YiAlYjQsIDQoJTIpXG4iCi0JCSIyOlxuIgotCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKLQkJIjM6CW1vdmwgJDEsICUwXG4iCi0JCSIJam1wIDJiXG4iCi0JCSIucHJldmlvdXNcbiIKLQkJX0FTTV9FWFRBQkxFKDFiLCAzYikKLQkJOiAiPXIiKGZhdWx0ZWQpLCAiPWEiKHJlcGxhY2VkKQotCQk6ICJyIihpcCksICJyIihuZXcpLCAiYyIobmV3Y2gpLAotCQkgICIwIihmYXVsdGVkKSwgImEiKG9sZCkKLQkJOiAibWVtb3J5Iik7CisJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMocmVwbGFjZWQsIChjaGFyIF9fdXNlciAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwkJcmV0dXJuIDI7CisKKwlXQVJOX09OX09OQ0UoX19jb3B5X3RvX3VzZXJfaW5hdG9taWMoKGNoYXIgX191c2VyICopaXAsIG5ld19jb2RlLAorCQkJCSAgICBNQ09VTlRfSU5TTl9TSVpFKSk7CisKIAlzeW5jX2NvcmUoKTsKIAotCWlmIChyZXBsYWNlZCAhPSBvbGQgJiYgcmVwbGFjZWQgIT0gbmV3KQotCQlmYXVsdGVkID0gMjsKLQotCXJldHVybiBmYXVsdGVkOworCXJldHVybiAwOwogfQogCiBub3RyYWNlIGludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYykKQEAgLTExMiwzMCArMTAwLDc2IEBACiAKIG5vdHJhY2UgaW50IGZ0cmFjZV9tY291bnRfc2V0KHVuc2lnbmVkIGxvbmcgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpcCA9IChsb25nKSgmbWNvdW50X2NhbGwpOwotCXVuc2lnbmVkIGxvbmcgKmFkZHIgPSBkYXRhOwotCXVuc2lnbmVkIGNoYXIgb2xkW01DT1VOVF9JTlNOX1NJWkVdLCAqbmV3OwotCi0JLyoKLQkgKiBSZXBsYWNlIHRoZSBtY291bnQgc3R1YiB3aXRoIGEgcG9pbnRlciB0byB0aGUKLQkgKiBpcCByZWNvcmRlciBmdW5jdGlvbi4KLQkgKi8KLQltZW1jcHkob2xkLCAmbWNvdW50X2NhbGwsIE1DT1VOVF9JTlNOX1NJWkUpOwotCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsICphZGRyKTsKLQkqYWRkciA9IGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgb2xkLCBuZXcpOwotCisJLyogbWNvdW50IGlzIGluaXRpYWxpemVkIGFzIGEgbm9wICovCisJKmRhdGEgPSAwOwogCXJldHVybiAwOwogfQogCiBpbnQgX19pbml0IGZ0cmFjZV9keW5fYXJjaF9pbml0KHZvaWQgKmRhdGEpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKm5vcHRhYmxlID0gZmluZF9ub3BfdGFibGUoKTsKKwlleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBmdHJhY2VfdGVzdF9wNm5vcFtdOworCWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGZ0cmFjZV90ZXN0X25vcDVbXTsKKwlleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBmdHJhY2VfdGVzdF9qbXBbXTsKKwlpbnQgZmF1bHRlZCA9IDA7CiAKLQkvKiBUaGlzIGlzIHJ1bm5pbmcgaW4ga3N0b3BfbWFjaGluZSAqLworCS8qCisJICogVGhlcmUgaXMgbm8gZ29vZCBub3AgZm9yIGFsbCB4ODYgYXJjaHMuCisJICogV2Ugd2lsbCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBQNl9OT1A1LCBidXQgZmlyc3Qgd2UKKwkgKiB3aWxsIHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5vcCB3aWxsIGFjdHVhbGx5CisJICogd29yayBvbiB0aGlzIENQVS4gSWYgaXQgZmF1bHRzLCB3ZSB3aWxsIHRoZW4KKwkgKiBnbyB0byBhIGxlc3NlciBlZmZpY2llbnQgNSBieXRlIG5vcC4gSWYgdGhhdCBmYWlscworCSAqIHdlIHRoZW4ganVzdCB1c2UgYSBqbXAgYXMgb3VyIG5vcC4gVGhpcyBpc24ndCB0aGUgbW9zdAorCSAqIGVmZmljaWVudCBub3AsIGJ1dCB3ZSBjYW4gbm90IHVzZSBhIG11bHRpIHBhcnQgbm9wCisJICogc2luY2Ugd2Ugd291bGQgdGhlbiByaXNrIGJlaW5nIHByZWVtcHRlZCBpbiB0aGUgbWlkZGxlCisJICogb2YgdGhhdCBub3AsIGFuZCBpZiB3ZSBlbmFibGVkIHRyYWNpbmcgdGhlbiwgaXQgbWlnaHQKKwkgKiBjYXVzZSBhIHN5c3RlbSBjcmFzaC4KKwkgKgorCSAqIFRPRE86IGNoZWNrIHRoZSBjcHVpZCB0byBkZXRlcm1pbmUgdGhlIGJlc3Qgbm9wLgorCSAqLworCWFzbSB2b2xhdGlsZSAoCisJCSJqbXAgZnRyYWNlX3Rlc3Rfam1wXG4iCisJCS8qIFRoaXMgY29kZSBuZWVkcyB0byBzdGF5IGFyb3VuZCAqLworCQkiLnNlY3Rpb24gLnRleHQsIFwiYXhcIlxuIgorCQkiZnRyYWNlX3Rlc3Rfam1wOiIKKwkJImptcCBmdHJhY2VfdGVzdF9wNm5vcFxuIgorCQkibm9wXG4iCisJCSJub3BcbiIKKwkJIm5vcFxuIiAgLyogMiBieXRlIGptcCArIDMgYnl0ZXMgKi8KKwkJImZ0cmFjZV90ZXN0X3A2bm9wOiIKKwkJUDZfTk9QNQorCQkiam1wIDFmXG4iCisJCSJmdHJhY2VfdGVzdF9ub3A1OiIKKwkJIi5ieXRlIDB4NjYsMHg2NiwweDY2LDB4NjYsMHg5MFxuIgorCQkiam1wIDFmXG4iCisJCSIucHJldmlvdXNcbiIKKwkJIjE6IgorCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJIjI6CW1vdmwgJDEsICUwXG4iCisJCSIJam1wIGZ0cmFjZV90ZXN0X25vcDVcbiIKKwkJIjM6CW1vdmwgJDIsICUwXG4iCisJCSIJam1wIDFiXG4iCisJCSIucHJldmlvdXNcbiIKKwkJX0FTTV9FWFRBQkxFKGZ0cmFjZV90ZXN0X3A2bm9wLCAyYikKKwkJX0FTTV9FWFRBQkxFKGZ0cmFjZV90ZXN0X25vcDUsIDNiKQorCQk6ICI9ciIoZmF1bHRlZCkgOiAiMCIgKGZhdWx0ZWQpKTsKIAotCWZ0cmFjZV9tY291bnRfc2V0KGRhdGEpOworCXN3aXRjaCAoZmF1bHRlZCkgeworCWNhc2UgMDoKKwkJcHJfaW5mbygiZnRyYWNlOiBjb252ZXJ0aW5nIG1jb3VudCBjYWxscyB0byAwZiAxZiA0NCAwMCAwMFxuIik7CisJCWZ0cmFjZV9ub3AgPSAodW5zaWduZWQgbG9uZyAqKWZ0cmFjZV90ZXN0X3A2bm9wOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oImZ0cmFjZTogY29udmVydGluZyBtY291bnQgY2FsbHMgdG8gNjYgNjYgNjYgNjYgOTBcbiIpOworCQlmdHJhY2Vfbm9wID0gKHVuc2lnbmVkIGxvbmcgKilmdHJhY2VfdGVzdF9ub3A1OworCQlicmVhazsKKwljYXNlIDI6CisJCXByX2luZm8oImZ0cmFjZTogY29udmVydGluZyBtY291bnQgY2FsbHMgdG8gam1wIC4gKyA1XG4iKTsKKwkJZnRyYWNlX25vcCA9ICh1bnNpZ25lZCBsb25nICopZnRyYWNlX3Rlc3Rfam1wOworCQlicmVhazsKKwl9CiAKLQlmdHJhY2Vfbm9wID0gKHVuc2lnbmVkIGxvbmcgKilub3B0YWJsZVtNQ09VTlRfSU5TTl9TSVpFXTsKKwkvKiBUaGUgcmV0dXJuIGNvZGUgaXMgcmV0dXJlZCB2aWEgZGF0YSAqLworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKaW5kZXggOWVjYTViYS4uMmVjMmRlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYwpAQCAtMTc5LDggKzE3OSwxMCBAQAogCSAqIGlzIGFuIGV4YW1wbGUpLgogCSAqLwogCWlmIChhY3BpX2dibF9GQURULmhlYWRlci5yZXZpc2lvbiA+IEZBRFQyX1JFVklTSU9OX0lEICYmCi0JCShhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX0FQSUNfUEhZU0lDQUwpKQorCQkoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9BUElDX1BIWVNJQ0FMKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAic3lzdGVtIEFQSUMgb25seSBjYW4gdXNlIHBoeXNpY2FsIGZsYXQiKTsKIAkJcmV0dXJuIDE7CisJfQogI2VuZGlmCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKaW5kZXggMzM1ODFkOS4uYmZkNTMyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKQEAgLTM0MSwxMiArMzQxLDEyIEBACiAKIHN0YXRpYyBfX2luaXQgdm9pZCB1dl9ydGNfaW5pdCh2b2lkKQogewotCWxvbmcgc3RhdHVzLCB0aWNrc19wZXJfc2VjLCBkcmlmdDsKKwlsb25nIHN0YXR1czsKKwl1NjQgdGlja3NfcGVyX3NlYzsKIAotCXN0YXR1cyA9Ci0JICAgIHg4Nl9iaW9zX2ZyZXFfYmFzZShCSU9TX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSywgJnRpY2tzX3Blcl9zZWMsCi0JCQkJCSZkcmlmdCk7Ci0JaWYgKHN0YXR1cyAhPSAwIHx8IHRpY2tzX3Blcl9zZWMgPCAxMDAwMDApIHsKKwlzdGF0dXMgPSB1dl9iaW9zX2ZyZXFfYmFzZShCSU9TX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSywKKwkJCQkJJnRpY2tzX3Blcl9zZWMpOworCWlmIChzdGF0dXMgIT0gQklPU19TVEFUVVNfU1VDQ0VTUyB8fCB0aWNrc19wZXJfc2VjIDwgMTAwMDAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJ1bmFibGUgdG8gZGV0ZXJtaW5lIHBsYXRmb3JtIFJUQyBjbG9jayBmcmVxdWVuY3ksICIKIAkJCSJndWVzc2luZy5cbiIpOwpAQCAtMzU2LDcgKzM1NiwyMiBAQAogCQlzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQgPSB0aWNrc19wZXJfc2VjOwogfQogCi1zdGF0aWMgYm9vbCB1dl9zeXN0ZW1faW5pdGVkOworLyoKKyAqIENhbGxlZCBvbiBlYWNoIGNwdSB0byBpbml0aWFsaXplIHRoZSBwZXJfY3B1IFVWIGRhdGEgYXJlYS4KKyAqIAlaWlogaG90cGx1ZyBub3Qgc3VwcG9ydGVkIHlldAorICovCit2b2lkIF9fY3B1aW5pdCB1dl9jcHVfaW5pdCh2b2lkKQoreworCS8qIENQVSAwIGluaXRpbGl6YXRpb24gd2lsbCBiZSBkb25lIHZpYSB1dl9zeXN0ZW1faW5pdC4gKi8KKwlpZiAoIXV2X2JsYWRlX2luZm8pCisJCXJldHVybjsKKworCXV2X2JsYWRlX2luZm9bdXZfbnVtYV9ibGFkZV9pZCgpXS5ucl9vbmxpbmVfY3B1cysrOworCisJaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpID09IFVWX05PTl9VTklRVUVfQVBJQykKKwkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7Cit9CisKIAogdm9pZCBfX2luaXQgdXZfc3lzdGVtX2luaXQodm9pZCkKIHsKQEAgLTQxMiw2ICs0MjcsOSBAQAogCWdub2RlX3VwcGVyID0gKCgodW5zaWduZWQgbG9uZylub2RlX2lkLnMubm9kZV9pZCkgJgogCQkgICAgICAgfigoMSA8PCBuX3ZhbCkgLSAxKSkgPDwgbV92YWw7CiAKKwl1dl9iaW9zX2luaXQoKTsKKwl1dl9iaW9zX2dldF9zbl9pbmZvKDAsICZ1dl90eXBlLCAmc25fcGFydGl0aW9uX2lkLAorCQkJICAgICZ1dl9jb2hlcmVuY3lfaWQsICZ1dl9yZWdpb25fc2l6ZSk7CiAJdXZfcnRjX2luaXQoKTsKIAogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewpAQCAtNDMzLDcgKzQ1MSw3IEBACiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ncGFfbWFzayA9ICgxIDw8IChtX3ZhbCArIG5fdmFsKSkgLSAxOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z25vZGVfdXBwZXIgPSBnbm9kZV91cHBlcjsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdsb2JhbF9tbXJfYmFzZSA9IG1tcl9iYXNlOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Y29oZXJlbmN5X2RvbWFpbl9udW1iZXIgPSAwOy8qIFpaWiAqLworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Y29oZXJlbmN5X2RvbWFpbl9udW1iZXIgPSB1dl9jb2hlcmVuY3lfaWQ7CiAJCXV2X25vZGVfdG9fYmxhZGVbbmlkXSA9IGJsYWRlOwogCQl1dl9jcHVfdG9fYmxhZGVbY3B1XSA9IGJsYWRlOwogCQltYXhfcG5vZGUgPSBtYXgocG5vZGUsIG1heF9wbm9kZSk7CkBAIC00NDgsMjEgKzQ2Niw2IEBACiAJbWFwX21tcl9oaWdoKG1heF9wbm9kZSk7CiAJbWFwX2NvbmZpZ19oaWdoKG1heF9wbm9kZSk7CiAJbWFwX21taW9oX2hpZ2gobWF4X3Bub2RlKTsKLQl1dl9zeXN0ZW1faW5pdGVkID0gdHJ1ZTsKKworCXV2X2NwdV9pbml0KCk7CiB9Ci0KLS8qCi0gKiBDYWxsZWQgb24gZWFjaCBjcHUgdG8gaW5pdGlhbGl6ZSB0aGUgcGVyX2NwdSBVViBkYXRhIGFyZWEuCi0gKiAJWlpaIGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKLSAqLwotdm9pZCBfX2NwdWluaXQgdXZfY3B1X2luaXQodm9pZCkKLXsKLQlCVUdfT04oIXV2X3N5c3RlbV9pbml0ZWQpOwotCi0JdXZfYmxhZGVfaW5mb1t1dl9udW1hX2JsYWRlX2lkKCldLm5yX29ubGluZV9jcHVzKys7Ci0KLQlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgPT0gVVZfTk9OX1VOSVFVRV9BUElDKQotCQlzZXRfeDJhcGljX2V4dHJhX2JpdHModXZfaHViX2luZm8tPnBub2RlKTsKLX0KLQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwppbmRleCBhY2Y2MmZjLi43NzAxN2U4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKQEAgLTEsMjkgKzEsNDkgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaHBldC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vaTgyNTMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgogCi0jZGVmaW5lIEhQRVRfTUFTSwlDTE9DS1NPVVJDRV9NQVNLKDMyKQotI2RlZmluZSBIUEVUX1NISUZUCTIyCisjZGVmaW5lIEhQRVRfTUFTSwkJCUNMT0NLU09VUkNFX01BU0soMzIpCisjZGVmaW5lIEhQRVRfU0hJRlQJCQkyMgogCiAvKiBGU0VDID0gMTBeLTE1CiAgICBOU0VDID0gMTBeLTkgKi8KLSNkZWZpbmUgRlNFQ19QRVJfTlNFQwkxMDAwMDAwTAorI2RlZmluZSBGU0VDX1BFUl9OU0VDCQkJMTAwMDAwMEwKKworI2RlZmluZSBIUEVUX0RFVl9VU0VEX0JJVAkJMgorI2RlZmluZSBIUEVUX0RFVl9VU0VECQkJKDEgPDwgSFBFVF9ERVZfVVNFRF9CSVQpCisjZGVmaW5lIEhQRVRfREVWX1ZBTElECQkJMHg4CisjZGVmaW5lIEhQRVRfREVWX0ZTQl9DQVAJCTB4MTAwMAorI2RlZmluZSBIUEVUX0RFVl9QRVJJX0NBUAkJMHgyMDAwCisKKyNkZWZpbmUgRVZUX1RPX0hQRVRfREVWKGV2dCkgY29udGFpbmVyX29mKGV2dCwgc3RydWN0IGhwZXRfZGV2LCBldnQpCiAKIC8qCiAgKiBIUEVUIGFkZHJlc3MgaXMgc2V0IGluIGFjcGkvYm9vdC5jLCB3aGVuIGFuIEFDUEkgZW50cnkgZXhpc3RzCiAgKi8KLXVuc2lnbmVkIGxvbmcgaHBldF9hZGRyZXNzOwotc3RhdGljIHZvaWQgX19pb21lbSAqaHBldF92aXJ0X2FkZHJlc3M7Cit1bnNpZ25lZCBsb25nCQkJCWhwZXRfYWRkcmVzczsKK3Vuc2lnbmVkIGxvbmcJCQkJaHBldF9udW1fdGltZXJzOworc3RhdGljIHZvaWQgX19pb21lbQkJCSpocGV0X3ZpcnRfYWRkcmVzczsKKworc3RydWN0IGhwZXRfZGV2IHsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlCWV2dDsKKwl1bnNpZ25lZCBpbnQJCQludW07CisJaW50CQkJCWNwdTsKKwl1bnNpZ25lZCBpbnQJCQlpcnE7CisJdW5zaWduZWQgaW50CQkJZmxhZ3M7CisJY2hhcgkJCQluYW1lWzEwXTsKK307CiAKIHVuc2lnbmVkIGxvbmcgaHBldF9yZWFkbCh1bnNpZ25lZCBsb25nIGEpCiB7CkBAIC01OSw3ICs3OSw3IEBACiBzdGF0aWMgaW50IGJvb3RfaHBldF9kaXNhYmxlOwogaW50IGhwZXRfZm9yY2VfdXNlcjsKIAotc3RhdGljIGludCBfX2luaXQgaHBldF9zZXR1cChjaGFyKiBzdHIpCitzdGF0aWMgaW50IF9faW5pdCBocGV0X3NldHVwKGNoYXIgKnN0cikKIHsKIAlpZiAoc3RyKSB7CiAJCWlmICghc3RybmNtcCgiZGlzYWJsZSIsIHN0ciwgNykpCkBAIC04MCw3ICsxMDAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBpc19ocGV0X2NhcGFibGUodm9pZCkKIHsKLQlyZXR1cm4gKCFib290X2hwZXRfZGlzYWJsZSAmJiBocGV0X2FkZHJlc3MpOworCXJldHVybiAhYm9vdF9ocGV0X2Rpc2FibGUgJiYgaHBldF9hZGRyZXNzOwogfQogCiAvKgpAQCAtMTAyLDYgKzEyMiw5IEBACiAgKiB0aW1lciAwIGFuZCB0aW1lciAxIGluIGNhc2Ugb2YgUlRDIGVtdWxhdGlvbi4KICAqLwogI2lmZGVmIENPTkZJR19IUEVUCisKK3N0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9tc2lfdGltZXJzKHN0cnVjdCBocGV0X2RhdGEgKmhkKTsKKwogc3RhdGljIHZvaWQgaHBldF9yZXNlcnZlX3BsYXRmb3JtX3RpbWVycyh1bnNpZ25lZCBsb25nIGlkKQogewogCXN0cnVjdCBocGV0IF9faW9tZW0gKmhwZXQgPSBocGV0X3ZpcnRfYWRkcmVzczsKQEAgLTExMSwxMCArMTM0LDEwIEBACiAKIAlucnRpbWVycyA9ICgoaWQgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpICsgMTsKIAotCW1lbXNldCgmaGQsIDAsIHNpemVvZiAoaGQpKTsKLQloZC5oZF9waHlzX2FkZHJlc3MgPSBocGV0X2FkZHJlc3M7Ci0JaGQuaGRfYWRkcmVzcyA9IGhwZXQ7Ci0JaGQuaGRfbmlycXMgPSBucnRpbWVyczsKKwltZW1zZXQoJmhkLCAwLCBzaXplb2YoaGQpKTsKKwloZC5oZF9waHlzX2FkZHJlc3MJPSBocGV0X2FkZHJlc3M7CisJaGQuaGRfYWRkcmVzcwkJPSBocGV0OworCWhkLmhkX25pcnFzCQk9IG5ydGltZXJzOwogCWhwZXRfcmVzZXJ2ZV90aW1lcigmaGQsIDApOwogCiAjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKQEAgLTEzMCwxMCArMTUzLDEyIEBACiAJaGQuaGRfaXJxWzFdID0gSFBFVF9MRUdBQ1lfUlRDOwogCiAJZm9yIChpID0gMjsgaSA8IG5ydGltZXJzOyB0aW1lcisrLCBpKyspIHsKLQkJaGQuaGRfaXJxW2ldID0gKHJlYWRsKCZ0aW1lci0+aHBldF9jb25maWcpICYgVG5fSU5UX1JPVVRFX0NORl9NQVNLKSA+PgotCQkJVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKKwkJaGQuaGRfaXJxW2ldID0gKHJlYWRsKCZ0aW1lci0+aHBldF9jb25maWcpICYKKwkJCVRuX0lOVF9ST1VURV9DTkZfTUFTSykgPj4gVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKIAl9CiAKKwlocGV0X3Jlc2VydmVfbXNpX3RpbWVycygmaGQpOworCiAJaHBldF9hbGxvYygmaGQpOwogCiB9CkBAIC0yMjcsNjAgKzI1Miw3MCBAQAogCXByaW50ayhLRVJOX0RFQlVHICJocGV0IGNsb2NrZXZlbnQgcmVnaXN0ZXJlZFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGhwZXRfbGVnYWN5X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCitzdGF0aWMgaW50IGhwZXRfc2V0dXBfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworc3RhdGljIHZvaWQgaHBldF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0LCBpbnQgdGltZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBjZmcsIGNtcCwgbm93OwogCXVpbnQ2NF90IGRlbHRhOwogCi0Jc3dpdGNoKG1vZGUpIHsKKwlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlkZWx0YSA9ICgodWludDY0X3QpKE5TRUNfUEVSX1NFQy9IWikpICogaHBldF9jbG9ja2V2ZW50Lm11bHQ7Ci0JCWRlbHRhID4+PSBocGV0X2Nsb2NrZXZlbnQuc2hpZnQ7CisJCWRlbHRhID0gKCh1aW50NjRfdCkoTlNFQ19QRVJfU0VDL0haKSkgKiBldnQtPm11bHQ7CisJCWRlbHRhID4+PSBldnQtPnNoaWZ0OwogCQlub3cgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CiAJCWNtcCA9IG5vdyArICh1bnNpZ25lZCBsb25nKSBkZWx0YTsKLQkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7CisJCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8CiAJCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7Ci0JCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOworCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCS8qCiAJCSAqIFRoZSBmaXJzdCB3cml0ZSBhZnRlciB3cml0aW5nIFROX1NFVFZBTCB0byB0aGUKIAkJICogY29uZmlnIHJlZ2lzdGVyIHNldHMgdGhlIGNvdW50ZXIgdmFsdWUsIHRoZSBzZWNvbmQKIAkJICogd3JpdGUgc2V0cyB0aGUgcGVyaW9kLgogCQkgKi8KLQkJaHBldF93cml0ZWwoY21wLCBIUEVUX1QwX0NNUCk7CisJCWhwZXRfd3JpdGVsKGNtcCwgSFBFVF9Ubl9DTVAodGltZXIpKTsKIAkJdWRlbGF5KDEpOwotCQlocGV0X3dyaXRlbCgodW5zaWduZWQgbG9uZykgZGVsdGEsIEhQRVRfVDBfQ01QKTsKKwkJaHBldF93cml0ZWwoKHVuc2lnbmVkIGxvbmcpIGRlbHRhLCBIUEVUX1RuX0NNUCh0aW1lcikpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7CisJCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJY2ZnICY9IH5IUEVUX1ROX1BFUklPRElDOwogCQljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROXzMyQklUOwotCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKKwkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DRkcpOworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWNmZyAmPSB+SFBFVF9UTl9FTkFCTEU7Ci0JCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOworCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6Ci0JCWhwZXRfZW5hYmxlX2xlZ2FjeV9pbnQoKTsKKwkJaWYgKHRpbWVyID09IDApIHsKKwkJCWhwZXRfZW5hYmxlX2xlZ2FjeV9pbnQoKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IEVWVF9UT19IUEVUX0RFVihldnQpOworCQkJaHBldF9zZXR1cF9tc2lfaXJxKGhkZXYtPmlycSk7CisJCQlkaXNhYmxlX2lycShoZGV2LT5pcnEpOworCQkJaXJxX3NldF9hZmZpbml0eShoZGV2LT5pcnEsIGNwdW1hc2tfb2ZfY3B1KGhkZXYtPmNwdSkpOworCQkJZW5hYmxlX2lycShoZGV2LT5pcnEpOworCQl9CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBocGV0X2xlZ2FjeV9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCi0JCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCitzdGF0aWMgaW50IGhwZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0LCBpbnQgdGltZXIpCiB7CiAJdTMyIGNudDsKIAogCWNudCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKIAljbnQgKz0gKHUzMikgZGVsdGE7Ci0JaHBldF93cml0ZWwoY250LCBIUEVUX1QwX0NNUCk7CisJaHBldF93cml0ZWwoY250LCBIUEVUX1RuX0NNUCh0aW1lcikpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHJlYWQgYmFjayB0aGUgQ01QIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGF0CkBAIC0yOTIsNiArMzI3LDM0NyBAQAogCXJldHVybiAoczMyKSgodTMyKWhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKSAtIGNudCkgPj0gMCA/IC1FVElNRSA6IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGhwZXRfbGVnYWN5X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCWhwZXRfc2V0X21vZGUobW9kZSwgZXZ0LCAwKTsKK30KKworc3RhdGljIGludCBocGV0X2xlZ2FjeV9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJcmV0dXJuIGhwZXRfbmV4dF9ldmVudChkZWx0YSwgZXZ0LCAwKTsKK30KKworLyoKKyAqIEhQRVQgTVNJIFN1cHBvcnQKKyAqLworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaHBldF9kZXYgKiwgY3B1X2hwZXRfZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgaHBldF9kZXYJKmhwZXRfZGV2czsKKwordm9pZCBocGV0X21zaV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGNmZzsKKworCS8qIHVubWFzayBpdCAqLworCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaGRldi0+bnVtKSk7CisJY2ZnIHw9IEhQRVRfVE5fRlNCOworCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcoaGRldi0+bnVtKSk7Cit9CisKK3ZvaWQgaHBldF9tc2lfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgY2ZnOworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IGdldF9pcnFfZGF0YShpcnEpOworCisJLyogbWFzayBpdCAqLworCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaGRldi0+bnVtKSk7CisJY2ZnICY9IH5IUEVUX1ROX0ZTQjsKKwlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworfQorCit2b2lkIGhwZXRfbXNpX3dyaXRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gZ2V0X2lycV9kYXRhKGlycSk7CisKKwlocGV0X3dyaXRlbChtc2ctPmRhdGEsIEhQRVRfVG5fUk9VVEUoaGRldi0+bnVtKSk7CisJaHBldF93cml0ZWwobXNnLT5hZGRyZXNzX2xvLCBIUEVUX1RuX1JPVVRFKGhkZXYtPm51bSkgKyA0KTsKK30KKwordm9pZCBocGV0X21zaV9yZWFkKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gZ2V0X2lycV9kYXRhKGlycSk7CisKKwltc2ctPmRhdGEgPSBocGV0X3JlYWRsKEhQRVRfVG5fUk9VVEUoaGRldi0+bnVtKSk7CisJbXNnLT5hZGRyZXNzX2xvID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGhkZXYtPm51bSkgKyA0KTsKKwltc2ctPmFkZHJlc3NfaGkgPSAwOworfQorCitzdGF0aWMgdm9pZCBocGV0X21zaV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gRVZUX1RPX0hQRVRfREVWKGV2dCk7CisJaHBldF9zZXRfbW9kZShtb2RlLCBldnQsIGhkZXYtPm51bSk7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9tc2lfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBFVlRfVE9fSFBFVF9ERVYoZXZ0KTsKKwlyZXR1cm4gaHBldF9uZXh0X2V2ZW50KGRlbHRhLCBldnQsIGhkZXYtPm51bSk7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9zZXR1cF9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGFyY2hfc2V0dXBfaHBldF9tc2koaXJxKSkgeworCQlkZXN0cm95X2lycShpcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9hc3NpZ25faXJxKHN0cnVjdCBocGV0X2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpcnEgPSBjcmVhdGVfaXJxKCk7CisJaWYgKCFpcnEpCisJCXJldHVybiAtRUlOVkFMOworCisJc2V0X2lycV9kYXRhKGlycSwgZGV2KTsKKworCWlmIChocGV0X3NldHVwX21zaV9pcnEoaXJxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPmlycSA9IGlycTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IGhwZXRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmRldiA9IChzdHJ1Y3QgaHBldF9kZXYgKilkYXRhOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmhldnQgPSAmZGV2LT5ldnQ7CisKKwlpZiAoIWhldnQtPmV2ZW50X2hhbmRsZXIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU3B1cmlvdXMgSFBFVCB0aW1lciBpbnRlcnJ1cHQgb24gSFBFVCB0aW1lciAlZFxuIiwKKwkJCQlkZXYtPm51bSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwloZXZ0LT5ldmVudF9oYW5kbGVyKGhldnQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBocGV0X3NldHVwX2lycShzdHJ1Y3QgaHBldF9kZXYgKmRldikKK3sKKworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgaHBldF9pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCUlSUUZfU0hBUkVEfElSUUZfTk9CQUxBTkNJTkcsIGRldi0+bmFtZSwgZGV2KSkKKwkJcmV0dXJuIC0xOworCisJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCWlycV9zZXRfYWZmaW5pdHkoZGV2LT5pcnEsIGNwdW1hc2tfb2ZfY3B1KGRldi0+Y3B1KSk7CisJZW5hYmxlX2lycShkZXYtPmlycSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiaHBldDogJXMgaXJxICVkIGZvciBNU0lcbiIsCisJCQkgZGV2LT5uYW1lLCBkZXYtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGluIHNwZWNpZmljIEBjcHUgKi8KK3N0YXRpYyB2b2lkIGluaXRfb25lX2hwZXRfbXNpX2Nsb2NrZXZlbnQoc3RydWN0IGhwZXRfZGV2ICpoZGV2LCBpbnQgY3B1KQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZoZGV2LT5ldnQ7CisJdWludDY0X3QgaHBldF9mcmVxOworCisJV0FSTl9PTihjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAoIShoZGV2LT5mbGFncyAmIEhQRVRfREVWX1ZBTElEKSkKKwkJcmV0dXJuOworCisJaWYgKGhwZXRfc2V0dXBfbXNpX2lycShoZGV2LT5pcnEpKQorCQlyZXR1cm47CisKKwloZGV2LT5jcHUgPSBjcHU7CisJcGVyX2NwdShjcHVfaHBldF9kZXYsIGNwdSkgPSBoZGV2OworCWV2dC0+bmFtZSA9IGhkZXYtPm5hbWU7CisJaHBldF9zZXR1cF9pcnEoaGRldik7CisJZXZ0LT5pcnEgPSBoZGV2LT5pcnE7CisKKwlldnQtPnJhdGluZyA9IDExMDsKKwlldnQtPmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKKwlpZiAoaGRldi0+ZmxhZ3MgJiBIUEVUX0RFVl9QRVJJX0NBUCkKKwkJZXZ0LT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQzsKKworCWV2dC0+c2V0X21vZGUgPSBocGV0X21zaV9zZXRfbW9kZTsKKwlldnQtPnNldF9uZXh0X2V2ZW50ID0gaHBldF9tc2lfbmV4dF9ldmVudDsKKwlldnQtPnNoaWZ0ID0gMzI7CisKKwkvKgorCSAqIFRoZSBwZXJpb2QgaXMgYSBmZW10byBzZWNvbmRzIHZhbHVlLiBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUKKwkgKiBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIG5hbm9zZWNvbmQgdG8gaHBldCB0aWNrCisJICogY29udmVyc2lvbi4KKwkgKi8KKwlocGV0X2ZyZXEgPSAxMDAwMDAwMDAwMDAwMDAwVUxMOworCWRvX2RpdihocGV0X2ZyZXEsIGhwZXRfcGVyaW9kKTsKKwlldnQtPm11bHQgPSBkaXZfc2MoKHVuc2lnbmVkIGxvbmcpIGhwZXRfZnJlcSwKKwkJCQkgICAgICBOU0VDX1BFUl9TRUMsIGV2dC0+c2hpZnQpOworCS8qIENhbGN1bGF0ZSB0aGUgbWF4IGRlbHRhICovCisJZXZ0LT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGRkYsIGV2dCk7CisJLyogNSB1c2VjIG1pbmltdW0gcmVwcm9ncmFtbWluZyBkZWx0YS4gKi8KKwlldnQtPm1pbl9kZWx0YV9ucyA9IDUwMDA7CisKKwlldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShoZGV2LT5jcHUpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShldnQpOworfQorCisjaWZkZWYgQ09ORklHX0hQRVQKKy8qIFJlc2VydmUgYXQgbGVhc3Qgb25lIHRpbWVyIGZvciB1c2Vyc3BhY2UgKC9kZXYvaHBldCkgKi8KKyNkZWZpbmUgUkVTRVJWRV9USU1FUlMgMQorI2Vsc2UKKyNkZWZpbmUgUkVTRVJWRV9USU1FUlMgMAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGhwZXRfbXNpX2NhcGFiaWxpdHlfbG9va3VwKHVuc2lnbmVkIGludCBzdGFydF90aW1lcikKK3sKKwl1bnNpZ25lZCBpbnQgaWQ7CisJdW5zaWduZWQgaW50IG51bV90aW1lcnM7CisJdW5zaWduZWQgaW50IG51bV90aW1lcnNfdXNlZCA9IDA7CisJaW50IGk7CisKKwlpZCA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7CisKKwludW1fdGltZXJzID0gKChpZCAmIEhQRVRfSURfTlVNQkVSKSA+PiBIUEVUX0lEX05VTUJFUl9TSElGVCk7CisJbnVtX3RpbWVycysrOyAvKiBWYWx1ZSByZWFkIG91dCBzdGFydHMgZnJvbSAwICovCisKKwlocGV0X2RldnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHBldF9kZXYpICogbnVtX3RpbWVycywgR0ZQX0tFUk5FTCk7CisJaWYgKCFocGV0X2RldnMpCisJCXJldHVybjsKKworCWhwZXRfbnVtX3RpbWVycyA9IG51bV90aW1lcnM7CisKKwlmb3IgKGkgPSBzdGFydF90aW1lcjsgaSA8IG51bV90aW1lcnMgLSBSRVNFUlZFX1RJTUVSUzsgaSsrKSB7CisJCXN0cnVjdCBocGV0X2RldiAqaGRldiA9ICZocGV0X2RldnNbbnVtX3RpbWVyc191c2VkXTsKKwkJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGkpKTsKKworCQkvKiBPbmx5IGNvbnNpZGVyIEhQRVQgdGltZXIgd2l0aCBNU0kgc3VwcG9ydCAqLworCQlpZiAoIShjZmcgJiBIUEVUX1ROX0ZTQl9DQVApKQorCQkJY29udGludWU7CisKKwkJaGRldi0+ZmxhZ3MgPSAwOworCQlpZiAoY2ZnICYgSFBFVF9UTl9QRVJJT0RJQ19DQVApCisJCQloZGV2LT5mbGFncyB8PSBIUEVUX0RFVl9QRVJJX0NBUDsKKwkJaGRldi0+bnVtID0gaTsKKworCQlzcHJpbnRmKGhkZXYtPm5hbWUsICJocGV0JWQiLCBpKTsKKwkJaWYgKGhwZXRfYXNzaWduX2lycShoZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCWhkZXYtPmZsYWdzIHw9IEhQRVRfREVWX0ZTQl9DQVA7CisJCWhkZXYtPmZsYWdzIHw9IEhQRVRfREVWX1ZBTElEOworCQludW1fdGltZXJzX3VzZWQrKzsKKwkJaWYgKG51bV90aW1lcnNfdXNlZCA9PSBudW1fcG9zc2libGVfY3B1cygpKQorCQkJYnJlYWs7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiSFBFVDogJWQgdGltZXJzIGluIHRvdGFsLCAlZCB0aW1lcnMgd2lsbCBiZSB1c2VkIGZvciBwZXItY3B1IHRpbWVyXG4iLAorCQludW1fdGltZXJzLCBudW1fdGltZXJzX3VzZWQpOworfQorCisjaWZkZWYgQ09ORklHX0hQRVQKK3N0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9tc2lfdGltZXJzKHN0cnVjdCBocGV0X2RhdGEgKmhkKQoreworCWludCBpOworCisJaWYgKCFocGV0X2RldnMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBocGV0X251bV90aW1lcnM7IGkrKykgeworCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSAmaHBldF9kZXZzW2ldOworCisJCWlmICghKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfVkFMSUQpKQorCQkJY29udGludWU7CisKKwkJaGQtPmhkX2lycVtoZGV2LT5udW1dID0gaGRldi0+aXJxOworCQlocGV0X3Jlc2VydmVfdGltZXIoaGQsIGhkZXYtPm51bSk7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaHBldF9kZXYgKmhwZXRfZ2V0X3VudXNlZF90aW1lcih2b2lkKQoreworCWludCBpOworCisJaWYgKCFocGV0X2RldnMpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGhwZXRfbnVtX3RpbWVyczsgaSsrKSB7CisJCXN0cnVjdCBocGV0X2RldiAqaGRldiA9ICZocGV0X2RldnNbaV07CisKKwkJaWYgKCEoaGRldi0+ZmxhZ3MgJiBIUEVUX0RFVl9WQUxJRCkpCisJCQljb250aW51ZTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoSFBFVF9ERVZfVVNFRF9CSVQsCisJCQkodW5zaWduZWQgbG9uZyAqKSZoZGV2LT5mbGFncykpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIGhkZXY7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgaHBldF93b3JrX3N0cnVjdCB7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRlOworfTsKKworc3RhdGljIHZvaWQgaHBldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXY7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaHBldF93b3JrX3N0cnVjdCAqaHBldF93b3JrOworCisJaHBldF93b3JrID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBocGV0X3dvcmtfc3RydWN0LCB3b3JrLndvcmspOworCisJaGRldiA9IGhwZXRfZ2V0X3VudXNlZF90aW1lcigpOworCWlmIChoZGV2KQorCQlpbml0X29uZV9ocGV0X21zaV9jbG9ja2V2ZW50KGhkZXYsIGNwdSk7CisKKwljb21wbGV0ZSgmaHBldF93b3JrLT5jb21wbGV0ZSk7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAorCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJc3RydWN0IGhwZXRfd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBwZXJfY3B1KGNwdV9ocGV0X2RldiwgY3B1KTsKKworCXN3aXRjaCAoYWN0aW9uICYgMHhmKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCQlJTklUX0RFTEFZRURfV09SSygmd29yay53b3JrLCBocGV0X3dvcmspOworCQlpbml0X2NvbXBsZXRpb24oJndvcmsuY29tcGxldGUpOworCQkvKiBGSVhNRTogYWRkIHNjaGVkdWxlX3dvcmtfb24oKSAqLworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LCAmd29yay53b3JrLCAwKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmd29yay5jb21wbGV0ZSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RFQUQ6CisJCWlmIChoZGV2KSB7CisJCQlmcmVlX2lycShoZGV2LT5pcnEsIGhkZXYpOworCQkJaGRldi0+ZmxhZ3MgJj0gfkhQRVRfREVWX1VTRUQ7CisJCQlwZXJfY3B1KGNwdV9ocGV0X2RldiwgY3B1KSA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisjZWxzZQorCitzdGF0aWMgaW50IGhwZXRfc2V0dXBfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgaHBldF9tc2lfY2FwYWJpbGl0eV9sb29rdXAodW5zaWduZWQgaW50IHN0YXJ0X3RpbWVyKQoreworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19IUEVUCitzdGF0aWMgdm9pZCBocGV0X3Jlc2VydmVfbXNpX3RpbWVycyhzdHJ1Y3QgaHBldF9kYXRhICpoZCkKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIGludCBocGV0X2NwdWhwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sCisJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKyNlbmRpZgorCiAvKgogICogQ2xvY2sgc291cmNlIHJlbGF0ZWQgY29kZQogICovCkBAIC00MjcsOCArODAzLDEwIEBACiAKIAlpZiAoaWQgJiBIUEVUX0lEX0xFR1NVUCkgewogCQlocGV0X2xlZ2FjeV9jbG9ja2V2ZW50X3JlZ2lzdGVyKCk7CisJCWhwZXRfbXNpX2NhcGFiaWxpdHlfbG9va3VwKDIpOwogCQlyZXR1cm4gMTsKIAl9CisJaHBldF9tc2lfY2FwYWJpbGl0eV9sb29rdXAoMCk7CiAJcmV0dXJuIDA7CiAKIG91dF9ub2hwZXQ6CkBAIC00NDUsNiArODIzLDggQEAKICAqLwogc3RhdGljIF9faW5pdCBpbnQgaHBldF9sYXRlX2luaXQodm9pZCkKIHsKKwlpbnQgY3B1OworCiAJaWYgKGJvb3RfaHBldF9kaXNhYmxlKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNDYwLDYgKzg0MCwxMyBAQAogCiAJaHBldF9yZXNlcnZlX3BsYXRmb3JtX3RpbWVycyhocGV0X3JlYWRsKEhQRVRfSUQpKTsKIAorCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWhwZXRfY3B1aHBfbm90aWZ5KE5VTEwsIENQVV9PTkxJTkUsICh2b2lkICopKGxvbmcpY3B1KTsKKwl9CisKKwkvKiBUaGlzIG5vdGlmaWVyIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgd29ya3F1ZXVlIGlzIHJlYWR5ICovCisJaG90Y3B1X25vdGlmaWVyKGhwZXRfY3B1aHBfbm90aWZ5LCAtMjApOworCiAJcmV0dXJuIDA7CiB9CiBmc19pbml0Y2FsbChocGV0X2xhdGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jIGIvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYwpzaW1pbGFyaXR5IGluZGV4IDY4JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDAyMDYzYWUuLmI3NjRkNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYwpAQCAtMjcsMTcgKzI3LDIxIEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGxpbnV4L2h0aXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpICovCiAjaWZkZWYgQ09ORklHX0FDUEkKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgorI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KIAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00Niw2MSArNTAsMjggQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnRyYW5zcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pcnFfcmVtYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgogCiAjaW5jbHVkZSA8bWFjaF9pcGkuaD4KICNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KIAogI2RlZmluZSBfX2FwaWNkZWJ1Z2luaXQodHlwZSkgc3RhdGljIHR5cGUgX19pbml0CiAKLXN0cnVjdCBpcnFfY2ZnIHsKLQljcHVtYXNrX3QgZG9tYWluOwotCWNwdW1hc2tfdCBvbGRfZG9tYWluOwotCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKLQl1OCB2ZWN0b3I7Ci0JdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7Ci19OwotCi0vKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLwotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmdbTlJfSVJRU10gX19yZWFkX21vc3RseSA9IHsKLQlbMF0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMF9WRUNUT1IsICB9LAotCVsxXSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExX1ZFQ1RPUiwgIH0sCi0JWzJdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTJfVkVDVE9SLCAgfSwKLQlbM10gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRM19WRUNUT1IsICB9LAotCVs0XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE0X1ZFQ1RPUiwgIH0sCi0JWzVdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTVfVkVDVE9SLCAgfSwKLQlbNl0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNl9WRUNUT1IsICB9LAotCVs3XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE3X1ZFQ1RPUiwgIH0sCi0JWzhdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUThfVkVDVE9SLCAgfSwKLQlbOV0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJROV9WRUNUT1IsICB9LAotCVsxMF0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMF9WRUNUT1IsIH0sCi0JWzExXSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTExX1ZFQ1RPUiwgfSwKLQlbMTJdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTJfVkVDVE9SLCB9LAotCVsxM10gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExM19WRUNUT1IsIH0sCi0JWzE0XSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE0X1ZFQ1RPUiwgfSwKLQlbMTVdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTVfVkVDVE9SLCB9LAotfTsKLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzayk7Ci0KLWludCBmaXJzdF9zeXN0ZW1fdmVjdG9yID0gMHhmZTsKLQotY2hhciBzeXN0ZW1fdmVjdG9yc1tOUl9WRUNUT1JTXSA9IHsgWzAgLi4uIE5SX1ZFQ1RPUlMtMV0gPSBTWVNfVkVDVE9SX0ZSRUV9OwotCi1pbnQgc2lzX2FwaWNfYnVnOyAvKiBub3QgYWN0dWFsbHkgc3VwcG9ydGVkLCBkdW1teSBmb3IgY29tcGlsZSAqLwotCi1zdGF0aWMgaW50IG5vX3RpbWVyX2NoZWNrOwotCi1zdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKLQotaW50IHRpbWVyX3Rocm91Z2hfODI1OSBfX2luaXRkYXRhOwotCi0vKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLwotc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKKy8qCisgKiAgICAgIElzIHRoZSBTaVMgQVBJQyBybXcgYnVnIHByZXNlbnQgPworICogICAgICAtMSA9IGRvbid0IGtub3csIDAgPSBubywgMSA9IHllcworICovCitpbnQgc2lzX2FwaWNfYnVnID0gLTE7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9hcGljX2xvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyh2ZWN0b3JfbG9jayk7CkBAIC0xMTAsOSArODEsNiBAQAogICovCiBpbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOwogCi0vKiBJL08gQVBJQyBSVEUgY29udGVudHMgYXQgdGhlIE9TIGJvb3QgdXAgKi8KLXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplYXJseV9pb2FwaWNfZW50cmllc1tNQVhfSU9fQVBJQ1NdOwotCiAvKiBJL08gQVBJQyBlbnRyaWVzICovCiBzdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CiBpbnQgbnJfaW9hcGljczsKQEAgLTEyMywxMSArOTEsNjkgQEAKIC8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCiBpbnQgbXBfaXJxX2VudHJpZXM7CiAKKyNpZiBkZWZpbmVkIChDT05GSUdfTUNBKSB8fCBkZWZpbmVkIChDT05GSUdfRUlTQSkKK2ludCBtcF9idXNfaWRfdG9fdHlwZVtNQVhfTVBfQlVTU0VTXTsKKyNlbmRpZgorCiBERUNMQVJFX0JJVE1BUChtcF9idXNfbm90X3BjaSwgTUFYX01QX0JVU1NFUyk7CiAKK2ludCBza2lwX2lvYXBpY19zZXR1cDsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKnN0cikKK3sKKwkvKiBkaXNhYmxlIElPLUFQSUMgKi8KKwlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7CisKK3N0cnVjdCBpcnFfcGluX2xpc3Q7CitzdHJ1Y3QgaXJxX2NmZyB7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW47CisJY3B1bWFza190IGRvbWFpbjsKKwljcHVtYXNrX3Qgb2xkX2RvbWFpbjsKKwl1bnNpZ25lZCBtb3ZlX2NsZWFudXBfY291bnQ7CisJdTggdmVjdG9yOworCXU4IG1vdmVfaW5fcHJvZ3Jlc3MgOiAxOworfTsKKworLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZneFtOUl9JUlFTXSA9IHsKKwlbMF0gID0geyAuaXJxID0gIDAsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEwX1ZFQ1RPUiwgIH0sCisJWzFdICA9IHsgLmlycSA9ICAxLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAorCVsyXSAgPSB7IC5pcnEgPSAgMiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTJfVkVDVE9SLCAgfSwKKwlbM10gID0geyAuaXJxID0gIDMsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEzX1ZFQ1RPUiwgIH0sCisJWzRdICA9IHsgLmlycSA9ICA0LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAorCVs1XSAgPSB7IC5pcnEgPSAgNSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTVfVkVDVE9SLCAgfSwKKwlbNl0gID0geyAuaXJxID0gIDYsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE2X1ZFQ1RPUiwgIH0sCisJWzddICA9IHsgLmlycSA9ICA3LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAorCVs4XSAgPSB7IC5pcnEgPSAgOCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUThfVkVDVE9SLCAgfSwKKwlbOV0gID0geyAuaXJxID0gIDksIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE5X1ZFQ1RPUiwgIH0sCisJWzEwXSA9IHsgLmlycSA9IDEwLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAorCVsxMV0gPSB7IC5pcnEgPSAxMSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTExX1ZFQ1RPUiwgfSwKKwlbMTJdID0geyAuaXJxID0gMTIsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMl9WRUNUT1IsIH0sCisJWzEzXSA9IHsgLmlycSA9IDEzLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAorCVsxNF0gPSB7IC5pcnEgPSAxNCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE0X1ZFQ1RPUiwgfSwKKwlbMTVdID0geyAuaXJxID0gMTUsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExNV9WRUNUT1IsIH0sCit9OworCisjZGVmaW5lIGZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpCQlcCisJZm9yIChpcnEgPSAwLCBjZmcgPSBpcnFfY2ZneDsgaXJxIDwgbnJfaXJxczsgaXJxKyssIGNmZysrKQorCitzdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxIDwgbnJfaXJxcyA/IGlycV9jZmd4ICsgaXJxIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2ZnICppcnFfY2ZnX2FsbG9jKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGlycV9jZmcoaXJxKTsKK30KKwogLyoKLSAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4KLSAqIGJlIGNoYW5nZWQgYW55dGltZS4KKyAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4gYmUgY2hhbmdlZAorICogYW55dGltZS4KICAqLwogI2RlZmluZSBNQVhfUExVU19TSEFSRURfSVJRUyBOUl9JUlFTCiAjZGVmaW5lIFBJTl9NQVBfU0laRSAoTUFYX1BMVVNfU0hBUkVEX0lSUVMgKyBOUl9JUlFTKQpAQCAtMTM5LDkgKzE2NSwzNiBAQAogICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0IHsKLQlzaG9ydCBhcGljLCBwaW4sIG5leHQ7Ci19IGlycV8yX3BpbltQSU5fTUFQX1NJWkVdOworc3RydWN0IGlycV9waW5fbGlzdCB7CisJaW50IGFwaWMsIHBpbjsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgaXJxXzJfcGluX2hlYWRbUElOX01BUF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW5fcHRyOworCitzdGF0aWMgdm9pZCBfX2luaXQgaXJxXzJfcGluX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5faGVhZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBQSU5fTUFQX1NJWkU7IGkrKykKKwkJcGluW2ktMV0ubmV4dCA9ICZwaW5baV07CisKKwlpcnFfMl9waW5fcHRyID0gJnBpblswXTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgKmdldF9vbmVfZnJlZV9pcnFfMl9waW4odm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5fcHRyOworCisJaWYgKCFwaW4pCisJCXBhbmljKCJjYW4gbm90IGdldCBtb3JlIGlycV8yX3BpblxuIik7CisKKwlpcnFfMl9waW5fcHRyID0gcGluLT5uZXh0OworCXBpbi0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIHBpbjsKK30KIAogc3RydWN0IGlvX2FwaWMgewogCXVuc2lnbmVkIGludCBpbmRleDsKQEAgLTE3MiwxMCArMjI1LDE1IEBACiAvKgogICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKICAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCisgKgorICogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnkodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOworCisJaWYgKHNpc19hcGljX2J1ZykKKwkJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKIAl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKIH0KIApAQCAtMTgzLDE2ICsyNDEsMTcgQEAKIHsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQllbnRyeSA9IGlycV8yX3BpbiArIGlycTsKKwllbnRyeSA9IGNmZy0+aXJxXzJfcGluOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgaW50IHJlZzsKIAkJaW50IHBpbjsKIAotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQorCQlpZiAoIWVudHJ5KQogCQkJYnJlYWs7CisJCXBpbiA9IGVudHJ5LT5waW47CiAJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKIAkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KIAkJaWYgKHJlZyAmIElPX0FQSUNfUkVESVJfUkVNT1RFX0lSUikgewpAQCAtMjAxLDQ1ICsyNjAsMTMgQEAKIAkJfQogCQlpZiAoIWVudHJ5LT5uZXh0KQogCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qCi0gKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZwotICogYSBkdW1teSByZWFkIGZyb20gdGhlIElPLUFQSUMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfc3luYyh1bnNpZ25lZCBpbnQgYXBpYykKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXJlYWRsKCZpb19hcGljLT5kYXRhKTsKLX0KLQotI2RlZmluZSBfX0RPX0FDVElPTihSLCBBQ1RJT04sIEZJTkFMKQkJCQkJXAotCQkJCQkJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcGluOwkJCQkJCQlcCi0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7CQkJXAotCQkJCQkJCQkJXAotCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7CQkJCQkJXAotCWZvciAoOzspIHsJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgcmVnOwkJCQkJXAotCQlwaW4gPSBlbnRyeS0+cGluOwkJCQkJXAotCQlpZiAocGluID09IC0xKQkJCQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgUiArIHBpbioyKTsJXAotCQlyZWcgQUNUSU9OOwkJCQkJCVwKLQkJaW9fYXBpY19tb2RpZnkoZW50cnktPmFwaWMsIHJlZyk7CQkJXAotCQlGSU5BTDsJCQkJCQkJXAotCQlpZiAoIWVudHJ5LT5uZXh0KQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwkJCVwKLQl9CQkJCQkJCQlcCi19Ci0KIHVuaW9uIGVudHJ5X3VuaW9uIHsKIAlzdHJ1Y3QgeyB1MzIgdzEsIHcyOyB9OwogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwpAQCAtMjk5LDU5ICszMjYsNzEgQEAKIHN0YXRpYyB2b2lkIF9fdGFyZ2V0X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCiB7CiAJaW50IGFwaWMsIHBpbjsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGludCByZWc7CisKKwkJaWYgKCFlbnRyeSkKKwkJCWJyZWFrOworCiAJCWFwaWMgPSBlbnRyeS0+YXBpYzsKIAkJcGluID0gZW50cnktPnBpbjsKLQkJaWYgKHBpbiA9PSAtMSkKLQkJCWJyZWFrOworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCS8qCiAJCSAqIFdpdGggaW50ZXJydXB0LXJlbWFwcGluZywgZGVzdGluYXRpb24gaW5mb3JtYXRpb24gY29tZXMKIAkJICogZnJvbSBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5LgogCQkgKi8KIAkJaWYgKCFpcnFfcmVtYXBwZWQoaXJxKSkKIAkJCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKKyNlbHNlCisJCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKKyNlbmRpZgogCQlyZWcgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIHBpbioyKTsKIAkJcmVnICY9IH5JT19BUElDX1JFRElSX1ZFQ1RPUl9NQVNLOwogCQlyZWcgfD0gdmVjdG9yOwotCQlpb19hcGljX21vZGlmeShhcGljLCByZWcpOworCQlpb19hcGljX21vZGlmeShhcGljLCAweDEwICsgcGluKjIsIHJlZyk7CiAJCWlmICghZW50cnktPm5leHQpCiAJCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spOworCiBzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAJY3B1bWFza190IHRtcDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKIAlpZiAoY3B1c19lbXB0eSh0bXApKQogCQlyZXR1cm47CiAKKwljZmcgPSBpcnFfY2ZnKGlycSk7CiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCiAJCXJldHVybjsKIAogCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwogCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQogCS8qCiAJICogT25seSB0aGUgaGlnaCA4IGJpdHMgYXJlIHZhbGlkLgogCSAqLwogCWRlc3QgPSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGRlc3QpOwogCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCiAgKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQpAQCAtMzYwLDE5ICszOTksMzAgQEAKICAqLwogc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCiB7Ci0Jc3RhdGljIGludCBmaXJzdF9mcmVlX2VudHJ5ID0gTlJfSVJRUzsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsKLQl3aGlsZSAoZW50cnktPm5leHQpCi0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0KLQlpZiAoZW50cnktPnBpbiAhPSAtMSkgewotCQllbnRyeS0+bmV4dCA9IGZpcnN0X2ZyZWVfZW50cnk7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JCWlmICgrK2ZpcnN0X2ZyZWVfZW50cnkgPj0gUElOX01BUF9TSVpFKQotCQkJcGFuaWMoImlvX2FwaWMuYzogcmFuIG91dCBvZiBpcnFfMl9waW4gZW50cmllcyEiKTsKKwkvKiBmaXJzdCB0aW1lIHRvIHJlZmVyIGlycV9jZmcsIHNvIHdpdGggbmV3ICovCisJY2ZnID0gaXJxX2NmZ19hbGxvYyhpcnEpOworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJaWYgKCFlbnRyeSkgeworCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oKTsKKwkJY2ZnLT5pcnFfMl9waW4gPSBlbnRyeTsKKwkJZW50cnktPmFwaWMgPSBhcGljOworCQllbnRyeS0+cGluID0gcGluOworCQlyZXR1cm47CiAJfQorCisJd2hpbGUgKGVudHJ5LT5uZXh0KSB7CisJCS8qIG5vdCBhZ2FpbiwgcGxlYXNlICovCisJCWlmIChlbnRyeS0+YXBpYyA9PSBhcGljICYmIGVudHJ5LT5waW4gPT0gcGluKQorCQkJcmV0dXJuOworCisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorCisJZW50cnktPm5leHQgPSBnZXRfb25lX2ZyZWVfaXJxXzJfcGluKCk7CisJZW50cnkgPSBlbnRyeS0+bmV4dDsKIAllbnRyeS0+YXBpYyA9IGFwaWM7CiAJZW50cnktPnBpbiA9IHBpbjsKIH0KQEAgLTM4NCwzMCArNDM0LDg2IEBACiAJCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCiAJCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCiB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWludCByZXBsYWNlZCA9IDA7CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChlbnRyeSkgewogCQlpZiAoZW50cnktPmFwaWMgPT0gb2xkYXBpYyAmJiBlbnRyeS0+cGluID09IG9sZHBpbikgewogCQkJZW50cnktPmFwaWMgPSBuZXdhcGljOwogCQkJZW50cnktPnBpbiA9IG5ld3BpbjsKLQkJfQotCQlpZiAoIWVudHJ5LT5uZXh0KQorCQkJcmVwbGFjZWQgPSAxOworCQkJLyogZXZlcnkgb25lIGlzIGRpZmZlcmVudCwgcmlnaHQ/ICovCiAJCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKKwkJfQorCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCX0KKworCS8qIHdoeT8gY2FsbCByZXBsYWNlIGJlZm9yZSBhZGQ/ICovCisJaWYgKCFyZXBsYWNlZCkKKwkJYWRkX3Bpbl90b19pcnEoaXJxLCBuZXdhcGljLCBuZXdwaW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCQkJaW50IG1hc2tfYW5kLCBpbnQgbWFza19vciwKKwkJCQl2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKK3sKKwlpbnQgcGluOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZm9yIChlbnRyeSA9IGNmZy0+aXJxXzJfcGluOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisJCXVuc2lnbmVkIGludCByZWc7CisJCXBpbiA9IGVudHJ5LT5waW47CisJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOworCQlyZWcgJj0gbWFza19hbmQ7CisJCXJlZyB8PSBtYXNrX29yOworCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIsIHJlZyk7CisJCWlmIChmaW5hbCkKKwkJCWZpbmFsKGVudHJ5KTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9fYXBpY19tb2RpZnlfaXJxKGlycSwgfklPX0FQSUNfUkVESVJfTUFTS0VELCAwLCBOVUxMKTsKK30KIAotI2RlZmluZSBET19BQ1RJT04obmFtZSxSLEFDVElPTiwgRklOQUwpCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RhdGljIHZvaWQgbmFtZSMjX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQkJXAotCV9fRE9fQUNUSU9OKFIsIEFDVElPTiwgRklOQUwpCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBpb19hcGljX3N5bmMoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpCit7CisJLyoKKwkgKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZworCSAqIGEgZHVtbXkgcmVhZCBmcm9tIHRoZSBJTy1BUElDCisJICovCisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYzsKKwlpb19hcGljID0gaW9fYXBpY19iYXNlKGVudHJ5LT5hcGljKTsKKwlyZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CiAKLS8qIG1hc2sgPSAxICovCi1ET19BQ1RJT04oX19tYXNrLAkwLCB8PSBJT19BUElDX1JFRElSX01BU0tFRCwgaW9fYXBpY19zeW5jKGVudHJ5LT5hcGljKSkKK3N0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7Cit9CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCitzdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQogCi0vKiBtYXNrID0gMCAqLwotRE9fQUNUSU9OKF9fdW5tYXNrLAkwLCAmPSB+SU9fQVBJQ19SRURJUl9NQVNLRUQsICkKK3N0YXRpYyB2b2lkIF9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH5JT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsCisJCQlJT19BUElDX1JFRElSX01BU0tFRCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH5JT19BUElDX1JFRElSX01BU0tFRCwKKwkJCUlPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwgTlVMTCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtNDUwLDYgKzU1Niw2OCBAQAogCQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKIH0KIAorI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKK3ZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBjZmc7CisKKwkvKgorCSAqIFdhaXQgZm9yIGlkbGUuCisJICovCisJYXBpY193YWl0X2ljcl9pZGxlKCk7CisJY2ZnID0gQVBJQ19ETV9GSVhFRCB8IEFQSUNfREVTVF9TRUxGIHwgdmVjdG9yIHwgQVBJQ19ERVNUX0xPR0lDQUw7CisJLyoKKwkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOworfQorI2VuZGlmIC8qICFDT05GSUdfU01QICYmIENPTkZJR19YODZfMzIqLworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIHN1cHBvcnQgZm9yIGJyb2tlbiBNUCBCSU9TcywgZW5hYmxlcyBoYW5kLXJlZGlyZWN0aW9uIG9mIFBJUlEwLTcgdG8KKyAqIHNwZWNpZmljIENQVS1zaWRlIElSUXMuCisgKi8KKworI2RlZmluZSBNQVhfUElSUVMgOAorc3RhdGljIGludCBwaXJxX2VudHJpZXMgW01BWF9QSVJRU107CitzdGF0aWMgaW50IHBpcnFzX2VuYWJsZWQ7CisKK3N0YXRpYyBpbnQgX19pbml0IGlvYXBpY19waXJxX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpbnQgaSwgbWF4OworCWludCBpbnRzW01BWF9QSVJRUysxXTsKKworCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCisJCXBpcnFfZW50cmllc1tpXSA9IC0xOworCisJcGlycXNfZW5hYmxlZCA9IDE7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSJQSVJRIHJlZGlyZWN0aW9uLCB3b3JraW5nIGFyb3VuZCBicm9rZW4gTVAtQklPUy5cbiIpOworCW1heCA9IE1BWF9QSVJRUzsKKwlpZiAoaW50c1swXSA8IE1BWF9QSVJRUykKKwkJbWF4ID0gaW50c1swXTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKKwkJCQkiLi4uIFBJUlElZCAtPiBJUlEgJWRcbiIsIGksIGludHNbaSsxXSk7CisJCS8qCisJCSAqIFBJUlFzIGFyZSBtYXBwZWQgdXBzaWRlIGRvd24sIHVzdWFsbHkuCisJCSAqLworCQlwaXJxX2VudHJpZXNbTUFYX1BJUlFTLWktMV0gPSBpbnRzW2krMV07CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJwaXJxPSIsIGlvYXBpY19waXJxX3NldHVwKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyogSS9PIEFQSUMgUlRFIGNvbnRlbnRzIGF0IHRoZSBPUyBib290IHVwICovCitzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107CisKIC8qCiAgKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCiAgKi8KQEAgLTQ3NCw3ICs2NDIsNyBAQAogCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpICoKIAkJCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBub21lbTsKIAl9CiAKIAlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQpAQCAtNDg4LDE3ICs2NTYsMzEgQEAKIAkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CiAJCQl9CiAJCX0KKwogCXJldHVybiAwOworCitub21lbToKKwl3aGlsZSAoYXBpYyA+PSAwKQorCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljLS1dKTsKKwltZW1zZXQoZWFybHlfaW9hcGljX2VudHJpZXMsIDAsCisJCUFSUkFZX1NJWkUoZWFybHlfaW9hcGljX2VudHJpZXMpKTsKKworCXJldHVybiAtRU5PTUVNOwogfQogCiB2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKQogewogCWludCBhcGljLCBwaW47CiAKLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQorCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWJyZWFrOwogCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQogCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwKIAkJCQkJICAgZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSk7CisJCWtmcmVlKGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdKTsKKwkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPSBOVUxMOworCX0KIH0KIAogdm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCBpbnRyX3JlbWFwcGluZykKQEAgLTUxMiwyNSArNjk0LDcgQEAKIAkgKi8KIAlyZXN0b3JlX0lPX0FQSUNfc2V0dXAoKTsKIH0KLQotaW50IHNraXBfaW9hcGljX3NldHVwOwotaW50IGlvYXBpY19mb3JjZTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKnN0cikKLXsKLQlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7Ci0KLS8qIEFjdHVhbGx5IHRoZSBuZXh0IGlzIG9ic29sZXRlLCBidXQga2VlcCBpdCBmb3IgcGFyYW5vaWQgcmVhc29ucyAtQUsgKi8KLXN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfdGltZXJfcGluX3NldHVwKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoImRpc2FibGVfdGltZXJfcGluXzEiLCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cCk7Ci0KKyNlbmRpZgogCiAvKgogICogRmluZCB0aGUgSVJRIGVudHJ5IG51bWJlciBvZiBhIGNlcnRhaW4gcGluLgpAQCAtNjM0LDIyICs3OTgsNTQgQEAKIAkJCQliZXN0X2d1ZXNzID0gaXJxOwogCQl9CiAJfQotCUJVR19PTihiZXN0X2d1ZXNzID49IE5SX0lSUVMpOwogCXJldHVybiBiZXN0X2d1ZXNzOwogfQogCitFWFBPUlRfU1lNQk9MKElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKKy8qCisgKiBFSVNBIEVkZ2UvTGV2ZWwgY29udHJvbCByZWdpc3RlciwgRUxDUgorICovCitzdGF0aWMgaW50IEVJU0FfRUxDUih1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPCAxNikgeworCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDB4NGQwICsgKGlycSA+PiAzKTsKKwkJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7CisJfQorCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiQnJva2VuIE1QdGFibGUgcmVwb3J0cyBJU0EgaXJxICVkXG4iLCBpcnEpOworCXJldHVybiAwOworfQorCisjZW5kaWYKKwogLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAogICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCiAKICNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQogI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQogCisvKiBFSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGFuZCBjYW4gYmUgZWRnZSBvciBsZXZlbAorICogdHJpZ2dlciBkZXBlbmRpbmcgb24gdGhlIEVMQ1IgdmFsdWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbGlzdGVkIGFzCisgKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAorICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCisKKyNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnEpKQorI2RlZmluZSBkZWZhdWx0X0VJU0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKIC8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKICAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwogCiAjZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKICNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKIAorLyogTUNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKIHN0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCiB7CiAJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CkBAIC03MDcsNiArOTAzLDM2IEBACiAJCQkJdHJpZ2dlciA9IGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KTsKIAkJCWVsc2UKIAkJCQl0cmlnZ2VyID0gZGVmYXVsdF9QQ0lfdHJpZ2dlcihpZHgpOworI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKKwkJCXN3aXRjaCAobXBfYnVzX2lkX3RvX3R5cGVbYnVzXSkgeworCQkJCWNhc2UgTVBfQlVTX0lTQTogLyogSVNBIHBpbiAqLworCQkJCXsKKwkJCQkJLyogc2V0IGJlZm9yZSB0aGUgc3dpdGNoICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljYXNlIE1QX0JVU19FSVNBOiAvKiBFSVNBIHBpbiAqLworCQkJCXsKKwkJCQkJdHJpZ2dlciA9IGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4gKi8KKwkJCQl7CisJCQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfTUNBOiAvKiBNQ0EgcGluICovCisJCQkJeworCQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9NQ0FfdHJpZ2dlcihpZHgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZGVmYXVsdDoKKwkJCQl7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJCQl0cmlnZ2VyID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSAxOiAvKiBlZGdlICovCiAJCXsKQEAgLTc0NCw2ICs5NzAsNyBAQAogCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOwogfQogCitpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKIHN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQogewogCWludCBpcnEsIGk7CkBAIC03NjUsOCArOTkyLDMyIEBACiAJCXdoaWxlIChpIDwgYXBpYykKIAkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107CiAJCWlycSArPSBwaW47CisJCS8qCisgICAgICAgICAgICAgICAgICogRm9yIE1QUyBtb2RlLCBzbyBmYXIgb25seSBuZWVkZWQgYnkgRVM3MDAwIHBsYXRmb3JtCisgICAgICAgICAgICAgICAgICovCisJCWlmIChpb2FwaWNfcmVudW1iZXJfaXJxKQorCQkJaXJxID0gaW9hcGljX3JlbnVtYmVyX2lycShhcGljLCBpcnEpOwogCX0KLQlCVUdfT04oaXJxID49IE5SX0lSUVMpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogUENJIElSUSBjb21tYW5kIGxpbmUgcmVkaXJlY3Rpb24uIFllcywgbGltaXRzIGFyZSBoYXJkY29kZWQuCisJICovCisJaWYgKChwaW4gPj0gMTYpICYmIChwaW4gPD0gMjMpKSB7CisJCWlmIChwaXJxX2VudHJpZXNbcGluLTE2XSAhPSAtMSkgeworCQkJaWYgKCFwaXJxX2VudHJpZXNbcGluLTE2XSkgeworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJImRpc2FibGluZyBQSVJRJWRcbiIsIHBpbi0xNik7CisJCQl9IGVsc2UgeworCQkJCWlycSA9IHBpcnFfZW50cmllc1twaW4tMTZdOworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJInVzaW5nIFBJUlElZCAtPiBJUlEgJWRcbiIsCisJCQkJCQlwaW4tMTYsIGlycSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTgwMSw4ICsxMDUyLDcgQEAKIAlpbnQgY3B1OwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAKLQlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKTsKLQljZmcgPSAmaXJxX2NmZ1tpcnFdOworCWNmZyA9IGlycV9jZmcoaXJxKTsKIAogCS8qIE9ubHkgdHJ5IGFuZCBhbGxvY2F0ZSBpcnFzIG9uIGNwdXMgdGhhdCBhcmUgcHJlc2VudCAqLwogCWNwdXNfYW5kKG1hc2ssIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKQEAgLTgzNyw4ICsxMDg3LDEzIEBACiAJCX0KIAkJaWYgKHVubGlrZWx5KGN1cnJlbnRfdmVjdG9yID09IHZlY3RvcikpCiAJCQljb250aW51ZTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCWlmICh2ZWN0b3IgPT0gSUEzMl9TWVNDQUxMX1ZFQ1RPUikKIAkJCWdvdG8gbmV4dDsKKyNlbHNlCisJCWlmICh2ZWN0b3IgPT0gU1lTQ0FMTF9WRUNUT1IpCisJCQlnb3RvIG5leHQ7CisjZW5kaWYKIAkJZm9yX2VhY2hfY3B1X21hc2tfbnIobmV3X2NwdSwgbmV3X21hc2spCiAJCQlpZiAocGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdICE9IC0xKQogCQkJCWdvdG8gbmV4dDsKQEAgLTg3NSw4ICsxMTMwLDcgQEAKIAljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1LCB2ZWN0b3I7CiAKLQlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKTsKLQljZmcgPSAmaXJxX2NmZ1tpcnFdOworCWNmZyA9IGlycV9jZmcoaXJxKTsKIAlCVUdfT04oIWNmZy0+dmVjdG9yKTsKIAogCXZlY3RvciA9IGNmZy0+dmVjdG9yOwpAQCAtODkzLDEyICsxMTQ3LDEzIEBACiAJLyogSW5pdGlhbGl6ZSB2ZWN0b3JfaXJxIG9uIGEgbmV3IGNwdSAqLwogCS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB2ZWN0b3JfbG9jayBoZWxkICovCiAJaW50IGlycSwgdmVjdG9yOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAKIAkvKiBNYXJrIHRoZSBpbnVzZSB2ZWN0b3JzICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyArK2lycSkgewotCQlpZiAoIWNwdV9pc3NldChjcHUsIGlycV9jZmdbaXJxXS5kb21haW4pKQorCWZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpIHsKKwkJaWYgKCFjcHVfaXNzZXQoY3B1LCBjZmctPmRvbWFpbikpCiAJCQljb250aW51ZTsKLQkJdmVjdG9yID0gaXJxX2NmZ1tpcnFdLnZlY3RvcjsKKwkJdmVjdG9yID0gY2ZnLT52ZWN0b3I7CiAJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gaXJxOwogCX0KIAkvKiBNYXJrIHRoZSBmcmVlIHZlY3RvcnMgKi8KQEAgLTkwNiw3ICsxMTYxLDkgQEAKIAkJaXJxID0gcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl07CiAJCWlmIChpcnEgPCAwKQogCQkJY29udGludWU7Ci0JCWlmICghY3B1X2lzc2V0KGNwdSwgaXJxX2NmZ1tpcnFdLmRvbWFpbikpCisKKwkJY2ZnID0gaXJxX2NmZyhpcnEpOworCQlpZiAoIWNwdV9pc3NldChjcHUsIGNmZy0+ZG9tYWluKSkKIAkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7CiAJfQogfQpAQCAtOTE2LDE2ICsxMTczLDQ5IEBACiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwOwogI2VuZGlmCiAKKyNkZWZpbmUgSU9BUElDX0FVVE8gICAgIC0xCisjZGVmaW5lIElPQVBJQ19FREdFICAgICAwCisjZGVmaW5lIElPQVBJQ19MRVZFTCAgICAxCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitzdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCit7CisJaW50IGFwaWMsIGlkeCwgcGluOworCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7CisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7CisJCQlpZiAoKGlkeCAhPSAtMSkgJiYgKGlycSA9PSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pKSkKKwkJCQlyZXR1cm4gaXJxX3RyaWdnZXIoaWR4KTsKKwkJfQorCX0KKwkvKgorICAgICAgICAgKiBub25leGlzdGVudCBJUlFzIGFyZSBlZGdlIGRlZmF1bHQKKyAgICAgICAgICovCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgSU9fQVBJQ19pcnFfdHJpZ2dlcihpbnQgaXJxKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKIHsKLQlpZiAodHJpZ2dlcikKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKKwkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJZWxzZQotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX0xFVkVMOworCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKIAkJaWYgKHRyaWdnZXIpCiAJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcl9pb2FwaWNfY2hpcCwKIAkJCQkJCSAgICAgIGhhbmRsZV9mYXN0ZW9pX2lycSwKQEAgLTkzNiw3ICsxMjI2LDggQEAKIAkJcmV0dXJuOwogCX0KICNlbmRpZgotCWlmICh0cmlnZ2VyKQorCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CisJICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAogCQkJCQkgICAgICAiZmFzdGVvaSIpOwpAQCAtMTAwOSwxMyArMTMwMCwxNSBAQAogc3RhdGljIHZvaWQgc2V0dXBfSU9fQVBJQ19pcnEoaW50IGFwaWMsIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnEsCiAJCQkgICAgICBpbnQgdHJpZ2dlciwgaW50IHBvbGFyaXR5KQogewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CiAJY3B1bWFza190IG1hc2s7CiAKIAlpZiAoIUlPX0FQSUNfSVJRKGlycSkpCiAJCXJldHVybjsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKKwogCW1hc2sgPSBUQVJHRVRfQ1BVUzsKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKIAkJcmV0dXJuOwpAQCAtMTA0NywzNyArMTM0MCw0OSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCiB7Ci0JaW50IGFwaWMsIHBpbiwgaWR4LCBpcnEsIGZpcnN0X25vdGNvbiA9IDE7CisJaW50IGFwaWMsIHBpbiwgaWR4LCBpcnE7CisJaW50IG5vdGNvbiA9IDA7CiAKIAlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKIAogCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKIAotCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLHBpbixtcF9JTlQpOwotCQlpZiAoaWR4ID09IC0xKSB7Ci0JCQlpZiAoZmlyc3Rfbm90Y29uKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICIgSU8tQVBJQyAoYXBpY2lkLXBpbikgJWQtJWQiLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJCQlmaXJzdF9ub3Rjb24gPSAwOwotCQkJfSBlbHNlCi0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLCAlZC0lZCIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOwotCQkJY29udGludWU7CisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7CisJCQlpZiAoaWR4ID09IC0xKSB7CisJCQkJaWYgKCFub3Rjb24pIHsKKwkJCQkJbm90Y29uID0gMTsKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJCQkJS0VSTl9ERUJVRyAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAorCQkJCQkJcGluKTsKKwkJCQl9IGVsc2UKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAorCQkJCQkJcGluKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChub3Rjb24pIHsKKwkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCisJCQkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOworCQkJCW5vdGNvbiA9IDA7CisJCQl9CisKKwkJCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQkJaWYgKG11bHRpX3RpbWVyX2NoZWNrKGFwaWMsIGlycSkpCisJCQkJY29udGludWU7CisjZW5kaWYKKwkJCWFkZF9waW5fdG9faXJxKGlycSwgYXBpYywgcGluKTsKKworCQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsCisJCQkJCWlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKIAkJfQotCQlpZiAoIWZpcnN0X25vdGNvbikgewotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG5vdCBjb25uZWN0ZWQuXG4iKTsKLQkJCWZpcnN0X25vdGNvbiA9IDE7Ci0JCX0KLQotCQlpcnEgPSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pOwotCQlhZGRfcGluX3RvX2lycShpcnEsIGFwaWMsIHBpbik7Ci0KLQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsCi0JCQkJICBpcnFfdHJpZ2dlcihpZHgpLCBpcnFfcG9sYXJpdHkoaWR4KSk7Ci0JfQogCX0KIAotCWlmICghZmlyc3Rfbm90Y29uKQotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgbm90IGNvbm5lY3RlZC5cbiIpOworCWlmIChub3Rjb24pCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKKwkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOwogfQogCiAvKgpAQCAtMTA4OCw4ICsxMzkzLDEwIEBACiB7CiAJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CiAKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQlyZXR1cm47CisjZW5kaWYKIAogCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwogCkBAIC0xMTI0LDcgKzE0MzEsMTAgQEAKIAl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7CiAJdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwogCXVuaW9uIElPX0FQSUNfcmVnXzAyIHJlZ18wMjsKKwl1bmlvbiBJT19BUElDX3JlZ18wMyByZWdfMDM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXVuc2lnbmVkIGludCBpcnE7CiAKIAlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKIAkJcmV0dXJuOwpAQCAtMTE0NywxMiArMTQ1NywxNiBAQAogCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7CiAJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCkKIAkJcmVnXzAyLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAyKTsKKwlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDIwKQorCQlyZWdfMDMucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlwcmludGsoIlxuIik7CiAJcHJpbnRrKEtFUk5fREVCVUcgIklPIEFQSUMgIyVkLi4uLi4uXG4iLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAwOiAlMDhYXG4iLCByZWdfMDAucmF3KTsKIAlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IHBoeXNpY2FsIEFQSUMgaWQ6ICUwMlhcbiIsIHJlZ18wMC5iaXRzLklEKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IERlbGl2ZXJ5IFR5cGU6ICVYXG4iLCByZWdfMDAuYml0cy5kZWxpdmVyeV90eXBlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IExUUyAgICAgICAgICA6ICVYXG4iLCByZWdfMDAuYml0cy5MVFMpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAxOiAlMDhYXG4iLCAqKGludCAqKSZyZWdfMDEpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IG1heCByZWRpcmVjdGlvbiBlbnRyaWVzOiAlMDRYXG4iLCByZWdfMDEuYml0cy5lbnRyaWVzKTsKQEAgLTExNjAsMTEgKzE0NzQsMjcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBQUlEgaW1wbGVtZW50ZWQ6ICVYXG4iLCByZWdfMDEuYml0cy5QUlEpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IElPIEFQSUMgdmVyc2lvbjogJTA0WFxuIiwgcmVnXzAxLmJpdHMudmVyc2lvbik7CiAKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKSB7CisJLyoKKwkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4MT8gZG9uJ3QgaGF2ZSByZWdfMDIsCisJICogYnV0IHRoZSB2YWx1ZSBvZiByZWdfMDIgaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZCByZWdpc3RlcgorCSAqIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAyID09IHJlZ18wMS4KKwkgKi8KKwlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwICYmIHJlZ18wMi5yYXcgIT0gcmVnXzAxLnJhdykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDI6ICUwOFhcbiIsIHJlZ18wMi5yYXcpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBhcmJpdHJhdGlvbjogJTAyWFxuIiwgcmVnXzAyLmJpdHMuYXJiaXRyYXRpb24pOwogCX0KIAorCS8qCisJICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDI/IGRvbid0IGhhdmUgcmVnXzAyCisJICogb3IgcmVnXzAzLCBidXQgdGhlIHZhbHVlIG9mIHJlZ18wWzIzXSBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkCisJICogcmVnaXN0ZXIgdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDMgPT0gcmVnXzBbMTJdLgorCSAqLworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjAgJiYgcmVnXzAzLnJhdyAhPSByZWdfMDIucmF3ICYmCisJICAgIHJlZ18wMy5yYXcgIT0gcmVnXzAxLnJhdykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDM6ICUwOFhcbiIsIHJlZ18wMy5yYXcpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBCb290IERUICAgIDogJVhcbiIsIHJlZ18wMy5iaXRzLmJvb3RfRFQpOworCX0KKwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCkBAIC0xMTkzLDE2ICsxNTIzLDE2IEBACiAJfQogCX0KIAlwcmludGsoS0VSTl9ERUJVRyAiSVJRIHRvIHBpbiBtYXBwaW5nczpcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpOwotCQlpZiAoZW50cnktPnBpbiA8IDApCisJZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykgeworCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCQlpZiAoIWVudHJ5KQogCQkJY29udGludWU7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklSUSVkICIsIGlycSk7CiAJCWZvciAoOzspIHsKIAkJCXByaW50aygiLT4gJWQ6JWQiLCBlbnRyeS0+YXBpYywgZW50cnktPnBpbik7CiAJCQlpZiAoIWVudHJ5LT5uZXh0KQogCQkJCWJyZWFrOwotCQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJCX0KIAkJcHJpbnRrKCJcbiIpOwogCX0KQEAgLTEyMzYsNyArMTU2Niw3IEBACiBfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQyh2b2lkICpkdW1teSkKIHsKIAl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7Ci0JdW5zaWduZWQgbG9uZyBpY3I7CisJdTY0IGljcjsKIAogCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQogCQlyZXR1cm47CkBAIC0xMjUzLDIwICsxNTgzLDMxIEBACiAJdiA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUQVNLUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwgdiAmIEFQSUNfVFBSSV9NQVNLKTsKIAotCXYgPSBhcGljX3JlYWQoQVBJQ19BUkJQUkkpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBBUkJQUkk6ICUwOHggKCUwMngpXG4iLCB2LAotCQl2ICYgQVBJQ19BUkJQUklfTUFTSyk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBQUk9DUFJJOiAlMDh4XG4iLCB2KTsKKwlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsgICAgICAgICAgICAgICAgICAgICAvKiAhODI0ODlEWCAqLworCQlpZiAoIUFQSUNfWEFQSUModmVyKSkgeworCQkJdiA9IGFwaWNfcmVhZChBUElDX0FSQlBSSSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKKwkJCSAgICAgICB2ICYgQVBJQ19BUkJQUklfTUFTSyk7CisJCX0KKwkJdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7CisJfQogCi0JdiA9IGFwaWNfcmVhZChBUElDX0VPSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVPSTogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1JSUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7CisJLyoKKwkgKiBSZW1vdGUgcmVhZCBzdXBwb3J0ZWQgb25seSBpbiB0aGUgODI0ODlEWCBhbmQgbG9jYWwgQVBJQyBmb3IKKwkgKiBQZW50aXVtIHByb2Nlc3NvcnMuCisJICovCisJaWYgKCFBUElDX0lOVEVHUkFURUQodmVyKSB8fCBtYXhsdnQgPT0gMykgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7CisJfQorCiAJdiA9IGFwaWNfcmVhZChBUElDX0xEUik7CiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIERGUjogJTA4eFxuIiwgdik7CisJaWYgKCF4MmFwaWNfZW5hYmxlZCgpKSB7CisJCXYgPSBhcGljX3JlYWQoQVBJQ19ERlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKKwl9CiAJdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwogCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKIApAQCAtMTI3Nyw4ICsxNjE4LDEzIEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOwogCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOwogCi0JdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVTUjogJTA4eFxuIiwgdik7CisJaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7ICAgICAgICAgICAgIC8qICE4MjQ4OURYICovCisJCWlmIChtYXhsdnQgPiAzKSAgICAgICAgIC8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCisJCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKKwl9CiAKIAlpY3IgPSBhcGljX2ljcl9yZWFkKCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjogJTA4eFxuIiwgKHUzMilpY3IpOwpAQCAtMTMxMiw3ICsxNjU4LDEyIEBACiAKIF9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9hbGxfbG9jYWxfQVBJQ3Modm9pZCkKIHsKLQlvbl9lYWNoX2NwdShwcmludF9sb2NhbF9BUElDLCBOVUxMLCAxKTsKKwlpbnQgY3B1OworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHByaW50X2xvY2FsX0FQSUMsIE5VTEwsIDEpOworCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIF9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9QSUModm9pZCkKQEAgLTEzNTksMTcgKzE3MTAsMjIgQEAKIGZzX2luaXRjYWxsKHByaW50X2FsbF9JQ3MpOwogCiAKKy8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCitzdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OworCiB2b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQogewogCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKIAlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOwotCWludCBpLCBhcGljOworCWludCBhcGljOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUElOX01BUF9TSVpFOyBpKyspIHsKLQkJaXJxXzJfcGluW2ldLnBpbiA9IC0xOwotCQlpcnFfMl9waW5baV0ubmV4dCA9IDA7Ci0JfQorI2lmZGVmIENPTkZJR19YODZfMzIKKwlpbnQgaTsKKwlpZiAoIXBpcnFzX2VuYWJsZWQpCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKKwkJCXBpcnFfZW50cmllc1tpXSA9IC0xOworI2VuZGlmCiAKIAkvKgogCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6CkBAIC0xMzk5LDYgKzE3NTUsMTAgQEAKIAl9CiAgZm91bmRfaTgyNTk6CiAJLyogTG9vayB0byBzZWUgd2hhdCBpZiB0aGUgTVAgdGFibGUgaGFzIHJlcG9ydGVkIHRoZSBFeHRJTlQgKi8KKwkvKiBJZiB3ZSBjb3VsZCBub3QgZmluZCB0aGUgYXBwcm9wcmlhdGUgcGluIGJ5IGxvb2tpbmcgYXQgdGhlIGlvYXBpYworCSAqIHRoZSBpODI1OSBwcm9iYWJseSBpcyBub3QgY29ubmVjdGVkIHRoZSBpb2FwaWMgYnV0IGdpdmUgdGhlCisJICogbXB0YWJsZSBhIGNoYW5jZSBhbnl3YXkuCisJICovCiAJaTgyNTlfcGluICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfRXh0SU5UKTsKIAlpODI1OV9hcGljID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfRXh0SU5UKTsKIAkvKiBUcnVzdCB0aGUgTVAgdGFibGUgaWYgbm90aGluZyBpcyBzZXR1cCBpbiB0aGUgaGFyZHdhcmUgKi8KQEAgLTE0NTgsNiArMTgxOCwxMzMgQEAKIAlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIGZ1bmN0aW9uIHRvIHNldCB0aGUgSU8tQVBJQyBwaHlzaWNhbCBJRHMgYmFzZWQgb24gdGhlCisgKiB2YWx1ZXMgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCisgKgorICogYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiAgVHVlIERlYyAyMSAxMjoyNTowNSBDU1QgMTk5OQorICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKHZvaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXBoeXNpZF9tYXNrX3QgcGh5c19pZF9wcmVzZW50X21hcDsKKwlpbnQgYXBpYzsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG9sZF9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMgJiYgeDg2X3F1aXJrcy0+c2V0dXBfaW9hcGljX2lkcygpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERvbid0IGNoZWNrIEkvTyBBUElDIElEcyBmb3IgeEFQSUMgc3lzdGVtcy4gIFRoZXkgaGF2ZQorCSAqIG5vIG1lYW5pbmcgd2l0aG91dCB0aGUgc2VyaWFsIEFQSUMgYnVzLgorCSAqLworCWlmICghKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQorCQl8fCBBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKKwkJcmV0dXJuOworCS8qCisJICogVGhpcyBpcyBicm9rZW47IGFueXRoaW5nIHdpdGggYSByZWFsIGNwdSBjb3VudCBoYXMgdG8KKwkgKiBjaXJjdW12ZW50IHRoaXMgaWRpb2N5IHJlZ2FyZGxlc3MuCisJICovCisJcGh5c19pZF9wcmVzZW50X21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7CisKKwkvKgorCSAqIFNldCB0aGUgSU9BUElDIElEIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIE1QQyB0YWJsZS4KKwkgKi8KKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisKKwkJLyogUmVhZCB0aGUgcmVnaXN0ZXIgMCB2YWx1ZSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCQlvbGRfaWQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKKworCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEIGlzICVkIGluIHRoZSBNUEMgdGFibGUhLi4uXG4iLAorCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAorCQkJCXJlZ18wMC5iaXRzLklEKTsKKwkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gcmVnXzAwLmJpdHMuSUQ7CisJCX0KKworCQkvKgorCQkgKiBTYW5pdHkgY2hlY2ssIGlzIHRoZSBJRCByZWFsbHkgZnJlZT8gRXZlcnkgQVBJQyBpbiBhCisJCSAqIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQorCQkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KKwkJICovCisJCWlmIChjaGVja19hcGljaWRfdXNlZChwaHlzX2lkX3ByZXNlbnRfbWFwLAorCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIElPLUFQSUMjJWQgSUQgJWQgaXMgYWxyZWFkeSB1c2VkIS4uLlxuIiwKKwkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspCisJCQkJaWYgKCFwaHlzaWRfaXNzZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCkpCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQorCQkJCXBhbmljKCJNYXggQVBJQyBJRCBleGNlZWRlZCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCisJCQkJaSk7CisJCQlwaHlzaWRfc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApOworCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPSBpOworCQl9IGVsc2UgeworCQkJcGh5c2lkX21hc2tfdCB0bXA7CisJCQl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiU2V0dGluZyAlZCBpbiB0aGUgIgorCQkJCQkicGh5c19pZF9wcmVzZW50X21hcFxuIiwKKwkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJcGh5c2lkc19vcihwaHlzX2lkX3ByZXNlbnRfbWFwLCBwaHlzX2lkX3ByZXNlbnRfbWFwLCB0bXApOworCQl9CisKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGFkanVzdCB0aGUgSVJRIHJvdXRpbmcgdGFibGUKKwkJICogaWYgdGhlIElEIGNoYW5nZWQuCisJCSAqLworCQlpZiAob2xkX2lkICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQorCQkJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCisJCQkJaWYgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBvbGRfaWQpCisJCQkJCW1wX2lycXNbaV0ubXBfZHN0YXBpYworCQkJCQkJPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKKworCQkvKgorCQkgKiBSZWFkIHRoZSByaWdodCB2YWx1ZSBmcm9tIHRoZSBNUEMgdGFibGUgYW5kCisJCSAqIHdyaXRlIGl0IGludG8gdGhlIElEIHJlZ2lzdGVyLgorCQkgKi8KKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSIuLi5jaGFuZ2luZyBJTy1BUElDIHBoeXNpY2FsIEFQSUMgSUQgdG8gJWQgLi4uIiwKKwkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKworCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJaW9fYXBpY193cml0ZShhcGljLCAwLCByZWdfMDAucmF3KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCQkvKgorCQkgKiBTYW5pdHkgY2hlY2sKKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpCisJCQlwcmludGsoImNvdWxkIG5vdCBzZXQgSUQhXG4iKTsKKwkJZWxzZQorCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG9rLlxuIik7CisJfQorfQorI2VuZGlmCisKK2ludCBub190aW1lcl9jaGVjayBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hlY2soY2hhciAqcykKK3sKKwlub190aW1lcl9jaGVjayA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub190aW1lcl9jaGVjayIsIG5vdGltZXJjaGVjayk7CisKIC8qCiAgKiBUaGVyZSBpcyBhIG5hc3R5IGJ1ZyBpbiBzb21lIG9sZGVyIFNNUCBib2FyZHMsIHRoZWlyIG1wdGFibGUgbGllcwogICogYWJvdXQgdGhlIHRpbWVyIElSUS4gV2UgZG8gdGhlIGZvbGxvd2luZyB0byB3b3JrIGFyb3VuZCB0aGUgc2l0dWF0aW9uOgpAQCAtMTQ3MSw2ICsxOTU4LDkgQEAKIAl1bnNpZ25lZCBsb25nIHQxID0gamlmZmllczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKG5vX3RpbWVyX2NoZWNrKQorCQlyZXR1cm4gMTsKKwogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAkvKiBMZXQgdGVuIHRpY2tzIHBhc3MuLi4gKi8KQEAgLTE1MzEsOSArMjAyMSwxMSBAQAogCXJldHVybiB3YXNfcGVuZGluZzsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKIHN0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gJmlycV9jZmdbaXJxXTsKKworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwpAQCAtMTU0Miw2ICsyMDM0LDE0IEBACiAKIAlyZXR1cm4gMTsKIH0KKyNlbHNlCitzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJc2VuZF9JUElfc2VsZihpcnFfY2ZnKGlycSktPnZlY3Rvcik7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgogCiAvKgogICogTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0cyBuZWVkIGRpZmZlcmVudCBoYW5kbGluZywKQEAgLTE1ODAsMTEgKzIwODAsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgbWlncmF0ZV9pb2FwaWNfaXJxKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNwdW1hc2tfdCB0bXAsIGNsZWFudXBfbWFzazsKIAlzdHJ1Y3QgaXJ0ZSBpcnRlOwotCWludCBtb2RpZnlfaW9hcGljX3J0ZSA9IGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTDsKKwlpbnQgbW9kaWZ5X2lvYXBpY19ydGU7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTU5OCw5ICsyMDk4LDEyIEBACiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCiAJCXJldHVybjsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwltb2RpZnlfaW9hcGljX3J0ZSA9IGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTDsKIAlpZiAobW9kaWZ5X2lvYXBpY19ydGUpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOwpAQCAtMTYyMiwxOCArMjEyNSwxOSBAQAogCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOwogCX0KIAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKIH0KIAogc3RhdGljIGludCBtaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbChpbnQgaXJxKQogewogCWludCByZXQgPSAtMTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJbWFza19JT19BUElDX2lycShpcnEpOwogCiAJaWYgKGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoaXJxKSkgewogCQkvKgotCSAJICogSW50ZXJydXB0IGluIHByb2dyZXNzLiBNaWdyYXRpbmcgaXJxIG5vdyB3aWxsIGNoYW5nZSB0aGUKKwkJICogSW50ZXJydXB0IGluIHByb2dyZXNzLiBNaWdyYXRpbmcgaXJxIG5vdyB3aWxsIGNoYW5nZSB0aGUKIAkJICogdmVjdG9yIGluZm9ybWF0aW9uIGluIHRoZSBJTy1BUElDIFJURSBhbmQgdGhhdCB3aWxsIGNvbmZ1c2UKIAkJICogdGhlIEVPSSBicm9hZGNhc3QgcGVyZm9ybWVkIGJ5IGNwdS4KIAkJICogU28sIGRlbGF5IHRoZSBpcnEgbWlncmF0aW9uIHRvIHRoZSBuZXh0IGluc3RhbmNlLgpAQCAtMTY0MywxMSArMjE0NywxMSBAQAogCX0KIAogCS8qIGV2ZXJ0aGluZyBpcyBjbGVhci4gd2UgaGF2ZSByaWdodCBvZiB3YXkgKi8KLQltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayk7CisJbWlncmF0ZV9pb2FwaWNfaXJxKGlycSwgZGVzYy0+cGVuZGluZ19tYXNrKTsKIAogCXJldCA9IDA7Ci0JaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7Ci0JY3B1c19jbGVhcihpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayk7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOworCWNwdXNfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKIAogdW5tYXNrOgogCXVubWFza19JT19BUElDX2lycShpcnEpOwpAQCAtMTY1NiwxMCArMjE2MCwxMCBAQAogCiBzdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpbnQgaXJxOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKIAkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpIHsKIAkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE2NzEsOCArMjE3NSw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsCi0JCQkJCSAgICAgICAgIGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKKwkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGRlc2MtPnBlbmRpbmdfbWFzayk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCX0KIAl9CkBAIC0xNjgzLDkgKzIxODYsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7Ci0JaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7Ci0JCWlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrID0gbWFzazsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUEVORElORzsKKwkJZGVzYy0+cGVuZGluZ19tYXNrID0gbWFzazsKIAkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaXJxKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE2OTgsNyArMjIwMyw5IEBACiB7CiAJdW5zaWduZWQgdmVjdG9yLCBtZTsKIAlhY2tfQVBJQ19pcnEoKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJZXhpdF9pZGxlKCk7CisjZW5kaWYKIAlpcnFfZW50ZXIoKTsKIAogCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMTcwNywxMSArMjIxNCwxMiBAQAogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKLQkJaWYgKGlycSA+PSBOUl9JUlFTKQorCisJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQlpZiAoIWRlc2MpCiAJCQljb250aW51ZTsKIAotCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCWNmZyA9IGlycV9jZmcgKyBpcnE7CisJCWNmZyA9IGlycV9jZmcoaXJxKTsKIAkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAkJaWYgKCFjZmctPm1vdmVfY2xlYW51cF9jb3VudCkKIAkJCWdvdG8gdW5sb2NrOwpAQCAtMTczMCw3ICsyMjM4LDcgQEAKIAogc3RhdGljIHZvaWQgaXJxX2NvbXBsZXRlX21vdmUodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyhpcnEpOwogCXVuc2lnbmVkIHZlY3RvciwgbWU7CiAKIAlpZiAobGlrZWx5KCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpKQpAQCAtMTc2OSwxOSArMjI3Nyw1MCBAQAogCWFja19BUElDX2lycSgpOwogfQogCithdG9taWNfdCBpcnFfbWlzX2NvdW50OworCiBzdGF0aWMgdm9pZCBhY2tfYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQogeworI2lmZGVmIENPTkZJR19YODZfMzIKKwl1bnNpZ25lZCBsb25nIHY7CisJaW50IGk7CisjZW5kaWYKIAlpbnQgZG9fdW5tYXNrX2lycSA9IDA7CiAKIAlpcnFfY29tcGxldGVfbW92ZShpcnEpOwogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAJLyogSWYgd2UgYXJlIG1vdmluZyB0aGUgaXJxIHdlIG5lZWQgdG8gbWFzayBpdCAqLwotCWlmICh1bmxpa2VseShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7CisJaWYgKHVubGlrZWx5KGlycV90b19kZXNjKGlycSktPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7CiAJCWRvX3VubWFza19pcnEgPSAxOwogCQltYXNrX0lPX0FQSUNfaXJxKGlycSk7CiAJfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkqIEl0IGFwcGVhcnMgdGhlcmUgaXMgYW4gZXJyYXR1bSB3aGljaCBhZmZlY3RzIGF0IGxlYXN0IHZlcnNpb24gMHgxMQorCSogb2YgSS9PIEFQSUMgKHRoYXQncyB0aGUgODIwOTNBQSBhbmQgY29yZXMgaW50ZWdyYXRlZCBpbnRvIHZhcmlvdXMKKwkqIGNoaXBzZXRzKS4gIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaXMKKwkqIGVycm9uZW91c2x5IGRlbGl2ZXJlZCBhcyBlZGdlLXRyaWdnZXJlZCBvbmUgYnV0IHRoZSByZXNwZWN0aXZlIElSUgorCSogYml0IGdldHMgc2V0IG5ldmVydGhlbGVzcy4gIEFzIGEgcmVzdWx0IHRoZSBJL08gdW5pdCBleHBlY3RzIGFuIEVPSQorCSogbWVzc2FnZSBidXQgaXQgd2lsbCBuZXZlciBhcnJpdmUgYW5kIGZ1cnRoZXIgaW50ZXJydXB0cyBhcmUgYmxvY2tlZAorCSogZnJvbSB0aGUgc291cmNlLiAgVGhlIGV4YWN0IHJlYXNvbiBpcyBzbyBmYXIgdW5rbm93biwgYnV0IHRoZQorCSogcGhlbm9tZW5vbiB3YXMgb2JzZXJ2ZWQgd2hlbiB0d28gY29uc2VjdXRpdmUgaW50ZXJydXB0IHJlcXVlc3RzCisJKiBmcm9tIGEgZ2l2ZW4gc291cmNlIGdldCBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgQ1BVIGFuZCB0aGUgc291cmNlIGlzCisJKiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpbiBiZXR3ZWVuLgorCSoKKwkqIEEgd29ya2Fyb3VuZCBpcyB0byBzaW11bGF0ZSBhbiBFT0kgbWVzc2FnZSBtYW51YWxseS4gIFdlIGFjaGlldmUgaXQKKwkqIGJ5IHNldHRpbmcgdGhlIHRyaWdnZXIgbW9kZSB0byBlZGdlIGFuZCB0aGVuIHRvIGxldmVsIHdoZW4gdGhlIGVkZ2UKKwkqIHRyaWdnZXIgbW9kZSBnZXRzIGRldGVjdGVkIGluIHRoZSBUTVIgb2YgYSBsb2NhbCBBUElDIGZvciBhCisJKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0LiAgV2UgbWFzayB0aGUgc291cmNlIGZvciB0aGUgdGltZSBvZiB0aGUKKwkqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCisJKiBUaGUgaWRlYSBpcyBmcm9tIE1hbmZyZWQgU3ByYXVsLiAgLS1tYWNybworCSovCisJaSA9IGlycV9jZmcoaXJxKS0+dmVjdG9yOworCisJdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7CisjZW5kaWYKKwogCS8qCiAJICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCiAJICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KQEAgLTE4MjAsMzEgKzIzNTksNDEgQEAKIAkJCW1vdmVfbWFza2VkX2lycShpcnEpOwogCQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKIAl9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgeworCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKKwkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7CisJCV9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShpcnEpOworCQlfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoaXJxKTsKKwkJc3Bpbl91bmxvY2soJmlvYXBpY19sb2NrKTsKKwl9CisjZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSU8tQVBJQyIsCi0JLnN0YXJ0dXAgCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCSAJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJIAk9IHVubWFza19JT19BUElDX2lycSwKLQkuYWNrIAkJPSBhY2tfYXBpY19lZGdlLAotCS5lb2kgCQk9IGFja19hcGljX2xldmVsLAorCS5uYW1lCQk9ICJJTy1BUElDIiwKKwkuc3RhcnR1cAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKKwkubWFzawkJPSBtYXNrX0lPX0FQSUNfaXJxLAorCS51bm1hc2sJCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAorCS5hY2sJCT0gYWNrX2FwaWNfZWRnZSwKKwkuZW9pCQk9IGFja19hcGljX2xldmVsLAogI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5IAk9IHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxLAorCS5zZXRfYWZmaW5pdHkJPSBzZXRfaW9hcGljX2FmZmluaXR5X2lycSwKICNlbmRpZgogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07CiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSVItSU8tQVBJQyIsCi0JLnN0YXJ0dXAgCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCSAJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJIAk9IHVubWFza19JT19BUElDX2lycSwKLQkuYWNrIAkJPSBhY2tfeDJhcGljX2VkZ2UsCi0JLmVvaSAJCT0gYWNrX3gyYXBpY19sZXZlbCwKKwkubmFtZQkJPSAiSVItSU8tQVBJQyIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCisJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKKwkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKwkuYWNrCQk9IGFja194MmFwaWNfZWRnZSwKKwkuZW9pCQk9IGFja194MmFwaWNfbGV2ZWwsCiAjaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkgCT0gc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEsCisJLnNldF9hZmZpbml0eQk9IHNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxLAogI2VuZGlmCiAJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAogfTsKQEAgLTE4NTMsNiArMjQwMiw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9JT19BUElDX3RyYXBzKHZvaWQpCiB7CiAJaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKIAogCS8qCiAJICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRsaW5nCkBAIC0xODY1LDggKzI0MTYsOCBAQAogCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCiAJICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCiAJICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTIDsgaXJxKyspIHsKLQkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgIWlycV9jZmdbaXJxXS52ZWN0b3IpIHsKKwlmb3JfZWFjaF9pcnFfY2ZnKGlycSwgY2ZnKSB7CisJCWlmIChJT19BUElDX0lSUShpcnEpICYmICFjZmctPnZlY3RvcikgewogCQkJLyoKIAkJCSAqIEhtbS4uIFdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsCiAJCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQpAQCAtMTg3NCwxMyArMjQyNSwyNyBAQAogCQkJICovCiAJCQlpZiAoaXJxIDwgMTYpCiAJCQkJbWFrZV84MjU5QV9pcnEoaXJxKTsKLQkJCWVsc2UKKwkJCWVsc2UgeworCQkJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCQkJCS8qIFN0cmFuZ2UuIE9oLCB3ZWxsLi4gKi8KLQkJCQlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmbm9faXJxX2NoaXA7CisJCQkJZGVzYy0+Y2hpcCA9ICZub19pcnFfY2hpcDsKKwkJCX0KIAkJfQogCX0KIH0KIAorLyoKKyAqIFRoZSBsb2NhbCBBUElDIGlycS1jaGlwIGltcGxlbWVudGF0aW9uOgorICovCisKK3N0YXRpYyB2b2lkIG1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyB2OworCisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKK30KKwogc3RhdGljIHZvaWQgdW5tYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgdjsKQEAgLTE4ODksMTQgKzI0NTQsNiBAQAogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2ICYgfkFQSUNfTFZUX01BU0tFRCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLX0KLQogc3RhdGljIHZvaWQgYWNrX2xhcGljX2lycSAodW5zaWduZWQgaW50IGlycSkKIHsKIAlhY2tfQVBJQ19pcnEoKTsKQEAgLTE5MTEsNyArMjQ2OCwxMCBAQAogCiBzdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEpCiB7Ci0JaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9MRVZFTDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCiAJCQkJICAgICAgImVkZ2UiKTsKIH0KQEAgLTE5MTksMTkgKzI0NzksMTkgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ubWkodm9pZCkKIHsKIAkvKgotIAkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KKwkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KIAkgKiBXZSBwdXQgdGhlIDgyNTlBIG1hc3RlciBpbnRvIEFFT0kgbW9kZSBhbmQKIAkgKiB1bm1hc2sgb24gYWxsIGxvY2FsIEFQSUNzIExWVDAgYXMgTk1JLgogCSAqCiAJICogVGhlIGlkZWEgdG8gdXNlIHRoZSA4MjU5QSBpbiBBRU9JIG1vZGUgKCc4MjU5QSBWaXJ0dWFsIFdpcmUnKQogCSAqIGlzIGZyb20gTWFjaWVqIFcuIFJvenlja2kgLSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBFT0kgZnJvbQogCSAqIHRoZSBOTUkgaGFuZGxlciBvciB0aGUgdGltZXIgaW50ZXJydXB0LgotCSAqLyAKLQlwcmludGsoS0VSTl9JTkZPICJhY3RpdmF0aW5nIE5NSSBXYXRjaGRvZyAuLi4iKTsKKwkgKi8KKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7CiAKIAllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOwogCi0JcHJpbnRrKCIgZG9uZS5cbiIpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBkb25lLlxuIik7CiB9CiAKIC8qCkBAIC0xOTQ4LDEyICsyNTA4LDE3IEBACiAJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7CiAKIAlwaW4gID0gZmluZF9pc2FfaXJxX3Bpbig4LCBtcF9JTlQpOwotCWFwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYyg4LCBtcF9JTlQpOwotCWlmIChwaW4gPT0gLTEpCisJaWYgKHBpbiA9PSAtMSkgeworCQlXQVJOX09OX09OQ0UoMSk7CiAJCXJldHVybjsKKwl9CisJYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDgsIG1wX0lOVCk7CisJaWYgKGFwaWMgPT0gLTEpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQogCiAJZW50cnkwID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQogCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7CiAKIAltZW1zZXQoJmVudHJ5MSwgMCwgc2l6ZW9mKGVudHJ5MSkpOwpAQCAtMTk4OCwyMyArMjU1MywzOCBAQAogCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MCk7CiB9CiAKK3N0YXRpYyBpbnQgZGlzYWJsZV90aW1lcl9waW5fMSBfX2luaXRkYXRhOworLyogQWN0dWFsbHkgdGhlIG5leHQgaXMgb2Jzb2xldGUsIGJ1dCBrZWVwIGl0IGZvciBwYXJhbm9pZCByZWFzb25zIC1BSyAqLworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV90aW1lcl9waW5fc2V0dXAoY2hhciAqYXJnKQoreworCWRpc2FibGVfdGltZXJfcGluXzEgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImRpc2FibGVfdGltZXJfcGluXzEiLCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cCk7CisKK2ludCB0aW1lcl90aHJvdWdoXzgyNTkgX19pbml0ZGF0YTsKKwogLyoKICAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKICAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQogICogaXMgc28gc2NyZXd5LiAgVGhhbmtzIHRvIEJyaWFuIFBlcmtpbnMgZm9yIHRlc3RpbmcvaGFja2luZyB0aGlzIGJlYXN0CiAgKiBmYW5hdGljYWxseSBvbiBoaXMgdHJ1bHkgYnVnZ3kgYm9hcmQuCiAgKgotICogRklYTUU6IHJlYWxseSBuZWVkIHRvIHJldmFtcCB0aGlzIGZvciBtb2Rlcm4gcGxhdGZvcm1zIG9ubHkuCisgKiBGSVhNRTogcmVhbGx5IG5lZWQgdG8gcmV2YW1wIHRoaXMgZm9yIGFsbCBwbGF0Zm9ybXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfdGltZXIodm9pZCkKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIDA7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoMCk7CiAJaW50IGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2ZXI7CiAJaW50IG5vX3BpbjEgPSAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCisJdmVyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHZlcik7CisKIAkvKgogCSAqIGdldC9zZXQgdGhlIHRpbWVyIElSUSB2ZWN0b3I6CiAJICovCkBAIC0yMDEzLDEwICsyNTkzLDE4IEBACiAKIAkvKgogCSAqIEFzIElSUTAgaXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgODI1OUEsIHRoZSB2aXJ0dWFsCi0JICogd2lyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIGxvY2FsIEFQSUMuCisJICogd2lyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIGxvY2FsIEFQSUMuICBBbHNvCisJICogdGltZXIgaW50ZXJydXB0cyBuZWVkIHRvIGJlIGFja25vd2xlZGdlZCBtYW51YWxseSBpbgorCSAqIHRoZSA4MjU5QSBmb3IgdGhlIGk4MjQ4OURYIHdoZW4gdXNpbmcgdGhlIE5NSQorCSAqIHdhdGNoZG9nIGFzIHRoYXQgQVBJQyB0cmVhdHMgTk1JcyBhcyBsZXZlbC10cmlnZ2VyZWQuCisJICogVGhlIEFFT0kgbW9kZSB3aWxsIGZpbmlzaCB0aGVtIGluIHRoZSA4MjU5QQorCSAqIGF1dG9tYXRpY2FsbHkuCiAJICovCiAJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRVhUSU5UKTsKIAlpbml0XzgyNTlBKDEpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwl0aW1lcl9hY2sgPSAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDICYmICFBUElDX0lOVEVHUkFURUQodmVyKSk7CisjZW5kaWYKIAogCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOwogCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKQEAgLTIwMzUsOCArMjYyMywxMCBAQAogCSAqIDgyNTlBLgogCSAqLwogCWlmIChwaW4xID09IC0xKSB7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCQlwYW5pYygiQklPUyBidWc6IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQyIpOworI2VuZGlmCiAJCXBpbjEgPSBwaW4yOwogCQlhcGljMSA9IGFwaWMyOwogCQlub19waW4xID0gMTsKQEAgLTIwNTQsNyArMjY0NCw3IEBACiAJCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOwogCQl9CiAJCXVubWFza19JT19BUElDX2lycSgwKTsKLQkJaWYgKCFub190aW1lcl9jaGVjayAmJiB0aW1lcl9pcnFfd29ya3MoKSkgeworCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJCQlzZXR1cF9ubWkoKTsKIAkJCQllbmFibGVfODI1OUFfaXJxKDApOwpAQCAtMjA2Myw4ICsyNjUzLDEwIEBACiAJCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7CiAJCQlnb3RvIG91dDsKIAkJfQorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQkJcGFuaWMoInRpbWVyIGRvZXNuJ3Qgd29yayB0aHJvdWdoIEludGVycnVwdC1yZW1hcHBlZCBJTy1BUElDIik7CisjZW5kaWYKIAkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzEsIHBpbjEpOwogCQlpZiAoIW5vX3BpbjEpCiAJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0VSUiAiLi5NUC1CSU9TIGJ1ZzogIgpAQCAtMjEwNCw2ICsyNjk2LDkgQEAKIAkJCSAgICAidGhyb3VnaCB0aGUgSU8tQVBJQyAtIGRpc2FibGluZyBOTUkgV2F0Y2hkb2chXG4iKTsKIAkJbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7CiAJfQorI2lmZGVmIENPTkZJR19YODZfMzIKKwl0aW1lcl9hY2sgPSAwOworI2VuZGlmCiAKIAlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KIAkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIFZpcnR1YWwgV2lyZSBJUlEuLi5cbiIpOwpAQCAtMjE0MCwxMyArMjczNSw2IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hlY2soY2hhciAqcykKLXsKLQlub190aW1lcl9jaGVjayA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJub190aW1lcl9jaGVjayIsIG5vdGltZXJjaGVjayk7Ci0KIC8qCiAgKiBUcmFkaXRpb25hbGx5IElTQSBJUlEyIGlzIHRoZSBjYXNjYWRlIElSUSwgYW5kIGlzIG5vdCBhdmFpbGFibGUKICAqIHRvIGRldmljZXMuICBIb3dldmVyIHRoZXJlIG1heSBiZSBhbiBJL08gQVBJQyBwaW4gYXZhaWxhYmxlIGZvcgpAQCAtMjE2NCwyNSArMjc1Miw0OSBAQAogICogdGhlIEkvTyBBUElDIGluIGFsbCBjYXNlcyBub3cuICBObyBhY3R1YWwgZGV2aWNlIHNob3VsZCByZXF1ZXN0CiAgKiBpdCBhbnl3YXkuICAtLW1hY3JvCiAgKi8KLSNkZWZpbmUgUElDX0lSUVMJKDE8PDIpCisjZGVmaW5lIFBJQ19JUlFTCSgxIDw8IFBJQ19DQVNDQURFX0lSKQogCiB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCiB7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZW5hYmxlX0lPX0FQSUMoKTsKKyNlbHNlCiAJLyoKIAkgKiBjYWxsaW5nIGVuYWJsZV9JT19BUElDKCkgaXMgbW92ZWQgdG8gc2V0dXBfbG9jYWxfQVBJQyBmb3IgQlAKIAkgKi8KKyNlbmRpZgogCiAJaW9fYXBpY19pcnFzID0gflBJQ19JUlFTOwogCiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKLQorCS8qCisgICAgICAgICAqIFNldCB1cCBJTy1BUElDIElSUSByb3V0aW5nLgorICAgICAgICAgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCFhY3BpX2lvYXBpYykKKwkJc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYygpOworI2VuZGlmCiAJc3luY19BcmJfSURzKCk7CiAJc2V0dXBfSU9fQVBJQ19pcnFzKCk7CiAJaW5pdF9JT19BUElDX3RyYXBzKCk7CiAJY2hlY2tfdGltZXIoKTsKIH0KIAorLyoKKyAqICAgICAgQ2FsbGVkIGFmdGVyIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gSWYgd2UgZGlkbnQgZmluZCBhbnkKKyAqICAgICAgQVBJQyBidWdzIHRoZW4gd2UgY2FuIGFsbG93IHRoZSBtb2RpZnkgZmFzdCBwYXRoCisgKi8KKworc3RhdGljIGludCBfX2luaXQgaW9fYXBpY19idWdfZmluYWxpemUodm9pZCkKK3sKKwlpZiAoc2lzX2FwaWNfYnVnID09IC0xKQorCQlzaXNfYXBpY19idWcgPSAwOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGlvX2FwaWNfYnVnX2ZpbmFsaXplKTsKKwogc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhIHsKIAlzdHJ1Y3Qgc3lzX2RldmljZSBkZXY7CiAJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnlbMF07CkBAIC0yMjcwLDMyICsyODgyLDUxIEBACiAvKgogICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgogICovCi1pbnQgY3JlYXRlX2lycSh2b2lkKQordW5zaWduZWQgaW50IGNyZWF0ZV9pcnFfbnIodW5zaWduZWQgaW50IGlycV93YW50KQogewogCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KLQlpbnQgaXJxOwotCWludCBuZXc7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgbmV3OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZ19uZXc7CiAKLQlpcnEgPSAtRU5PU1BDOworCWlycV93YW50ID0gbnJfaXJxcyAtIDE7CisKKwlpcnEgPSAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWZvciAobmV3ID0gKE5SX0lSUVMgLSAxKTsgbmV3ID49IDA7IG5ldy0tKSB7CisJZm9yIChuZXcgPSBpcnFfd2FudDsgbmV3ID4gMDsgbmV3LS0pIHsKIAkJaWYgKHBsYXRmb3JtX2xlZ2FjeV9pcnEobmV3KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaXJxX2NmZ1tuZXddLnZlY3RvciAhPSAwKQorCQljZmdfbmV3ID0gaXJxX2NmZyhuZXcpOworCQlpZiAoY2ZnX25ldyAmJiBjZmdfbmV3LT52ZWN0b3IgIT0gMCkKIAkJCWNvbnRpbnVlOworCQkvKiBjaGVjayBpZiBuZWVkIHRvIGNyZWF0ZSBvbmUgKi8KKwkJaWYgKCFjZmdfbmV3KQorCQkJY2ZnX25ldyA9IGlycV9jZmdfYWxsb2MobmV3KTsKIAkJaWYgKF9fYXNzaWduX2lycV92ZWN0b3IobmV3LCBUQVJHRVRfQ1BVUykgPT0gMCkKIAkJCWlycSA9IG5ldzsKIAkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoaXJxID49IDApIHsKKwlpZiAoaXJxID4gMCkgewogCQlkeW5hbWljX2lycV9pbml0KGlycSk7CiAJfQogCXJldHVybiBpcnE7CiB9CiAKK2ludCBjcmVhdGVfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCWlycSA9IGNyZWF0ZV9pcnFfbnIobnJfaXJxcyAtIDEpOworCisJaWYgKGlycSA9PSAwKQorCQlpcnEgPSAtMTsKKworCXJldHVybiBpcnE7Cit9CisKIHZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjMxNiw3ICsyOTQ3LDcgQEAKICNpZmRlZiBDT05GSUdfUENJX01TSQogc3RhdGljIGludCBtc2lfY29tcG9zZV9tc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCiB7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGRlc3Q7CiAJY3B1bWFza190IHRtcDsKQEAgLTIzMjYsNiArMjk1Nyw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCB0bXApOwogCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKIApAQCAtMjM4MywxMCArMzAxNSwxMSBAQAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwogCXVuc2lnbmVkIGludCBkZXN0OwogCWNwdW1hc2tfdCB0bXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CiAJaWYgKGNwdXNfZW1wdHkodG1wKSkKQEAgLTIzOTUsNiArMzAyOCw3IEBACiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCiAJCXJldHVybjsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAKQEAgLTI0MDYsNyArMzA0MCw4IEBACiAJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKIAogCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CiB9CiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUApAQCAtMjQxNiwxMCArMzA1MSwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXVuc2lnbmVkIGludCBkZXN0OwogCWNwdW1hc2tfdCB0bXAsIGNsZWFudXBfbWFzazsKIAlzdHJ1Y3QgaXJ0ZSBpcnRlOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCkBAIC0yNDMxLDYgKzMwNjcsNyBAQAogCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQogCQlyZXR1cm47CiAKKwljZmcgPSBpcnFfY2ZnKGlycSk7CiAJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CiAJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCkBAIC0yNDU0LDcgKzMwOTEsOCBAQAogCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOwogCX0KIAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKIH0KICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTI1MDcsNyArMzE0NSw3IEBACiAJaWYgKGluZGV4IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgJWQgSVJURSBmb3IgUENJICVzXG4iLCBudmVjLAotCQkgICAgICAgIHBjaV9uYW1lKGRldikpOworCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlyZXR1cm4gaW5kZXg7CkBAIC0yNTI4LDcgKzMxNjYsNyBAQAogCiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJCS8qCiAJCSAqIGlycSBtaWdyYXRpb24gaW4gcHJvY2VzcyBjb250ZXh0CiAJCSAqLwpAQCAtMjUzOCwxNiArMzE3NiwzNCBAQAogI2VuZGlmCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImlycSAlZCBmb3IgTVNJL01TSS1YXG4iLCBpcnEpOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlycSA9IGRldi0+YnVzLT5udW1iZXI7CisJaXJxIDw8PSA4OworCWlycSB8PSBkZXYtPmRldmZuOworCWlycSA8PD0gMTI7CisKKwlyZXR1cm4gaXJxOworfQorCiBpbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKIHsKLQlpbnQgaXJxLCByZXQ7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnFfd2FudDsKIAotCWlycSA9IGNyZWF0ZV9pcnEoKTsKLQlpZiAoaXJxIDwgMCkKLQkJcmV0dXJuIGlycTsKKwlpcnFfd2FudCA9IGJ1aWxkX2lycV9mb3JfcGNpX2RldihkZXYpICsgMHgxMDA7CisKKwlpcnEgPSBjcmVhdGVfaXJxX25yKGlycV93YW50KTsKKwlpZiAoaXJxID09IDApCisJCXJldHVybiAtMTsKIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQpAQCAtMjU3NCwxOCArMzIzMCwyMiBAQAogCiBpbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7Ci0JaW50IGlycSwgcmV0LCBzdWJfaGFuZGxlOworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IHJldCwgc3ViX2hhbmRsZTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgaW50IGlycV93YW50OworCiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gMDsKIAlpbnQgaW5kZXggPSAwOwogI2VuZGlmCiAKKwlpcnFfd2FudCA9IGJ1aWxkX2lycV9mb3JfcGNpX2RldihkZXYpICsgMHgxMDA7CiAJc3ViX2hhbmRsZSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JCWlmIChpcnEgPCAwKQotCQkJcmV0dXJuIGlycTsKKwkJaXJxID0gY3JlYXRlX2lycV9ucihpcnFfd2FudC0tKTsKKwkJaWYgKGlycSA9PSAwKQorCQkJcmV0dXJuIC0xOwogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCWlmICghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCWdvdG8gbm9faXI7CkBAIC0yNjM2LDEwICszMjk2LDExIEBACiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgZG1hcl9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwogCXVuc2lnbmVkIGludCBkZXN0OwogCWNwdW1hc2tfdCB0bXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CiAJaWYgKGNwdXNfZW1wdHkodG1wKSkKQEAgLTI2NDgsNiArMzMwOSw3IEBACiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCiAJCXJldHVybjsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAKQEAgLTI2NTksNyArMzMyMSw4IEBACiAJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKIAogCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApAQCAtMjY4OSw2ICszMzUyLDY5IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBocGV0X21zaV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisKKwljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1c19lbXB0eSh0bXApKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWhwZXRfbXNpX3JlYWQoaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCWhwZXRfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CisJLm5hbWUgPSAiSFBFVF9NU0kiLAorCS51bm1hc2sgPSBocGV0X21zaV91bm1hc2ssCisJLm1hc2sgPSBocGV0X21zaV9tYXNrLAorCS5hY2sgPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gaHBldF9tc2lfc2V0X2FmZmluaXR5LAorI2VuZGlmCisJLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKworCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaHBldF9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZocGV0X21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCisJCSJlZGdlIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KIC8qCiAgKiBIeXBlcnRyYW5zcG9ydCBpbnRlcnJ1cHQgc3VwcG9ydApAQCAtMjcxMyw5ICszNDM5LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCkBAIC0yNzI0LDExICszNDUxLDEzIEBACiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCiAJCXJldHVybjsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAKIAl0YXJnZXRfaHRfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKIH0KICNlbmRpZgogCkBAIC0yNzQ1LDcgKzM0NzQsNyBAQAogCiBpbnQgYXJjaF9zZXR1cF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCWludCBlcnI7CiAJY3B1bWFza190IHRtcDsKIApAQCAtMjc1NSw2ICszNDg0LDcgQEAKIAkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwogCQl1bnNpZ25lZCBkZXN0OwogCisJCWNmZyA9IGlycV9jZmcoaXJxKTsKIAkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgdG1wKTsKIAkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCkBAIC0yNzc3LDE4ICszNTA3LDc4IEBACiAKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaHRfaXJxX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImlycSAlZCBmb3IgSFRcbiIsIGlycSk7CiAJfQogCXJldHVybiBlcnI7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJLWJhc2VkIElPQVBJQyBDb25maWd1cmF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qCisgKiBSZS10YXJnZXQgdGhlIGlycSB0byB0aGUgc3BlY2lmaWVkIENQVSBhbmQgZW5hYmxlIHRoZSBzcGVjaWZpZWQgTU1SIGxvY2F0ZWQKKyAqIG9uIHRoZSBzcGVjaWZpZWQgYmxhZGUgdG8gYWxsb3cgdGhlIHNlbmRpbmcgb2YgTVNJcyB0byB0aGUgc3BlY2lmaWVkIENQVS4KKyAqLworaW50IGFyY2hfZW5hYmxlX3V2X2lycShjaGFyICppcnFfbmFtZSwgdW5zaWduZWQgaW50IGlycSwgaW50IGNwdSwgaW50IG1tcl9ibGFkZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgbW1yX29mZnNldCkKK3sKKwljb25zdCBjcHVtYXNrX3QgKmVsaWdpYmxlX2NwdSA9IGdldF9jcHVfbWFzayhjcHUpOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IG1tcl9wbm9kZTsKKwl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsKKwlzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX0FDUEkKKwllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsICplbGlnaWJsZV9jcHUpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKIAotI2RlZmluZSBJT19BUElDX01BWF9JRAkJMHhGRQorCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnV2X2lycV9jaGlwLCBoYW5kbGVfcGVyY3B1X2lycSwKKwkJCQkgICAgICBpcnFfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKworCW1tcl92YWx1ZSA9IDA7CisJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOworCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwllbnRyeS0+dmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwllbnRyeS0+ZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwllbnRyeS0+cG9sYXJpdHkgPSAwOworCWVudHJ5LT50cmlnZ2VyID0gMDsKKwllbnRyeS0+bWFzayA9IDA7CisJZW50cnktPmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoKmVsaWdpYmxlX2NwdSk7CisKKwltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7CisKKwlyZXR1cm4gaXJxOworfQorCisvKgorICogRGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkIG9uIHRoZSBzcGVjaWZpZWQgYmxhZGUgc28gdGhhdCBNU0lzIGFyZQorICogbG9uZ2VyIGFsbG93ZWQgdG8gYmUgc2VudC4KKyAqLwordm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCBtbXJfYmxhZGUsIHVuc2lnbmVkIGxvbmcgbW1yX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsKKwlzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7CisJaW50IG1tcl9wbm9kZTsKKworCW1tcl92YWx1ZSA9IDA7CisJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOworCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwllbnRyeS0+bWFzayA9IDE7CisKKwltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiBpbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMgKGludCBpb2FwaWMpCiB7CkBAIC0yODAyLDYgKzM1OTIsMTIyIEBACiAJcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7CiB9CiAKK2ludCBfX2luaXQgcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCWludCBpZHg7CisJaW50IG5yID0gMDsKKyNpZm5kZWYgQ09ORklHX1hFTgorCWludCBucl9taW4gPSAzMjsKKyNlbHNlCisJaW50IG5yX21pbiA9IE5SX0lSUVM7CisjZW5kaWYKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfaW9hcGljczsgaWR4KyspCisJCW5yICs9IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KSArIDE7CisKKwkvKiBkb3VibGUgaXQgZm9yIGhvdHBsdWcgYW5kIG1zaSBhbmQgbm1pICovCisJbnIgPDw9IDE7CisKKwkvKiBzb21ldGhpbmcgd3JvbmcgPyAqLworCWlmIChuciA8IG5yX21pbikKKwkJbnIgPSBucl9taW47CisKKwlyZXR1cm4gbnI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgSU9BUElDIENvbmZpZ3VyYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQUNQSQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgoraW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXN0YXRpYyBwaHlzaWRfbWFza190IGFwaWNfaWRfbWFwID0gUEhZU0lEX01BU0tfTk9ORTsKKwlwaHlzaWRfbWFza190IHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpID0gMDsKKworCS8qCisJICogVGhlIFA0IHBsYXRmb3JtIHN1cHBvcnRzIHVwIHRvIDI1NiBBUElDIElEcyBvbiB0d28gc2VwYXJhdGUgQVBJQworCSAqIGJ1c2VzIChvbmUgZm9yIExBUElDcywgb25lIGZvciBJT0FQSUNzKSwgd2hlcmUgcHJlZGVjZXNzb3JzIG9ubHkKKwkgKiBzdXBwb3J0cyB1cCB0byAxNiBvbiBvbmUgc2hhcmVkIEFQSUMgYnVzLgorCSAqCisJICogVEJEOiBFeHBhbmQgTEFQSUMvSU9BUElDIHN1cHBvcnQgb24gUDQtY2xhc3Mgc3lzdGVtcyB0byB0YWtlIGZ1bGwKKwkgKiAgICAgIGFkdmFudGFnZSBvZiBuZXcgQVBJQyBidXMgYXJjaGl0ZWN0dXJlLgorCSAqLworCisJaWYgKHBoeXNpZHNfZW1wdHkoYXBpY19pZF9tYXApKQorCQlhcGljX2lkX21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCisJCQkiJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgcmVnXzAwLmJpdHMuSUQpOworCQlhcGljX2lkID0gcmVnXzAwLmJpdHMuSUQ7CisJfQorCisJLyoKKwkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCisJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCisJICovCisJaWYgKGNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgeworCisJCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykgeworCQkJaWYgKCFjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgaSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCisJCQlwYW5pYygiTWF4IGFwaWNfaWQgZXhjZWVkZWQhXG4iKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBhcGljX2lkICVkIGFscmVhZHkgdXNlZCwgIgorCQkJInRyeWluZyAlZFxuIiwgaW9hcGljLCBhcGljX2lkLCBpKTsKKworCQlhcGljX2lkID0gaTsKKwl9CisKKwl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQoYXBpY19pZCk7CisJcGh5c2lkc19vcihhcGljX2lkX21hcCwgYXBpY19pZF9tYXAsIHRtcCk7CisKKwlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgeworCQlyZWdfMDAuYml0cy5JRCA9IGFwaWNfaWQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgeworCQkJcHJpbnRrKCJJT0FQSUNbJWRdOiBVbmFibGUgdG8gY2hhbmdlIGFwaWNfaWQhXG4iLCBpb2FwaWMpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSJJT0FQSUNbJWRdOiBBc3NpZ25lZCBhcGljX2lkICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQpOworCisJcmV0dXJuIGFwaWNfaWQ7Cit9CisKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKK30KKyNlbmRpZgogCiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCB0cmlnZ2VyaW5nLCBpbnQgcG9sYXJpdHkpCiB7CkBAIC0yODUzLDYgKzM3NTksNyBAQAogdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCkKIHsKIAlpbnQgcGluLCBpb2FwaWMsIGlycSwgaXJxX2VudHJ5OworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAKIAlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKIAkJcmV0dXJuOwpAQCAtMjg2OCw3ICszNzc1LDggQEAKIAkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290CiAJCQkgKiBjcHUgaXMgb25saW5lLgogCQkJICovCi0JCQlpZiAoIWlycV9jZmdbaXJxXS52ZWN0b3IpCisJCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCQlpZiAoIWNmZy0+dmVjdG9yKQogCQkJCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsCiAJCQkJCQkgIGlycV90cmlnZ2VyKGlycV9lbnRyeSksCiAJCQkJCQkgIGlycV9wb2xhcml0eShpcnFfZW50cnkpKTsKQEAgLTI5MjYsMTggKzM4MzQsMzMgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXM7CiAJaW50IGk7CiAKKwlpcnFfMl9waW5faW5pdCgpOwogCWlvYXBpY19yZXMgPSBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKCk7CiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewogCQlpZiAoc21wX2ZvdW5kX2NvbmZpZykgewogCQkJaW9hcGljX3BoeXMgPSBtcF9pb2FwaWNzW2ldLm1wX2FwaWNhZGRyOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJCWlmICghaW9hcGljX3BoeXMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIldBUk5JTkc6IGJvZ3VzIHplcm8gSU8tQVBJQyAiCisJCQkJICAgICAgICJhZGRyZXNzIGZvdW5kIGluIE1QVEFCTEUsICIKKwkJCQkgICAgICAgImRpc2FibGluZyBJTy9BUElDIHN1cHBvcnQhXG4iKTsKKwkJCQlzbXBfZm91bmRfY29uZmlnID0gMDsKKwkJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7CisJCQkJZ290byBmYWtlX2lvYXBpY19wYWdlOworCQkJfQorI2VuZGlmCiAJCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZmFrZV9pb2FwaWNfcGFnZToKKyNlbmRpZgogCQkJaW9hcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykKIAkJCQlhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAJCQlpb2FwaWNfcGh5cyA9IF9fcGEoaW9hcGljX3BoeXMpOwogCQl9CiAJCXNldF9maXhtYXBfbm9jYWNoZShpZHgsIGlvYXBpY19waHlzKTsKIAkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAotCQkJICAgICJtYXBwZWQgSU9BUElDIHRvICUwMTZseCAoJTAxNmx4KVxuIiwKKwkJCSAgICAibWFwcGVkIElPQVBJQyB0byAlMDhseCAoJTA4bHgpXG4iLAogCQkJICAgIF9fZml4X3RvX3ZpcnQoaWR4KSwgaW9hcGljX3BoeXMpOwogCQlpZHgrKzsKIApAQCAtMjk3MSw0ICszODk0LDMgQEAKIC8qIEluc2VydCB0aGUgSU8gQVBJQyByZXNvdXJjZXMgYWZ0ZXIgUENJIGluaXRpYWxpemF0aW9uIGhhcyBvY2N1cmVkIHRvIGhhbmRsZQogICogSU8gQVBJQ1MgdGhhdCBhcmUgbWFwcGVkIGluIG9uIGEgQkFSIGluIFBDSSBzcGFjZS4gKi8KIGxhdGVfaW5pdGNhbGwoaW9hcGljX2luc2VydF9yZXNvdXJjZXMpOwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY18zMi5jIGIvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcxMDI4OS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY18zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkwOCArMCwwIEBACi0vKgotICoJSW50ZWwgSU8tQVBJQyBzdXBwb3J0IGZvciBtdWx0aS1QZW50aXVtIGhvc3RzLgotICoKLSAqCUNvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciwgSGFqbmFsa2EgU3phYm8KLSAqCi0gKglNYW55IHRoYW5rcyB0byBTdGlnIFZlbmFhcyBmb3IgdHJ5aW5nIG91dCBjb3VudGxlc3MgZXhwZXJpbWVudGFsCi0gKglwYXRjaGVzIGFuZCByZXBvcnRpbmcvZGVidWdnaW5nIHByb2JsZW1zIHBhdGllbnRseSEKLSAqCi0gKgkoYykgMTk5OSwgTXVsdGlwbGUgSU8tQVBJQyBzdXBwb3J0LCBkZXZlbG9wZWQgYnkKLSAqCUtlbi1pY2hpIFlha3UgPHlha3VAY3NzMS5rYm5lcy5uZWMuY28uanA+IGFuZAotICogICAgICBIaWRlbWkgS2lzaGltb3RvIDxraXNpbW90b0Bjc3MxLmtibmVzLm5lYy5jby5qcD4sCi0gKglmdXJ0aGVyIHRlc3RlZCBhbmQgY2xlYW5lZCB1cCBieSBaYWNoIEJyb3duIDx6YWJAcmVkaGF0LmNvbT4KLSAqCWFuZCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLSAqCi0gKglGaXhlcwotICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7Ci0gKgkJCQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZQotICoJCQkJCWFuZCBSb2xmIEcuIFRld3MKLSAqCQkJCQlmb3IgdGVzdGluZyB0aGVzZSBleHRlbnNpdmVseQotICoJUGF1bCBEaWVmZW5iYXVnaAk6CUFkZGVkIGZ1bGwgQUNQSSBzdXBwb3J0Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9tc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9odGlycS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgKi8KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLSNpbmNsdWRlIDxhc20vbXNpZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL2h5cGVydHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KLQotI2RlZmluZSBfX2FwaWNkZWJ1Z2luaXQodHlwZSkgc3RhdGljIHR5cGUgX19pbml0Ci0KLWludCAoKmlvYXBpY19yZW51bWJlcl9pcnEpKGludCBpb2FwaWMsIGludCBpcnEpOwotYXRvbWljX3QgaXJxX21pc19jb3VudDsKLQotLyogV2hlcmUgaWYgYW55d2hlcmUgaXMgdGhlIGk4MjU5IGNvbm5lY3QgaW4gZXh0ZXJuYWwgaW50IG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgeyBpbnQgcGluLCBhcGljOyB9IGlvYXBpY19pODI1OSA9IHsgLTEsIC0xIH07Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9hcGljX2xvY2spOwotREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKLQotaW50IHRpbWVyX3Rocm91Z2hfODI1OSBfX2luaXRkYXRhOwotCi0vKgotICoJSXMgdGhlIFNpUyBBUElDIHJtdyBidWcgcHJlc2VudCA/Ci0gKgktMSA9IGRvbid0IGtub3csIDAgPSBubywgMSA9IHllcwotICovCi1pbnQgc2lzX2FwaWNfYnVnID0gLTE7Ci0KLS8qCi0gKiAjIG9mIElSUSByb3V0aW5nIHJlZ2lzdGVycwotICovCi1pbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOwotCi0vKiBJL08gQVBJQyBlbnRyaWVzICovCi1zdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107Ci1pbnQgbnJfaW9hcGljczsKLQotLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1zdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107Ci0KLS8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1pbnQgbXBfaXJxX2VudHJpZXM7Ci0KLSNpZiBkZWZpbmVkIChDT05GSUdfTUNBKSB8fCBkZWZpbmVkIChDT05GSUdfRUlTQSkKLWludCBtcF9idXNfaWRfdG9fdHlwZVtNQVhfTVBfQlVTU0VTXTsKLSNlbmRpZgotCi1ERUNMQVJFX0JJVE1BUChtcF9idXNfbm90X3BjaSwgTUFYX01QX0JVU1NFUyk7Ci0KLXN0YXRpYyBpbnQgZGlzYWJsZV90aW1lcl9waW5fMSBfX2luaXRkYXRhOwotCi0vKgotICogUm91Z2ggZXN0aW1hdGlvbiBvZiBob3cgbWFueSBzaGFyZWQgSVJRcyB0aGVyZSBhcmUsIGNhbgotICogYmUgY2hhbmdlZCBhbnl0aW1lLgotICovCi0jZGVmaW5lIE1BWF9QTFVTX1NIQVJFRF9JUlFTIE5SX0lSUVMKLSNkZWZpbmUgUElOX01BUF9TSVpFIChNQVhfUExVU19TSEFSRURfSVJRUyArIE5SX0lSUVMpCi0KLS8qCi0gKiBUaGlzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCB3ZSB3YW50IHRvIGRvIGl0IE8oMSkKLSAqCi0gKiB0aGUgaW5kZXhpbmcgb3JkZXIgb2YgdGhpcyBhcnJheSBmYXZvcnMgMToxIG1hcHBpbmdzCi0gKiBiZXR3ZWVuIHBpbnMgYW5kIElSUXMuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgewotCWludCBhcGljLCBwaW4sIG5leHQ7Ci19IGlycV8yX3BpbltQSU5fTUFQX1NJWkVdOwotCi1zdHJ1Y3QgaW9fYXBpYyB7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXVuc2lnbmVkIGludCB1bnVzZWRbM107Ci0JdW5zaWduZWQgaW50IGRhdGE7Ci19OwotCi1zdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSBfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkKLQkJKyAobXBfaW9hcGljc1tpZHhdLm1wX2FwaWNhZGRyICYgflBBR0VfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX2FwaWNfcmVhZCh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZykKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0JcmV0dXJuIHJlYWRsKCZpb19hcGljLT5kYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfd3JpdGUodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0Jd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Ci19Ci0KLS8qCi0gKiBSZS13cml0ZSBhIHZhbHVlOiB0byBiZSB1c2VkIGZvciByZWFkLW1vZGlmeS13cml0ZQotICogY3ljbGVzIHdoZXJlIHRoZSByZWFkIGFscmVhZHkgc2V0IHVwIHRoZSBpbmRleCByZWdpc3Rlci4KLSAqCi0gKiBPbGRlciBTaVMgQVBJQyByZXF1aXJlcyB3ZSByZXdyaXRlIHRoZSBpbmRleCByZWdpc3RlcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnkodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl2b2xhdGlsZSBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCWlmIChzaXNfYXBpY19idWcpCi0JCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0Jd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Ci19Ci0KLXVuaW9uIGVudHJ5X3VuaW9uIHsKLQlzdHJ1Y3QgeyB1MzIgdzEsIHcyOyB9OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotfTsKLQotc3RhdGljIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGlvYXBpY19yZWFkX2VudHJ5KGludCBhcGljLCBpbnQgcGluKQotewotCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZXUudzEgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIDIgKiBwaW4pOwotCWV1LncyID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTEgKyAyICogcGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJldHVybiBldS5lbnRyeTsKLX0KLQotLyoKLSAqIFdoZW4gd2Ugd3JpdGUgYSBuZXcgSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBoaWdoCi0gKiB3b3JkIGZpcnN0ISBJZiB0aGUgbWFzayBiaXQgaW4gdGhlIGxvdyB3b3JkIGlzIGNsZWFyLCB3ZSB3aWxsIGVuYWJsZQotICogdGhlIGludGVycnVwdCwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnRyeSBpcyBmdWxseSBwb3B1bGF0ZWQKLSAqIGJlZm9yZSB0aGF0IGhhcHBlbnMuCi0gKi8KLXN0YXRpYyB2b2lkCi1fX2lvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKLXsKLQl1bmlvbiBlbnRyeV91bmlvbiBldTsKLQlldS5lbnRyeSA9IGU7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOwotfQotCi1zdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX2lvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBXaGVuIHdlIG1hc2sgYW4gSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsb3cKLSAqIHdvcmQgZmlyc3QsIGluIG9yZGVyIHRvIHNldCB0aGUgbWFzayBiaXQgYmVmb3JlIHdlIGNoYW5nZSB0aGUKLSAqIGhpZ2ggYml0cyEKLSAqLwotc3RhdGljIHZvaWQgaW9hcGljX21hc2tfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBlbnRyeV91bmlvbiBldSA9IHsgLmVudHJ5Lm1hc2sgPSAxIH07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIFRoZSBjb21tb24gY2FzZSBpcyAxOjEgSVJRPC0+cGluIG1hcHBpbmdzLiBTb21ldGltZXMgdGhlcmUgYXJlCi0gKiBzaGFyZWQgSVNBLXNwYWNlIElSUXMsIHNvIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGVtLiBXZSBhcmUgc3VwZXIKLSAqIGZhc3QgaW4gdGhlIGNvbW1vbiBjYXNlLCBhbmQgZmFzdCBmb3Igc2hhcmVkIElTQS1zcGFjZSBJUlFzLgotICovCi1zdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlzdGF0aWMgaW50IGZpcnN0X2ZyZWVfZW50cnkgPSBOUl9JUlFTOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCi0Jd2hpbGUgKGVudHJ5LT5uZXh0KQotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCi0JaWYgKGVudHJ5LT5waW4gIT0gLTEpIHsKLQkJZW50cnktPm5leHQgPSBmaXJzdF9mcmVlX2VudHJ5OwotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCQlpZiAoKytmaXJzdF9mcmVlX2VudHJ5ID49IFBJTl9NQVBfU0laRSkKLQkJCXBhbmljKCJpb19hcGljLmM6IHdob29wcyIpOwotCX0KLQllbnRyeS0+YXBpYyA9IGFwaWM7Ci0JZW50cnktPnBpbiA9IHBpbjsKLX0KLQotLyoKLSAqIFJlcm91dGUgYW4gSVJRIHRvIGEgZGlmZmVyZW50IHBpbi4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHJlcGxhY2VfcGluX2F0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAotCQkJCSAgICAgIGludCBvbGRhcGljLCBpbnQgb2xkcGluLAotCQkJCSAgICAgIGludCBuZXdhcGljLCBpbnQgbmV3cGluKQotewotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCi0Jd2hpbGUgKDEpIHsKLQkJaWYgKGVudHJ5LT5hcGljID09IG9sZGFwaWMgJiYgZW50cnktPnBpbiA9PSBvbGRwaW4pIHsKLQkJCWVudHJ5LT5hcGljID0gbmV3YXBpYzsKLQkJCWVudHJ5LT5waW4gPSBuZXdwaW47Ci0JCX0KLQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCWJyZWFrOwotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19tb2RpZnlfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBlbmFibGUsIHVuc2lnbmVkIGxvbmcgZGlzYWJsZSkKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQl1bnNpZ25lZCBpbnQgcGluLCByZWc7Ci0KLQlmb3IgKDs7KSB7Ci0JCXBpbiA9IGVudHJ5LT5waW47Ci0JCWlmIChwaW4gPT0gLTEpCi0JCQlicmVhazsKLQkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgcGluKjIpOwotCQlyZWcgJj0gfmRpc2FibGU7Ci0JCXJlZyB8PSBlbmFibGU7Ci0JCWlvX2FwaWNfbW9kaWZ5KGVudHJ5LT5hcGljLCAweDEwICsgcGluKjIsIHJlZyk7Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLS8qIG1hc2sgPSAxICovCi1zdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX21vZGlmeV9JT19BUElDX2lycShpcnEsIElPX0FQSUNfUkVESVJfTUFTS0VELCAwKTsKLX0KLQotLyogbWFzayA9IDAgKi8KLXN0YXRpYyB2b2lkIF9fdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX19tb2RpZnlfSU9fQVBJQ19pcnEoaXJxLCAwLCBJT19BUElDX1JFRElSX01BU0tFRCk7Ci19Ci0KLS8qIG1hc2sgPSAxLCB0cmlnZ2VyID0gMCAqLwotc3RhdGljIHZvaWQgX19tYXNrX2FuZF9lZGdlX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX19tb2RpZnlfSU9fQVBJQ19pcnEoaXJxLCBJT19BUElDX1JFRElSX01BU0tFRCwKLQkJCQlJT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIpOwotfQotCi0vKiBtYXNrID0gMCwgdHJpZ2dlciA9IDEgKi8KLXN0YXRpYyB2b2lkIF9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbW9kaWZ5X0lPX0FQSUNfaXJxKGlycSwgSU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLAotCQkJCUlPX0FQSUNfUkVESVJfTUFTS0VEKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX21hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCS8qIENoZWNrIGRlbGl2ZXJ5X21vZGUgdG8gYmUgc3VyZSB3ZSdyZSBub3QgY2xlYXJpbmcgYW4gU01JIHBpbiAqLwotCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQlpZiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X1NNSSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEaXNhYmxlIGl0IGluIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCSAqLwotCWlvYXBpY19tYXNrX2VudHJ5KGFwaWMsIHBpbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUModm9pZCkKLXsKLQlpbnQgYXBpYywgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKLQkJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCBzZXRfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgY3B1bWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBwaW47Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7Ci0JdW5zaWduZWQgaW50IGFwaWNpZF92YWx1ZTsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19hbmQodG1wLCBjcHVtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJdG1wID0gVEFSR0VUX0NQVVM7Ci0KLQljcHVzX2FuZChjcHVtYXNrLCB0bXAsIENQVV9NQVNLX0FMTCk7Ci0KLQlhcGljaWRfdmFsdWUgPSBjcHVfbWFza190b19hcGljaWQoY3B1bWFzayk7Ci0JLyogUHJlcGFyZSB0byBkbyB0aGUgaW9fYXBpY193cml0ZSAqLwotCWFwaWNpZF92YWx1ZSA9IGFwaWNpZF92YWx1ZSA8PCAyNDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlmb3IgKDs7KSB7Ci0JCXBpbiA9IGVudHJ5LT5waW47Ci0JCWlmIChwaW4gPT0gLTEpCi0JCQlicmVhazsKLQkJaW9fYXBpY193cml0ZShlbnRyeS0+YXBpYywgMHgxMCArIDEgKyBwaW4qMiwgYXBpY2lkX3ZhbHVlKTsKLQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCWJyZWFrOwotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCX0KLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFzazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSVJRQkFMQU5DRSkKLSMgaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkvKiBrZXJuZWxfdGhyZWFkKCkgKi8KLSMgaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4JLyoga3N0YXQgKi8KLSMgaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpICovCi0jIGluY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0KLSNkZWZpbmUgSVJRQkFMQU5DRV9DSEVDS19BUkNIIC05OTkKLSNkZWZpbmUgTUFYX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTAkoNSpIWikKLSNkZWZpbmUgTUlOX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTAkoSFovMikKLSNkZWZpbmUgQkFMQU5DRURfSVJRX01PUkVfREVMVEEJCShIWi8xMCkKLSNkZWZpbmUgQkFMQU5DRURfSVJRX0xFU1NfREVMVEEJCShIWikKLQotc3RhdGljIGludCBpcnFiYWxhbmNlX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHkgPSBJUlFCQUxBTkNFX0NIRUNLX0FSQ0g7Ci1zdGF0aWMgaW50IHBoeXNpY2FsX2JhbGFuY2UgX19yZWFkX21vc3RseTsKLXN0YXRpYyBsb25nIGJhbGFuY2VkX2lycV9pbnRlcnZhbCBfX3JlYWRfbW9zdGx5ID0gTUFYX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTDsKLQotc3RhdGljIHN0cnVjdCBpcnFfY3B1X2luZm8gewotCXVuc2lnbmVkIGxvbmcgKmxhc3RfaXJxOwotCXVuc2lnbmVkIGxvbmcgKmlycV9kZWx0YTsKLQl1bnNpZ25lZCBsb25nIGlycTsKLX0gaXJxX2NwdV9kYXRhW05SX0NQVVNdOwotCi0jZGVmaW5lIENQVV9JUlEoY3B1KQkJKGlycV9jcHVfZGF0YVtjcHVdLmlycSkKLSNkZWZpbmUgTEFTVF9DUFVfSVJRKGNwdSwgaXJxKSAgIChpcnFfY3B1X2RhdGFbY3B1XS5sYXN0X2lycVtpcnFdKQotI2RlZmluZSBJUlFfREVMVEEoY3B1LCBpcnEpIAkoaXJxX2NwdV9kYXRhW2NwdV0uaXJxX2RlbHRhW2lycV0pCi0KLSNkZWZpbmUgSURMRV9FTk9VR0goY3B1LG5vdykgXAotCShpZGxlX2NwdShjcHUpICYmICgobm93KSAtIHBlcl9jcHUoaXJxX3N0YXQsIChjcHUpKS5pZGxlX3RpbWVzdGFtcCA+IDEpKQotCi0jZGVmaW5lIElSUV9BTExPV0VEKGNwdSwgYWxsb3dlZF9tYXNrKQljcHVfaXNzZXQoY3B1LCBhbGxvd2VkX21hc2spCi0KLSNkZWZpbmUgQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKSAoZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSkpCi0KLXN0YXRpYyBjcHVtYXNrX3QgYmFsYW5jZV9pcnFfYWZmaW5pdHlbTlJfSVJRU10gPSB7Ci0JWzAgLi4uIE5SX0lSUVMtMV0gPSBDUFVfTUFTS19BTEwKLX07Ci0KLXZvaWQgc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCWJhbGFuY2VfaXJxX2FmZmluaXR5W2lycV0gPSBtYXNrOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtb3ZlKGludCBjdXJyX2NwdSwgY3B1bWFza190IGFsbG93ZWRfbWFzaywKLQkJCXVuc2lnbmVkIGxvbmcgbm93LCBpbnQgZGlyZWN0aW9uKQotewotCWludCBzZWFyY2hfaWRsZSA9IDE7Ci0JaW50IGNwdSA9IGN1cnJfY3B1OwotCi0JZ290byBpbnNpZGU7Ci0KLQlkbyB7Ci0JCWlmICh1bmxpa2VseShjcHUgPT0gY3Vycl9jcHUpKQotCQkJc2VhcmNoX2lkbGUgPSAwOwotaW5zaWRlOgotCQlpZiAoZGlyZWN0aW9uID09IDEpIHsKLQkJCWNwdSsrOwotCQkJaWYgKGNwdSA+PSBOUl9DUFVTKQotCQkJCWNwdSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQljcHUtLTsKLQkJCWlmIChjcHUgPT0gLTEpCi0JCQkJY3B1ID0gTlJfQ1BVUy0xOwotCQl9Ci0JfSB3aGlsZSAoIWNwdV9vbmxpbmUoY3B1KSB8fCAhSVJRX0FMTE9XRUQoY3B1LCBhbGxvd2VkX21hc2spIHx8Ci0JCQkoc2VhcmNoX2lkbGUgJiYgIUlETEVfRU5PVUdIKGNwdSwgbm93KSkpOwotCi0JcmV0dXJuIGNwdTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJhbGFuY2VfaXJxKGludCBjcHUsIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCWNwdW1hc2tfdCBhbGxvd2VkX21hc2s7Ci0JdW5zaWduZWQgaW50IG5ld19jcHU7Ci0KLQlpZiAoaXJxYmFsYW5jZV9kaXNhYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1c19hbmQoYWxsb3dlZF9tYXNrLCBjcHVfb25saW5lX21hcCwgYmFsYW5jZV9pcnFfYWZmaW5pdHlbaXJxXSk7Ci0JbmV3X2NwdSA9IG1vdmUoY3B1LCBhbGxvd2VkX21hc2ssIG5vdywgMSk7Ci0JaWYgKGNwdSAhPSBuZXdfY3B1KQotCQlzZXRfcGVuZGluZ19pcnEoaXJxLCBjcHVtYXNrX29mX2NwdShuZXdfY3B1KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByb3RhdGVfaXJxc19hbW9uZ19jcHVzKHVuc2lnbmVkIGxvbmcgdXNlZnVsX2xvYWRfdGhyZXNob2xkKQotewotCWludCBpLCBqOwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBOUl9JUlFTOyBqKyspIHsKLQkJCWlmICghaXJxX2Rlc2Nbal0uYWN0aW9uKQotCQkJCWNvbnRpbnVlOwotCQkJLyogSXMgaXQgYSBzaWduaWZpY2FudCBsb2FkID8gICovCi0JCQlpZiAoSVJRX0RFTFRBKENQVV9UT19QQUNLQUdFSU5ERVgoaSksIGopIDwKLQkJCQkJCXVzZWZ1bF9sb2FkX3RocmVzaG9sZCkKLQkJCQljb250aW51ZTsKLQkJCWJhbGFuY2VfaXJxKGksIGopOwotCQl9Ci0JfQotCWJhbGFuY2VkX2lycV9pbnRlcnZhbCA9IG1heCgobG9uZylNSU5fQkFMQU5DRURfSVJRX0lOVEVSVkFMLAotCQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgLSBCQUxBTkNFRF9JUlFfTEVTU19ERUxUQSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBkb19pcnFfYmFsYW5jZSh2b2lkKQotewotCWludCBpLCBqOwotCXVuc2lnbmVkIGxvbmcgbWF4X2NwdV9pcnEgPSAwLCBtaW5fY3B1X2lycSA9ICh+MCk7Ci0JdW5zaWduZWQgbG9uZyBtb3ZlX3RoaXNfbG9hZCA9IDA7Ci0JaW50IG1heF9sb2FkZWQgPSAwLCBtaW5fbG9hZGVkID0gMDsKLQlpbnQgbG9hZDsKLQl1bnNpZ25lZCBsb25nIHVzZWZ1bF9sb2FkX3RocmVzaG9sZCA9IGJhbGFuY2VkX2lycV9pbnRlcnZhbCArIDEwOwotCWludCBzZWxlY3RlZF9pcnE7Ci0JaW50IHRtcF9sb2FkZWQsIGZpcnN0X2F0dGVtcHQgPSAxOwotCXVuc2lnbmVkIGxvbmcgdG1wX2NwdV9pcnE7Ci0JdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UgPSAwOwotCWNwdW1hc2tfdCBhbGxvd2VkX21hc2ssIHRhcmdldF9jcHVfbWFzaywgdG1wOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJaW50IHBhY2thZ2VfaW5kZXg7Ci0JCUNQVV9JUlEoaSkgPSAwOwotCQlpZiAoIWNwdV9vbmxpbmUoaSkpCi0JCQljb250aW51ZTsKLQkJcGFja2FnZV9pbmRleCA9IENQVV9UT19QQUNLQUdFSU5ERVgoaSk7Ci0JCWZvciAoaiA9IDA7IGogPCBOUl9JUlFTOyBqKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgdmFsdWVfbm93LCBkZWx0YTsKLQkJCS8qIElzIHRoaXMgYW4gYWN0aXZlIElSUSBvciBiYWxhbmNpbmcgZGlzYWJsZWQgPyAqLwotCQkJaWYgKCFpcnFfZGVzY1tqXS5hY3Rpb24gfHwgaXJxX2JhbGFuY2luZ19kaXNhYmxlZChqKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChwYWNrYWdlX2luZGV4ID09IGkpCi0JCQkJSVJRX0RFTFRBKHBhY2thZ2VfaW5kZXgsIGopID0gMDsKLQkJCS8qIERldGVybWluZSB0aGUgdG90YWwgY291bnQgcGVyIHByb2Nlc3NvciBwZXIgSVJRICovCi0JCQl2YWx1ZV9ub3cgPSAodW5zaWduZWQgbG9uZykga3N0YXRfY3B1KGkpLmlycXNbal07Ci0KLQkJCS8qIERldGVybWluZSB0aGUgYWN0aXZpdHkgcGVyIHByb2Nlc3NvciBwZXIgSVJRICovCi0JCQlkZWx0YSA9IHZhbHVlX25vdyAtIExBU1RfQ1BVX0lSUShpLCBqKTsKLQotCQkJLyogVXBkYXRlIGxhc3RfY3B1X2lycVtdW10gZm9yIHRoZSBuZXh0IHRpbWUgKi8KLQkJCUxBU1RfQ1BVX0lSUShpLCBqKSA9IHZhbHVlX25vdzsKLQotCQkJLyogSWdub3JlIElSUXMgd2hvc2UgcmF0ZSBpcyBsZXNzIHRoYW4gdGhlIGNsb2NrICovCi0JCQlpZiAoZGVsdGEgPCB1c2VmdWxfbG9hZF90aHJlc2hvbGQpCi0JCQkJY29udGludWU7Ci0JCQkvKiB1cGRhdGUgdGhlIGxvYWQgZm9yIHRoZSBwcm9jZXNzb3Igb3IgcGFja2FnZSB0b3RhbCAqLwotCQkJSVJRX0RFTFRBKHBhY2thZ2VfaW5kZXgsIGopICs9IGRlbHRhOwotCi0JCQkvKiBLZWVwIHRyYWNrIG9mIHRoZSBoaWdoZXIgbnVtYmVyZWQgc2libGluZyBhcyB3ZWxsICovCi0JCQlpZiAoaSAhPSBwYWNrYWdlX2luZGV4KQotCQkJCUNQVV9JUlEoaSkgKz0gZGVsdGE7Ci0JCQkvKgotCQkJICogV2UgaGF2ZSBzaWJsaW5nIEEgYW5kIHNpYmxpbmcgQiBpbiB0aGUgcGFja2FnZQotCQkJICoKLQkJCSAqIGNwdV9pcnFbQV0gPSBsb2FkIGZvciBjcHUgQSArIGxvYWQgZm9yIGNwdSBCCi0JCQkgKiBjcHVfaXJxW0JdID0gbG9hZCBmb3IgY3B1IEIKLQkJCSAqLwotCQkJQ1BVX0lSUShwYWNrYWdlX2luZGV4KSArPSBkZWx0YTsKLQkJfQotCX0KLQkvKiBGaW5kIHRoZSBsZWFzdCBsb2FkZWQgcHJvY2Vzc29yIHBhY2thZ2UgKi8KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJaWYgKGkgIT0gQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWluX2NwdV9pcnEgPiBDUFVfSVJRKGkpKSB7Ci0JCQltaW5fY3B1X2lycSA9IENQVV9JUlEoaSk7Ci0JCQltaW5fbG9hZGVkID0gaTsKLQkJfQotCX0KLQltYXhfY3B1X2lycSA9IFVMT05HX01BWDsKLQotdHJ5YW5vdGhlcmNwdToKLQkvKgotCSAqIExvb2sgZm9yIGhlYXZpZXN0IGxvYWRlZCBwcm9jZXNzb3IuCi0JICogV2UgbWF5IGNvbWUgYmFjayB0byBnZXQgdGhlIG5leHQgaGVhdmllc3QgbG9hZGVkIHByb2Nlc3Nvci4KLQkgKiBTa2lwIHByb2Nlc3NvcnMgd2l0aCB0cml2aWFsIGxvYWRzLgotCSAqLwotCXRtcF9jcHVfaXJxID0gMDsKLQl0bXBfbG9hZGVkID0gLTE7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCWlmIChpICE9IENQVV9UT19QQUNLQUdFSU5ERVgoaSkpCi0JCQljb250aW51ZTsKLQkJaWYgKG1heF9jcHVfaXJxIDw9IENQVV9JUlEoaSkpCi0JCQljb250aW51ZTsKLQkJaWYgKHRtcF9jcHVfaXJxIDwgQ1BVX0lSUShpKSkgewotCQkJdG1wX2NwdV9pcnEgPSBDUFVfSVJRKGkpOwotCQkJdG1wX2xvYWRlZCA9IGk7Ci0JCX0KLQl9Ci0KLQlpZiAodG1wX2xvYWRlZCA9PSAtMSkgewotCSAvKgotCSAgKiBJbiB0aGUgY2FzZSBvZiBzbWFsbCBudW1iZXIgb2YgaGVhdnkgaW50ZXJydXB0IHNvdXJjZXMsCi0JICAqIGxvYWRpbmcgc29tZSBvZiB0aGUgY3B1cyB0b28gbXVjaC4gV2UgdXNlIEluZ28ncyBvcmlnaW5hbAotCSAgKiBhcHByb2FjaCB0byByb3RhdGUgdGhlbSBhcm91bmQuCi0JICAqLwotCQlpZiAoIWZpcnN0X2F0dGVtcHQgJiYgaW1iYWxhbmNlID49IHVzZWZ1bF9sb2FkX3RocmVzaG9sZCkgewotCQkJcm90YXRlX2lycXNfYW1vbmdfY3B1cyh1c2VmdWxfbG9hZF90aHJlc2hvbGQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWdvdG8gbm90X3dvcnRoX3RoZV9lZmZvcnQ7Ci0JfQotCi0JZmlyc3RfYXR0ZW1wdCA9IDA7CQkvKiBoZWF2aWVzdCBzZWFyY2ggKi8KLQltYXhfY3B1X2lycSA9IHRtcF9jcHVfaXJxOwkvKiBsb2FkICovCi0JbWF4X2xvYWRlZCA9IHRtcF9sb2FkZWQ7CS8qIHByb2Nlc3NvciAqLwotCWltYmFsYW5jZSA9IChtYXhfY3B1X2lycSAtIG1pbl9jcHVfaXJxKSAvIDI7Ci0KLQkvKgotCSAqIGlmIGltYmFsYW5jZSBpcyBsZXNzIHRoYW4gYXBwcm94IDEwJSBvZiBtYXggbG9hZCwgdGhlbgotCSAqIG9ic2VydmUgZGltaW5pc2hpbmcgcmV0dXJucyBhY3Rpb24uIC0gcXVpdAotCSAqLwotCWlmIChpbWJhbGFuY2UgPCAobWF4X2NwdV9pcnEgPj4gMykpCi0JCWdvdG8gbm90X3dvcnRoX3RoZV9lZmZvcnQ7Ci0KLXRyeWFub3RoZXJpcnE6Ci0JLyogaWYgd2Ugc2VsZWN0IGFuIElSUSB0byBtb3ZlIHRoYXQgY2FuJ3QgZ28gd2hlcmUgd2Ugd2FudCwgdGhlbgotCSAqIHNlZSBpZiB0aGVyZSBpcyBhbm90aGVyIG9uZSB0byB0cnkuCi0JICovCi0JbW92ZV90aGlzX2xvYWQgPSAwOwotCXNlbGVjdGVkX2lycSA9IC0xOwotCWZvciAoaiA9IDA7IGogPCBOUl9JUlFTOyBqKyspIHsKLQkJLyogSXMgdGhpcyBhbiBhY3RpdmUgSVJRPyAqLwotCQlpZiAoIWlycV9kZXNjW2pdLmFjdGlvbikKLQkJCWNvbnRpbnVlOwotCQlpZiAoaW1iYWxhbmNlIDw9IElSUV9ERUxUQShtYXhfbG9hZGVkLCBqKSkKLQkJCWNvbnRpbnVlOwotCQkvKiBUcnkgdG8gZmluZCB0aGUgSVJRIHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgaW1iYWxhbmNlCi0JCSAqIHdpdGhvdXQgZ29pbmcgb3Zlci4KLQkJICovCi0JCWlmIChtb3ZlX3RoaXNfbG9hZCA8IElSUV9ERUxUQShtYXhfbG9hZGVkLCBqKSkgewotCQkJbW92ZV90aGlzX2xvYWQgPSBJUlFfREVMVEEobWF4X2xvYWRlZCwgaik7Ci0JCQlzZWxlY3RlZF9pcnEgPSBqOwotCQl9Ci0JfQotCWlmIChzZWxlY3RlZF9pcnEgPT0gLTEpCi0JCWdvdG8gdHJ5YW5vdGhlcmNwdTsKLQotCWltYmFsYW5jZSA9IG1vdmVfdGhpc19sb2FkOwotCi0JLyogRm9yIHBoeXNpY2FsX2JhbGFuY2UgY2FzZSwgd2UgYWNjdW11bGF0ZWQgYm90aCBsb2FkCi0JICogdmFsdWVzIGluIHRoZSBvbmUgb2YgdGhlIHNpYmxpbmdzIGNwdV9pcnFbXSwKLQkgKiB0byB1c2UgdGhlIHNhbWUgY29kZSBmb3IgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgcHJvY2Vzc29ycwotCSAqIGFzIG11Y2ggYXMgcG9zc2libGUuCi0JICoKLQkgKiBOT1RFOiB0aGUgY3B1X2lycVtdIGFycmF5IGhvbGRzIHRoZSBzdW0gb2YgdGhlIGxvYWQgZm9yCi0JICogc2libGluZyBBIGFuZCBzaWJsaW5nIEIgaW4gdGhlIHNsb3QgZm9yIHRoZSBsb3dlc3QgbnVtYmVyZWQKLQkgKiBzaWJsaW5nIChBKSwgX0FORF8gdGhlIGxvYWQgZm9yIHNpYmxpbmcgQiBpbiB0aGUgc2xvdCBmb3IKLQkgKiB0aGUgaGlnaGVyIG51bWJlcmVkIHNpYmxpbmcuCi0JICoKLQkgKiBXZSBzZWVrIHRoZSBsZWFzdCBsb2FkZWQgc2libGluZyBieSBtYWtpbmcgdGhlIGNvbXBhcmlzb24KLQkgKiAoQStCKS8yIHZzIEIKLQkgKi8KLQlsb2FkID0gQ1BVX0lSUShtaW5fbG9hZGVkKSA+PiAxOwotCWZvcl9lYWNoX2NwdV9tYXNrKGosIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBtaW5fbG9hZGVkKSkgewotCQlpZiAobG9hZCA+IENQVV9JUlEoaikpIHsKLQkJCS8qIFRoaXMgd29uJ3QgY2hhbmdlIGNwdV9zaWJsaW5nX21hcFttaW5fbG9hZGVkXSAqLwotCQkJbG9hZCA9IENQVV9JUlEoaik7Ci0JCQltaW5fbG9hZGVkID0gajsKLQkJfQotCX0KLQotCWNwdXNfYW5kKGFsbG93ZWRfbWFzaywKLQkJY3B1X29ubGluZV9tYXAsCi0JCWJhbGFuY2VfaXJxX2FmZmluaXR5W3NlbGVjdGVkX2lycV0pOwotCXRhcmdldF9jcHVfbWFzayA9IGNwdW1hc2tfb2ZfY3B1KG1pbl9sb2FkZWQpOwotCWNwdXNfYW5kKHRtcCwgdGFyZ2V0X2NwdV9tYXNrLCBhbGxvd2VkX21hc2spOwotCi0JaWYgKCFjcHVzX2VtcHR5KHRtcCkpIHsKLQkJLyogbWFyayBmb3IgY2hhbmdlIGRlc3RpbmF0aW9uICovCi0JCXNldF9wZW5kaW5nX2lycShzZWxlY3RlZF9pcnEsIGNwdW1hc2tfb2ZfY3B1KG1pbl9sb2FkZWQpKTsKLQotCQkvKiBTaW5jZSB3ZSBtYWRlIGEgY2hhbmdlLCBjb21lIGJhY2sgc29vbmVyIHRvCi0JCSAqIGNoZWNrIGZvciBtb3JlIHZhcmlhdGlvbi4KLQkJICovCi0JCWJhbGFuY2VkX2lycV9pbnRlcnZhbCA9IG1heCgobG9uZylNSU5fQkFMQU5DRURfSVJRX0lOVEVSVkFMLAotCQkJYmFsYW5jZWRfaXJxX2ludGVydmFsIC0gQkFMQU5DRURfSVJRX0xFU1NfREVMVEEpOwotCQlyZXR1cm47Ci0JfQotCWdvdG8gdHJ5YW5vdGhlcmlycTsKLQotbm90X3dvcnRoX3RoZV9lZmZvcnQ6Ci0JLyoKLQkgKiBpZiB3ZSBkaWQgbm90IGZpbmQgYW4gSVJRIHRvIG1vdmUsIHRoZW4gYWRqdXN0IHRoZSB0aW1lIGludGVydmFsCi0JICogdXB3YXJkCi0JICovCi0JYmFsYW5jZWRfaXJxX2ludGVydmFsID0gbWluKChsb25nKU1BWF9CQUxBTkNFRF9JUlFfSU5URVJWQUwsCi0JCWJhbGFuY2VkX2lycV9pbnRlcnZhbCArIEJBTEFOQ0VEX0lSUV9NT1JFX0RFTFRBKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgYmFsYW5jZWRfaXJxKHZvaWQgKnVudXNlZCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIHByZXZfYmFsYW5jZV90aW1lID0gamlmZmllczsKLQlsb25nIHRpbWVfcmVtYWluaW5nID0gYmFsYW5jZWRfaXJxX2ludGVydmFsOwotCi0JLyogcHVzaCBldmVyeXRoaW5nIHRvIENQVSAwIHRvIGdpdmUgdXMgYSBzdGFydGluZyBwb2ludC4gICovCi0JZm9yIChpID0gMCA7IGkgPCBOUl9JUlFTIDsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLnBlbmRpbmdfbWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOwotCQlzZXRfcGVuZGluZ19pcnEoaSwgY3B1bWFza19vZl9jcHUoMCkpOwotCX0KLQotCXNldF9mcmVlemFibGUoKTsKLQlmb3IgKCA7IDsgKSB7Ci0JCXRpbWVfcmVtYWluaW5nID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRpbWVfcmVtYWluaW5nKTsKLQkJdHJ5X3RvX2ZyZWV6ZSgpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkJCXByZXZfYmFsYW5jZV90aW1lK2JhbGFuY2VkX2lycV9pbnRlcnZhbCkpIHsKLQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJZG9faXJxX2JhbGFuY2UoKTsKLQkJCXByZXZfYmFsYW5jZV90aW1lID0gamlmZmllczsKLQkJCXRpbWVfcmVtYWluaW5nID0gYmFsYW5jZWRfaXJxX2ludGVydmFsOwotCQkJcHJlZW1wdF9lbmFibGUoKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYmFsYW5jZWRfaXJxX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmM7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfc2hpZnRfcmlnaHQodG1wLCBjcHVfb25saW5lX21hcCwgMik7Ci0JYyA9ICZib290X2NwdV9kYXRhOwotCS8qIFdoZW4gbm90IG92ZXJ3cml0dGVuIGJ5IHRoZSBjb21tYW5kIGxpbmUgYXNrIHN1YmFyY2hpdGVjdHVyZS4gKi8KLQlpZiAoaXJxYmFsYW5jZV9kaXNhYmxlZCA9PSBJUlFCQUxBTkNFX0NIRUNLX0FSQ0gpCi0JCWlycWJhbGFuY2VfZGlzYWJsZWQgPSBOT19CQUxBTkNFX0lSUTsKLQlpZiAoaXJxYmFsYW5jZV9kaXNhYmxlZCkKLQkJcmV0dXJuIDA7Ci0KLQkgLyogZGlzYWJsZSBpcnFiYWxhbmNlIGNvbXBsZXRlbHkgaWYgdGhlcmUgaXMgb25seSBvbmUgcHJvY2Vzc29yIG9ubGluZSAqLwotCWlmIChudW1fb25saW5lX2NwdXMoKSA8IDIpIHsKLQkJaXJxYmFsYW5jZV9kaXNhYmxlZCA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQkvKgotCSAqIEVuYWJsZSBwaHlzaWNhbCBiYWxhbmNlIG9ubHkgaWYgbW9yZSB0aGFuIDEgcGh5c2ljYWwgcHJvY2Vzc29yCi0JICogaXMgcHJlc2VudAotCSAqLwotCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSAmJiAhY3B1c19lbXB0eSh0bXApKQotCQlwaHlzaWNhbF9iYWxhbmNlID0gMTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQkJaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEgPT0gTlVMTCB8fCBpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJiYWxhbmNlZF9pcnFfaW5pdDogb3V0IG9mIG1lbW9yeSIpOwotCQkJZ290byBmYWlsZWQ7Ci0JCX0KLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTdGFydGluZyBiYWxhbmNlZF9pcnFcbiIpOwotCWlmICghSVNfRVJSKGt0aHJlYWRfcnVuKGJhbGFuY2VkX2lycSwgTlVMTCwgImtpcnFkIikpKQotCQlyZXR1cm4gMDsKLQlwcmludGsoS0VSTl9FUlIgImJhbGFuY2VkX2lycV9pbml0OiBmYWlsZWQgdG8gc3Bhd24gYmFsYW5jZWRfaXJxIik7Ci1mYWlsZWQ6Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJa2ZyZWUoaXJxX2NwdV9kYXRhW2ldLmlycV9kZWx0YSk7Ci0JCWlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEgPSBOVUxMOwotCQlrZnJlZShpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEpOwotCQlpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEgPSBOVUxMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9fZGV2aW5pdCBpcnFiYWxhbmNlX2Rpc2FibGUoY2hhciAqc3RyKQotewotCWlycWJhbGFuY2VfZGlzYWJsZWQgPSAxOwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJub2lycWJhbGFuY2UiLCBpcnFiYWxhbmNlX2Rpc2FibGUpOwotCi1sYXRlX2luaXRjYWxsKGJhbGFuY2VkX2lycV9pbml0KTsKLSNlbmRpZiAvKiBDT05GSUdfSVJRQkFMQU5DRSAqLwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotI2lmbmRlZiBDT05GSUdfU01QCi12b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgY2ZnOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCWNmZyA9IEFQSUNfRE1fRklYRUQgfCBBUElDX0RFU1RfU0VMRiB8IHZlY3RvciB8IEFQSUNfREVTVF9MT0dJQ0FMOwotCS8qCi0JICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCi0JICovCi0JYXBpY193cml0ZShBUElDX0lDUiwgY2ZnKTsKLX0KLSNlbmRpZiAvKiAhQ09ORklHX1NNUCAqLwotCi0KLS8qCi0gKiBzdXBwb3J0IGZvciBicm9rZW4gTVAgQklPU3MsIGVuYWJsZXMgaGFuZC1yZWRpcmVjdGlvbiBvZiBQSVJRMC03IHRvCi0gKiBzcGVjaWZpYyBDUFUtc2lkZSBJUlFzLgotICovCi0KLSNkZWZpbmUgTUFYX1BJUlFTIDgKLXN0YXRpYyBpbnQgcGlycV9lbnRyaWVzIFtNQVhfUElSUVNdOwotc3RhdGljIGludCBwaXJxc19lbmFibGVkOwotaW50IHNraXBfaW9hcGljX3NldHVwOwotCi1zdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfcGlycV9zZXR1cChjaGFyICpzdHIpCi17Ci0JaW50IGksIG1heDsKLQlpbnQgaW50c1tNQVhfUElSUVMrMV07Ci0KLQlnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUoaW50cyksIGludHMpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9QSVJRUzsgaSsrKQotCQlwaXJxX2VudHJpZXNbaV0gPSAtMTsKLQotCXBpcnFzX2VuYWJsZWQgPSAxOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCi0JCQkiUElSUSByZWRpcmVjdGlvbiwgd29ya2luZyBhcm91bmQgYnJva2VuIE1QLUJJT1MuXG4iKTsKLQltYXggPSBNQVhfUElSUVM7Ci0JaWYgKGludHNbMF0gPCBNQVhfUElSUVMpCi0JCW1heCA9IGludHNbMF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHCi0JCQkJIi4uLiBQSVJRJWQgLT4gSVJRICVkXG4iLCBpLCBpbnRzW2krMV0pOwotCQkvKgotCQkgKiBQSVJRcyBhcmUgbWFwcGVkIHVwc2lkZSBkb3duLCB1c3VhbGx5LgotCQkgKi8KLQkJcGlycV9lbnRyaWVzW01BWF9QSVJRUy1pLTFdID0gaW50c1tpKzFdOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgicGlycT0iLCBpb2FwaWNfcGlycV9zZXR1cCk7Ci0KLS8qCi0gKiBGaW5kIHRoZSBJUlEgZW50cnkgbnVtYmVyIG9mIGEgY2VydGFpbiBwaW4uCi0gKi8KLXN0YXRpYyBpbnQgZmluZF9pcnFfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCB8fAotCQkgICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkgJiYKLQkJICAgIG1wX2lycXNbaV0ubXBfZHN0aXJxID09IHBpbikKLQkJCXJldHVybiBpOwotCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogRmluZCB0aGUgcGluIHRvIHdoaWNoIElSUVtpcnFdIChJU0EpIGlzIGNvbm5lY3RlZAotICovCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfcGluKGludCBpcnEsIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKLQotCQkJcmV0dXJuIG1wX2lycXNbaV0ubXBfZHN0aXJxOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9hcGljKGludCBpcnEsIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA8IG1wX2lycV9lbnRyaWVzKSB7Ci0JCWludCBhcGljOwotCQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljKQotCQkJCXJldHVybiBhcGljOwotCQl9Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogRmluZCBhIHNwZWNpZmljIFBDSSBJUlEgZW50cnkuCi0gKiBOb3QgYW4gX19pbml0LCBwb3NzaWJseSBuZWVkZWQgYnkgbW9kdWxlcwotICovCi1zdGF0aWMgaW50IHBpbl8yX2lycShpbnQgaWR4LCBpbnQgYXBpYywgaW50IHBpbik7Ci0KLWludCBJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3RvcihpbnQgYnVzLCBpbnQgc2xvdCwgaW50IHBpbikKLXsKLQlpbnQgYXBpYywgaSwgYmVzdF9ndWVzcyA9IC0xOwotCi0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgInF1ZXJ5aW5nIFBDSSAtPiBJUlEgbWFwcGluZyBidXM6JWQsICIKLQkJInNsb3Q6JWQsIHBpbjolZC5cbiIsIGJ1cywgc2xvdCwgcGluKTsKLQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJIEJJT1MgcGFzc2VkIG5vbmV4aXN0ZW50IFBDSSBidXMgJWQhXG4iLCBidXMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7Ci0KLQkJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMgfHwKLQkJCSAgICBtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gTVBfQVBJQ19BTEwpCi0JCQkJYnJlYWs7Ci0KLQkJaWYgKCF0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgICFtcF9pcnFzW2ldLm1wX2lycXR5cGUgJiYKLQkJICAgIChidXMgPT0gbGJ1cykgJiYKLQkJICAgIChzbG90ID09ICgobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPj4gMikgJiAweDFmKSkpIHsKLQkJCWludCBpcnEgPSBwaW5fMl9pcnEoaSwgYXBpYywgbXBfaXJxc1tpXS5tcF9kc3RpcnEpOwotCi0JCQlpZiAoIShhcGljIHx8IElPX0FQSUNfSVJRKGlycSkpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocGluID09IChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSAmIDMpKQotCQkJCXJldHVybiBpcnE7Ci0JCQkvKgotCQkJICogVXNlIHRoZSBmaXJzdCBhbGwtYnV0LXBpbiBtYXRjaGluZyBlbnRyeSBhcyBhCi0JCQkgKiBiZXN0LWd1ZXNzIGZ1enp5IHJlc3VsdCBmb3IgYnJva2VuIG1wdGFibGVzLgotCQkJICovCi0JCQlpZiAoYmVzdF9ndWVzcyA8IDApCi0JCQkJYmVzdF9ndWVzcyA9IGlycTsKLQkJfQotCX0KLQlyZXR1cm4gYmVzdF9ndWVzczsKLX0KLUVYUE9SVF9TWU1CT0woSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IpOwotCi0vKgotICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgaXMgb25seSBhIGhlbHBlciBmb3IgdGhlIGkzODYgc21wIGJvb3QgcHJvY2VzcyB3aGVyZQotICogd2UgbmVlZCB0byByZXByb2dyYW0gdGhlIGlvcmVkdGJscyB0byBjYXRlciBmb3IgdGhlIGNwdXMgd2hpY2ggaGF2ZSBjb21lIG9ubGluZQotICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBUQVJHRVRfQ1BVUwotICovCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCkKLXsKLQlpbnQgcGluLCBpb2FwaWMsIGlycSwgaXJxX2VudHJ5OwotCi0JaWYgKHNraXBfaW9hcGljX3NldHVwID09IDEpCi0JCXJldHVybjsKLQotCWZvciAoaW9hcGljID0gMDsgaW9hcGljIDwgbnJfaW9hcGljczsgaW9hcGljKyspIHsKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2lvYXBpY107IHBpbisrKSB7Ci0JCQlpcnFfZW50cnkgPSBmaW5kX2lycV9lbnRyeShpb2FwaWMsIHBpbiwgbXBfSU5UKTsKLQkJCWlmIChpcnFfZW50cnkgPT0gLTEpCi0JCQkJY29udGludWU7Ci0JCQlpcnEgPSBwaW5fMl9pcnEoaXJxX2VudHJ5LCBpb2FwaWMsIHBpbik7Ci0JCQlzZXRfaW9hcGljX2FmZmluaXR5X2lycShpcnEsIFRBUkdFVF9DUFVTKTsKLQkJfQotCi0JfQotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCi0vKgotICogRUlTQSBFZGdlL0xldmVsIGNvbnRyb2wgcmVnaXN0ZXIsIEVMQ1IKLSAqLwotc3RhdGljIGludCBFSVNBX0VMQ1IodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxIDwgMTYpIHsKLQkJdW5zaWduZWQgaW50IHBvcnQgPSAweDRkMCArIChpcnEgPj4gMyk7Ci0JCXJldHVybiAoaW5iKHBvcnQpID4+IChpcnEgJiA3KSkgJiAxOwotCX0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwotCQkJIkJyb2tlbiBNUHRhYmxlIHJlcG9ydHMgSVNBIGlycSAlZFxuIiwgaXJxKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKiBJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gZWRnZSB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCkJKDApCi0jZGVmaW5lIGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkJKDApCi0KLS8qIEVJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gYW5kIGNhbiBiZSBlZGdlIG9yIGxldmVsCi0gKiB0cmlnZ2VyIGRlcGVuZGluZyBvbiB0aGUgRUxDUiB2YWx1ZS4gIElmIGFuIGludGVycnVwdCBpcyBsaXN0ZWQgYXMKLSAqIEVJU0EgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUsIHRoYXQgbWVhbnMgaXRzIHRyaWdnZXIgdHlwZSBtdXN0Ci0gKiBiZSByZWFkIGluIGZyb20gdGhlIEVMQ1IgKi8KLQotI2RlZmluZSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpCShFSVNBX0VMQ1IobXBfaXJxc1tpZHhdLm1wX3NyY2J1c2lycSkpCi0jZGVmaW5lIGRlZmF1bHRfRUlTQV9wb2xhcml0eShpZHgpCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkKLQotLyogUENJIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSBvbmUgbGV2ZWwgdHJpZ2dlcmVkLAotICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCi0KLSNkZWZpbmUgZGVmYXVsdF9QQ0lfdHJpZ2dlcihpZHgpCSgxKQotI2RlZmluZSBkZWZhdWx0X1BDSV9wb2xhcml0eShpZHgpCSgxKQotCi0vKiBNQ0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gbGV2ZWwgdHJpZ2dlcmVkLAotICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCi0KLSNkZWZpbmUgZGVmYXVsdF9NQ0FfdHJpZ2dlcihpZHgpCSgxKQotI2RlZmluZSBkZWZhdWx0X01DQV9wb2xhcml0eShpZHgpCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkKLQotc3RhdGljIGludCBNUEJJT1NfcG9sYXJpdHkoaW50IGlkeCkKLXsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQlpbnQgcG9sYXJpdHk7Ci0KLQkvKgotCSAqIERldGVybWluZSBJUlEgbGluZSBwb2xhcml0eSAoaGlnaCBhY3RpdmUgb3IgbG93IGFjdGl2ZSk6Ci0JICovCi0Jc3dpdGNoIChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZyAmIDMpIHsKLQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50IHBvbGFyaXR5ICovCi0JewotCQlwb2xhcml0eSA9IHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpPwotCQkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KToKLQkJCWRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDE6IC8qIGhpZ2ggYWN0aXZlICovCi0JewotCQlwb2xhcml0eSA9IDA7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDI6IC8qIHJlc2VydmVkICovCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJcG9sYXJpdHkgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSAzOiAvKiBsb3cgYWN0aXZlICovCi0JewotCQlwb2xhcml0eSA9IDE7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJcG9sYXJpdHkgPSAxOwotCQlicmVhazsKLQl9Ci0JfQotCXJldHVybiBwb2xhcml0eTsKLX0KLQotc3RhdGljIGludCBNUEJJT1NfdHJpZ2dlcihpbnQgaWR4KQotewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCWludCB0cmlnZ2VyOwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSVJRIHRyaWdnZXIgbW9kZSAoZWRnZSBvciBsZXZlbCBzZW5zaXRpdmUpOgotCSAqLwotCXN3aXRjaCAoKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnPj4yKSAmIDMpIHsKLQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50ICovCi0JewotCQl0cmlnZ2VyID0gdGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSk/Ci0JCQkJZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpOgotCQkJCWRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KTsKLSNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCi0JCXN3aXRjaCAobXBfYnVzX2lkX3RvX3R5cGVbYnVzXSkgewotCQljYXNlIE1QX0JVU19JU0E6IC8qIElTQSBwaW4gKi8KLQkJewotCQkJLyogc2V0IGJlZm9yZSB0aGUgc3dpdGNoICovCi0JCQlicmVhazsKLQkJfQotCQljYXNlIE1QX0JVU19FSVNBOiAvKiBFSVNBIHBpbiAqLwotCQl7Ci0JCQl0cmlnZ2VyID0gZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgTVBfQlVTX1BDSTogLyogUENJIHBpbiAqLwotCQl7Ci0JCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgTVBfQlVTX01DQTogLyogTUNBIHBpbiAqLwotCQl7Ci0JCQl0cmlnZ2VyID0gZGVmYXVsdF9NQ0FfdHJpZ2dlcihpZHgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQl0cmlnZ2VyID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotI2VuZGlmCi0JCWJyZWFrOwotCX0KLQljYXNlIDE6IC8qIGVkZ2UgKi8KLQl7Ci0JCXRyaWdnZXIgPSAwOwotCQlicmVhazsKLQl9Ci0JY2FzZSAyOiAvKiByZXNlcnZlZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXRyaWdnZXIgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSAzOiAvKiBsZXZlbCAqLwotCXsKLQkJdHJpZ2dlciA9IDE7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJdHJpZ2dlciA9IDA7Ci0JCWJyZWFrOwotCX0KLQl9Ci0JcmV0dXJuIHRyaWdnZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV9wb2xhcml0eShpbnQgaWR4KQotewotCXJldHVybiBNUEJJT1NfcG9sYXJpdHkoaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RyaWdnZXIoaW50IGlkeCkKLXsKLQlyZXR1cm4gTVBCSU9TX3RyaWdnZXIoaWR4KTsKLX0KLQotc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pCi17Ci0JaW50IGlycSwgaTsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQotCS8qCi0JICogRGVidWdnaW5nIGNoZWNrLCB3ZSBhcmUgaW4gYmlnIHRyb3VibGUgaWYgdGhpcyBtZXNzYWdlIHBvcHMgdXAhCi0JICovCi0JaWYgKG1wX2lycXNbaWR4XS5tcF9kc3RpcnEgIT0gcGluKQotCQlwcmludGsoS0VSTl9FUlIgImJyb2tlbiBCSU9TIG9yIE1QVEFCTEUgcGFyc2VyLCBheWllZSEhXG4iKTsKLQotCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKLQkJaXJxID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1c2lycTsKLQllbHNlIHsKLQkJLyoKLQkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgotCQkgKi8KLQkJaSA9IGlycSA9IDA7Ci0JCXdoaWxlIChpIDwgYXBpYykKLQkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107Ci0JCWlycSArPSBwaW47Ci0KLQkJLyoKLQkJICogRm9yIE1QUyBtb2RlLCBzbyBmYXIgb25seSBuZWVkZWQgYnkgRVM3MDAwIHBsYXRmb3JtCi0JCSAqLwotCQlpZiAoaW9hcGljX3JlbnVtYmVyX2lycSkKLQkJCWlycSA9IGlvYXBpY19yZW51bWJlcl9pcnEoYXBpYywgaXJxKTsKLQl9Ci0KLQkvKgotCSAqIFBDSSBJUlEgY29tbWFuZCBsaW5lIHJlZGlyZWN0aW9uLiBZZXMsIGxpbWl0cyBhcmUgaGFyZGNvZGVkLgotCSAqLwotCWlmICgocGluID49IDE2KSAmJiAocGluIDw9IDIzKSkgewotCQlpZiAocGlycV9lbnRyaWVzW3Bpbi0xNl0gIT0gLTEpIHsKLQkJCWlmICghcGlycV9lbnRyaWVzW3Bpbi0xNl0pIHsKLQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkJCSJkaXNhYmxpbmcgUElSUSVkXG4iLCBwaW4tMTYpOwotCQkJfSBlbHNlIHsKLQkJCQlpcnEgPSBwaXJxX2VudHJpZXNbcGluLTE2XTsKLQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkJCSJ1c2luZyBQSVJRJWQgLT4gSVJRICVkXG4iLAotCQkJCQkJcGluLTE2LCBpcnEpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBpcnE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IElPX0FQSUNfaXJxX3RyaWdnZXIoaW50IGlycSkKLXsKLQlpbnQgYXBpYywgaWR4LCBwaW47Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCWlkeCA9IGZpbmRfaXJxX2VudHJ5KGFwaWMsIHBpbiwgbXBfSU5UKTsKLQkJCWlmICgoaWR4ICE9IC0xKSAmJiAoaXJxID09IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbikpKQotCQkJCXJldHVybiBpcnFfdHJpZ2dlcihpZHgpOwotCQl9Ci0JfQotCS8qCi0JICogbm9uZXhpc3RlbnQgSVJRcyBhcmUgZWRnZSBkZWZhdWx0Ci0JICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGlycV92ZWN0b3JzIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLwotc3RhdGljIHU4IGlycV92ZWN0b3JbTlJfSVJRX1ZFQ1RPUlNdIF9fcmVhZF9tb3N0bHkgPSB7IEZJUlNUX0RFVklDRV9WRUNUT1IgLCAwIH07Ci0KLXN0YXRpYyBpbnQgX19hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxKQotewotCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SLCBjdXJyZW50X29mZnNldDsKLQlpbnQgdmVjdG9yLCBvZmZzZXQ7Ci0KLQlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFfVkVDVE9SUyk7Ci0KLQlpZiAoaXJxX3ZlY3RvcltpcnFdID4gMCkKLQkJcmV0dXJuIGlycV92ZWN0b3JbaXJxXTsKLQotCXZlY3RvciA9IGN1cnJlbnRfdmVjdG9yOwotCW9mZnNldCA9IGN1cnJlbnRfb2Zmc2V0OwotbmV4dDoKLQl2ZWN0b3IgKz0gODsKLQlpZiAodmVjdG9yID49IGZpcnN0X3N5c3RlbV92ZWN0b3IpIHsKLQkJb2Zmc2V0ID0gKG9mZnNldCArIDEpICUgODsKLQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKLQl9Ci0JaWYgKHZlY3RvciA9PSBjdXJyZW50X3ZlY3RvcikKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQodmVjdG9yLCB1c2VkX3ZlY3RvcnMpKQotCQlnb3RvIG5leHQ7Ci0KLQljdXJyZW50X3ZlY3RvciA9IHZlY3RvcjsKLQljdXJyZW50X29mZnNldCA9IG9mZnNldDsKLQlpcnFfdmVjdG9yW2lycV0gPSB2ZWN0b3I7Ci0KLQlyZXR1cm4gdmVjdG9yOwotfQotCi1zdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdmVjdG9yOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JdmVjdG9yID0gX19hc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gdmVjdG9yOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOwotCi0jZGVmaW5lIElPQVBJQ19BVVRPCS0xCi0jZGVmaW5lIElPQVBJQ19FREdFCTAKLSNkZWZpbmUgSU9BUElDX0xFVkVMCTEKLQotc3RhdGljIHZvaWQgaW9hcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgaW50IHZlY3RvciwgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQotewotCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8Ci0JICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCi0JCQkJCSBoYW5kbGVfZmFzdGVvaV9pcnEsICJmYXN0ZW9pIik7Ci0JfSBlbHNlIHsKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCi0JCQkJCSBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfQotCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaXJxXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDX2lycXModm9pZCkKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQlpbnQgYXBpYywgcGluLCBpZHgsIGlycSwgZmlyc3Rfbm90Y29uID0gMSwgdmVjdG9yOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICJpbml0IElPX0FQSUMgSVJRc1xuIik7Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgewotCi0JCS8qCi0JCSAqIGFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkJICovCi0JCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwotCi0JCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQkJZW50cnkuZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQkJZW50cnkubWFzayA9IDA7CQkJCS8qIGVuYWJsZSBJUlEgKi8KLQkJZW50cnkuZGVzdC5sb2dpY2FsLmxvZ2ljYWxfZGVzdCA9Ci0JCQkJCWNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0KLQkJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpYywgcGluLCBtcF9JTlQpOwotCQlpZiAoaWR4ID09IC0xKSB7Ci0JCQlpZiAoZmlyc3Rfbm90Y29uKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHCi0JCQkJCQkiIElPLUFQSUMgKGFwaWNpZC1waW4pICVkLSVkIiwKLQkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAotCQkJCQkJcGluKTsKLQkJCQlmaXJzdF9ub3Rjb24gPSAwOwotCQkJfSBlbHNlCi0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLCAlZC0lZCIsCi0JCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIWZpcnN0X25vdGNvbikgewotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG5vdCBjb25uZWN0ZWQuXG4iKTsKLQkJCWZpcnN0X25vdGNvbiA9IDE7Ci0JCX0KLQotCQllbnRyeS50cmlnZ2VyID0gaXJxX3RyaWdnZXIoaWR4KTsKLQkJZW50cnkucG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaWR4KTsKLQotCQlpZiAoaXJxX3RyaWdnZXIoaWR4KSkgewotCQkJZW50cnkudHJpZ2dlciA9IDE7Ci0JCQllbnRyeS5tYXNrID0gMTsKLQkJfQotCi0JCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbik7Ci0JCS8qCi0JCSAqIHNraXAgYWRkaW5nIHRoZSB0aW1lciBpbnQgb24gc2Vjb25kYXJ5IG5vZGVzLCB3aGljaCBjYXVzZXMKLQkJICogYSBzbWFsbCBidXQgcGFpbmZ1bCByaWZ0IGluIHRoZSB0aW1lLXNwYWNlIGNvbnRpbnV1bQotCQkgKi8KLQkJaWYgKG11bHRpX3RpbWVyX2NoZWNrKGFwaWMsIGlycSkpCi0JCQljb250aW51ZTsKLQkJZWxzZQotCQkJYWRkX3Bpbl90b19pcnEoaXJxLCBhcGljLCBwaW4pOwotCi0JCWlmICghYXBpYyAmJiAhSU9fQVBJQ19JUlEoaXJxKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChJT19BUElDX0lSUShpcnEpKSB7Ci0JCQl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCQkJZW50cnkudmVjdG9yID0gdmVjdG9yOwotCQkJaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCB2ZWN0b3IsIElPQVBJQ19BVVRPKTsKLQotCQkJaWYgKCFhcGljICYmIChpcnEgPCAxNikpCi0JCQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKLQkJfQotCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci0JfQotCX0KLQotCWlmICghZmlyc3Rfbm90Y29uKQotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgbm90IGNvbm5lY3RlZC5cbiIpOwotfQotCi0vKgotICogU2V0IHVwIHRoZSB0aW1lciBwaW4sIHBvc3NpYmx5IHdpdGggdGhlIDgyNTlBLW1hc3RlciBiZWhpbmQuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF90aW1lcl9JUlEwX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbiwKLQkJCQkJaW50IHZlY3RvcikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwotCi0JLyoKLQkgKiBXZSB1c2UgbG9naWNhbCBkZWxpdmVyeSB0byBnZXQgdGhlIHRpbWVyIElSUQotCSAqIHRvIHRoZSBmaXJzdCBDUFUuCi0JICovCi0JZW50cnkuZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQllbnRyeS5tYXNrID0gMTsJCQkJCS8qIG1hc2sgSVJRIG5vdyAqLwotCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQllbnRyeS5wb2xhcml0eSA9IDA7Ci0JZW50cnkudHJpZ2dlciA9IDA7Ci0JZW50cnkudmVjdG9yID0gdmVjdG9yOwotCi0JLyoKLQkgKiBUaGUgdGltZXIgSVJRIGRvZXNuJ3QgaGF2ZSB0byBrbm93IHRoYXQgYmVoaW5kIHRoZQotCSAqIHNjZW5lIHdlIG1heSBoYXZlIGEgODI1OUEtbWFzdGVyIGluIEFFT0kgbW9kZSAuLi4KLQkgKi8KLQlpb2FwaWNfcmVnaXN0ZXJfaW50cigwLCB2ZWN0b3IsIElPQVBJQ19FREdFKTsKLQotCS8qCi0JICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCSAqLwotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKLX0KLQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfSU9fQVBJQyh2b2lkKQotewotCWludCBhcGljLCBpOwotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDIgcmVnXzAyOwotCXVuaW9uIElPX0FQSUNfcmVnXzAzIHJlZ18wMzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgTVAgSVJRIHNvdXJjZXM6ICVkLlxuIiwgbXBfaXJxX2VudHJpZXMpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspCi0JCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgSU8tQVBJQyAjJWQgcmVnaXN0ZXJzOiAlZC5cbiIsCi0JCSAgICAgICBtcF9pb2FwaWNzW2ldLm1wX2FwaWNpZCwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXSk7Ci0KLQkvKgotCSAqIFdlIGFyZSBhIGJpdCBjb25zZXJ2YXRpdmUgYWJvdXQgd2hhdCB3ZSBleHBlY3QuICBXZSBoYXZlIHRvCi0JICoga25vdyBhYm91dCBldmVyeSBoYXJkd2FyZSBjaGFuZ2UgQVNBUC4KLQkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJ0ZXN0aW5nIHRoZSBJTyBBUElDLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiIpOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKLQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTApCi0JCXJlZ18wMi5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMik7Ci0JaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCkKLQkJcmVnXzAzLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIklPIEFQSUMgIyVkLi4uLi4uXG4iLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAwOiAlMDhYXG4iLCByZWdfMDAucmF3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IHBoeXNpY2FsIEFQSUMgaWQ6ICUwMlhcbiIsIHJlZ18wMC5iaXRzLklEKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IERlbGl2ZXJ5IFR5cGU6ICVYXG4iLCByZWdfMDAuYml0cy5kZWxpdmVyeV90eXBlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IExUUyAgICAgICAgICA6ICVYXG4iLCByZWdfMDAuYml0cy5MVFMpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAxOiAlMDhYXG4iLCByZWdfMDEucmF3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBtYXggcmVkaXJlY3Rpb24gZW50cmllczogJTA0WFxuIiwgcmVnXzAxLmJpdHMuZW50cmllcyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBQUlEgaW1wbGVtZW50ZWQ6ICVYXG4iLCByZWdfMDEuYml0cy5QUlEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IElPIEFQSUMgdmVyc2lvbjogJTA0WFxuIiwgcmVnXzAxLmJpdHMudmVyc2lvbik7Ci0KLQkvKgotCSAqIFNvbWUgSW50ZWwgY2hpcHNldHMgd2l0aCBJTyBBUElDIFZFUlNJT04gb2YgMHgxPyBkb24ndCBoYXZlIHJlZ18wMiwKLQkgKiBidXQgdGhlIHZhbHVlIG9mIHJlZ18wMiBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkIHJlZ2lzdGVyCi0JICogdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDIgPT0gcmVnXzAxLgotCSAqLwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTAgJiYgcmVnXzAyLnJhdyAhPSByZWdfMDEucmF3KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMjogJTA4WFxuIiwgcmVnXzAyLnJhdyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IGFyYml0cmF0aW9uOiAlMDJYXG4iLCByZWdfMDIuYml0cy5hcmJpdHJhdGlvbik7Ci0JfQotCi0JLyoKLQkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4Mj8gZG9uJ3QgaGF2ZSByZWdfMDIKLQkgKiBvciByZWdfMDMsIGJ1dCB0aGUgdmFsdWUgb2YgcmVnXzBbMjNdIGlzIHJlYWQgYXMgdGhlIHByZXZpb3VzIHJlYWQKLQkgKiByZWdpc3RlciB2YWx1ZSwgc28gaWdub3JlIGl0IGlmIHJlZ18wMyA9PSByZWdfMFsxMl0uCi0JICovCi0JaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCAmJiByZWdfMDMucmF3ICE9IHJlZ18wMi5yYXcgJiYKLQkgICAgcmVnXzAzLnJhdyAhPSByZWdfMDEucmF3KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMzogJTA4WFxuIiwgcmVnXzAzLnJhdyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IEJvb3QgRFQgICAgOiAlWFxuIiwgcmVnXzAzLmJpdHMuYm9vdF9EVCk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiIE5SIExvZyBQaHkgTWFzayBUcmlnIElSUiBQb2wiCi0JCQkgICIgU3RhdCBEZXN0IERlbGkgVmVjdDogICBcbiIpOwotCi0JZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKLQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBpKTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMnggJTAzWCAlMDJYICAiLAotCQkJaSwKLQkJCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QsCi0JCQllbnRyeS5kZXN0LnBoeXNpY2FsLnBoeXNpY2FsX2Rlc3QKLQkJKTsKLQotCQlwcmludGsoIiUxZCAgICAlMWQgICAgJTFkICAgJTFkICAgJTFkICAgICUxZCAgICAlMWQgICAgJTAyWFxuIiwKLQkJCWVudHJ5Lm1hc2ssCi0JCQllbnRyeS50cmlnZ2VyLAotCQkJZW50cnkuaXJyLAotCQkJZW50cnkucG9sYXJpdHksCi0JCQllbnRyeS5kZWxpdmVyeV9zdGF0dXMsCi0JCQllbnRyeS5kZXN0X21vZGUsCi0JCQllbnRyeS5kZWxpdmVyeV9tb2RlLAotCQkJZW50cnkudmVjdG9yCi0JCSk7Ci0JfQotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiSVJRIHRvIHBpbiBtYXBwaW5nczpcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpOwotCQlpZiAoZW50cnktPnBpbiA8IDApCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIklSUSVkICIsIGkpOwotCQlmb3IgKDs7KSB7Ci0JCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOwotCQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCQlicmVhazsKLQkJCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBkb25lLlxuIik7Ci0KLQlyZXR1cm47Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9BUElDX2JpdGZpZWxkKGludCBiYXNlKQotewotCXVuc2lnbmVkIGludCB2OwotCWludCBpLCBqOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZlxuIiBLRVJOX0RFQlVHKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXYgPSBhcGljX3JlYWQoYmFzZSArIGkqMHgxMCk7Ci0JCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCQlpZiAodiAmICgxPDxqKSkKLQkJCQlwcmludGsoIjEiKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIjAiKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQyh2b2lkICpkdW1teSkKLXsKLQl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7Ci0JdTY0IGljcjsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsCi0JCQlHRVRfQVBJQ19JRCh2KSk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgVkVSU0lPTjogJTA4eFxuIiwgdik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2KTsKLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRBU0tQUkk6ICUwOHggKCUwMngpXG4iLCB2LCB2ICYgQVBJQ19UUFJJX01BU0spOwotCi0JaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7CQkJLyogITgyNDg5RFggKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0FSQlBSSSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBBUkJQUkk6ICUwOHggKCUwMngpXG4iLCB2LAotCQkJdiAmIEFQSUNfQVJCUFJJX01BU0spOwotCQl2ID0gYXBpY19yZWFkKEFQSUNfUFJPQ1BSSSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBQUk9DUFJJOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfRU9JKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRU9JOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUlJSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTERSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfREZSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFNQSVY6ICUwOHhcbiIsIHYpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElTUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JU1IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTVIgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfVE1SKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSVJSIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX0lSUik7Ci0KLQlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsJCS8qICE4MjQ4OURYICovCi0JCWlmIChtYXhsdnQgPiAzKQkJLyogRHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLiAqLwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQlpY3IgPSBhcGljX2ljcl9yZWFkKCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjogJTA4eFxuIiwgaWNyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSUNSMjogJTA4eFxuIiwgaWNyID4+IDMyKTsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUVDogJTA4eFxuIiwgdik7Ci0KLQlpZiAobWF4bHZ0ID4gMykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgaXMgTFZUIzQuICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRQQzogJTA4eFxuIiwgdik7Ci0JfQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQxOiAlMDh4XG4iLCB2KTsKLQotCWlmIChtYXhsdnQgPiAyKSB7CQkJLyogRVJSIGlzIExWVCMzLiAqLwotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVEVSUjogJTA4eFxuIiwgdik7Ci0JfQotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1JQ1Q6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNQ0NUOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfVERDUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFREQ1I6ICUwOHhcbiIsIHYpOwotCXByaW50aygiXG4iKTsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2FsbF9sb2NhbF9BUElDcyh2b2lkKQotewotCW9uX2VhY2hfY3B1KHByaW50X2xvY2FsX0FQSUMsIE5VTEwsIDEpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG5wcmludGluZyBQSUMgY29udGVudHNcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7Ci0KLQl2ID0gaW5iKDB4YTEpIDw8IDggfCBpbmIoMHgyMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElNUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElSUjogJTA0eFxuIiwgdik7Ci0KLQlvdXRiKDB4MGIsIDB4YTApOwotCW91dGIoMHgwYiwgMHgyMCk7Ci0JdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOwotCW91dGIoMHgwYSwgMHhhMCk7Ci0Jb3V0YigweDBhLCAweDIwKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVNSOiAlMDR4XG4iLCB2KTsKLQotCXYgPSBpbmIoMHg0ZDEpIDw8IDggfCBpbmIoMHg0ZDApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDIEVMQ1I6ICUwNHhcbiIsIHYpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQoaW50KSBwcmludF9hbGxfSUNzKHZvaWQpCi17Ci0JcHJpbnRfUElDKCk7Ci0JcHJpbnRfYWxsX2xvY2FsX0FQSUNzKCk7Ci0JcHJpbnRfSU9fQVBJQygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWZzX2luaXRjYWxsKHByaW50X2FsbF9JQ3MpOwotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOwotCWludCBpLCBhcGljOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUElOX01BUF9TSVpFOyBpKyspIHsKLQkJaXJxXzJfcGluW2ldLnBpbiA9IC0xOwotCQlpcnFfMl9waW5baV0ubmV4dCA9IDA7Ci0JfQotCWlmICghcGlycXNfZW5hYmxlZCkKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9QSVJRUzsgaSsrKQotCQkJcGlycV9lbnRyaWVzW2ldID0gLTE7Ci0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6Ci0JICovCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKLQl9Ci0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlpbnQgcGluOwotCQkvKiBTZWUgaWYgYW55IG9mIHRoZSBwaW5zIGlzIGluIEV4dElOVCBtb2RlICovCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCi0KLQkJCS8qIElmIHRoZSBpbnRlcnJ1cHQgbGluZSBpcyBlbmFibGVkIGFuZCBpbiBFeHRJbnQgbW9kZQotCQkJICogSSBoYXZlIGZvdW5kIHRoZSBwaW4gd2hlcmUgdGhlIGk4MjU5IGlzIGNvbm5lY3RlZC4KLQkJCSAqLwotCQkJaWYgKChlbnRyeS5tYXNrID09IDApICYmIChlbnRyeS5kZWxpdmVyeV9tb2RlID09IGRlc3RfRXh0SU5UKSkgewotCQkJCWlvYXBpY19pODI1OS5hcGljID0gYXBpYzsKLQkJCQlpb2FwaWNfaTgyNTkucGluICA9IHBpbjsKLQkJCQlnb3RvIGZvdW5kX2k4MjU5OwotCQkJfQotCQl9Ci0JfQotIGZvdW5kX2k4MjU5OgotCS8qIExvb2sgdG8gc2VlIHdoYXQgaWYgdGhlIE1QIHRhYmxlIGhhcyByZXBvcnRlZCB0aGUgRXh0SU5UICovCi0JLyogSWYgd2UgY291bGQgbm90IGZpbmQgdGhlIGFwcHJvcHJpYXRlIHBpbiBieSBsb29raW5nIGF0IHRoZSBpb2FwaWMKLQkgKiB0aGUgaTgyNTkgcHJvYmFibHkgaXMgbm90IGNvbm5lY3RlZCB0aGUgaW9hcGljIGJ1dCBnaXZlIHRoZQotCSAqIG1wdGFibGUgYSBjaGFuY2UgYW55d2F5LgotCSAqLwotCWk4MjU5X3BpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0V4dElOVCk7Ci0JaTgyNTlfYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0V4dElOVCk7Ci0JLyogVHJ1c3QgdGhlIE1QIHRhYmxlIGlmIG5vdGhpbmcgaXMgc2V0dXAgaW4gdGhlIGhhcmR3YXJlICovCi0JaWYgKChpb2FwaWNfaTgyNTkucGluID09IC0xKSAmJiAoaTgyNTlfcGluID49IDApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBub3Qgc2V0dXAgaW4gaGFyZHdhcmUgYnV0IHJlcG9ydGVkIGJ5IE1QIHRhYmxlXG4iKTsKLQkJaW9hcGljX2k4MjU5LnBpbiAgPSBpODI1OV9waW47Ci0JCWlvYXBpY19pODI1OS5hcGljID0gaTgyNTlfYXBpYzsKLQl9Ci0JLyogQ29tcGxhaW4gaWYgdGhlIE1QIHRhYmxlIGFuZCB0aGUgaGFyZHdhcmUgZGlzYWdyZWUgKi8KLQlpZiAoKChpb2FwaWNfaTgyNTkuYXBpYyAhPSBpODI1OV9hcGljKSB8fCAoaW9hcGljX2k4MjU5LnBpbiAhPSBpODI1OV9waW4pKSAmJgotCQkoaTgyNTlfcGluID49IDApICYmIChpb2FwaWNfaTgyNTkucGluID49IDApKQotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIGluIGhhcmR3YXJlIGFuZCBNUCB0YWJsZSBkaWZmZXJcbiIpOwotCX0KLQotCS8qCi0JICogRG8gbm90IHRydXN0IHRoZSBJTy1BUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cAotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLX0KLQotLyoKLSAqIE5vdCBhbiBfX2luaXQsIG5lZWRlZCBieSB0aGUgcmVib290IGNvZGUKLSAqLwotdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCkKLXsKLQkvKgotCSAqIENsZWFyIHRoZSBJTy1BUElDIGJlZm9yZSByZWJvb3Rpbmc6Ci0JICovCi0JY2xlYXJfSU9fQVBJQygpOwotCi0JLyoKLQkgKiBJZiB0aGUgaTgyNTkgaXMgcm91dGVkIHRocm91Z2ggYW4gSU9BUElDCi0JICogUHV0IHRoYXQgSU9BUElDIGluIHZpcnR1YWwgd2lyZSBtb2RlCi0JICogc28gbGVnYWN5IGludGVycnVwdHMgY2FuIGJlIGRlbGl2ZXJlZC4KLQkgKi8KLQlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQkJZW50cnkubWFzayAgICAgICAgICAgID0gMDsgLyogRW5hYmxlZCAqLwotCQllbnRyeS50cmlnZ2VyICAgICAgICAgPSAwOyAvKiBFZGdlICovCi0JCWVudHJ5LmlyciAgICAgICAgICAgICA9IDA7Ci0JCWVudHJ5LnBvbGFyaXR5ICAgICAgICA9IDA7IC8qIEhpZ2ggKi8KLQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzID0gMDsKLQkJZW50cnkuZGVzdF9tb2RlICAgICAgID0gMDsgLyogUGh5c2ljYWwgKi8KLQkJZW50cnkuZGVsaXZlcnlfbW9kZSAgID0gZGVzdF9FeHRJTlQ7IC8qIEV4dEludCAqLwotCQllbnRyeS52ZWN0b3IgICAgICAgICAgPSAwOwotCQllbnRyeS5kZXN0LnBoeXNpY2FsLnBoeXNpY2FsX2Rlc3QgPSByZWFkX2FwaWNfaWQoKTsKLQotCQkvKgotCQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JCSAqLwotCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKLQl9Ci0JZGlzY29ubmVjdF9ic3BfQVBJQyhpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKLX0KLQotLyoKLSAqIGZ1bmN0aW9uIHRvIHNldCB0aGUgSU8tQVBJQyBwaHlzaWNhbCBJRHMgYmFzZWQgb24gdGhlCi0gKiB2YWx1ZXMgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCi0gKgotICogYnkgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiAgVHVlIERlYyAyMSAxMjoyNTowNSBDU1QgMTk5OQotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKHZvaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXBoeXNpZF9tYXNrX3QgcGh5c19pZF9wcmVzZW50X21hcDsKLQlpbnQgYXBpYzsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyIG9sZF9pZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMgJiYgeDg2X3F1aXJrcy0+c2V0dXBfaW9hcGljX2lkcygpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIERvbid0IGNoZWNrIEkvTyBBUElDIElEcyBmb3IgeEFQSUMgc3lzdGVtcy4gIFRoZXkgaGF2ZQotCSAqIG5vIG1lYW5pbmcgd2l0aG91dCB0aGUgc2VyaWFsIEFQSUMgYnVzLgotCSAqLwotCWlmICghKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotCQl8fCBBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKLQkJcmV0dXJuOwotCS8qCi0JICogVGhpcyBpcyBicm9rZW47IGFueXRoaW5nIHdpdGggYSByZWFsIGNwdSBjb3VudCBoYXMgdG8KLQkgKiBjaXJjdW12ZW50IHRoaXMgaWRpb2N5IHJlZ2FyZGxlc3MuCi0JICovCi0JcGh5c19pZF9wcmVzZW50X21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0KLQkvKgotCSAqIFNldCB0aGUgSU9BUElDIElEIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIE1QQyB0YWJsZS4KLQkgKi8KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0KLQkJLyogUmVhZCB0aGUgcmVnaXN0ZXIgMCB2YWx1ZSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCQlvbGRfaWQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKLQotCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEIGlzICVkIGluIHRoZSBNUEMgdGFibGUhLi4uXG4iLAotCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCXJlZ18wMC5iaXRzLklEKTsKLQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gcmVnXzAwLmJpdHMuSUQ7Ci0JCX0KLQotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2ssIGlzIHRoZSBJRCByZWFsbHkgZnJlZT8gRXZlcnkgQVBJQyBpbiBhCi0JCSAqIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQotCQkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KLQkJICovCi0JCWlmIChjaGVja19hcGljaWRfdXNlZChwaHlzX2lkX3ByZXNlbnRfbWFwLAotCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIElPLUFQSUMjJWQgSUQgJWQgaXMgYWxyZWFkeSB1c2VkIS4uLlxuIiwKLQkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspCi0JCQkJaWYgKCFwaHlzaWRfaXNzZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCkpCi0JCQkJCWJyZWFrOwotCQkJaWYgKGkgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQotCQkJCXBhbmljKCJNYXggQVBJQyBJRCBleGNlZWRlZCFcbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCi0JCQkJaSk7Ci0JCQlwaHlzaWRfc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApOwotCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPSBpOwotCQl9IGVsc2UgewotCQkJcGh5c2lkX21hc2tfdCB0bXA7Ci0JCQl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiU2V0dGluZyAlZCBpbiB0aGUgIgotCQkJCQkicGh5c19pZF9wcmVzZW50X21hcFxuIiwKLQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJcGh5c2lkc19vcihwaHlzX2lkX3ByZXNlbnRfbWFwLCBwaHlzX2lkX3ByZXNlbnRfbWFwLCB0bXApOwotCQl9Ci0KLQotCQkvKgotCQkgKiBXZSBuZWVkIHRvIGFkanVzdCB0aGUgSVJRIHJvdXRpbmcgdGFibGUKLQkJICogaWYgdGhlIElEIGNoYW5nZWQuCi0JCSAqLwotCQlpZiAob2xkX2lkICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQotCQkJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCQkJaWYgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBvbGRfaWQpCi0JCQkJCW1wX2lycXNbaV0ubXBfZHN0YXBpYwotCQkJCQkJPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKLQotCQkvKgotCQkgKiBSZWFkIHRoZSByaWdodCB2YWx1ZSBmcm9tIHRoZSBNUEMgdGFibGUgYW5kCi0JCSAqIHdyaXRlIGl0IGludG8gdGhlIElEIHJlZ2lzdGVyLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSIuLi5jaGFuZ2luZyBJTy1BUElDIHBoeXNpY2FsIEFQSUMgSUQgdG8gJWQgLi4uIiwKLQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQotCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJaW9fYXBpY193cml0ZShhcGljLCAwLCByZWdfMDAucmF3KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2sKLQkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpCi0JCQlwcmludGsoImNvdWxkIG5vdCBzZXQgSUQhXG4iKTsKLQkJZWxzZQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG9rLlxuIik7Ci0JfQotfQotCi1pbnQgbm9fdGltZXJfY2hlY2sgX19pbml0ZGF0YTsKLQotc3RhdGljIGludCBfX2luaXQgbm90aW1lcmNoZWNrKGNoYXIgKnMpCi17Ci0Jbm9fdGltZXJfY2hlY2sgPSAxOwotCXJldHVybiAxOwotfQotX19zZXR1cCgibm9fdGltZXJfY2hlY2siLCBub3RpbWVyY2hlY2spOwotCi0vKgotICogVGhlcmUgaXMgYSBuYXN0eSBidWcgaW4gc29tZSBvbGRlciBTTVAgYm9hcmRzLCB0aGVpciBtcHRhYmxlIGxpZXMKLSAqIGFib3V0IHRoZSB0aW1lciBJUlEuIFdlIGRvIHRoZSBmb2xsb3dpbmcgdG8gd29yayBhcm91bmQgdGhlIHNpdHVhdGlvbjoKLSAqCi0gKgktIHRpbWVyIElSUSBkZWZhdWx0cyB0byBJTy1BUElDIElSUQotICoJLSBpZiB0aGlzIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCB0aW1lciBJUlFzIGFyZSBkZWZ1bmN0LCB0aGVuIHdlIGZhbGwKLSAqCSAgYmFjayB0byBJU0EgdGltZXIgSVJRcwotICovCi1zdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pcnFfd29ya3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHQxID0gamlmZmllczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG5vX3RpbWVyX2NoZWNrKQotCQlyZXR1cm4gMTsKLQotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQkvKiBMZXQgdGVuIHRpY2tzIHBhc3MuLi4gKi8KLQltZGVsYXkoKDEwICogMTAwMCkgLyBIWik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyoKLQkgKiBFeHBlY3QgYSBmZXcgdGlja3MgYXQgbGVhc3QsIHRvIGJlIHN1cmUgc29tZSBwb3NzaWJsZQotCSAqIGdsdWUgbG9naWMgZG9lcyBub3QgbG9jayB1cCBhZnRlciBvbmUgb3IgdHdvIGZpcnN0Ci0JICogdGlja3MgaW4gYSBub24tRXh0SU5UIG1vZGUuICBBbHNvIHRoZSBsb2NhbCBBUElDCi0JICogbWlnaHQgaGF2ZSBjYWNoZWQgb25lIEV4dElOVCBpbnRlcnJ1cHQuICBGaW5hbGx5LCBhdAotCSAqIGxlYXN0IG9uZSB0aWNrIG1heSBiZSBsb3N0IGR1ZSB0byBkZWxheXMuCi0JICovCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdDEgKyA0KSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluIHRoZSBTTVArSU9BUElDIGNhc2UgaXQgbWlnaHQgaGFwcGVuIHRoYXQgdGhlcmUgYXJlIGFuIHVuc3BlY2lmaWVkCi0gKiBudW1iZXIgb2YgcGVuZGluZyBJUlEgZXZlbnRzIHVuaGFuZGxlZC4gVGhlc2UgY2FzZXMgYXJlIHZlcnkgcmFyZSwKLSAqIHNvIHdlICdyZXNlbmQnIHRoZXNlIElSUXMgdmlhIElQSXMsIHRvIHRoZSBzYW1lIENQVS4gSXQncyBtdWNoCi0gKiBiZXR0ZXIgdG8gZG8gaXQgdGhpcyB3YXkgYXMgdGh1cyB3ZSBkbyBub3QgaGF2ZSB0byBiZSBhd2FyZSBvZgotICogJ3BlbmRpbmcnIGludGVycnVwdHMgaW4gdGhlIElSUSBwYXRoLCBleGNlcHQgYXQgdGhpcyBwb2ludC4KLSAqLwotLyoKLSAqIEVkZ2UgdHJpZ2dlcmVkIG5lZWRzIHRvIHJlc2VuZCBhbnkgaW50ZXJydXB0Ci0gKiB0aGF0IHdhcyBkZWxheWVkIGJ1dCB0aGlzIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBkZXZpY2UKLSAqIGluZGVwZW5kZW50IGNvZGUuCi0gKi8KLQotLyoKLSAqIFN0YXJ0dXAgcXVpcms6Ci0gKgotICogU3RhcnRpbmcgdXAgYSBlZGdlLXRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdCBpcwotICogbmFzdHkgLSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGdldCB0aGUgZWRnZS4KLSAqIElmIGl0IGlzIGFscmVhZHkgYXNzZXJ0ZWQgZm9yIHNvbWUgcmVhc29uLCB3ZSBuZWVkCi0gKiByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0IGlzIHdhcyBwZW5kaW5nLgotICoKLSAqIFRoaXMgaXMgbm90IGNvbXBsZXRlIC0gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZmFrZQotICogYW4gZWRnZSBldmVuIGlmIGl0IGlzbid0IG9uIHRoZSA4MjU5QS4uLgotICoKLSAqIChXZSBkbyB0aGlzIGZvciBsZXZlbC10cmlnZ2VyZWQgSVJRcyB0b28gLSBpdCBjYW5ub3QgaHVydC4pCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IHdhc19wZW5kaW5nID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaWYgKGlycSA8IDE2KSB7Ci0JCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0JCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKLQkJCXdhc19wZW5kaW5nID0gMTsKLQl9Ci0JX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHdhc19wZW5kaW5nOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCW1vdmVfbmF0aXZlX2lycShpcnEpOwotCWFja19BUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfaW9hcGljX3F1aXJrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQlpbnQgaTsKLQotCW1vdmVfbmF0aXZlX2lycShpcnEpOwotLyoKLSAqIEl0IGFwcGVhcnMgdGhlcmUgaXMgYW4gZXJyYXR1bSB3aGljaCBhZmZlY3RzIGF0IGxlYXN0IHZlcnNpb24gMHgxMQotICogb2YgSS9PIEFQSUMgKHRoYXQncyB0aGUgODIwOTNBQSBhbmQgY29yZXMgaW50ZWdyYXRlZCBpbnRvIHZhcmlvdXMKLSAqIGNoaXBzZXRzKS4gIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaXMKLSAqIGVycm9uZW91c2x5IGRlbGl2ZXJlZCBhcyBlZGdlLXRyaWdnZXJlZCBvbmUgYnV0IHRoZSByZXNwZWN0aXZlIElSUgotICogYml0IGdldHMgc2V0IG5ldmVydGhlbGVzcy4gIEFzIGEgcmVzdWx0IHRoZSBJL08gdW5pdCBleHBlY3RzIGFuIEVPSQotICogbWVzc2FnZSBidXQgaXQgd2lsbCBuZXZlciBhcnJpdmUgYW5kIGZ1cnRoZXIgaW50ZXJydXB0cyBhcmUgYmxvY2tlZAotICogZnJvbSB0aGUgc291cmNlLiAgVGhlIGV4YWN0IHJlYXNvbiBpcyBzbyBmYXIgdW5rbm93biwgYnV0IHRoZQotICogcGhlbm9tZW5vbiB3YXMgb2JzZXJ2ZWQgd2hlbiB0d28gY29uc2VjdXRpdmUgaW50ZXJydXB0IHJlcXVlc3RzCi0gKiBmcm9tIGEgZ2l2ZW4gc291cmNlIGdldCBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgQ1BVIGFuZCB0aGUgc291cmNlIGlzCi0gKiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpbiBiZXR3ZWVuLgotICoKLSAqIEEgd29ya2Fyb3VuZCBpcyB0byBzaW11bGF0ZSBhbiBFT0kgbWVzc2FnZSBtYW51YWxseS4gIFdlIGFjaGlldmUgaXQKLSAqIGJ5IHNldHRpbmcgdGhlIHRyaWdnZXIgbW9kZSB0byBlZGdlIGFuZCB0aGVuIHRvIGxldmVsIHdoZW4gdGhlIGVkZ2UKLSAqIHRyaWdnZXIgbW9kZSBnZXRzIGRldGVjdGVkIGluIHRoZSBUTVIgb2YgYSBsb2NhbCBBUElDIGZvciBhCi0gKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0LiAgV2UgbWFzayB0aGUgc291cmNlIGZvciB0aGUgdGltZSBvZiB0aGUKLSAqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCi0gKiBUaGUgaWRlYSBpcyBmcm9tIE1hbmZyZWQgU3ByYXVsLiAgLS1tYWNybwotICovCi0JaSA9IGlycV92ZWN0b3JbaXJxXTsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19UTVIgKyAoKGkgJiB+MHgxZikgPj4gMSkpOwotCi0JYWNrX0FQSUNfaXJxKCk7Ci0KLQlpZiAoISh2ICYgKDEgPDwgKGkgJiAweDFmKSkpKSB7Ci0JCWF0b21pY19pbmMoJmlycV9taXNfY291bnQpOwotCQlzcGluX2xvY2soJmlvYXBpY19sb2NrKTsKLQkJX19tYXNrX2FuZF9lZGdlX0lPX0FQSUNfaXJxKGlycSk7Ci0JCV9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycShpcnEpOwotCQlzcGluX3VubG9jaygmaW9hcGljX2xvY2spOwotCX0KLX0KLQotc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXNlbmRfSVBJX3NlbGYoaXJxX3ZlY3RvcltpcnFdKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJJTy1BUElDIiwKLQkuc3RhcnR1cCAJPSBzdGFydHVwX2lvYXBpY19pcnEsCi0JLm1hc2sJIAk9IG1hc2tfSU9fQVBJQ19pcnEsCi0JLnVubWFzawkgCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAotCS5hY2sgCQk9IGFja19pb2FwaWNfaXJxLAotCS5lb2kgCQk9IGFja19pb2FwaWNfcXVpcmtfaXJxLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5IAk9IHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxLAotI2VuZGlmCi0JLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9JT19BUElDX3RyYXBzKHZvaWQpCi17Ci0JaW50IGlycTsKLQotCS8qCi0JICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRsaW5nCi0JICogbXVsdGlwbGUgaW50ZXJydXB0cyBhdCB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICogQXMgdGhlIGludGVycnVwdCBsZXZlbCBpcyBkZXRlcm1pbmVkIGJ5IHRha2luZyB0aGUKLQkgKiB2ZWN0b3IgbnVtYmVyIGFuZCBzaGlmdGluZyB0aGF0IHJpZ2h0IGJ5IDQsIHdlCi0JICogd2FudCB0byBzcHJlYWQgdGhlc2Ugb3V0IGEgYml0IHNvIHRoYXQgdGhleSBkb24ndAotCSAqIGFsbCBmYWxsIGluIHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKgotCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCi0JICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCi0JICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTIDsgaXJxKyspIHsKLQkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgIWlycV92ZWN0b3JbaXJxXSkgewotCQkJLyoKLQkJCSAqIEhtbS4uIFdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsCi0JCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQotCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCi0JCQkgKi8KLQkJCWlmIChpcnEgPCAxNikKLQkJCQltYWtlXzgyNTlBX2lycShpcnEpOwotCQkJZWxzZQotCQkJCS8qIFN0cmFuZ2UuIE9oLCB3ZWxsLi4gKi8KLQkJCQlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmbm9faXJxX2NoaXA7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBUaGUgbG9jYWwgQVBJQyBpcnEtY2hpcCBpbXBsZW1lbnRhdGlvbjoKLSAqLwotCi1zdGF0aWMgdm9pZCBhY2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JYWNrX0FQSUNfaXJxKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiAmIH5BUElDX0xWVF9NQVNLRUQpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGxhcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAibG9jYWwtQVBJQyIsCi0JLm1hc2sJCT0gbWFza19sYXBpY19pcnEsCi0JLnVubWFzawkJPSB1bm1hc2tfbGFwaWNfaXJxLAotCS5hY2sJCT0gYWNrX2xhcGljX2lycSwKLX07Ci0KLXN0YXRpYyB2b2lkIGxhcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgaW50IHZlY3RvcikKLXsKLQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX0xFVkVMOwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmxhcGljX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwKLQkJCQkgICAgICAiZWRnZSIpOwotCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaXJxXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ubWkodm9pZCkKLXsKLQkvKgotCSAqIERpcnR5IHRyaWNrIHRvIGVuYWJsZSB0aGUgTk1JIHdhdGNoZG9nIC4uLgotCSAqIFdlIHB1dCB0aGUgODI1OUEgbWFzdGVyIGludG8gQUVPSSBtb2RlIGFuZAotCSAqIHVubWFzayBvbiBhbGwgbG9jYWwgQVBJQ3MgTFZUMCBhcyBOTUkuCi0JICoKLQkgKiBUaGUgaWRlYSB0byB1c2UgdGhlIDgyNTlBIGluIEFFT0kgbW9kZSAoJzgyNTlBIFZpcnR1YWwgV2lyZScpCi0JICogaXMgZnJvbSBNYWNpZWogVy4gUm96eWNraSAtIHNvIHdlIGRvIG5vdCBoYXZlIHRvIEVPSSBmcm9tCi0JICogdGhlIE5NSSBoYW5kbGVyIG9yIHRoZSB0aW1lciBpbnRlcnJ1cHQuCi0JICovCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8gImFjdGl2YXRpbmcgTk1JIFdhdGNoZG9nIC4uLiIpOwotCi0JZW5hYmxlX05NSV90aHJvdWdoX0xWVDAoKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBkb25lLlxuIik7Ci19Ci0KLS8qCi0gKiBUaGlzIGxvb2tzIGEgYml0IGhhY2tpc2ggYnV0IGl0J3MgYWJvdXQgdGhlIG9ubHkgb25lIHdheSBvZiBzZW5kaW5nCi0gKiBhIGZldyBJTlRBIGN5Y2xlcyB0byA4MjU5QXMgYW5kIGFueSBhc3NvY2lhdGVkIGdsdWUgbG9naWMuICBJQ1IgZG9lcwotICogbm90IHN1cHBvcnQgdGhlIEV4dElOVCBtb2RlLCB1bmZvcnR1bmF0ZWx5LiAgV2UgbmVlZCB0byBzZW5kIHRoZXNlCi0gKiBjeWNsZXMgYXMgc29tZSBpODI0ODlEWC1iYXNlZCBib2FyZHMgaGF2ZSBnbHVlIGxvZ2ljIHRoYXQga2VlcHMgdGhlCi0gKiA4MjU5QSBpbnRlcnJ1cHQgbGluZSBhc3NlcnRlZCB1bnRpbCBJTlRBLiAgLS1tYWNybwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHVubG9ja19FeHRJTlRfbG9naWModm9pZCkKLXsKLQlpbnQgYXBpYywgcGluLCBpOwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5MCwgZW50cnkxOwotCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OwotCi0JcGluICA9IGZpbmRfaXNhX2lycV9waW4oOCwgbXBfSU5UKTsKLQlpZiAocGluID09IC0xKSB7Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJcmV0dXJuOwotCX0KLQlhcGljID0gZmluZF9pc2FfaXJxX2FwaWMoOCwgbXBfSU5UKTsKLQlpZiAoYXBpYyA9PSAtMSkgewotCQlXQVJOX09OX09OQ0UoMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQllbnRyeTAgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0KLQltZW1zZXQoJmVudHJ5MSwgMCwgc2l6ZW9mKGVudHJ5MSkpOwotCi0JZW50cnkxLmRlc3RfbW9kZSA9IDA7CQkJLyogcGh5c2ljYWwgZGVsaXZlcnkgKi8KLQllbnRyeTEubWFzayA9IDA7CQkJLyogdW5tYXNrIElSUSBub3cgKi8KLQllbnRyeTEuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKLQllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7Ci0JZW50cnkxLnRyaWdnZXIgPSAwOwotCWVudHJ5MS52ZWN0b3IgPSAwOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkxKTsKLQotCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7Ci0Jc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOwotCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3QgJiB+UlRDX1JBVEVfU0VMRUNUKSB8IDB4NiwKLQkJICAgUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCB8IFJUQ19QSUUsIFJUQ19DT05UUk9MKTsKLQotCWkgPSAxMDA7Ci0Jd2hpbGUgKGktLSA+IDApIHsKLQkJbWRlbGF5KDEwKTsKLQkJaWYgKChDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpICYgUlRDX1BGKSA9PSBSVENfUEYpCi0JCQlpIC09IDEwOwotCX0KLQotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOwotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTApOwotfQotCi0vKgotICogVGhpcyBjb2RlIG1heSBsb29rIGEgYml0IHBhcmFub2lkLCBidXQgaXQncyBzdXBwb3NlZCB0byBjb29wZXJhdGUgd2l0aAotICogYSB3aWRlIHJhbmdlIG9mIGJvYXJkcyBhbmQgQklPUyBidWdzLiAgRm9ydHVuYXRlbHkgb25seSB0aGUgdGltZXIgSVJRCi0gKiBpcyBzbyBzY3Jld3kuICBUaGFua3MgdG8gQnJpYW4gUGVya2lucyBmb3IgdGVzdGluZy9oYWNraW5nIHRoaXMgYmVhc3QKLSAqIGZhbmF0aWNhbGx5IG9uIGhpcyB0cnVseSBidWdneSBib2FyZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjaGVja190aW1lcih2b2lkKQotewotCWludCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjI7Ci0JaW50IG5vX3BpbjEgPSAwOwotCWludCB2ZWN0b3I7Ci0JdW5zaWduZWQgaW50IHZlcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JdmVyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHZlcik7Ci0KLQkvKgotCSAqIGdldC9zZXQgdGhlIHRpbWVyIElSUSB2ZWN0b3I6Ci0JICovCi0JZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoMCk7Ci0Jc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFswXSk7Ci0KLQkvKgotCSAqIEFzIElSUTAgaXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgODI1OUEsIHRoZSB2aXJ0dWFsCi0JICogd2lyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIGxvY2FsIEFQSUMuICBBbHNvCi0JICogdGltZXIgaW50ZXJydXB0cyBuZWVkIHRvIGJlIGFja25vd2xlZGdlZCBtYW51YWxseSBpbgotCSAqIHRoZSA4MjU5QSBmb3IgdGhlIGk4MjQ4OURYIHdoZW4gdXNpbmcgdGhlIE5NSQotCSAqIHdhdGNoZG9nIGFzIHRoYXQgQVBJQyB0cmVhdHMgTk1JcyBhcyBsZXZlbC10cmlnZ2VyZWQuCi0JICogVGhlIEFFT0kgbW9kZSB3aWxsIGZpbmlzaCB0aGVtIGluIHRoZSA4MjU5QQotCSAqIGF1dG9tYXRpY2FsbHkuCi0JICovCi0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRVhUSU5UKTsKLQlpbml0XzgyNTlBKDEpOwotCXRpbWVyX2FjayA9IChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMgJiYgIUFQSUNfSU5URUdSQVRFRCh2ZXIpKTsKLQotCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOwotCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKLQlwaW4yICA9IGlvYXBpY19pODI1OS5waW47Ci0JYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKLQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi5USU1FUjogdmVjdG9yPTB4JTAyWCAiCi0JCSAgICAiYXBpYzE9JWQgcGluMT0lZCBhcGljMj0lZCBwaW4yPSVkXG4iLAotCQkgICAgdmVjdG9yLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCi0JLyoKLQkgKiBTb21lIEJJT1Mgd3JpdGVycyBhcmUgY2x1ZWxlc3MgYW5kIHJlcG9ydCB0aGUgRXh0SU5UQQotCSAqIEkvTyBBUElDIGlucHV0IGZyb20gdGhlIGNhc2NhZGVkIDgyNTlBIGFzIHRoZSB0aW1lcgotCSAqIGludGVycnVwdCBpbnB1dC4gIFNvIGp1c3QgaW4gY2FzZSwgaWYgb25seSBvbmUgcGluCi0JICogd2FzIGZvdW5kIGFib3ZlLCB0cnkgaXQgYm90aCBkaXJlY3RseSBhbmQgdGhyb3VnaCB0aGUKLQkgKiA4MjU5QS4KLQkgKi8KLQlpZiAocGluMSA9PSAtMSkgewotCQlwaW4xID0gcGluMjsKLQkJYXBpYzEgPSBhcGljMjsKLQkJbm9fcGluMSA9IDE7Ci0JfSBlbHNlIGlmIChwaW4yID09IC0xKSB7Ci0JCXBpbjIgPSBwaW4xOwotCQlhcGljMiA9IGFwaWMxOwotCX0KLQotCWlmIChwaW4xICE9IC0xKSB7Ci0JCS8qCi0JCSAqIE9rLCBkb2VzIElSUTAgdGhyb3VnaCB0aGUgSU9BUElDIHdvcms/Ci0JCSAqLwotCQlpZiAobm9fcGluMSkgewotCQkJYWRkX3Bpbl90b19pcnEoMCwgYXBpYzEsIHBpbjEpOwotCQkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzEsIHBpbjEsIHZlY3Rvcik7Ci0JCX0KLQkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOwotCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJfQotCQkJaWYgKGRpc2FibGVfdGltZXJfcGluXzEgPiAwKQotCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzEsIHBpbjEpOwotCQlpZiAoIW5vX3BpbjEpCi0JCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0VSUiAiLi5NUC1CSU9TIGJ1ZzogIgotCQkJCSAgICAiODI1NCB0aW1lciBub3QgY29ubmVjdGVkIHRvIElPLUFQSUNcbiIpOwotCi0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciAiCi0JCQkgICAgIihJUlEwKSB0aHJvdWdoIHRoZSA4MjU5QSAuLi5cbiIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KLQkJCSAgICAiLi4uLi4gKGZvdW5kIGFwaWMgJWQgcGluICVkKSAuLi5cbiIsIGFwaWMyLCBwaW4yKTsKLQkJLyoKLQkJICogbGVnYWN5IGRldmljZXMgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBJTyBBUElDICMwCi0JCSAqLwotCQlyZXBsYWNlX3Bpbl9hdF9pcnEoMCwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKLQkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzIsIHBpbjIsIHZlY3Rvcik7Ci0JCXVubWFza19JT19BUElDX2lycSgwKTsKLQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKLQkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gd29ya3MuXG4iKTsKLQkJCXRpbWVyX3Rocm91Z2hfODI1OSA9IDE7Ci0JCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQkJc2V0dXBfbm1pKCk7Ci0JCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKLQkJCX0KLQkJCWdvdG8gb3V0OwotCQl9Ci0JCS8qCi0JCSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4KLQkJICovCi0JCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKLQl9Ci0KLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fV0FSTklORyAidGltZXIgZG9lc24ndCB3b3JrICIKLQkJCSAgICAidGhyb3VnaCB0aGUgSU8tQVBJQyAtIGRpc2FibGluZyBOTUkgV2F0Y2hkb2chXG4iKTsKLQkJbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7Ci0JfQotCXRpbWVyX2FjayA9IDA7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KLQkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIFZpcnR1YWwgV2lyZSBJUlEuLi5cbiIpOwotCi0JbGFwaWNfcmVnaXN0ZXJfaW50cigwLCB2ZWN0b3IpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLwotCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0KLQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCB2ZWN0b3IpOwotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkLlxuIik7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KLQkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIEV4dElOVCBJUlEuLi5cbiIpOwotCi0JaW5pdF84MjU5QSgwKTsKLQltYWtlXzgyNTlBX2lycSgwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOwotCi0JdW5sb2NrX0V4dElOVF9sb2dpYygpOwotCi0JaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkIDooLlxuIik7Ci0JcGFuaWMoIklPLUFQSUMgKyB0aW1lciBkb2Vzbid0IHdvcmshICBCb290IHdpdGggYXBpYz1kZWJ1ZyBhbmQgc2VuZCBhICIKLQkJInJlcG9ydC4gIFRoZW4gdHJ5IGJvb3Rpbmcgd2l0aCB0aGUgJ25vYXBpYycgb3B0aW9uLlxuIik7Ci1vdXQ6Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogVHJhZGl0aW9uYWxseSBJU0EgSVJRMiBpcyB0aGUgY2FzY2FkZSBJUlEsIGFuZCBpcyBub3QgYXZhaWxhYmxlCi0gKiB0byBkZXZpY2VzLiAgSG93ZXZlciB0aGVyZSBtYXkgYmUgYW4gSS9PIEFQSUMgcGluIGF2YWlsYWJsZSBmb3IKLSAqIHRoaXMgaW50ZXJydXB0IHJlZ2FyZGxlc3MuICBUaGUgcGluIG1heSBiZSBsZWZ0IHVuY29ubmVjdGVkLCBidXQKLSAqIHR5cGljYWxseSBpdCB3aWxsIGJlIHJldXNlZCBhcyBhbiBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgZm9yCi0gKiB0aGUgbWFzdGVyIDgyNTlBLiAgSW4gdGhlIE1QUyBjYXNlIHN1Y2ggYSBwaW4gd2lsbCBub3JtYWxseSBiZQotICogcmVwb3J0ZWQgYXMgYW4gRXh0SU5UIGludGVycnVwdCBpbiB0aGUgTVAgdGFibGUuICBXaXRoIEFDUEkKLSAqIHRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgRXh0SU5UIGludGVycnVwdHMsIGFuZCBpbiB0aGUgYWJzZW5jZQotICogb2YgYW4gb3ZlcnJpZGUgaXQgd291bGQgYmUgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBJU0EgSS9PIEFQSUMKLSAqIGludGVycnVwdCwgdGhhdCBpcyBlZGdlLXRyaWdnZXJlZCBhbmQgdW5tYXNrZWQgYnkgZGVmYXVsdC4gIFdlCi0gKiB1c2VkIHRvIGRvIHRoaXMsIGJ1dCBpdCBjYXVzZWQgcHJvYmxlbXMgb24gc29tZSBzeXN0ZW1zIGJlY2F1c2UKLSAqIG9mIHRoZSBOTUkgd2F0Y2hkb2cgYW5kIHNvbWV0aW1lcyBJUlEwIG9mIHRoZSA4MjU0IHRpbWVyIHVzaW5nCi0gKiB0aGUgc2FtZSBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gZHJpdmUgdGhlIGxvY2FsIEFQSUMgb2YgdGhlCi0gKiBib290c3RyYXAgcHJvY2Vzc29yLiAgVGhlcmVmb3JlIHdlIHJlZnJhaW4gZnJvbSByb3V0aW5nIElSUTIgdG8KLSAqIHRoZSBJL08gQVBJQyBpbiBhbGwgY2FzZXMgbm93LiAgTm8gYWN0dWFsIGRldmljZSBzaG91bGQgcmVxdWVzdAotICogaXQgYW55d2F5LiAgLS1tYWNybwotICovCi0jZGVmaW5lIFBJQ19JUlFTCSgxIDw8IFBJQ19DQVNDQURFX0lSKQotCi12b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBSZXNlcnZlIGFsbCB0aGUgc3lzdGVtIHZlY3RvcnMuICovCi0JZm9yIChpID0gZmlyc3Rfc3lzdGVtX3ZlY3RvcjsgaSA8IE5SX1ZFQ1RPUlM7IGkrKykKLQkJc2V0X2JpdChpLCB1c2VkX3ZlY3RvcnMpOwotCi0JZW5hYmxlX0lPX0FQSUMoKTsKLQotCWlvX2FwaWNfaXJxcyA9IH5QSUNfSVJRUzsKLQotCXByaW50aygiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKLQotCS8qCi0JICogU2V0IHVwIElPLUFQSUMgSVJRIHJvdXRpbmcuCi0JICovCi0JaWYgKCFhY3BpX2lvYXBpYykKLQkJc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYygpOwotCXN5bmNfQXJiX0lEcygpOwotCXNldHVwX0lPX0FQSUNfaXJxcygpOwotCWluaXRfSU9fQVBJQ190cmFwcygpOwotCWNoZWNrX3RpbWVyKCk7Ci19Ci0KLS8qCi0gKglDYWxsZWQgYWZ0ZXIgYWxsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lLiBJZiB3ZSBkaWRudCBmaW5kIGFueQotICoJQVBJQyBidWdzIHRoZW4gd2UgY2FuIGFsbG93IHRoZSBtb2RpZnkgZmFzdCBwYXRoCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgaW9fYXBpY19idWdfZmluYWxpemUodm9pZCkKLXsKLQlpZiAoc2lzX2FwaWNfYnVnID09IC0xKQotCQlzaXNfYXBpY19idWcgPSAwOwotCXJldHVybiAwOwotfQotCi1sYXRlX2luaXRjYWxsKGlvX2FwaWNfYnVnX2ZpbmFsaXplKTsKLQotc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhIHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBkZXY7Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnlbMF07Ci19Owotc3RhdGljIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqbXBfaW9hcGljX2RhdGFbTUFYX0lPX0FQSUNTXTsKLQotc3RhdGljIGludCBpb2FwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqZGF0YTsKLQlpbnQgaTsKLQotCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7Ci0JZW50cnkgPSBkYXRhLT5lbnRyeTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSsrKQotCQllbnRyeVtpXSA9IGlvYXBpY19yZWFkX2VudHJ5KGRldi0+aWQsIGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwotCWVudHJ5ID0gZGF0YS0+ZW50cnk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGRldi0+aWQsIDApOwotCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZCkgewotCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkOwotCQlpb19hcGljX3dyaXRlKGRldi0+aWQsIDAsIHJlZ18wMC5yYXcpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCi0JCWlvYXBpY193cml0ZV9lbnRyeShkZXYtPmlkLCBpLCBlbnRyeVtpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW9hcGljX3N5c2Rldl9jbGFzcyA9IHsKLQkubmFtZSA9ICJpb2FwaWMiLAotCS5zdXNwZW5kID0gaW9hcGljX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlvYXBpY19yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfaW5pdF9zeXNmcyh2b2lkKQotewotCXN0cnVjdCBzeXNfZGV2aWNlICpkZXY7Ci0JaW50IGksIHNpemUsIGVycm9yID0gMDsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpb2FwaWNfc3lzZGV2X2NsYXNzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3lzX2RldmljZSkgKyBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldCi0JCQkqIHNpemVvZihzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSk7Ci0JCW1wX2lvYXBpY19kYXRhW2ldID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFtcF9pb2FwaWNfZGF0YVtpXSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXNwZW5kL3Jlc3VtZSBJT0FQSUMgJWRcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZGV2ID0gJm1wX2lvYXBpY19kYXRhW2ldLT5kZXY7Ci0JCWRldi0+aWQgPSBpOwotCQlkZXYtPmNscyA9ICZpb2FwaWNfc3lzZGV2X2NsYXNzOwotCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcihkZXYpOwotCQlpZiAoZXJyb3IpIHsKLQkJCWtmcmVlKG1wX2lvYXBpY19kYXRhW2ldKTsKLQkJCW1wX2lvYXBpY19kYXRhW2ldID0gTlVMTDsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWRldmljZV9pbml0Y2FsbChpb2FwaWNfaW5pdF9zeXNmcyk7Ci0KLS8qCi0gKiBEeW5hbWljIGlycSBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0aW9uCi0gKi8KLWludCBjcmVhdGVfaXJxKHZvaWQpCi17Ci0JLyogQWxsb2NhdGUgYW4gdW51c2VkIGlycSAqLwotCWludCBpcnEsIG5ldywgdmVjdG9yID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaXJxID0gLUVOT1NQQzsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlmb3IgKG5ldyA9IChOUl9JUlFTIC0gMSk7IG5ldyA+PSAwOyBuZXctLSkgewotCQlpZiAocGxhdGZvcm1fbGVnYWN5X2lycShuZXcpKQotCQkJY29udGludWU7Ci0JCWlmIChpcnFfdmVjdG9yW25ld10gIT0gMCkKLQkJCWNvbnRpbnVlOwotCQl2ZWN0b3IgPSBfX2Fzc2lnbl9pcnFfdmVjdG9yKG5ldyk7Ci0JCWlmIChsaWtlbHkodmVjdG9yID4gMCkpCi0JCQlpcnEgPSBuZXc7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGlycSA+PSAwKSB7Ci0JCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaXJxXSk7Ci0JCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKLQl9Ci0JcmV0dXJuIGlycTsKLX0KLQotdm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQljbGVhcl9iaXQoaXJxX3ZlY3RvcltpcnFdLCB1c2VkX3ZlY3RvcnMpOwotCWlycV92ZWN0b3JbaXJxXSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIE1TSSBtZXNzYWdlIGNvbXBvc2l0aW9uCi0gKi8KLSNpZmRlZiBDT05GSUdfUENJX01TSQotc3RhdGljIGludCBtc2lfY29tcG9zZV9tc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0JaW50IHZlY3RvcjsKLQl1bnNpZ25lZCBkZXN0OwotCi0JdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQlpZiAodmVjdG9yID49IDApIHsKLQkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0KLQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKLQkJbXNnLT5hZGRyZXNzX2xvID0KLQkJCU1TSV9BRERSX0JBU0VfTE8gfAotCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KLU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTSUNBTDoKLQkJCQlNU0lfQUREUl9ERVNUX01PREVfTE9HSUNBTCkgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KLQkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFU6Ci0JCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJKSB8Ci0JCQlNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0JCW1zZy0+ZGF0YSA9Ci0JCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfAotCQkJTVNJX0RBVEFfTEVWRUxfQVNTRVJUIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci1NU0lfREFUQV9ERUxJVkVSWV9GSVhFRDoKLQkJCQlNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkpIHwKLQkJCU1TSV9EQVRBX1ZFQ1RPUih2ZWN0b3IpOwotCX0KLQlyZXR1cm4gdmVjdG9yOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgc2V0X21zaV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0Jc3RydWN0IG1zaV9tc2cgbXNnOwotCXVuc2lnbmVkIGludCBkZXN0OwotCWNwdW1hc2tfdCB0bXA7Ci0JaW50IHZlY3RvcjsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXRtcCA9IFRBUkdFVF9DUFVTOwotCi0JdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQlpZiAodmVjdG9yIDwgMCkKLQkJcmV0dXJuOwotCi0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKTsKLQotCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwotCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUih2ZWN0b3IpOwotCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLS8qCi0gKiBJUlEgQ2hpcCBmb3IgTVNJIFBDSS9QQ0ktWC9QQ0ktRXhwcmVzcyBEZXZpY2VzLAotICogd2hpY2ggaW1wbGVtZW50IHRoZSBNU0kgb3IgTVNJLVggQ2FwYWJpbGl0eSBTdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIlBDSS1NU0kiLAotCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCi0JLm1hc2sJCT0gbWFza19tc2lfaXJxLAotCS5hY2sJCT0gYWNrX2lvYXBpY19pcnEsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLWludCBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQotewotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQlpbnQgaXJxLCByZXQ7Ci0JaXJxID0gY3JlYXRlX2lycSgpOwotCWlmIChpcnEgPCAwKQotCQlyZXR1cm4gaXJxOwotCi0JcmV0ID0gbXNpX2NvbXBvc2VfbXNnKGRldiwgaXJxLCAmbXNnKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXN0cm95X2lycShpcnEpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXNldF9pcnFfbXNpKGlycSwgZGVzYyk7Ci0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCi0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwKLQkJCQkgICAgICAiZWRnZSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYXJjaF90ZWFyZG93bl9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGVzdHJveV9pcnEoaXJxKTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCi0KLS8qCi0gKiBIeXBlcnRyYW5zcG9ydCBpbnRlcnJ1cHQgc3VwcG9ydAotICovCi0jaWZkZWYgQ09ORklHX0hUX0lSUQotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdGF0aWMgdm9pZCB0YXJnZXRfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0KQotewotCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKLQlmZXRjaF9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci0KLQltc2cuYWRkcmVzc19sbyAmPSB+KEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKTsKLQltc2cuYWRkcmVzc19oaSAmPSB+KEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSyk7Ci0KLQltc2cuYWRkcmVzc19sbyB8PSBIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCk7Ci0JbXNnLmFkZHJlc3NfaGkgfD0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKLQotCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2h0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJdG1wID0gVEFSR0VUX0NQVVM7Ci0KLQljcHVzX2FuZChtYXNrLCB0bXAsIENQVV9NQVNLX0FMTCk7Ci0KLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spOwotCi0JdGFyZ2V0X2h0X2lycShpcnEsIGRlc3QpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaHRfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIlBDSS1IVCIsCi0JLm1hc2sJCT0gbWFza19odF9pcnEsCi0JLnVubWFzawkJPSB1bm1hc2tfaHRfaXJxLAotCS5hY2sJCT0gYWNrX2lvYXBpY19pcnEsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfaHRfaXJxX2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IHZlY3RvcjsKLQotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0JaWYgKHZlY3RvciA+PSAwKSB7Ci0JCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKLQkJdW5zaWduZWQgZGVzdDsKLQkJY3B1bWFza190IHRtcDsKLQotCQljcHVzX2NsZWFyKHRtcCk7Ci0JCWNwdV9zZXQodmVjdG9yID4+IDgsIHRtcCk7Ci0JCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCQltc2cuYWRkcmVzc19oaSA9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7Ci0KLQkJbXNnLmFkZHJlc3NfbG8gPQotCQkJSFRfSVJRX0xPV19CQVNFIHwKLQkJCUhUX0lSUV9MT1dfREVTVF9JRChkZXN0KSB8Ci0JCQlIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwKLQkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/Ci0JCQkJSFRfSVJRX0xPV19ETV9QSFlTSUNBTCA6Ci0JCQkJSFRfSVJRX0xPV19ETV9MT0dJQ0FMKSB8Ci0JCQlIVF9JUlFfTE9XX1JRRU9JX0VER0UgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KLQkJCQlIVF9JUlFfTE9XX01UX0ZJWEVEIDoKLQkJCQlIVF9JUlFfTE9XX01UX0FSQklUUkFURUQpIHwKLQkJCUhUX0lSUV9MT1dfSVJRX01BU0tFRDsKLQotCQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci0KLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaHRfaXJxX2NoaXAsCi0JCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQl9Ci0JcmV0dXJuIHZlY3RvcjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfSFRfSVJRICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQlBQ1BJLWJhc2VkIElPQVBJQyBDb25maWd1cmF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FDUEkKLQotaW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXN0YXRpYyBwaHlzaWRfbWFza190IGFwaWNfaWRfbWFwID0gUEhZU0lEX01BU0tfTk9ORTsKLQlwaHlzaWRfbWFza190IHRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpID0gMDsKLQotCS8qCi0JICogVGhlIFA0IHBsYXRmb3JtIHN1cHBvcnRzIHVwIHRvIDI1NiBBUElDIElEcyBvbiB0d28gc2VwYXJhdGUgQVBJQwotCSAqIGJ1c2VzIChvbmUgZm9yIExBUElDcywgb25lIGZvciBJT0FQSUNzKSwgd2hlcmUgcHJlZGVjZXNzb3JzIG9ubHkKLQkgKiBzdXBwb3J0cyB1cCB0byAxNiBvbiBvbmUgc2hhcmVkIEFQSUMgYnVzLgotCSAqCi0JICogVEJEOiBFeHBhbmQgTEFQSUMvSU9BUElDIHN1cHBvcnQgb24gUDQtY2xhc3Mgc3lzdGVtcyB0byB0YWtlIGZ1bGwKLQkgKiAgICAgIGFkdmFudGFnZSBvZiBuZXcgQVBJQyBidXMgYXJjaGl0ZWN0dXJlLgotCSAqLwotCi0JaWYgKHBoeXNpZHNfZW1wdHkoYXBpY19pZF9tYXApKQotCQlhcGljX2lkX21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCi0JCQkiJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgcmVnXzAwLmJpdHMuSUQpOwotCQlhcGljX2lkID0gcmVnXzAwLmJpdHMuSUQ7Ci0JfQotCi0JLyoKLQkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCi0JICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCi0JICovCi0JaWYgKGNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgewotCi0JCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykgewotCQkJaWYgKCFjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgaSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA9PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCi0JCQlwYW5pYygiTWF4IGFwaWNfaWQgZXhjZWVkZWQhXG4iKTsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBhcGljX2lkICVkIGFscmVhZHkgdXNlZCwgIgotCQkJInRyeWluZyAlZFxuIiwgaW9hcGljLCBhcGljX2lkLCBpKTsKLQotCQlhcGljX2lkID0gaTsKLQl9Ci0KLQl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQoYXBpY19pZCk7Ci0JcGh5c2lkc19vcihhcGljX2lkX21hcCwgYXBpY19pZF9tYXAsIHRtcCk7Ci0KLQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgewotCQlyZWdfMDAuYml0cy5JRCA9IGFwaWNfaWQ7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JCS8qIFNhbml0eSBjaGVjayAqLwotCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgewotCQkJcHJpbnRrKCJJT0FQSUNbJWRdOiBVbmFibGUgdG8gY2hhbmdlIGFwaWNfaWQhXG4iLCBpb2FwaWMpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSJJT0FQSUNbJWRdOiBBc3NpZ25lZCBhcGljX2lkICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQpOwotCi0JcmV0dXJuIGFwaWNfaWQ7Ci19Ci0KLQotaW50IF9faW5pdCBpb19hcGljX2dldF92ZXJzaW9uKGludCBpb2FwaWMpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZWdfMDEuYml0cy52ZXJzaW9uOwotfQotCi0KLWludCBfX2luaXQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyhpbnQgaW9hcGljKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVnXzAxLmJpdHMuZW50cmllczsKLX0KLQotCi1pbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoaW50IGlvYXBpYywgaW50IHBpbiwgaW50IGlycSwgaW50IGVkZ2VfbGV2ZWwsIGludCBhY3RpdmVfaGlnaF9sb3cpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQlpZiAoIUlPX0FQSUNfSVJRKGlycSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJT0FQSUNbJWRdOiBJbnZhbGlkIHJlZmVyZW5jZSB0byBJUlEgMFxuIiwKLQkJCWlvYXBpYyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogR2VuZXJhdGUgYSBQQ0kgSVJRIHJvdXRpbmcgZW50cnkgYW5kIHByb2dyYW0gdGhlIElPQVBJQyBhY2NvcmRpbmdseS4KLQkgKiBOb3RlIHRoYXQgd2UgbWFzayAoZGlzYWJsZSkgSVJRcyBub3cgLS0gdGhlc2UgZ2V0IGVuYWJsZWQgd2hlbiB0aGUKLQkgKiBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgcmVnaXN0ZXJzIGZvciB0aGlzIElSUS4KLQkgKi8KLQotCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwotCi0JZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCWVudHJ5LmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JZW50cnkuZGVzdC5sb2dpY2FsLmxvZ2ljYWxfZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0JZW50cnkudHJpZ2dlciA9IGVkZ2VfbGV2ZWw7Ci0JZW50cnkucG9sYXJpdHkgPSBhY3RpdmVfaGlnaF9sb3c7Ci0JZW50cnkubWFzayAgPSAxOwotCi0JLyoKLQkgKiBJUlFzIDwgMTYgYXJlIGFscmVhZHkgaW4gdGhlIGlycV8yX3BpbltdIG1hcAotCSAqLwotCWlmIChpcnEgPj0gMTYpCi0JCWFkZF9waW5fdG9faXJxKGlycSwgaW9hcGljLCBwaW4pOwotCi0JZW50cnkudmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsIEtFUk5fREVCVUcgIklPQVBJQ1slZF06IFNldCBQQ0kgcm91dGluZyBlbnRyeSAiCi0JCSIoJWQtJWQgLT4gMHgleCAtPiBJUlEgJWQgTW9kZTolaSBBY3RpdmU6JWkpXG4iLCBpb2FwaWMsCi0JCW1wX2lvYXBpY3NbaW9hcGljXS5tcF9hcGljaWQsIHBpbiwgZW50cnkudmVjdG9yLCBpcnEsCi0JCWVkZ2VfbGV2ZWwsIGFjdGl2ZV9oaWdoX2xvdyk7Ci0KLQlpb2FwaWNfcmVnaXN0ZXJfaW50cihpcnEsIGVudHJ5LnZlY3RvciwgZWRnZV9sZXZlbCk7Ci0KLQlpZiAoIWlvYXBpYyAmJiAoaXJxIDwgMTYpKQotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpYywgcGluLCBlbnRyeSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGFjcGlfZ2V0X292ZXJyaWRlX2lycShpbnQgYnVzX2lycSwgaW50ICp0cmlnZ2VyLCBpbnQgKnBvbGFyaXR5KQotewotCWludCBpOwotCi0JaWYgKHNraXBfaW9hcGljX3NldHVwKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSBtcF9JTlQgJiYKLQkJICAgIG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGJ1c19pcnEpCi0JCQlicmVhazsKLQlpZiAoaSA+PSBtcF9pcnFfZW50cmllcykKLQkJcmV0dXJuIC0xOwotCi0JKnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpKTsKLQkqcG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXNhYmxlX3RpbWVyX3Bpbl8xKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlX3RpbWVyX3Bpbl8xIiwgcGFyc2VfZGlzYWJsZV90aW1lcl9waW5fMSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2VuYWJsZV90aW1lcl9waW5fMShjaGFyICphcmcpCi17Ci0JZGlzYWJsZV90aW1lcl9waW5fMSA9IC0xOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVuYWJsZV90aW1lcl9waW5fMSIsIHBhcnNlX2VuYWJsZV90aW1lcl9waW5fMSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vYXBpYyhjaGFyICphcmcpCi17Ci0JLyogZGlzYWJsZSBJTy1BUElDICovCi0JZGlzYWJsZV9pb2FwaWNfc2V0dXAoKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOwotCi12b2lkIF9faW5pdCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgaW9hcGljX3BoeXMsIGlkeCA9IEZJWF9JT19BUElDX0JBU0VfMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJaWYgKHNtcF9mb3VuZF9jb25maWcpIHsKLQkJCWlvYXBpY19waHlzID0gbXBfaW9hcGljc1tpXS5tcF9hcGljYWRkcjsKLQkJCWlmICghaW9hcGljX3BoeXMpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIldBUk5JTkc6IGJvZ3VzIHplcm8gSU8tQVBJQyAiCi0JCQkJICAgICAgICJhZGRyZXNzIGZvdW5kIGluIE1QVEFCTEUsICIKLQkJCQkgICAgICAgImRpc2FibGluZyBJTy9BUElDIHN1cHBvcnQhXG4iKTsKLQkJCQlzbXBfZm91bmRfY29uZmlnID0gMDsKLQkJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7Ci0JCQkJZ290byBmYWtlX2lvYXBpY19wYWdlOwotCQkJfQotCQl9IGVsc2UgewotZmFrZV9pb2FwaWNfcGFnZToKLQkJCWlvYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJICAgICAgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotCQkJaW9hcGljX3BoeXMgPSBfX3BhKGlvYXBpY19waHlzKTsKLQkJfQotCQlzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBpb2FwaWNfcGh5cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtYXBwZWQgSU9BUElDIHRvICUwOGx4ICglMDhseClcbiIsCi0JCSAgICAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKLQkJaWR4Kys7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmNmM1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvbW1vbiBpbnRlcnJ1cHQgY29kZSBmb3IgMzIgYW5kIDY0IGJpdAorICovCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKKworLyoKKyAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgorICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCisgKi8KK3ZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlwcmludGsoS0VSTl9FUlIgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwkvKgorCSAqIEN1cnJlbnRseSB1bmV4cGVjdGVkIHZlY3RvcnMgaGFwcGVuIG9ubHkgb24gU01QIGFuZCBBUElDLgorCSAqIFdlIF9tdXN0XyBhY2sgdGhlc2UgYmVjYXVzZSBldmVyeSBsb2NhbCBBUElDIGhhcyBvbmx5IE4KKwkgKiBpcnEgc2xvdHMgcGVyIHByaW9yaXR5IGxldmVsLCBhbmQgYSAnaGFuZ2luZywgdW5hY2tlZCcgSVJRCisJICogaG9sZHMgdXAgYW4gaXJxIHNsb3QgLSBpbiBleGNlc3NpdmUgY2FzZXMgKHdoZW4gbXVsdGlwbGUKKwkgKiB1bmV4cGVjdGVkIHZlY3RvcnMgb2NjdXIpIHRoYXQgbWlnaHQgbG9jayB1cCB0aGUgQVBJQworCSAqIGNvbXBsZXRlbHkuCisJICogQnV0IG9ubHkgYWNrIHdoZW4gdGhlIEFQSUMgaXMgZW5hYmxlZCAtQUsKKwkgKi8KKwlpZiAoY3B1X2hhc19hcGljKQorCQlhY2tfQVBJQ19pcnEoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQkoJnBlcl9jcHUoaXJxX3N0YXQseCkpCisjZWxzZQorIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQljcHVfcGRhKHgpCisjZW5kaWYKKy8qCisgKiAvcHJvYy9pbnRlcnJ1cHRzIHByaW50aW5nOgorICovCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnApCit7CisJaW50IGo7CisKKwlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPl9fbm1pX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7CisJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9jYWxsX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7CisJc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGxiX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTUNFCisJc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7CisJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOworIyBpZmRlZiBDT05GSUdfWDg2XzY0CisJc2VxX3ByaW50ZihwLCAiVEhSOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CisjZW5kaWYKKwlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCisJc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlpZiAoaSA+IG5yX2lycXMpCisJCXJldHVybiAwOworCisJaWYgKGkgPT0gbnJfaXJxcykKKwkJcmV0dXJuIHNob3dfb3RoZXJfaW50ZXJydXB0cyhwKTsKKworCS8qIHByaW50IGhlYWRlciAqLworCWlmIChpID09IDApIHsKKwkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsaik7CisJCXNlcV9wdXRjKHAsICdcbicpOworCX0KKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworI2lmbmRlZiBDT05GSUdfU01QCisJYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKKyNlbHNlCisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlhbnlfY291bnQgfD0ga3N0YXRfaXJxc19jcHUoaSwgaik7CisjZW5kaWYKKwlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CisJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKKwkJZ290byBvdXQ7CisKKwlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOworI2lmbmRlZiBDT05GSUdfU01QCisJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKKyNlbHNlCisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKKyNlbmRpZgorCXNlcV9wcmludGYocCwgIiAlOHMiLCBkZXNjLT5jaGlwLT5uYW1lKTsKKwlzZXFfcHJpbnRmKHAsICItJS04cyIsIGRlc2MtPm5hbWUpOworCisJaWYgKGFjdGlvbikgeworCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwkJd2hpbGUgKChhY3Rpb24gPSBhY3Rpb24tPm5leHQpICE9IE5VTEwpCisJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKKwl9CisKKwlzZXFfcHV0YyhwLCAnXG4nKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAvcHJvYy9zdGF0IGhlbHBlcnMKKyAqLwordTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCit7CisJdTY0IHN1bSA9IGlycV9zdGF0cyhjcHUpLT5fX25taV9jb3VudDsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+YXBpY190aW1lcl9pcnFzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NNUAorCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3Jlc2NoZWRfY291bnQ7CisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfY2FsbF9jb3VudDsKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV90bGJfY291bnQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X01DRQorCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RoZXJtYWxfY291bnQ7CisjIGlmZGVmIENPTkZJR19YODZfNjQKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV90aHJlc2hvbGRfY291bnQ7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3NwdXJpb3VzX2NvdW50OworI2VuZGlmCisJcmV0dXJuIHN1bTsKK30KKwordTY0IGFyY2hfaXJxX3N0YXQodm9pZCkKK3sKKwl1NjQgc3VtID0gYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJc3VtICs9IGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KTsKKyNlbmRpZgorCXJldHVybiBzdW07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggYjcxZTAyZC4uYTUxMzgyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtMjUsMjkgKzI1LDYgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzICosIGlycV9yZWdzKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChpcnFfcmVncyk7CiAKLS8qCi0gKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KLSAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgotICovCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKEtFUk5fRVJSICJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JLyoKLQkgKiBDdXJyZW50bHkgdW5leHBlY3RlZCB2ZWN0b3JzIGhhcHBlbiBvbmx5IG9uIFNNUCBhbmQgQVBJQy4KLQkgKiBXZSBfbXVzdF8gYWNrIHRoZXNlIGJlY2F1c2UgZXZlcnkgbG9jYWwgQVBJQyBoYXMgb25seSBOCi0JICogaXJxIHNsb3RzIHBlciBwcmlvcml0eSBsZXZlbCwgYW5kIGEgJ2hhbmdpbmcsIHVuYWNrZWQnIElSUQotCSAqIGhvbGRzIHVwIGFuIGlycSBzbG90IC0gaW4gZXhjZXNzaXZlIGNhc2VzICh3aGVuIG11bHRpcGxlCi0JICogdW5leHBlY3RlZCB2ZWN0b3JzIG9jY3VyKSB0aGF0IG1pZ2h0IGxvY2sgdXAgdGhlIEFQSUMKLQkgKiBjb21wbGV0ZWx5LgotCSAqIEJ1dCBvbmx5IGFjayB3aGVuIHRoZSBBUElDIGlzIGVuYWJsZWQgLUFLCi0JICovCi0JaWYgKGNwdV9oYXNfYXBpYykKLQkJYWNrX0FQSUNfaXJxKCk7Ci0jZW5kaWYKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCiAvKiBEZWJ1Z2dpbmcgY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93OiBpcyB0aGVyZSBsZXNzIHRoYW4gMUtCIGZyZWU/ICovCiBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX292ZXJmbG93KHZvaWQpCkBAIC0yMjMsMjAgKzIwMCwyNSBAQAogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKIAkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICovCi0JaW50IG92ZXJmbG93LCBpcnEgPSB+cmVncy0+b3JpZ19heDsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgb3ZlcmZsb3c7CisJdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGlycTsKIAotCWlmICh1bmxpa2VseSgodW5zaWduZWQpaXJxID49IE5SX0lSUVMpKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICIlczogY2Fubm90IGhhbmRsZSBJUlEgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCBpcnEpOwotCQlCVUcoKTsKLQl9CiAKIAlvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAlpcnFfZW50ZXIoKTsKKwlpcnEgPSBfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl07CiAKIAlvdmVyZmxvdyA9IGNoZWNrX3N0YWNrX292ZXJmbG93KCk7CiAKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAodW5saWtlbHkoIWRlc2MpKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICIlczogY2Fubm90IGhhbmRsZSBJUlEgJWQgdmVjdG9yICUjeCBjcHUgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBpcnEsIHZlY3Rvciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJQlVHKCk7CisJfQorCiAJaWYgKCFleGVjdXRlX29uX2lycV9zdGFjayhvdmVyZmxvdywgZGVzYywgaXJxKSkgewogCQlpZiAodW5saWtlbHkob3ZlcmZsb3cpKQogCQkJcHJpbnRfc3RhY2tfb3ZlcmZsb3coKTsKQEAgLTI0OCwxNDYgKzIzMCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qCi0gKiBJbnRlcnJ1cHQgc3RhdGlzdGljczoKLSAqLwotCi1hdG9taWNfdCBpcnFfZXJyX2NvdW50OwotCi0vKgotICogL3Byb2MvaW50ZXJydXB0cyBwcmludGluZzoKLSAqLwotCi1pbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKLXsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIixqKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfQotCi0JaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXVuc2lnbmVkIGFueV9jb3VudCA9IDA7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCQlhbnlfY291bnQgPSBrc3RhdF9pcnFzKGkpOwotI2Vsc2UKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJYW55X2NvdW50IHw9IGtzdGF0X2NwdShqKS5pcnFzW2ldOwotI2VuZGlmCi0JCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKLQkJCWdvdG8gc2tpcDsKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7Ci0JCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7Ci0KLQkJaWYgKGFjdGlvbikgewotCQkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCQl3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgIT0gTlVMTCkKLQkJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJfQotCi0JCXNlcV9wdXRjKHAsICdcbicpOwotc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0JCXNlcV9wcmludGYocCwgIk5NSTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgbm1pX2NvdW50KGopKTsKLQkJc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JCXNlcV9wcmludGYocCwgIkxPQzogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmFwaWNfdGltZXJfaXJxcyk7Ci0JCXNlcV9wcmludGYocCwgIiAgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIlJFUzogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV9yZXNjaGVkX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIkNBTDogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV9jYWxsX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJUTEI6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfdGxiX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCQlzZXFfcHJpbnRmKHAsICJUUk06ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfdGhlcm1hbF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVGhlcm1hbCBldmVudCBpbnRlcnJ1cHRzXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCQlzZXFfcHJpbnRmKHAsICJTUFU6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfc3B1cmlvdXNfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIkVSUjogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLQkJc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOwotI2VuZGlmCi0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogL3Byb2Mvc3RhdCBoZWxwZXJzCi0gKi8KLXU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXU2NCBzdW0gPSBubWlfY291bnQoY3B1KTsKLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxczsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfcmVzY2hlZF9jb3VudDsKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfY2FsbF9jb3VudDsKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfdGxiX2NvdW50OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfdGhlcm1hbF9jb3VudDsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV9zcHVyaW91c19jb3VudDsKLSNlbmRpZgotCXJldHVybiBzdW07Ci19Ci0KLXU2NCBhcmNoX2lycV9zdGF0KHZvaWQpCi17Ci0JdTY0IHN1bSA9IGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KTsKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXN1bSArPSBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCk7Ci0jZW5kaWYKLQlyZXR1cm4gc3VtOwotfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAjaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAKQEAgLTM5NSwyMCArMjM3LDIyIEBACiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdGF0aWMgaW50IHdhcm5lZDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CiAJCWNwdW1hc2tfdCBtYXNrOworCiAJCWlmIChpcnEgPT0gMikKIAkJCWNvbnRpbnVlOwogCi0JCWNwdXNfYW5kKG1hc2ssIGlycV9kZXNjW2lycV0uYWZmaW5pdHksIG1hcCk7CisJCWNwdXNfYW5kKG1hc2ssIGRlc2MtPmFmZmluaXR5LCBtYXApOwogCQlpZiAoYW55X29ubGluZV9jcHUobWFzaykgPT0gTlJfQ1BVUykgewogCQkJcHJpbnRrKCJCcmVha2luZyBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCQkJbWFzayA9IG1hcDsKIAkJfQotCQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkpCi0JCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwotCQllbHNlIGlmIChpcnFfZGVzY1tpcnFdLmFjdGlvbiAmJiAhKHdhcm5lZCsrKSkKKwkJaWYgKGRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKKwkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOworCQllbHNlIGlmIChkZXNjLT5hY3Rpb24gJiYgISh3YXJuZWQrKykpCiAJCQlwcmludGsoIkNhbm5vdCBzZXQgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYwppbmRleCBmMDY1ZmU5Li42MGViODRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV82NC5jCkBAIC0xOCwyOCArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi1hdG9taWNfdCBpcnFfZXJyX2NvdW50OwotCi0vKgotICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCi0gKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KLSAqLwotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX1dBUk5JTkcgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Ci0JLyoKLQkgKiBDdXJyZW50bHkgdW5leHBlY3RlZCB2ZWN0b3JzIGhhcHBlbiBvbmx5IG9uIFNNUCBhbmQgQVBJQy4KLQkgKiBXZSBfbXVzdF8gYWNrIHRoZXNlIGJlY2F1c2UgZXZlcnkgbG9jYWwgQVBJQyBoYXMgb25seSBOCi0JICogaXJxIHNsb3RzIHBlciBwcmlvcml0eSBsZXZlbCwgYW5kIGEgJ2hhbmdpbmcsIHVuYWNrZWQnIElSUQotCSAqIGhvbGRzIHVwIGFuIGlycSBzbG90IC0gaW4gZXhjZXNzaXZlIGNhc2VzICh3aGVuIG11bHRpcGxlCi0JICogdW5leHBlY3RlZCB2ZWN0b3JzIG9jY3VyKSB0aGF0IG1pZ2h0IGxvY2sgdXAgdGhlIEFQSUMKLQkgKiBjb21wbGV0ZWx5LgotCSAqIEJ1dCBkb24ndCBhY2sgd2hlbiB0aGUgQVBJQyBpcyBkaXNhYmxlZC4gLUFLCi0JICovCi0JaWYgKCFkaXNhYmxlX2FwaWMpCi0JCWFja19BUElDX2lycSgpOwotfQotCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIC8qCiAgKiBQcm9iYWJpbGlzdGljIHN0YWNrIG92ZXJmbG93IGNoZWNrOgpAQCAtNjUsMTIyICs0Myw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEdlbmVyaWMsIGNvbnRyb2xsZXItaW5kZXBlbmRlbnQgZnVuY3Rpb25zOgotICovCi0KLWludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQotewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9Ci0KLQlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJdW5zaWduZWQgYW55X2NvdW50ID0gMDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCWFueV9jb3VudCA9IGtzdGF0X2lycXMoaSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlhbnlfY291bnQgfD0ga3N0YXRfY3B1KGopLmlycXNbaV07Ci0jZW5kaWYKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQotCQkJZ290byBza2lwOwotCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbHNlCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKLQkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKLQotCQlpZiAoYWN0aW9uKSB7Ci0JCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJCXdoaWxlICgoYWN0aW9uID0gYWN0aW9uLT5uZXh0KSAhPSBOVUxMKQotCQkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQl9Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0JCXNlcV9wcmludGYocCwgIk5NSTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+X19ubWlfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiTE9DOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5hcGljX3RpbWVyX2lycXMpOwotCQlzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOwotI2lmZGVmIENPTkZJR19TTVAKLQkJc2VxX3ByaW50ZihwLCAiUkVTOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfcmVzY2hlZF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgUmVzY2hlZHVsaW5nIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV9jYWxsX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJUTEI6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV90bGJfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCi0JCXNlcV9wcmludGYocCwgIlRSTTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3RoZXJtYWxfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIlRIUjogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3RocmVzaG9sZF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVGhyZXNob2xkIEFQSUMgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogL3Byb2Mvc3RhdCBoZWxwZXJzCi0gKi8KLXU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXU2NCBzdW0gPSBjcHVfcGRhKGNwdSktPl9fbm1pX2NvdW50OwotCi0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+YXBpY190aW1lcl9pcnFzOwotI2lmZGVmIENPTkZJR19TTVAKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfcmVzY2hlZF9jb3VudDsKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfY2FsbF9jb3VudDsKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfdGxiX2NvdW50OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfdGhlcm1hbF9jb3VudDsKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfdGhyZXNob2xkX2NvdW50OwotI2VuZGlmCi0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX3NwdXJpb3VzX2NvdW50OwotCXJldHVybiBzdW07Ci19Ci0KLXU2NCBhcmNoX2lycV9zdGF0KHZvaWQpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KTsKLX0KLQotLyoKICAqIGRvX0lSUSBoYW5kbGVzIGFsbCBub3JtYWwgZGV2aWNlIElSUSdzICh0aGUgc3BlY2lhbAogICogU01QIGNyb3NzLUNQVSBpbnRlcnJ1cHRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljCiAgKiBoYW5kbGVycykuCkBAIC0xODgsNiArNTAsNyBAQAogYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICAqLwogCXVuc2lnbmVkIHZlY3RvciA9IH5yZWdzLT5vcmlnX2F4OwpAQCAtMjAxLDggKzY0LDkgQEAKIAlzdGFja19vdmVyZmxvd19jaGVjayhyZWdzKTsKICNlbmRpZgogCi0JaWYgKGxpa2VseShpcnEgPCBOUl9JUlFTKSkKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJaWYgKGxpa2VseShkZXNjKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKIAllbHNlIHsKIAkJaWYgKCFkaXNhYmxlX2FwaWMpCiAJCQlhY2tfQVBJQ19pcnEoKTsKQEAgLTIyMyw4ICs4Nyw5IEBACiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdGF0aWMgaW50IHdhcm5lZDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CiAJCWNwdW1hc2tfdCBtYXNrOwogCQlpbnQgYnJlYWtfYWZmaW5pdHkgPSAwOwogCQlpbnQgc2V0X2FmZmluaXR5ID0gMTsKQEAgLTIzMywzMiArOTgsMzIgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGludGVycnVwdCdzIGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50ICovCi0JCXNwaW5fbG9jaygmaXJxX2Rlc2NbaXJxXS5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCQlpZiAoIWlycV9oYXNfYWN0aW9uKGlycSkgfHwKLQkJICAgIGNwdXNfZXF1YWwoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFwKSkgewotCQkJc3Bpbl91bmxvY2soJmlycV9kZXNjW2lycV0ubG9jayk7CisJCSAgICBjcHVzX2VxdWFsKGRlc2MtPmFmZmluaXR5LCBtYXApKSB7CisJCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWNwdXNfYW5kKG1hc2ssIGlycV9kZXNjW2lycV0uYWZmaW5pdHksIG1hcCk7CisJCWNwdXNfYW5kKG1hc2ssIGRlc2MtPmFmZmluaXR5LCBtYXApOwogCQlpZiAoY3B1c19lbXB0eShtYXNrKSkgewogCQkJYnJlYWtfYWZmaW5pdHkgPSAxOwogCQkJbWFzayA9IG1hcDsKIAkJfQogCi0JCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPm1hc2spCi0JCQlpcnFfZGVzY1tpcnFdLmNoaXAtPm1hc2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPm1hc2spCisJCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CiAKLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwkJaWYgKGRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKKwkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwogCQllbHNlIGlmICghKHdhcm5lZCsrKSkKIAkJCXNldF9hZmZpbml0eSA9IDA7CiAKLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+dW5tYXNrKQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT51bm1hc2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPnVubWFzaykKKwkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCi0JCXNwaW5fdW5sb2NrKCZpcnFfZGVzY1tpcnFdLmxvY2spOworCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAkJaWYgKGJyZWFrX2FmZmluaXR5ICYmIHNldF9hZmZpbml0eSkKIAkJCXByaW50aygiQnJva2UgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCmluZGV4IDkyMDBhMWUuLjg0NWFhOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwpAQCAtNjksNiArNjksMTMgQEAKIAkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCS8qIGZpcnN0IHRpbWUgY2FsbCB0aGlzIGlycV9kZXNjICovCisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gTlVMTDsKKwkJZGVzYy0+ZGVwdGggPSAxOworCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZpODI1OUFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgIlhUIik7CiAJfQpAQCAtODMsNiArOTAsMjcgQEAKIAkubmFtZSA9ICJjYXNjYWRlIiwKIH07CiAKK0RFRklORV9QRVJfQ1BVKHZlY3Rvcl9pcnFfdCwgdmVjdG9yX2lycSkgPSB7CisJWzAgLi4uIElSUTBfVkVDVE9SIC0gMV0gPSAtMSwKKwlbSVJRMF9WRUNUT1JdID0gMCwKKwlbSVJRMV9WRUNUT1JdID0gMSwKKwlbSVJRMl9WRUNUT1JdID0gMiwKKwlbSVJRM19WRUNUT1JdID0gMywKKwlbSVJRNF9WRUNUT1JdID0gNCwKKwlbSVJRNV9WRUNUT1JdID0gNSwKKwlbSVJRNl9WRUNUT1JdID0gNiwKKwlbSVJRN19WRUNUT1JdID0gNywKKwlbSVJROF9WRUNUT1JdID0gOCwKKwlbSVJROV9WRUNUT1JdID0gOSwKKwlbSVJRMTBfVkVDVE9SXSA9IDEwLAorCVtJUlExMV9WRUNUT1JdID0gMTEsCisJW0lSUTEyX1ZFQ1RPUl0gPSAxMiwKKwlbSVJRMTNfVkVDVE9SXSA9IDEzLAorCVtJUlExNF9WRUNUT1JdID0gMTQsCisJW0lSUTE1X1ZFQ1RPUl0gPSAxNSwKKwlbSVJRMTVfVkVDVE9SICsgMSAuLi4gTlJfVkVDVE9SUyAtIDFdID0gLTEKK307CisKIC8qIE92ZXJyaWRkZW4gaW4gcGFyYXZpcnQuYyAqLwogdm9pZCBpbml0X0lSUSh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygibmF0aXZlX2luaXRfSVJRIikpKTsKIApAQCAtOTgsMjIgKzEyNiwxNCBAQAogCSAqIHVzLiAoc29tZSBvZiB0aGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gYW5kIGJlY29tZQogCSAqICdzcGVjaWFsJyBTTVAgaW50ZXJydXB0cykKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKE5SX1ZFQ1RPUlMgLSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpOyBpKyspIHsKLQkJaW50IHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIGk7Ci0JCWlmIChpID49IE5SX0lSUVMpCi0JCQlicmVhazsKKwlmb3IgKGkgPSAgRklSU1RfRVhURVJOQUxfVkVDVE9SOyBpIDwgTlJfVkVDVE9SUzsgaSsrKSB7CiAJCS8qIFNZU0NBTExfVkVDVE9SIHdhcyByZXNlcnZlZCBpbiB0cmFwX2luaXQuICovCi0JCWlmICghdGVzdF9iaXQodmVjdG9yLCB1c2VkX3ZlY3RvcnMpKQotCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpXSk7CisJCWlmIChpICE9IFNZU0NBTExfVkVDVE9SKQorCQkJc2V0X2ludHJfZ2F0ZShpLCBpbnRlcnJ1cHRbaV0pOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0JLyoKLQkgKiBJUlEwIG11c3QgYmUgZ2l2ZW4gYSBmaXhlZCBhc3NpZ25tZW50IGFuZCBpbml0aWFsaXplZCwKLQkgKiBiZWNhdXNlIGl0J3MgdXNlZCBiZWZvcmUgdGhlIElPLUFQSUMgaXMgc2V0IHVwLgotCSAqLwotCXNldF9pbnRyX2dhdGUoRklSU1RfREVWSUNFX1ZFQ1RPUiwgaW50ZXJydXB0WzBdKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJLyoKIAkgKiBUaGUgcmVzY2hlZHVsZSBpbnRlcnJ1cHQgaXMgYSBDUFUtdG8tQ1BVIHJlc2NoZWR1bGUtaGVscGVyCiAJICogSVBJLCBkcml2ZW4gYnkgd2FrZXVwLgpAQCAtMTI4LDYgKzE0OCw5IEBACiAKIAkvKiBJUEkgZm9yIHNpbmdsZSBjYWxsIGZ1bmN0aW9uICovCiAJc2V0X2ludHJfZ2F0ZShDQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IsIGNhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCk7CisKKwkvKiBMb3cgcHJpb3JpdHkgSVBJIHRvIGNsZWFudXAgYWZ0ZXIgbW92aW5nIGFuIGlycSAqLworCXNldF9pbnRyX2dhdGUoSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IsIGlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwppbmRleCA1YjViZTlkLi5mZjAyMzUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKQEAgLTE0MiwyMyArMTQyLDE5IEBACiAJaW5pdF9ic3BfQVBJQygpOwogCWluaXRfODI1OUEoMCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKLQkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCS8qIGZpcnN0IHRpbWUgY2FsbCB0aGlzIGlycV9kZXNjICovCisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOwogCi0JCWlmIChpIDwgMTYpIHsKLQkJCS8qCi0JCQkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgotCQkJICovCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpLCAmaTgyNTlBX2NoaXAsCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gTlVMTDsKKwkJZGVzYy0+ZGVwdGggPSAxOworCisJCS8qCisJCSAqIDE2IG9sZC1zdHlsZSBJTlRBLWN5Y2xlIGludGVycnVwdHM6CisJCSAqLworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpLCAmaTgyNTlBX2NoaXAsCiAJCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAiWFQiKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiAnaGlnaCcgUENJIElSUXMgZmlsbGVkIGluIG9uIGRlbWFuZAotCQkJICovCi0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJm5vX2lycV9jaGlwOwotCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggZjZhMTFiOS4uNjc0NjVlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwpAQCAtMzUsOSArMzUsNiBAQAogCWlmICghKHdvcmQgJiAoMSA8PCAxMykpKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIkludGVsIEU3NTIwLzczMjAvNzUyNSBkZXRlY3RlZDsgIgogCQkJImRpc2FibGluZyBpcnEgYmFsYW5jaW5nIGFuZCBhZmZpbml0eVxuIik7Ci0jaWZkZWYgQ09ORklHX0lSUUJBTEFOQ0UKLQkJaXJxYmFsYW5jZV9kaXNhYmxlKCIiKTsKLSNlbmRpZgogCQlub2lycWRlYnVnX3NldHVwKCIiKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCQlub19pcnFfYWZmaW5pdHkgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3J0Yy5jIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCmluZGV4IDBhMjNiNTcuLmRkNmYyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNjksOCArNjksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKQEAgLTEyNCwxNiArMTI0LDE2IEBACiAJV0FSTl9PTl9PTkNFKFJUQ19BTFdBWVNfQkNEICYmIChzdGF0dXMgJiBSVENfRE1fQklOQVJZKSk7CiAKIAlpZiAoUlRDX0FMV0FZU19CQ0QgfHwgIShzdGF0dXMgJiBSVENfRE1fQklOQVJZKSkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAogCWlmIChjZW50dXJ5KSB7Ci0JCUJDRF9UT19CSU4oY2VudHVyeSk7CisJCWNlbnR1cnkgPSBiY2QyYmluKGNlbnR1cnkpOwogCQl5ZWFyICs9IGNlbnR1cnkgKiAxMDA7CiAJCXByaW50ayhLRVJOX0lORk8gIkV4dGVuZGVkIENNT1MgeWVhcjogJWRcbiIsIGNlbnR1cnkgKiAxMDApOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCAyMjU1NzgyLi4wZmE2NzkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNTYxLDcgKzU2MSwxMyBAQAogCiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLworCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIC8qIGVsZmNvcmVoZHI9IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZWxmIGNvcmUgaGVhZGVyCiAgKiBzdG9yZWQgYnkgdGhlIGNyYXNoZWQga2VybmVsLiBUaGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZAogICogYnkga2V4ZWMgbG9hZGVyIHRvIHRoZSBjYXB0dXJlIGtlcm5lbC4KQEAgLTEwNjcsNiArMTA3Myw3IEBACiAjZW5kaWYKIAogCXByZWZpbGxfcG9zc2libGVfbWFwKCk7CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaW5pdF9jcHVfdG9fbm9kZSgpOwogI2VuZGlmCkBAIC0xMDc0LDYgKzEwODEsOSBAQAogCWluaXRfYXBpY19tYXBwaW5ncygpOwogCWlvYXBpY19pbml0X21hcHBpbmdzKCk7CiAKKwkvKiBuZWVkIHRvIHdhaXQgZm9yIGlvX2FwaWMgaXMgbWFwcGVkICovCisJbnJfaXJxcyA9IHByb2JlX25yX2lycXMoKTsKKwogCWt2bV9ndWVzdF9pbml0KCk7CiAKIAllODIwX3Jlc2VydmVfcmVzb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKaW5kZXggMGU2N2Y3Mi4uNDEwYzg4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpAQCAtMTQwLDI1ICsxNDAsMzAgQEAKICAqLwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewotCXNzaXplX3Qgc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwlzc2l6ZV90IHNpemUsIG9sZF9zaXplOwogCWNoYXIgKnB0cjsKIAlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOwogCiAJLyogU2V0dXAgY3B1X3BkYSBtYXAgKi8KIAlzZXR1cF9jcHVfcGRhX21hcCgpOwogCiAJLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCi0Jc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwlvbGRfc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwlhbGlnbiA9IG1heF90KHVuc2lnbmVkIGxvbmcsIFBBR0VfU0laRSwgYWxpZ24pOworCXNpemUgPSByb3VuZHVwKG9sZF9zaXplLCBhbGlnbik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiUEVSQ1BVOiBBbGxvY2F0aW5nICV6ZCBieXRlcyBvZiBwZXIgY3B1IGRhdGFcbiIsCiAJCQkgIHNpemUpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUpOworCQlwdHIgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgYWxpZ24sCisJCQkJIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiAjZWxzZQogCQlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CiAJCWlmICghbm9kZV9vbmxpbmUobm9kZSkgfHwgIU5PREVfREFUQShub2RlKSkgewotCQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKwkJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwKKwkJCQkJIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImNwdSAlZCBoYXMgbm8gbm9kZSAlZCBvciBub2RlLWxvY2FsIG1lbW9yeVxuIiwKIAkJCQljcHUsIG5vZGUpOwpAQCAtMTY3LDcgKzE3Miw4IEBACiAJCQkJCSBjcHUsIF9fcGEocHRyKSk7CiAJCX0KIAkJZWxzZSB7Ci0JCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplKTsKKwkJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlKSwgc2l6ZSwgYWxpZ24sCisJCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsKIAkJCWlmIChwdHIpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBlciBjcHUgZGF0YSBmb3IgY3B1JWQgb24gbm9kZSVkIGF0ICUwMTZseFxuIiwKIAkJCQkJIGNwdSwgbm9kZSwgX19wYShwdHIpKTsKQEAgLTE3NSw3ICsxODEsNiBAQAogI2VuZGlmCiAJCXBlcl9jcHVfb2Zmc2V0KGNwdSkgPSBwdHIgLSBfX3Blcl9jcHVfc3RhcnQ7CiAJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7Ci0KIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiTlJfQ1BVUzogJWQsIG5yX2NwdV9pZHM6ICVkLCBucl9ub2RlX2lkcyAlZFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDdlZDllMDcuLjdlY2U4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNTQzLDEwICs1NDMsMTAgQEAKIAlpbnQgdGltZW91dDsKIAl1MzIgc3RhdHVzOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiSW5xdWlyaW5nIHJlbW90ZSBBUElDICMlZC4uLlxuIiwgYXBpY2lkKTsKKwlwcmludGsoS0VSTl9JTkZPICJJbnF1aXJpbmcgcmVtb3RlIEFQSUMgMHgleC4uLlxuIiwgYXBpY2lkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MpOyBpKyspIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgIyVkICVzOiAiLCBhcGljaWQsIG5hbWVzW2ldKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgMHgleCAlczogIiwgYXBpY2lkLCBuYW1lc1tpXSk7CiAKIAkJLyoKIAkJICogV2FpdCBmb3IgaWRsZS4KQEAgLTg3NCw3ICs4NzQsNyBAQAogCXN0YXJ0X2lwID0gc2V0dXBfdHJhbXBvbGluZSgpOwogCiAJLyogU28gd2Ugc2VlIHdoYXQncyB1cCAgICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiQm9vdGluZyBwcm9jZXNzb3IgJWQvJWQgaXAgJWx4XG4iLAorCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcHJvY2Vzc29yICVkIEFQSUMgMHgleCBpcCAweCVseFxuIiwKIAkJCSAgY3B1LCBhcGljaWQsIHN0YXJ0X2lwKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZjUyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIElSUSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgorCitzdGF0aWMgdm9pZCB1dl9ub29wKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXZfbm9vcF9yZXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXZfYWNrX2FwaWModW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfQVBJQ19pcnEoKTsKK30KKworc3RydWN0IGlycV9jaGlwIHV2X2lycV9jaGlwID0geworCS5uYW1lCQk9ICJVVi1DT1JFIiwKKwkuc3RhcnR1cAk9IHV2X25vb3BfcmV0LAorCS5zaHV0ZG93bgk9IHV2X25vb3AsCisJLmVuYWJsZQkJPSB1dl9ub29wLAorCS5kaXNhYmxlCT0gdXZfbm9vcCwKKwkuYWNrCQk9IHV2X25vb3AsCisJLm1hc2sJCT0gdXZfbm9vcCwKKwkudW5tYXNrCQk9IHV2X25vb3AsCisJLmVvaQkJPSB1dl9hY2tfYXBpYywKKwkuZW5kCQk9IHV2X25vb3AsCit9OworCisvKgorICogU2V0IHVwIGEgbWFwcGluZyBvZiBhbiBhdmFpbGFibGUgaXJxIGFuZCB2ZWN0b3IsIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZAorICogTU1SIHRoYXQgZGVmaW5lcyB0aGUgTVNJIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuCisgKiBpbnRlcnJ1cHQgaXMgcmFpc2VkLgorICovCitpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKmlycV9uYW1lLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAorCQkgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWludCBpcnE7CisJaW50IHJldDsKKworCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpZiAoaXJxIDw9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBhcmNoX2VuYWJsZV91dl9pcnEoaXJxX25hbWUsIGlycSwgY3B1LCBtbXJfYmxhZGUsIG1tcl9vZmZzZXQpOworCWlmIChyZXQgIT0gaXJxKQorCQlkZXN0cm95X2lycShpcnEpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X3NldHVwX2lycSk7CisKKy8qCisgKiBUZWFyIGRvd24gYSBtYXBwaW5nIG9mIGFuIGlycSBhbmQgdmVjdG9yLCBhbmQgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiB0aGF0CisgKiBkZWZpbmVkIHRoZSBNU0kgdGhhdCB3YXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuIGludGVycnVwdAorICogd2FzIHJhaXNlZC4KKyAqCisgKiBTZXQgbW1yX2JsYWRlIGFuZCBtbXJfb2Zmc2V0IHRvIHdoYXQgd2FzIHBhc3NlZCBpbiBvbiB1dl9zZXR1cF9pcnEoKS4KKyAqLwordm9pZCB1dl90ZWFyZG93bl9pcnEodW5zaWduZWQgaW50IGlycSwgaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWFyY2hfZGlzYWJsZV91dl9pcnEobW1yX2JsYWRlLCBtbXJfb2Zmc2V0KTsKKwlkZXN0cm95X2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXZfdGVhcmRvd25faXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jIGIvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOWI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgc3VwcG9ydHMgdGhlIC9zeXMvZmlybXdhcmUvc2dpX3V2IGludGVyZmFjZXMgZm9yIFNHSSBVVi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3V2L2Jpb3MuaD4KKworc3RydWN0IGtvYmplY3QgKnNnaV91dl9rb2JqOworCitzdGF0aWMgc3NpemVfdCBwYXJ0aXRpb25faWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgc25fcGFydGl0aW9uX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgY29oZXJlbmNlX2lkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGFydGl0aW9uX2lkX2F0dHIgPQorCV9fQVRUUihwYXJ0aXRpb25faWQsIFNfSVJVR08sIHBhcnRpdGlvbl9pZF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjb2hlcmVuY2VfaWRfYXR0ciA9CisJX19BVFRSKGNvaGVyZW5jZV9pZCwgU19JUlVHTywgY29oZXJlbmNlX2lkX3Nob3csIE5VTEwpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV91dl9zeXNmc19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAoIXNnaV91dl9rb2JqKQorCQlzZ2lfdXZfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInNnaV91diIsIGZpcm13YXJlX2tvYmopOworCWlmICghc2dpX3V2X2tvYmopIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdF9jcmVhdGVfYW5kX2FkZCBzZ2lfdXYgZmFpbGVkIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNnaV91dl9rb2JqLCAmcGFydGl0aW9uX2lkX2F0dHIuYXR0cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoc2dpX3V2X2tvYmosICZjb2hlcmVuY2VfaWRfYXR0ci5hdHRyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIGNvaGVyZW5jZV9pZCBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaV91dl9zeXNmc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCA2MWE5N2U2Li4wYzk2NjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC00ODQsMTAgKzQ4NCwxMSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2NvYmFsdF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKLQlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpKSkKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfihJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKTsKKwlpZiAoKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKSkpCisJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpOwogCWVuYWJsZV9jb2JhbHRfaXJxKGlycSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTUwNiw5ICs1MDcsMTAgQEAKIHN0YXRpYyB2b2lkIGVuZF9jb2JhbHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX2NvYmFsdF9pcnEoaXJxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwogfQpAQCAtNjI2LDEyICs2MjgsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyByZWFsaXJxOworCWRlc2MgPSBpcnFfdG9fZGVzYyhyZWFsaXJxKTsKIAogCS8qCiAJICogaGFuZGxlIHRoaXMgJ3ZpcnR1YWwgaW50ZXJydXB0JyBhcyBhIENvYmFsdCBvbmUgbm93LgogCSAqLwotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbcmVhbGlycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUocmVhbGlycSwgZGVzYyk7CiAKIAlpZiAobGlrZWx5KGRlc2MtPmFjdGlvbiAhPSBOVUxMKSkKIAkJaGFuZGxlX0lSUV9ldmVudChyZWFsaXJxLCBkZXNjLT5hY3Rpb24pOwpAQCAtNjYyLDI3ICs2NjQsMjkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBDT19JUlFfQVBJQzAgKyBDT19BUElDX0xBU1QgKyAxOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwotCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gMDsKKwkJZGVzYy0+ZGVwdGggPSAxOwogCiAJCWlmIChpID09IDApIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CisJCQlkZXNjLT5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChpID09IENPX0lSUV9JREUxKSB7Ci0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWRlc2MtPmNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRXzgyNTkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmcGlpeDRfbWFzdGVyX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA8IENPX0lSUV9BUElDMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKElTX0NPX0FQSUMoaSkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKaW5kZXggNjk1Mzg1OS4uMjU0ZWUwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKQEAgLTIzNSwxMSArMjM1LDE0IEBACiAKIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCS8qIERpc2FibGUgUElUOiBCSU9TZXMgc3RhcnQgUElUIENIMCB3aXRoIDE4LjJoeiBwZXJpZGljLiAqLwogCW91dGJfcGl0KDB4M2EsIFBJVF9NT0RFKTsgLyogYmluYXJ5LCBtb2RlIDUsIExTQi9NU0IsIGNoIDAgKi8KIAogCXZtaV90aW1lX2luaXRfY2xvY2tldmVudCgpOwogCXNldHVwX2lycSgwLCAmdm1pX2Nsb2NrX2FjdGlvbik7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZtaV9nZXRfdGltZXJfdmVjdG9yKCldID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggNjVmMGI4YS4uNDhlZTRmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC01ODIsNyArNTgyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTEdVRVNUX0lSUVM7IGkrKykgewogCQlpbnQgdmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SICsgaTsKIAkJaWYgKHZlY3RvciAhPSBTWVNDQUxMX1ZFQ1RPUikgewotCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpXSk7CisJCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W3ZlY3Rvcl0pOwogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmxndWVzdF9pcnFfY29udHJvbGxlciwKIAkJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsCiAJCQkJCQkgICAgICAibGV2ZWwiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwppbmRleCBkZjM3ZmM5Li4zYzNiNDcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCkBAIC00MSw2ICs0MSwxMCBAQAogCSB7IH0KIH07CiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisgICAgICAgIHJldHVybiBjcHVtYXNrX29mX2NwdShjcHUpOworfQogCiBzdGF0aWMgaW50IHByb2JlX2JpZ3NtcCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCmluZGV4IDY1MTNkNDEuLjI4NDU5Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYworKysgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKQEAgLTc1LDQgKzc1LDE4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGNwdW1hc2tfdCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSkKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJY3B1bWFza190IGRvbWFpbiA9IHsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJcmV0dXJuIGRvbWFpbjsKK30KKwogc3RydWN0IGdlbmFwaWMgX19pbml0ZGF0YV9yZWZvayBhcGljX2VzNzAwMCA9IEFQSUNfSU5JVCgiZXM3MDAwIiwgcHJvYmVfZXM3MDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMKaW5kZXggOGNmNTgzOS4uNzFhMzA5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMKQEAgLTM4LDQgKzM4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCWNwdW1hc2tfdCBkb21haW4gPSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCXJldHVybiBkb21haW47Cit9CisKIHN0cnVjdCBnZW5hcGljIGFwaWNfbnVtYXEgPSBBUElDX0lOSVQoIk5VTUFRIiwgcHJvYmVfbnVtYXEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCmluZGV4IDZhZDZiNjcuLjYyNzJiNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYworKysgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKQEAgLTIzLDQgKzIzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCWNwdW1hc2tfdCBkb21haW4gPSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCXJldHVybiBkb21haW47Cit9CisKIHN0cnVjdCBnZW5hcGljIGFwaWNfc3VtbWl0ID0gQVBJQ19JTklUKCJzdW1taXQiLCBwcm9iZV9zdW1taXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCAxOTlhNWY0Li4wZjZlOGE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAKICAqIHRoZSBpbnRlcnJ1cHQgb2ZmIHRvIGFub3RoZXIgQ1BVICovCiBzdGF0aWMgdm9pZCBiZWZvcmVfaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJX191OCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlfcmF3X3NwaW5fbG9jaygmdmljX2lycV9sb2NrKTsKQEAgLTE1MTgsNyArMTUxOCw3IEBACiAvKiBGaW5pc2ggdGhlIFZJQyBpbnRlcnJ1cHQ6IGJhc2ljYWxseSBtYXNrICovCiBzdGF0aWMgdm9pZCBhZnRlcl9oYW5kbGVfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpcnFfZGVzY190ICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCV9yYXdfc3Bpbl9sb2NrKCZ2aWNfaXJxX2xvY2spOwogCXsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwppbmRleCAxNjVjODcxLi5iY2MwNzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAogCXJldHVybiAodm9pZCopIHZhZGRyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoa21hcF9hdG9taWNfcGZuKTsgLyogdGVtcG9yYXJpbHkgaW4gdXNlIGJ5IGk5MTUgR0VNIHVudGlsIHZtYXAgKi8KIAogc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbW1pby1tb2QuYyBiL2FyY2gveDg2L21tL21taW8tbW9kLmMKaW5kZXggNjM1YjUwZS4uMmM0YmFhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbW1pby1tb2QuYworKysgYi9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jCkBAIC01NiwxMyArNTYsNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0cmFwX3JlYXNvbiwgcGZfcmVhc29uKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW1pb3RyYWNlX3J3LCBjcHVfdHJhY2UpOwogCi0jaWYgMCAvKiBYWFg6IG5vIHdheSBnYXRoZXIgdGhpcyBpbmZvIGFueW1vcmUgKi8KLS8qIEFjY2VzcyB0byB0aGlzIGlzIG5vdCBwZXItY3B1LiAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKGF0b21pY190LCBkcm9wcGVkKTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbWFya2VyX2ZpbGU7Ci0KIHN0YXRpYyBERUZJTkVfTVVURVgobW1pb3RyYWNlX211dGV4KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2VfbG9jayk7CiBzdGF0aWMgYXRvbWljX3QgbW1pb3RyYWNlX2VuYWJsZWQ7CkBAIC03NSw3ICs2OCw3IEBACiAgKiAgIGFuZCB0cmFjZV9sb2NrLgogICogLSBSb3V0aW5lcyBkZXBlbmRpbmcgb24gaXNfZW5hYmxlZCgpIG11c3QgdGFrZSB0cmFjZV9sb2NrLgogICogLSB0cmFjZV9saXN0IHVzZXJzIG11c3QgaG9sZCB0cmFjZV9sb2NrLgotICogLSBpc19lbmFibGVkKCkgZ3VhcmFudGVlcyB0aGF0IG1taW9fdHJhY2VfcmVjb3JkIGlzIGFsbG93ZWQuCisgKiAtIGlzX2VuYWJsZWQoKSBndWFyYW50ZWVzIHRoYXQgbW1pb190cmFjZV97cncsbWFwcGluZ30gYXJlIGFsbG93ZWQuCiAgKiAtIHByZS9wb3N0IGNhbGxiYWNrcyBhc3N1bWUgdGhlIGVmZmVjdCBvZiBpc19lbmFibGVkKCkgYmVpbmcgdHJ1ZS4KICAqLwogCkBAIC05Nyw0NCArOTAsNiBAQAogCXJldHVybiBhdG9taWNfcmVhZCgmbW1pb3RyYWNlX2VuYWJsZWQpOwogfQogCi0jaWYgMCAvKiBYWFg6IG5lZWRzIHJld3JpdGUgKi8KLS8qCi0gKiBXcml0ZSBjYWxsYmFjayBmb3IgdGhlIGRlYnVnZnMgZW50cnk6Ci0gKiBSZWFkIGEgbWFya2VyIGFuZCB3cml0ZSBpdCB0byB0aGUgbW1pbyB0cmFjZSBsb2cKLSAqLwotc3RhdGljIHNzaXplX3Qgd3JpdGVfbWFya2VyKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciAqZXZlbnQgPSBOVUxMOwotCXN0cnVjdCBtbV9pb19oZWFkZXIgKmhlYWRwOwotCXNzaXplX3QgbGVuID0gKGNvdW50ID4gNjU1MzUpID8gNjU1MzUgOiBjb3VudDsKLQotCWV2ZW50ID0ga3phbGxvYyhzaXplb2YoKmhlYWRwKSArIGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldmVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQloZWFkcCA9IChzdHJ1Y3QgbW1faW9faGVhZGVyICopZXZlbnQ7Ci0JaGVhZHAtPnR5cGUgPSBNTUlPX01BR0lDIHwgKE1NSU9fTUFSS0VSIDw8IE1NSU9fT1BDT0RFX1NISUZUKTsKLQloZWFkcC0+ZGF0YV9sZW4gPSBsZW47Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoZXZlbnQgKyBzaXplb2YoKmhlYWRwKSwgYnVmZmVyLCBsZW4pKSB7Ci0JCWtmcmVlKGV2ZW50KTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmdHJhY2VfbG9jayk7Ci0jaWYgMCAvKiBYWFg6IGNvbnZlcnQgdGhpcyB0byB1c2UgdHJhY2luZyAqLwotCWlmIChpc19lbmFibGVkKCkpCi0JCXJlbGF5X3dyaXRlKGNoYW4sIGV2ZW50LCBzaXplb2YoKmhlYWRwKSArIGxlbik7Ci0JZWxzZQotI2VuZGlmCi0JCWxlbiA9IC1FSU5WQUw7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ0cmFjZV9sb2NrKTsKLQlrZnJlZShldmVudCk7Ci0JcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBwcmludF9wdGUodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXVuc2lnbmVkIGludCBsZXZlbDsKQEAgLTMwNyw4ICsyNjIsMTAgQEAKIAltYXAubWFwX2lkID0gdHJhY2UtPmlkOwogCiAJc3Bpbl9sb2NrX2lycSgmdHJhY2VfbG9jayk7Ci0JaWYgKCFpc19lbmFibGVkKCkpCisJaWYgKCFpc19lbmFibGVkKCkpIHsKKwkJa2ZyZWUodHJhY2UpOwogCQlnb3RvIG5vdF9lbmFibGVkOworCX0KIAogCW1taW9fdHJhY2VfbWFwcGluZygmbWFwKTsKIAlsaXN0X2FkZF90YWlsKCZ0cmFjZS0+bGlzdCwgJnRyYWNlX2xpc3QpOwpAQCAtMzc3LDYgKzMzNCwyMyBAQAogCQlpb3VubWFwX3RyYWNlX2NvcmUoYWRkcik7CiB9CiAKK2ludCBtbWlvdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQgPSAwOworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhY2VfbG9jaywgZmxhZ3MpOworCWlmIChpc19lbmFibGVkKCkpCisJCXJldCA9IG1taW9fdHJhY2VfcHJpbnRrKGZtdCwgYXJncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHJhY2VfbG9jaywgZmxhZ3MpOworCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG1taW90cmFjZV9wcmludGspOworCiBzdGF0aWMgdm9pZCBjbGVhcl90cmFjZV9saXN0KHZvaWQpCiB7CiAJc3RydWN0IHJlbWFwX3RyYWNlICp0cmFjZTsKQEAgLTQ2MiwyNiArNDM2LDEyIEBACiB9CiAjZW5kaWYKIAotI2lmIDAgLyogWFhYOiBvdXQgb2Ygb3JkZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfbWFya2VyID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS53cml0ZSA9CXdyaXRlX21hcmtlcgotfTsKLSNlbmRpZgotCiB2b2lkIGVuYWJsZV9tbWlvdHJhY2Uodm9pZCkKIHsKIAltdXRleF9sb2NrKCZtbWlvdHJhY2VfbXV0ZXgpOwogCWlmIChpc19lbmFibGVkKCkpCiAJCWdvdG8gb3V0OwogCi0jaWYgMCAvKiBYWFg6IHRyYWNpbmcgZG9lcyBub3Qgc3VwcG9ydCB0ZXh0IGVudHJpZXMgKi8KLQltYXJrZXJfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1hcmtlciIsIDA2NjAsIGRpciwgTlVMTCwKLQkJCQkJCQkJJmZvcHNfbWFya2VyKTsKLQlpZiAoIW1hcmtlcl9maWxlKQotCQlwcl9lcnIoTkFNRSAibWFya2VyIGZpbGUgY3JlYXRpb24gZmFpbGVkLlxuIik7Ci0jZW5kaWYKLQogCWlmIChub21taW90cmFjZSkKIAkJcHJfaW5mbyhOQU1FICJNTUlPIHRyYWNpbmcgZGlzYWJsZWQuXG4iKTsKIAllbnRlcl91bmlwcm9jZXNzb3IoKTsKQEAgLTUwNiwxMSArNDY2LDYgQEAKIAogCWNsZWFyX3RyYWNlX2xpc3QoKTsgLyogZ3VhcmFudGVlczogbm8gbW9yZSBrbW1pbyBjYWxsYmFja3MgKi8KIAlsZWF2ZV91bmlwcm9jZXNzb3IoKTsKLQlpZiAobWFya2VyX2ZpbGUpIHsKLQkJZGVidWdmc19yZW1vdmUobWFya2VyX2ZpbGUpOwotCQltYXJrZXJfZmlsZSA9IE5VTEw7Ci0JfQotCiAJcHJfaW5mbyhOQU1FICJkaXNhYmxlZC5cbiIpOwogb3V0OgogCW11dGV4X3VubG9jaygmbW1pb3RyYWNlX211dGV4KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IGE5ZWM4OWMuLjQwN2Q4NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtNzkyLDYgKzc5Miw4IEBACiAJLyogTXVzdCBhdm9pZCBhbGlhc2luZyBtYXBwaW5ncyBpbiB0aGUgaGlnaG1lbSBjb2RlICovCiAJa21hcF9mbHVzaF91bnVzZWQoKTsKIAorCXZtX3VubWFwX2FsaWFzZXMoKTsKKwogCWNwYS52YWRkciA9IGFkZHI7CiAJY3BhLm51bXBhZ2VzID0gbnVtcGFnZXM7CiAJY3BhLm1hc2tfc2V0ID0gbWFza19zZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZl9pbi5jIGIvYXJjaC94ODYvbW0vcGZfaW4uYwppbmRleCBlZmExOTExLi5kZjNkNWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wZl9pbi5jCisrKyBiL2FyY2gveDg2L21tL3BmX2luLmMKQEAgLTc5LDI1ICs3OSwzNCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBtdzY0W10gPSB7IDB4ODksIDB4OEIgfTsKICNlbmRpZiAvKiBub3QgX19pMzg2X18gKi8KIAotc3RhdGljIGludCBza2lwX3ByZWZpeCh1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgKnNob3J0ZWQsIGludCAqZW5sYXJnZWQsCi0JCQkJCQkJCWludCAqcmV4cikKK3N0cnVjdCBwcmVmaXhfYml0cyB7CisJdW5zaWduZWQgc2hvcnRlZDoxOworCXVuc2lnbmVkIGVubGFyZ2VkOjE7CisJdW5zaWduZWQgcmV4cjoxOworCXVuc2lnbmVkIHJleDoxOworfTsKKworc3RhdGljIGludCBza2lwX3ByZWZpeCh1bnNpZ25lZCBjaGFyICphZGRyLCBzdHJ1Y3QgcHJlZml4X2JpdHMgKnByZikKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyICpwID0gYWRkcjsKLQkqc2hvcnRlZCA9IDA7Ci0JKmVubGFyZ2VkID0gMDsKLQkqcmV4ciA9IDA7CisJcHJmLT5zaG9ydGVkID0gMDsKKwlwcmYtPmVubGFyZ2VkID0gMDsKKwlwcmYtPnJleHIgPSAwOworCXByZi0+cmV4ID0gMDsKIAogcmVzdGFydDoKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVmaXhfY29kZXMpOyBpKyspIHsKIAkJaWYgKCpwID09IHByZWZpeF9jb2Rlc1tpXSkgewogCQkJaWYgKCpwID09IDB4NjYpCi0JCQkJKnNob3J0ZWQgPSAxOworCQkJCXByZi0+c2hvcnRlZCA9IDE7CiAjaWZkZWYgX19hbWQ2NF9fCiAJCQlpZiAoKCpwICYgMHhmOCkgPT0gMHg0OCkKLQkJCQkqZW5sYXJnZWQgPSAxOworCQkJCXByZi0+ZW5sYXJnZWQgPSAxOwogCQkJaWYgKCgqcCAmIDB4ZjQpID09IDB4NDQpCi0JCQkJKnJleHIgPSAxOworCQkJCXByZi0+cmV4ciA9IDE7CisJCQlpZiAoKCpwICYgMHhmMCkgPT0gMHg0MCkKKwkJCQlwcmYtPnJleCA9IDE7CiAjZW5kaWYKIAkJCXArKzsKIAkJCWdvdG8gcmVzdGFydDsKQEAgLTEzNSwxMiArMTQ0LDEyIEBACiB7CiAJdW5zaWduZWQgaW50IG9wY29kZTsKIAl1bnNpZ25lZCBjaGFyICpwOwotCWludCBzaG9ydGVkLCBlbmxhcmdlZCwgcmV4cjsKKwlzdHJ1Y3QgcHJlZml4X2JpdHMgcHJmOwogCWludCBpOwogCWVudW0gcmVhc29uX3R5cGUgcnYgPSBPVEhFUlM7CiAKIAlwID0gKHVuc2lnbmVkIGNoYXIgKilpbnNfYWRkcjsKLQlwICs9IHNraXBfcHJlZml4KHAsICZzaG9ydGVkLCAmZW5sYXJnZWQsICZyZXhyKTsKKwlwICs9IHNraXBfcHJlZml4KHAsICZwcmYpOwogCXAgKz0gZ2V0X29wY29kZShwLCAmb3Bjb2RlKTsKIAogCUNIRUNLX09QX1RZUEUob3Bjb2RlLCByZWdfcm9wLCBSRUdfUkVBRCk7CkBAIC0xNTYsMTAgKzE2NSwxMSBAQAogewogCXVuc2lnbmVkIGludCBvcGNvZGU7CiAJdW5zaWduZWQgY2hhciAqcDsKLQlpbnQgaSwgc2hvcnRlZCwgZW5sYXJnZWQsIHJleHI7CisJc3RydWN0IHByZWZpeF9iaXRzIHByZjsKKwlpbnQgaTsKIAogCXAgPSAodW5zaWduZWQgY2hhciAqKWluc19hZGRyOwotCXAgKz0gc2tpcF9wcmVmaXgocCwgJnNob3J0ZWQsICZlbmxhcmdlZCwgJnJleHIpOworCXAgKz0gc2tpcF9wcmVmaXgocCwgJnByZik7CiAJcCArPSBnZXRfb3Bjb2RlKHAsICZvcGNvZGUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnc4KTsgaSsrKQpAQCAtMTY4LDcgKzE3OCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydzMyKTsgaSsrKQogCQlpZiAocnczMltpXSA9PSBvcGNvZGUpCi0JCQlyZXR1cm4gKHNob3J0ZWQgPyAyIDogKGVubGFyZ2VkID8gOCA6IDQpKTsKKwkJCXJldHVybiBwcmYuc2hvcnRlZCA/IDIgOiAocHJmLmVubGFyZ2VkID8gOCA6IDQpOwogCiAJcHJpbnRrKEtFUk5fRVJSICJtbWlvdHJhY2U6IFVua25vd24gb3Bjb2RlIDB4JTAyeFxuIiwgb3Bjb2RlKTsKIAlyZXR1cm4gMDsKQEAgLTE3OCwxMCArMTg4LDExIEBACiB7CiAJdW5zaWduZWQgaW50IG9wY29kZTsKIAl1bnNpZ25lZCBjaGFyICpwOwotCWludCBpLCBzaG9ydGVkLCBlbmxhcmdlZCwgcmV4cjsKKwlzdHJ1Y3QgcHJlZml4X2JpdHMgcHJmOworCWludCBpOwogCiAJcCA9ICh1bnNpZ25lZCBjaGFyICopaW5zX2FkZHI7Ci0JcCArPSBza2lwX3ByZWZpeChwLCAmc2hvcnRlZCwgJmVubGFyZ2VkLCAmcmV4cik7CisJcCArPSBza2lwX3ByZWZpeChwLCAmcHJmKTsKIAlwICs9IGdldF9vcGNvZGUocCwgJm9wY29kZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdzgpOyBpKyspCkBAIC0xOTQsMTEgKzIwNSwxMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXczMik7IGkrKykKIAkJaWYgKG13MzJbaV0gPT0gb3Bjb2RlKQotCQkJcmV0dXJuIHNob3J0ZWQgPyAyIDogNDsKKwkJCXJldHVybiBwcmYuc2hvcnRlZCA/IDIgOiA0OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXc2NCk7IGkrKykKIAkJaWYgKG13NjRbaV0gPT0gb3Bjb2RlKQotCQkJcmV0dXJuIHNob3J0ZWQgPyAyIDogKGVubGFyZ2VkID8gOCA6IDQpOworCQkJcmV0dXJuIHByZi5zaG9ydGVkID8gMiA6IChwcmYuZW5sYXJnZWQgPyA4IDogNCk7CiAKIAlwcmludGsoS0VSTl9FUlIgIm1taW90cmFjZTogVW5rbm93biBvcGNvZGUgMHglMDJ4XG4iLCBvcGNvZGUpOwogCXJldHVybiAwOwpAQCAtMjM4LDcgKzI0OSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpnZXRfcmVnX3c4KGludCBubywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X3JlZ193OChpbnQgbm8sIGludCByZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGNoYXIgKnJ2ID0gTlVMTDsKIApAQCAtMjU1LDE4ICsyNjYsNiBAQAogCWNhc2UgYXJnX0RMOgogCQlydiA9ICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmR4OwogCQlicmVhazsKLQljYXNlIGFyZ19BSDoKLQkJcnYgPSAxICsgKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+YXg7Ci0JCWJyZWFrOwotCWNhc2UgYXJnX0JIOgotCQlydiA9IDEgKyAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5ieDsKLQkJYnJlYWs7Ci0JY2FzZSBhcmdfQ0g6Ci0JCXJ2ID0gMSArICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmN4OwotCQlicmVhazsKLQljYXNlIGFyZ19ESDoKLQkJcnYgPSAxICsgKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+ZHg7Ci0JCWJyZWFrOwogI2lmZGVmIF9fYW1kNjRfXwogCWNhc2UgYXJnX1I4OgogCQlydiA9ICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPnI4OwpAQCAtMjk0LDkgKzI5Myw1NSBAQAogCQlicmVhazsKICNlbmRpZgogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAibW1pb3RyYWNlOiBFcnJvciByZWcgbm8jICVkXG4iLCBubyk7CiAJCWJyZWFrOwogCX0KKworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCisJaWYgKHJleCkgeworCQkvKgorCQkgKiBJZiBSRVggcHJlZml4IGV4aXN0cywgYWNjZXNzIGxvdyBieXRlcyBvZiBTSSBldGMuCisJCSAqIGluc3RlYWQgb2YgQUggZXRjLgorCQkgKi8KKwkJc3dpdGNoIChubykgeworCQljYXNlIGFyZ19TSToKKwkJCXJ2ID0gKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+c2k7CisJCQlicmVhazsKKwkJY2FzZSBhcmdfREk6CisJCQlydiA9ICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmRpOworCQkJYnJlYWs7CisJCWNhc2UgYXJnX0JQOgorCQkJcnYgPSAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5icDsKKwkJCWJyZWFrOworCQljYXNlIGFyZ19TUDoKKwkJCXJ2ID0gKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+c3A7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChubykgeworCQljYXNlIGFyZ19BSDoKKwkJCXJ2ID0gMSArICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmF4OworCQkJYnJlYWs7CisJCWNhc2UgYXJnX0JIOgorCQkJcnYgPSAxICsgKHVuc2lnbmVkIGNoYXIgKikmcmVncy0+Yng7CisJCQlicmVhazsKKwkJY2FzZSBhcmdfQ0g6CisJCQlydiA9IDEgKyAodW5zaWduZWQgY2hhciAqKSZyZWdzLT5jeDsKKwkJCWJyZWFrOworCQljYXNlIGFyZ19ESDoKKwkJCXJ2ID0gMSArICh1bnNpZ25lZCBjaGFyICopJnJlZ3MtPmR4OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcnYpCisJCXByaW50ayhLRVJOX0VSUiAibW1pb3RyYWNlOiBFcnJvciByZWcgbm8jICVkXG4iLCBubyk7CisKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTM2OCwxMSArNDEzLDEyIEBACiAJdW5zaWduZWQgY2hhciBtb2Rfcm07CiAJaW50IHJlZzsKIAl1bnNpZ25lZCBjaGFyICpwOwotCWludCBpLCBzaG9ydGVkLCBlbmxhcmdlZCwgcmV4cjsKKwlzdHJ1Y3QgcHJlZml4X2JpdHMgcHJmOworCWludCBpOwogCXVuc2lnbmVkIGxvbmcgcnY7CiAKIAlwID0gKHVuc2lnbmVkIGNoYXIgKilpbnNfYWRkcjsKLQlwICs9IHNraXBfcHJlZml4KHAsICZzaG9ydGVkLCAmZW5sYXJnZWQsICZyZXhyKTsKKwlwICs9IHNraXBfcHJlZml4KHAsICZwcmYpOwogCXAgKz0gZ2V0X29wY29kZShwLCAmb3Bjb2RlKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdfcm9wKTsgaSsrKQogCQlpZiAocmVnX3JvcFtpXSA9PSBvcGNvZGUpIHsKQEAgLTM5MiwxMCArNDM4LDEwIEBACiAKIGRvX3dvcms6CiAJbW9kX3JtID0gKnA7Ci0JcmVnID0gKChtb2Rfcm0gPj4gMykgJiAweDcpIHwgKHJleHIgPDwgMyk7CisJcmVnID0gKChtb2Rfcm0gPj4gMykgJiAweDcpIHwgKHByZi5yZXhyIDw8IDMpOwogCXN3aXRjaCAoZ2V0X2luc19yZWdfd2lkdGgoaW5zX2FkZHIpKSB7CiAJY2FzZSAxOgotCQlyZXR1cm4gKmdldF9yZWdfdzgocmVnLCByZWdzKTsKKwkJcmV0dXJuICpnZXRfcmVnX3c4KHJlZywgcHJmLnJleCwgcmVncyk7CiAKIAljYXNlIDI6CiAJCXJldHVybiAqKHVuc2lnbmVkIHNob3J0ICopZ2V0X3JlZ193MzIocmVnLCByZWdzKTsKQEAgLTQyMiwxMSArNDY4LDEyIEBACiAJdW5zaWduZWQgY2hhciBtb2Rfcm07CiAJdW5zaWduZWQgY2hhciBtb2Q7CiAJdW5zaWduZWQgY2hhciAqcDsKLQlpbnQgaSwgc2hvcnRlZCwgZW5sYXJnZWQsIHJleHI7CisJc3RydWN0IHByZWZpeF9iaXRzIHByZjsKKwlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHJ2OwogCiAJcCA9ICh1bnNpZ25lZCBjaGFyICopaW5zX2FkZHI7Ci0JcCArPSBza2lwX3ByZWZpeChwLCAmc2hvcnRlZCwgJmVubGFyZ2VkLCAmcmV4cik7CisJcCArPSBza2lwX3ByZWZpeChwLCAmcHJmKTsKIAlwICs9IGdldF9vcGNvZGUocCwgJm9wY29kZSk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1tX3dvcCk7IGkrKykKIAkJaWYgKGltbV93b3BbaV0gPT0gb3Bjb2RlKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMgYi9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMKaW5kZXggZDg3N2M1Yi4uYWI1MGE4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vdGVzdG1taW90cmFjZS5jCisrKyBiL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYwpAQCAtMyw2ICszLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInRlc3RtbWlvdHJhY2UiCiAKQEAgLTEzLDYgKzE0LDcgQEAKIHN0YXRpYyB2b2lkIGRvX3dyaXRlX3Rlc3Qodm9pZCBfX2lvbWVtICpwKQogewogCXVuc2lnbmVkIGludCBpOworCW1taW90cmFjZV9wcmludGsoIldyaXRlIHRlc3QuXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCiAJCWlvd3JpdGU4KGksIHAgKyBpKTsKIAlmb3IgKGkgPSAxMDI0OyBpIDwgKDUgKiAxMDI0KTsgaSArPSAyKQpAQCAtMjQsNiArMjYsNyBAQAogc3RhdGljIHZvaWQgZG9fcmVhZF90ZXN0KHZvaWQgX19pb21lbSAqcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKKwltbWlvdHJhY2VfcHJpbnRrKCJSZWFkIHRlc3QuXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCiAJCWlvcmVhZDgocCArIGkpOwogCWZvciAoaSA9IDEwMjQ7IGkgPCAoNSAqIDEwMjQpOyBpICs9IDIpCkBAIC0zOSw2ICs0Miw3IEBACiAJCXByX2VycihNT0RVTEVfTkFNRSAiOiBjb3VsZCBub3QgaW9yZW1hcCwgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuOwogCX0KKwltbWlvdHJhY2VfcHJpbnRrKCJpb3JlbWFwIHJldHVybmVkICVwLlxuIiwgcCk7CiAJZG9fd3JpdGVfdGVzdChwKTsKIAlkb19yZWFkX3Rlc3QocCk7CiAJaW91bm1hcChwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCAwMDY1OTlkLi5iZjY5ZGJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC00OTMsNyArNDkzLDcgQEAKIAlpZiAocGlycSA8PSA0KQogCQlpcnEgPSByZWFkX2NvbmZpZ19ueWJibGUocm91dGVyLCAweDU2LCBwaXJxIC0gMSk7CiAJZGV2X2luZm8oJmRldi0+ZGV2LAotCQkgIkFNRDc1NjogZGV2IFslMDR4LyUwNHhdLCByb3V0ZXIgUElSUSAlZCBnZXQgSVJRICVkXG4iLAorCQkgIkFNRDc1NjogZGV2IFslMDR4OiUwNHhdLCByb3V0ZXIgUElSUSAlZCBnZXQgSVJRICVkXG4iLAogCQkgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLCBwaXJxLCBpcnEpOwogCXJldHVybiBpcnE7CiB9CkBAIC01MDEsNyArNTAxLDcgQEAKIHN0YXRpYyBpbnQgcGlycV9hbWQ3NTZfc2V0KHN0cnVjdCBwY2lfZGV2ICpyb3V0ZXIsIHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwaXJxLCBpbnQgaXJxKQogewogCWRldl9pbmZvKCZkZXYtPmRldiwKLQkJICJBTUQ3NTY6IGRldiBbJTA0eC8lMDR4XSwgcm91dGVyIFBJUlEgJWQgc2V0IElSUSAlZFxuIiwKKwkJICJBTUQ3NTY6IGRldiBbJTA0eDolMDR4XSwgcm91dGVyIFBJUlEgJWQgc2V0IElSUSAlZFxuIiwKIAkJIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSwgcGlycSwgaXJxKTsKIAlpZiAocGlycSA8PSA0KQogCQl3cml0ZV9jb25maWdfbnliYmxlKHJvdXRlciwgMHg1NiwgcGlycSAtIDEsIGlycSk7CkBAIC01OTAsMTMgKzU5MCwyMCBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8xOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8yOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8zOgotCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfMDoKLQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIXzE6CiAJCXItPm5hbWUgPSAiUElJWC9JQ0giOwogCQlyLT5nZXQgPSBwaXJxX3BpaXhfZ2V0OwogCQlyLT5zZXQgPSBwaXJxX3BpaXhfc2V0OwogCQlyZXR1cm4gMTsKIAl9CisKKwlpZiAoKGRldmljZSA+PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BDSF9MUENfTUlOKSAmJiAKKwkJKGRldmljZSA8PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BDSF9MUENfTUFYKSkgeworCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKKwkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKKwkJci0+c2V0ID0gcGlycV9waWl4X3NldDsKKwkJcmV0dXJuIDE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyMyw3ICs4MzAsNyBAQAogCXItPmdldCA9IE5VTEw7CiAJci0+c2V0ID0gTlVMTDsKIAotCURCRyhLRVJOX0RFQlVHICJQQ0k6IEF0dGVtcHRpbmcgdG8gZmluZCBJUlEgcm91dGVyIGZvciAlMDR4OiUwNHhcbiIsCisJREJHKEtFUk5fREVCVUcgIlBDSTogQXR0ZW1wdGluZyB0byBmaW5kIElSUSByb3V0ZXIgZm9yIFslMDR4OiUwNHhdXG4iLAogCSAgICBydC0+cnRyX3ZlbmRvciwgcnQtPnJ0cl9kZXZpY2UpOwogCiAJcGlycV9yb3V0ZXJfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QocnQtPnJ0cl9idXMsIHJ0LT5ydHJfZGV2Zm4pOwpAQCAtODQzLDcgKzg1MCw3IEBACiAJCQloLT5wcm9iZShyLCBwaXJxX3JvdXRlcl9kZXYsIHBpcnFfcm91dGVyX2Rldi0+ZGV2aWNlKSkKIAkJCWJyZWFrOwogCX0KLQlkZXZfaW5mbygmcGlycV9yb3V0ZXJfZGV2LT5kZXYsICIlcyBJUlEgcm91dGVyIFslMDR4LyUwNHhdXG4iLAorCWRldl9pbmZvKCZwaXJxX3JvdXRlcl9kZXYtPmRldiwgIiVzIElSUSByb3V0ZXIgWyUwNHg6JTA0eF1cbiIsCiAJCSBwaXJxX3JvdXRlci5uYW1lLAogCQkgcGlycV9yb3V0ZXJfZGV2LT52ZW5kb3IsIHBpcnFfcm91dGVyX2Rldi0+ZGV2aWNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDAwMTNhNzIuLmI2MTUzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTg3MSw2ICs4NzEsNyBAQAogCQkJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdHJheSBtYXBwaW5ncyBvZgogCQkJICAgdGhpcyBwYWdlICovCiAJCQlrbWFwX2ZsdXNoX3VudXNlZCgpOworCQkJdm1fdW5tYXBfYWxpYXNlcygpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2lycS5jIGIvYXJjaC94ODYveGVuL2lycS5jCmluZGV4IDI4Yjg1YWIuLmJiMDQyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9pcnEuYworKysgYi9hcmNoL3g4Ni94ZW4vaXJxLmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IF9feGVuX2luaXRfSVJRKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWludCBpOwogCiAJLyogQ3JlYXRlIGlkZW50aXR5IHZlY3Rvci0+aXJxIG1hcCAqLwpAQCAtMzEsNyArMzAsNiBAQAogCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW2ldID0gaTsKIAl9Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLwogCiAJeGVuX2luaXRfSVJRKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYWUxNzNmNi4uZDRkNTJmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtODQ2LDYgKzg0Niw3IEBACiAJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGZvciBrbWFwX2ZsdXNoX3VudXNlZCAqLwogCQl4ZW5fbWNfaXNzdWUoMCk7CiAJCWttYXBfZmx1c2hfdW51c2VkKCk7CisJCXZtX3VubWFwX2FsaWFzZXMoKTsKIAkJeGVuX21jX2JhdGNoKCk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYyBiL2FyY2gveDg2L3hlbi9zcGlubG9jay5jCmluZGV4IGRkNzFlM2EuLjU2MDE1MDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zcGlubG9jay5jCisrKyBiL2FyY2gveDg2L3hlbi9zcGlubG9jay5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJQUREX1NUQVRTKHRha2VuX3Nsb3dfc3B1cmlvdXMsICF4ZW5fdGVzdF9pcnFfcGVuZGluZyhpcnEpKTsKIAl9IHdoaWxlICgheGVuX3Rlc3RfaXJxX3BlbmRpbmcoaXJxKSk7IC8qIGNoZWNrIGZvciBzcHVyaW91cyB3YWtldXBzICovCiAKLQlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAogb3V0OgogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9LY29uZmlnIGIvYXJjaC94dGVuc2EvS2NvbmZpZwppbmRleCAwMmU0MTdkLi5hMjEzMjYwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9LY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL0tjb25maWcKQEAgLTU1LDYgKzU1LDcgQEAKIAlkZWZhdWx0IDEwMAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAyZDA1M2I1Li5jM2RmMzBjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTI1Nyw3ICsyNTcsNiBAQAogCiAJcS0+cmVxdWVzdF9mbihxKTsKIH0KLUVYUE9SVF9TWU1CT0woX19nZW5lcmljX3VucGx1Z19kZXZpY2UpOwogCiAvKioKICAqIGdlbmVyaWNfdW5wbHVnX2RldmljZSAtIGZpcmUgYSByZXF1ZXN0IHF1ZXVlCkBAIC0zMjUsNiArMzI0LDkgQEAKIAogc3RhdGljIHZvaWQgYmxrX2ludm9rZV9yZXF1ZXN0X2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogeworCWlmICh1bmxpa2VseShibGtfcXVldWVfc3RvcHBlZChxKSkpCisJCXJldHVybjsKKwogCS8qCiAJICogb25lIGxldmVsIG9mIHJlY3Vyc2lvbiBpcyBvayBhbmQgaXMgbXVjaCBmYXN0ZXIgdGhhbiBraWNraW5nCiAJICogdGhlIHVucGx1ZyBoYW5kbGluZwpAQCAtMzk5LDggKzQwMSwxMyBAQAogRVhQT1JUX1NZTUJPTChibGtfc3luY19xdWV1ZSk7CiAKIC8qKgotICogYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKKyAqIF9fYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOglUaGUgcXVldWUgdG8gcnVuCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICBTZWUgQGJsa19ydW5fcXVldWUuIFRoaXMgdmFyaWFudCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrCisgKiAgICBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKICAqLwogdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC00MTgsNiArNDI1LDEyIEBACiAvKioKICAqIGJsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCiAgKiBAcTogVGhlIHF1ZXVlIHRvIHJ1bgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgSW52b2tlIHJlcXVlc3QgaGFuZGxpbmcgb24gdGhpcyBxdWV1ZSwgaWYgaXQgaGFzIHBlbmRpbmcgd29yayB0byBkby4KKyAqICAgIE1heSBiZSB1c2VkIHRvIHJlc3RhcnQgcXVldWVpbmcgd2hlbiBhIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC4gQWxzbworICogICAgU2VlIEBibGtfc3RhcnRfcXVldWVpbmcuCisgKgogICovCiB2b2lkIGJsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC01MDEsNiArNTE0LDcgQEAKIAlpbml0X3RpbWVyKCZxLT51bnBsdWdfdGltZXIpOwogCXNldHVwX3RpbWVyKCZxLT50aW1lb3V0LCBibGtfcnFfdGltZWRfb3V0X3RpbWVyLCAodW5zaWduZWQgbG9uZykgcSk7CiAJSU5JVF9MSVNUX0hFQUQoJnEtPnRpbWVvdXRfbGlzdCk7CisJSU5JVF9XT1JLKCZxLT51bnBsdWdfd29yaywgYmxrX3VucGx1Z193b3JrKTsKIAogCWtvYmplY3RfaW5pdCgmcS0+a29iaiwgJmJsa19xdWV1ZV9rdHlwZSk7CiAKQEAgLTg4NCw3ICs4OTgsOCBAQAogICoKICAqIFRoaXMgaXMgYmFzaWNhbGx5IGEgaGVscGVyIHRvIHJlbW92ZSB0aGUgbmVlZCB0byBrbm93IHdoZXRoZXIgYSBxdWV1ZQogICogaXMgcGx1Z2dlZCBvciBub3QgaWYgc29tZW9uZSBqdXN0IHdhbnRzIHRvIGluaXRpYXRlIGRpc3BhdGNoIG9mIHJlcXVlc3RzCi0gKiBmb3IgdGhpcyBxdWV1ZS4KKyAqIGZvciB0aGlzIHF1ZXVlLiBTaG91bGQgYmUgdXNlZCB0byBzdGFydCBxdWV1ZWluZyBvbiBhIGRldmljZSBvdXRzaWRlCisgKiBvZiAtPnJlcXVlc3RfZm4oKSBjb250ZXh0LiBBbHNvIHNlZSBAYmxrX3J1bl9xdWV1ZS4KICAqCiAgKiBUaGUgcXVldWUgbG9jayBtdXN0IGJlIGhlbGQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCkBAIC0xMDAzLDggKzEwMTgsOSBAQAogfQogCiAvKioKLSAqIHBhcnRfcm91bmRfc3RhdHMoKQktIFJvdW5kIG9mZiB0aGUgcGVyZm9ybWFuY2Ugc3RhdHMgb24gYSBzdHJ1Y3QKLSAqIGRpc2tfc3RhdHMuCisgKiBwYXJ0X3JvdW5kX3N0YXRzKCkgLSBSb3VuZCBvZmYgdGhlIHBlcmZvcm1hbmNlIHN0YXRzIG9uIGEgc3RydWN0IGRpc2tfc3RhdHMuCisgKiBAY3B1OiBjcHUgbnVtYmVyIGZvciBzdGF0cyBhY2Nlc3MKKyAqIEBwYXJ0OiB0YXJnZXQgcGFydGl0aW9uCiAgKgogICogVGhlIGF2ZXJhZ2UgSU8gcXVldWUgbGVuZ3RoIGFuZCB1dGlsaXNhdGlvbiBzdGF0aXN0aWNzIGFyZSBtYWludGFpbmVkCiAgKiBieSBvYnNlcnZpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHF1ZXVlIGxlbmd0aCBhbmQgdGhlIGFtb3VudCBvZgpAQCAtMTA3NSw4ICsxMDkxLDE1IEBACiAJLyoKIAkgKiBpbmhlcml0IEZBSUxGQVNUIGZyb20gYmlvIChmb3IgcmVhZC1haGVhZCwgYW5kIGV4cGxpY2l0IEZBSUxGQVNUKQogCSAqLwotCWlmIChiaW9fcndfYWhlYWQoYmlvKSB8fCBiaW9fZmFpbGZhc3QoYmlvKSkKLQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUOworCWlmIChiaW9fcndfYWhlYWQoYmlvKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gKFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCQkgICBSRVFfRkFJTEZBU1RfRFJJVkVSKTsKKwlpZiAoYmlvX2ZhaWxmYXN0X2RldihiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWOworCWlmIChiaW9fZmFpbGZhc3RfdHJhbnNwb3J0KGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQ7CisJaWYgKGJpb19mYWlsZmFzdF9kcml2ZXIoYmlvKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAogCS8qCiAJICogUkVRX0JBUlJJRVIgaW1wbGllcyBubyBtZXJnaW5nLCBidXQgbGV0cyBtYWtlIGl0IGV4cGxpY2l0CmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jCmluZGV4IDkwOGQzZTEuLjg2ODFjZDYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tZXJnZS5jCisrKyBiL2Jsb2NrL2Jsay1tZXJnZS5jCkBAIC03NywxMiArNzcsMjAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiBuZXdfc2VnbWVudDoKKwkJaWYgKG5yX3BoeXNfc2VncyA9PSAxICYmIHNlZ19zaXplID4gcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUpCisJCQlycS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSA9IHNlZ19zaXplOworCiAJCW5yX3BoeXNfc2VncysrOwogCQlidnBydiA9IGJ2OwogCQlzZWdfc2l6ZSA9IGJ2LT5idl9sZW47CiAJCWhpZ2hwcnYgPSBoaWdoOwogCX0KIAorCWlmIChucl9waHlzX3NlZ3MgPT0gMSAmJiBzZWdfc2l6ZSA+IHJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplKQorCQlycS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSA9IHNlZ19zaXplOworCWlmIChzZWdfc2l6ZSA+IHJxLT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplKQorCQlycS0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSA9IHNlZ19zaXplOworCiAJcnEtPm5yX3BoeXNfc2VnbWVudHMgPSBucl9waHlzX3NlZ3M7CiB9CiAKQEAgLTEwNiw3ICsxMTQsOCBAQAogCWlmICghdGVzdF9iaXQoUVVFVUVfRkxBR19DTFVTVEVSLCAmcS0+cXVldWVfZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAotCWlmIChiaW8tPmJpX3NpemUgKyBueHQtPmJpX3NpemUgPiBxLT5tYXhfc2VnbWVudF9zaXplKQorCWlmIChiaW8tPmJpX3NlZ19iYWNrX3NpemUgKyBueHQtPmJpX3NlZ19mcm9udF9zaXplID4KKwkgICAgcS0+bWF4X3NlZ21lbnRfc2l6ZSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWJpb19oYXNfZGF0YShiaW8pKQpAQCAtMzA5LDYgKzMxOCw4IEBACiAJCQkJc3RydWN0IHJlcXVlc3QgKm5leHQpCiB7CiAJaW50IHRvdGFsX3BoeXNfc2VnbWVudHM7CisJdW5zaWduZWQgaW50IHNlZ19zaXplID0KKwkJcmVxLT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplICsgbmV4dC0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZTsKIAogCS8qCiAJICogRmlyc3QgY2hlY2sgaWYgdGhlIGVpdGhlciBvZiB0aGUgcmVxdWVzdHMgYXJlIHJlLXF1ZXVlZApAQCAtMzI0LDggKzMzNSwxMyBAQAogCQlyZXR1cm4gMDsKIAogCXRvdGFsX3BoeXNfc2VnbWVudHMgPSByZXEtPm5yX3BoeXNfc2VnbWVudHMgKyBuZXh0LT5ucl9waHlzX3NlZ21lbnRzOwotCWlmIChibGtfcGh5c19jb250aWdfc2VnbWVudChxLCByZXEtPmJpb3RhaWwsIG5leHQtPmJpbykpCisJaWYgKGJsa19waHlzX2NvbnRpZ19zZWdtZW50KHEsIHJlcS0+YmlvdGFpbCwgbmV4dC0+YmlvKSkgeworCQlpZiAocmVxLT5ucl9waHlzX3NlZ21lbnRzID09IDEpCisJCQlyZXEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKKwkJaWYgKG5leHQtPm5yX3BoeXNfc2VnbWVudHMgPT0gMSkKKwkJCW5leHQtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUgPSBzZWdfc2l6ZTsKIAkJdG90YWxfcGh5c19zZWdtZW50cy0tOworCX0KIAogCWlmICh0b3RhbF9waHlzX3NlZ21lbnRzID4gcS0+bWF4X3BoeXNfc2VnbWVudHMpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCBiMjFkY2RiLi40MTM5MmZiIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtMTQxLDggKzE0MSw2IEBACiAJaWYgKHEtPnVucGx1Z19kZWxheSA9PSAwKQogCQlxLT51bnBsdWdfZGVsYXkgPSAxOwogCi0JSU5JVF9XT1JLKCZxLT51bnBsdWdfd29yaywgYmxrX3VucGx1Z193b3JrKTsKLQogCXEtPnVucGx1Z190aW1lci5mdW5jdGlvbiA9IGJsa191bnBsdWdfdGltZW91dDsKIAlxLT51bnBsdWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXE7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggZTVjNTc5Ny4uZDJlNDlhZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKKysrIGIvYmxvY2svYmxrLmgKQEAgLTIwLDYgKzIwLDcgQEAKIHZvaWQgYmxrX3JxX3RpbWVkX291dF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogdm9pZCBibGtfZGVsZXRlX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICopOwogdm9pZCBibGtfYWRkX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICopOwordm9pZCBfX2dlbmVyaWNfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIAogLyoKICAqIEludGVybmFsIGF0b21pYyBmbGFncyBmb3IgcmVxdWVzdCBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggMDQ1MTg5Mi4uNTkxNzNhNiAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC02MTIsNyArNjEyLDcgQEAKIAkJICogICBwcm9jZXNzaW5nLgogCQkgKi8KIAkJYmxrX3JlbW92ZV9wbHVnKHEpOwotCQlxLT5yZXF1ZXN0X2ZuKHEpOworCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJCWJyZWFrOwogCiAJY2FzZSBFTEVWQVRPUl9JTlNFUlRfU09SVDoKQEAgLTk1MCw3ICs5NTAsNyBAQAogCQkgICAgYmxrX29yZGVyZWRfY3VyX3NlcShxKSA9PSBRVUVVRV9PUkRTRVFfRFJBSU4gJiYKIAkJICAgIGJsa19vcmRlcmVkX3JlcV9zZXEoZmlyc3RfcnEpID4gUVVFVUVfT1JEU0VRX0RSQUlOKSB7CiAJCQlibGtfb3JkZXJlZF9jb21wbGV0ZV9zZXEocSwgUVVFVUVfT1JEU0VRX0RSQUlOLCAwKTsKLQkJCXEtPnJlcXVlc3RfZm4ocSk7CisJCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJCX0KIAl9CiB9CkBAIC0xMTA5LDggKzExMDksNyBAQAogCWVsdl9kcmFpbl9lbGV2YXRvcihxKTsKIAogCXdoaWxlIChxLT5ycS5lbHZwcml2KSB7Ci0JCWJsa19yZW1vdmVfcGx1ZyhxKTsKLQkJcS0+cmVxdWVzdF9mbihxKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CkBAIC0xMTY2LDE1ICsxMTY1LDEwIEBACiAJCQkgIHNpemVfdCBjb3VudCkKIHsKIAljaGFyIGVsZXZhdG9yX25hbWVbRUxWX05BTUVfTUFYXTsKLQlzaXplX3QgbGVuOwogCXN0cnVjdCBlbGV2YXRvcl90eXBlICplOwogCi0JZWxldmF0b3JfbmFtZVtzaXplb2YoZWxldmF0b3JfbmFtZSkgLSAxXSA9ICdcMCc7Ci0Jc3RybmNweShlbGV2YXRvcl9uYW1lLCBuYW1lLCBzaXplb2YoZWxldmF0b3JfbmFtZSkgLSAxKTsKLQlsZW4gPSBzdHJsZW4oZWxldmF0b3JfbmFtZSk7Ci0KLQlpZiAobGVuICYmIGVsZXZhdG9yX25hbWVbbGVuIC0gMV0gPT0gJ1xuJykKLQkJZWxldmF0b3JfbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisJc3RybGNweShlbGV2YXRvcl9uYW1lLCBuYW1lLCBzaXplb2YoZWxldmF0b3JfbmFtZSkpOworCXN0cnN0cmlwKGVsZXZhdG9yX25hbWUpOwogCiAJZSA9IGVsZXZhdG9yX2dldChlbGV2YXRvcl9uYW1lKTsKIAlpZiAoIWUpIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDRjZDM0MzMuLjY0NmUxZDIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMzU4LDcgKzM1OCw2IEBACiAvKioKICAqIGJsa19hbGxvY19kZXZ0IC0gYWxsb2NhdGUgYSBkZXZfdCBmb3IgYSBwYXJ0aXRpb24KICAqIEBwYXJ0OiBwYXJ0aXRpb24gdG8gYWxsb2NhdGUgZGV2X3QgZm9yCi0gKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcKICAqIEBkZXZ0OiBvdXQgcGFyYW1ldGVyIGZvciByZXN1bHRpbmcgZGV2X3QKICAqCiAgKiBBbGxvY2F0ZSBhIGRldl90IGZvciBibG9jayBkZXZpY2UuCkBAIC01MzUsNyArNTM0LDcgQEAKIC8qKgogICogZ2V0X2dlbmRpc2sgLSBnZXQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGRldmljZQogICogQGRldnQ6IGRldmljZSB0byBnZXQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGZvcgotICogQHBhcnQ6IHJldHVybmVkIHBhcnRpdGlvbiBpbmRleAorICogQHBhcnRubzogcmV0dXJuZWQgcGFydGl0aW9uIGluZGV4CiAgKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBwYXJ0aXRpb25pbmcKICAqIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIEBkZXZ0LgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwppbmRleCBlODM2MmMxLi5kY2JmMWJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwpAQCAtMTE1LDM0ICsxMTUsMzIgQEAKICAqCShzdGFydCkgZGVwZW5kZW50IG9wZXJhdGlvbnMgb24gdGhlaXIgdGFyZ2V0IGNoYW5uZWwKICAqIEB0eDogdHJhbnNhY3Rpb24gd2l0aCBkZXBlbmRlbmNpZXMKICAqLwotdm9pZAotYXN5bmNfdHhfcnVuX2RlcGVuZGVuY2llcyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQordm9pZCBhc3luY190eF9ydW5fZGVwZW5kZW5jaWVzKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0Jc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpuZXh0ID0gdHgtPm5leHQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXAgPSB0eC0+bmV4dDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlcF9uZXh0OwogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAotCWlmICghbmV4dCkKKwlpZiAoIWRlcCkKIAkJcmV0dXJuOwogCi0JdHgtPm5leHQgPSBOVUxMOwotCWNoYW4gPSBuZXh0LT5jaGFuOworCWNoYW4gPSBkZXAtPmNoYW47CiAKIAkvKiBrZWVwIHN1Ym1pdHRpbmcgdXAgdW50aWwgYSBjaGFubmVsIHN3aXRjaCBpcyBkZXRlY3RlZAogCSAqIGluIHRoYXQgY2FzZSB3ZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhcyBhIHJlc3VsdCBvZgogCSAqIHByb2Nlc3NpbmcgdGhlIGludGVycnVwdCBmcm9tIGFzeW5jX3R4X2NoYW5uZWxfc3dpdGNoCiAJICovCi0Jd2hpbGUgKG5leHQgJiYgbmV4dC0+Y2hhbiA9PSBjaGFuKSB7Ci0JCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqX25leHQ7CisJZm9yICg7IGRlcDsgZGVwID0gZGVwX25leHQpIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXAtPmxvY2spOworCQlkZXAtPnBhcmVudCA9IE5VTEw7CisJCWRlcF9uZXh0ID0gZGVwLT5uZXh0OworCQlpZiAoZGVwX25leHQgJiYgZGVwX25leHQtPmNoYW4gPT0gY2hhbikKKwkJCWRlcC0+bmV4dCA9IE5VTEw7IC8qIC0+bmV4dCB3aWxsIGJlIHN1Ym1pdHRlZCAqLworCQllbHNlCisJCQlkZXBfbmV4dCA9IE5VTEw7IC8qIHN1Ym1pdCBjdXJyZW50IGRlcCBhbmQgdGVybWluYXRlICovCisJCXNwaW5fdW5sb2NrX2JoKCZkZXAtPmxvY2spOwogCi0JCXNwaW5fbG9ja19iaCgmbmV4dC0+bG9jayk7Ci0JCW5leHQtPnBhcmVudCA9IE5VTEw7Ci0JCV9uZXh0ID0gbmV4dC0+bmV4dDsKLQkJaWYgKF9uZXh0ICYmIF9uZXh0LT5jaGFuID09IGNoYW4pCi0JCQluZXh0LT5uZXh0ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfYmgoJm5leHQtPmxvY2spOwotCi0JCW5leHQtPnR4X3N1Ym1pdChuZXh0KTsKLQkJbmV4dCA9IF9uZXh0OworCQlkZXAtPnR4X3N1Ym1pdChkZXApOwogCX0KIAogCWNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggNTlmMzNmYS4uZDE5YjZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTAxLDQgKzEwMSw2IEBACiBzb3VyY2UgImRyaXZlcnMvdWlvL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy94ZW4vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyIKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDI3MzViZGUuLjQ2Yzg2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtOTksMyArOTksNCBAQAogb2JqLSQoQ09ORklHX1NTQikJCSs9IHNzYi8KIG9iai0kKENPTkZJR19WSVJUSU8pCQkrPSB2aXJ0aW8vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SKQkJKz0gcmVndWxhdG9yLworb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggYjFjNzIzZi4uNzBmN2Y2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC00MzEsNyArNDMxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFsYXJtX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwKKwkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NH0sCiAJLnNob3cgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc2hvdywKIAkuc3RvcmUgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDEwYTM2NTEuLjdiMDExZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWxhcm1fYXR0ciA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NCwgLm93bmVyID0gVEhJU19NT0RVTEV9LAorCS5hdHRyID0gey5uYW1lID0gImFsYXJtIiwgLm1vZGUgPSAwNjQ0fSwKIAkuc2hvdyA9IGFjcGlfYmF0dGVyeV9hbGFybV9zaG93LAogCS5zdG9yZSA9IGFjcGlfYmF0dGVyeV9hbGFybV9zdG9yZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYwppbmRleCBiZjViMDRkLi42MzFlZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaHIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW8pOwotCQlCQ0RfVE9fQklOKHlyKTsKLQkJQkNEX1RPX0JJTihjZW50KTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhyID0gYmNkMmJpbihocik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW8gPSBiY2QyYmluKG1vKTsKKwkJeXIgPSBiY2QyYmluKHlyKTsKKwkJY2VudCA9IGJjZDJiaW4oY2VudCk7CiAJfQogCiAJLyogd2UncmUgdHJ1c3RpbmcgdGhlIEZBRFQgKHNlZSBhYm92ZSkgKi8KQEAgLTIwNCw3ICsyMDQsNyBAQAogewogCXUzMiB2YWwgPSBDTU9TX1JFQUQob2Zmc2V0KTsKIAlpZiAoIShydGNfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKHZhbCk7CisJCXZhbCA9IGJjZDJiaW4odmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKIHN0YXRpYyB2b2lkIGNtb3NfYmNkX3dyaXRlKHUzMiB2YWwsIGludCBvZmZzZXQsIGludCBydGNfY29udHJvbCkKIHsKIAlpZiAoIShydGNfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCSU5fVE9fQkNEKHZhbCk7CisJCXZhbCA9IGJpbjJiY2QodmFsKTsKIAlDTU9TX1dSSVRFKHZhbCwgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IDkxZGVjNDQuLjI0ZTgwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCXRhYmxlX2F0dHItPmF0dHIucmVhZCA9IGFjcGlfdGFibGVfc2hvdzsKIAl0YWJsZV9hdHRyLT5hdHRyLmF0dHIubmFtZSA9IHRhYmxlX2F0dHItPm5hbWU7CiAJdGFibGVfYXR0ci0+YXR0ci5hdHRyLm1vZGUgPSAwNDQ0OwotCXRhYmxlX2F0dHItPmF0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGFmMGQxNzUuLjUyNjBlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMzI1LDcgKzMyNyw3IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgQ0xBU1NfQVRUUihwcm9iZSwgMDcwMCwgTlVMTCwgbWVtb3J5X3Byb2JlX3N0b3JlKTsKK3N0YXRpYyBDTEFTU19BVFRSKHByb2JlLCBTX0lXVVNSLCBOVUxMLCBtZW1vcnlfcHJvYmVfc3RvcmUpOwogCiBzdGF0aWMgaW50IG1lbW9yeV9wcm9iZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA1MTE2Yjc4Li5mNTIwNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgbm9kZV9jbGFzcyA9IHsKIAkubmFtZSA9ICJub2RlIiwKQEAgLTYxLDM0ICs2Miw1MiBAQAogCXNpX21lbWluZm9fbm9kZSgmaSwgbmlkKTsKIAogCW4gPSBzcHJpbnRmKGJ1ZiwgIlxuIgotCQkgICAgICAgIk5vZGUgJWQgTWVtVG90YWw6ICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBNZW1GcmVlOiAgICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCQkgICAgICAgIk5vZGUgJWQgSGlnaFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIExvd1RvdGFsOiAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBNZW1Ub3RhbDogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWVtRnJlZTogICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBY3RpdmU6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgSW5hY3RpdmU6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFjdGl2ZShhbm9uKTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZShhbm9uKTogJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlKGZpbGUpOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEluYWN0aXZlKGZpbGUpOiAlOGx1IGtCXG4iCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQkgICAgICAgIk5vZGUgJWQgVW5ldmljdGFibGU6ICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1sb2NrZWQ6ICAgICAgICAlOGx1IGtCXG4iCiAjZW5kaWYKLQkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQW5vblBhZ2VzOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQm91bmNlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2tUbXA6ICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgU1JlY2xhaW1hYmxlOiAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBTVW5yZWNsYWltOiAgICU4bHUga0JcbiIsCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJICAgICAgICJOb2RlICVkIEhpZ2hUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTG93VG90YWw6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIExvd0ZyZWU6ICAgICAgICAlOGx1IGtCXG4iCisjZW5kaWYKKwkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgRmlsZVBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBCb3VuY2U6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrVG1wOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBTUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgU1VucmVjbGFpbTogICAgICU4bHUga0JcbiIsCiAJCSAgICAgICBuaWQsIEsoaS50b3RhbHJhbSksCiAJCSAgICAgICBuaWQsIEsoaS5mcmVlcmFtKSwKIAkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtIC0gaS5mcmVlcmFtKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BQ1RJVkUpKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfQU5PTikpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9GSUxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9VTkVWSUNUQUJMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQkgICAgICAgbmlkLCBLKGkudG90YWxoaWdoKSwKIAkJICAgICAgIG5pZCwgSyhpLmZyZWVoaWdoKSwKQEAgLTE3Myw2ICsxOTIsOCBAQAogCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbWVtaW5mbyk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9udW1hc3RhdCk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CisKKwkJc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKG5vZGUpOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTIsNiArMjEzLDggQEAKIAlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbnVtYXN0YXQpOwogCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CiAKKwlzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShub2RlKTsKKwogCXN5c2Rldl91bnJlZ2lzdGVyKCZub2RlLT5zeXNkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jCmluZGV4IGI4MjY1NGUuLmQ4NzZhZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jCkBAIC05MCw3ICs5MCw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobWFjLCBTX0lSVUdPLCBhb2VkaXNrX3Nob3dfbWFjLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihuZXRpZiwgU19JUlVHTywgYW9lZGlza19zaG93X25ldGlmLCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uID0gewotCS5hdHRyID0geyAubmFtZSA9ICJmaXJtd2FyZS12ZXJzaW9uIiwgLm1vZGUgPSBTX0lSVUdPLCAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5hdHRyID0geyAubmFtZSA9ICJmaXJtd2FyZS12ZXJzaW9uIiwgLm1vZGUgPSBTX0lSVUdPIH0sCiAJLnNob3cgPSBhb2VkaXNrX3Nob3dfZnd2ZXIsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA3YjMzNTEyLi45MDM0Y2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcGlkX2F0dHIgPSB7Ci0JLmF0dHIgPSB7IC5uYW1lID0gInBpZCIsIC5tb2RlID0gU19JUlVHTywgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuYXR0ciA9IHsgLm5hbWUgPSAicGlkIiwgLm1vZGUgPSBTX0lSVUdPfSwKIAkuc2hvdyA9IHBpZF9zaG93LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDNhMjgxZWYuLmY2MGU0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM0OSw4ICszNDksNiBAQAogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsKLQotCWludCBzZ19zdGF0WzZdOwogfTsKIAogLyoKQEAgLTY4NSw3ICs2ODMsNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCXVycS0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbSA8IDUgPyBuX2VsZW0gOiA1XSsrOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl1Yl9jbWRfYnVpbGRfcGFja2V0KHNjLCBsdW4sIGNtZCwgdXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggMzFkY2Q5MS4uZGM4ZDFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTQxNyw2ICs0MTcsNiBAQAogbW9kdWxlX2luaXQoYWdwX2FsaV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDI4MTJlZTIuLjUyZjQzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNzcyLDYgKzc3Miw2IEBACiBtb2R1bGVfZXhpdChhZ3BfYW1kNjRfY2xlYW51cCk7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+LCBBbmRpIEtsZWVuIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgQW5kaSBLbGVlbiIpOwogbW9kdWxlX3BhcmFtKGFncF90cnlfdW5zdXBwb3J0ZWQsIGJvb2wsIDApOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCBhZTI3OTFiLi5mMTUzN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtNTYxLDYgKzU2MSw2IEBACiBtb2R1bGVfaW5pdChhZ3BfYXRpX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2F0aV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwppbmRleCAzYTNjYzAzLi44YzYxN2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiBfX3NldHVwKCJhZ3A9IiwgYWdwX3NldHVwKTsKICNlbmRpZgogCi1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFHUCBHQVJUIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKEFHUEdBUlRfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggMTEwODY2NS4uOWNmNmU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC0yMzkwLDUgKzIzOTAsNSBAQAogbW9kdWxlX2luaXQoYWdwX2ludGVsX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2ludGVsX2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwppbmRleCA1YmJlZDNkLi4xNmFjZWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBOdmlkaWEgQUdQR0FSVCByb3V0aW5lcy4KICAqIEJhc2VkIHVwb24gYSAyLjQgYWdwZ2FydCBkaWZmIGJ5IHRoZSBmb2xrcyBmcm9tIE5WSURJQSwgYW5kIGhhY2tlZCB1cAotICogdG8gd29yayBpbiAyLjUgYnkgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiB0byB3b3JrIGluIDIuNSBieSBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKaW5kZXggZjI0OTJlYy4uZGI2MDUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKQEAgLTIwLDggKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAotI2luY2x1ZGUgPGFzbS1wYXJpc2MvcGFyaXNjLWRldmljZS5oPgotI2luY2x1ZGUgPGFzbS1wYXJpc2Mvcm9wZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFyaXNjLWRldmljZS5oPgorI2luY2x1ZGUgPGFzbS9yb3Blcy5oPgogCiAjaW5jbHVkZSAiYWdwLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOWY0ZDQ5ZS4uZDNiZDI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTU5NSw0ICs1OTUsNCBAQAogbW9kdWxlX2V4aXQoYWdwX3ZpYV9jbGVhbnVwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RzMTI4Ni5jIGIvZHJpdmVycy9jaGFyL2RzMTI4Ni5jCmluZGV4IDUzMjlkNDguLjBhODI2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kczEyODYuYworKysgYi9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKQEAgLTIxMCw4ICsyMTAsOCBAQAogCQlpZiAoc2VjICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQltaW4gPSBCSU4yQkNEKG1pbik7Ci0JCW1pbiA9IEJJTjJCQ0QoaHJzKTsKKwkJbWluID0gYmluMmJjZChtaW4pOworCQltaW4gPSBiaW4yYmNkKGhycyk7CiAKIAkJc3Bpbl9sb2NrKCZkczEyODZfbG9jayk7CiAJCXJ0Y193cml0ZShocnMsIFJUQ19IT1VSU19BTEFSTSk7CkBAIC0zNTMsNyArMzUzLDcgQEAKIAogCWRzMTI4Nl9nZXRfdGltZSgmdG0pOwogCWh1bmRyZWR0aCA9IHJ0Y19yZWFkKFJUQ19IVU5EUkVEVEhfU0VDT05EKTsKLQlCQ0RfVE9fQklOKGh1bmRyZWR0aCk7CisJaHVuZHJlZHRoID0gYmNkMmJpbihodW5kcmVkdGgpOwogCiAJcCArPSBzcHJpbnRmKHAsCiAJICAgICAgICAgICAgICJydGNfdGltZVx0OiAlMDJkOiUwMmQ6JTAyZC4lMDJkXG4iCkBAIC00NzcsMTIgKzQ3NywxMiBAQAogCXJ0Y193cml0ZShzYXZlX2NvbnRyb2wsIFJUQ19DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzMTI4Nl9sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTUzMSwxMiArNTMxLDEyIEBACiAJaWYgKHlycyA+PSAxMDApCiAJCXlycyAtPSAxMDA7CiAKLQlCSU5fVE9fQkNEKHNlYyk7Ci0JQklOX1RPX0JDRChtaW4pOwotCUJJTl9UT19CQ0QoaHJzKTsKLQlCSU5fVE9fQkNEKGRheSk7Ci0JQklOX1RPX0JDRChtb24pOwotCUJJTl9UT19CQ0QoeXJzKTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkczEyODZfbG9jaywgZmxhZ3MpOwogCXNhdmVfY29udHJvbCA9IHJ0Y19yZWFkKFJUQ19DTUQpOwpAQCAtNTcyLDggKzU3Miw4IEBACiAJY21kID0gcnRjX3JlYWQoUlRDX0NNRCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxMjg2X2xvY2ssIGZsYWdzKTsKIAotCUJDRF9UT19CSU4oYWxtX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKKwlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOworCWFsbV90bS0+dG1faG91ciA9IGJjZDJiaW4oYWxtX3RtLT50bV9ob3VyKTsKIAlhbG1fdG0tPnRtX3NlYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczEzMDIuYyBiL2RyaXZlcnMvY2hhci9kczEzMDIuYwppbmRleCBjNWU2N2E2Li4xNzA2OTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHMxMzAyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzMTMwMi5jCkBAIC0xMzEsMTIgKzEzMSwxMiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7CisJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKKwlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOworCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwlydGNfdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fbWRheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogCQkJZWxzZQogCQkJCXlycyAtPSAxOTAwOwkvKiBSVEMgKDcwLCA3MSwgLi4uIDk5KSAqLwogCi0JCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCQlCSU5fVE9fQkNEKG1pbik7Ci0JCQlCSU5fVE9fQkNEKGhycyk7Ci0JCQlCSU5fVE9fQkNEKGRheSk7Ci0JCQlCSU5fVE9fQkNEKG1vbik7Ci0JCQlCSU5fVE9fQkNEKHlycyk7CisJCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCQlocnMgPSBiaW4yYmNkKGhycyk7CisJCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCQltb24gPSBiaW4yYmNkKG1vbik7CisJCQl5cnMgPSBiaW4yYmNkKHlycyk7CiAKIAkJCWxvY2tfa2VybmVsKCk7CiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZXBjYS5jIGIvZHJpdmVycy9jaGFyL2VwY2EuYwppbmRleCA0OTk4YjI3Li5jZjI0NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZXBjYS5jCisrKyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKQEAgLTI0NzcsNyArMjQ3NywxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAobXNlYyA9PSAtMSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQltc2VjID0gMHhGRkZGOworCWVsc2UgaWYgKG1zZWMgPiAweEZGRkUpCisJCW1zZWMgPSAweEZGRkU7CisJZWxzZSBpZiAobXNlYyA8IDEpCisJCW1zZWMgPSAxOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCWdsb2JhbHdpbm9uKGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IGYzY2ZiNGMuLjQwOGY1ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJZm9yIChpcnEgPSBmaW5kX2ZpcnN0X2JpdCgmdiwgSFBFVF9NQVhfSVJRKTsgaXJxIDwgSFBFVF9NQVhfSVJROwogCQlpcnEgPSBmaW5kX25leHRfYml0KCZ2LCBIUEVUX01BWF9JUlEsIDEgKyBpcnEpKSB7CiAKLQkJaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJCWlmIChpcnEgPj0gbnJfaXJxcykgewogCQkJaXJxID0gSFBFVF9NQVhfSVJROwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jIGIvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKaW5kZXggZWM5ZDA0NC4uMmFiZDg4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAJCWlmICh5cnMgPj0gMTAwKQogCQkJeXJzIC09IDEwMDsKIAotCQlzZWMgPSBCSU4yQkNEKHNlYyk7Ci0JCW1pbiA9IEJJTjJCQ0QobWluKTsKLQkJaHJzID0gQklOMkJDRChocnMpOwotCQlkYXkgPSBCSU4yQkNEKGRheSk7Ci0JCW1vbiA9IEJJTjJCQ0QobW9uKTsKLQkJeXJzID0gQklOMkJDRCh5cnMpOworCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJaHJzID0gYmluMmJjZChocnMpOworCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAkJcnRjLT5jb250cm9sIHw9IE00OFQzNV9SVENfU0VUOwpAQCAtMzExLDEyICszMTEsMTIgQEAKIAlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0Y190bS0+dG1fc2VjID0gQkNEMkJJTihydGNfdG0tPnRtX3NlYyk7Ci0JcnRjX3RtLT50bV9taW4gPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWluKTsKLQlydGNfdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ0Y190bS0+dG1faG91cik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX21kYXkpOwotCXJ0Y190bS0+dG1fbW9uID0gQkNEMkJJTihydGNfdG0tPnRtX21vbik7Ci0JcnRjX3RtLT50bV95ZWFyID0gQkNEMkJJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCmluZGV4IGI5MzBkZTUuLjNmN2RhOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKQEAgLTQxLDcgKzQxLDggQEAKICNkZWZpbmUgU0lPX0JBU0UyICAgICAgIDB4NEUJLyogYWx0IGNvbW1hbmQtcmVnIHRvIGNoZWNrICovCiAKICNkZWZpbmUgU0lPX1NJRAkJMHgyMAkvKiBTdXBlckkvTyBJRCBSZWdpc3RlciAqLwotI2RlZmluZSBTSU9fU0lEX1ZBTFVFCTB4ZTkJLyogRXhwZWN0ZWQgdmFsdWUgaW4gU3VwZXJJL08gSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0lPX1NJRF9QQzg3MzY1CTB4ZTUJLyogRXhwZWN0ZWQgdmFsdWUgaW4gSUQgUmVnaXN0ZXIgZm9yIFBDODczNjUgKi8KKyNkZWZpbmUgU0lPX1NJRF9QQzg3MzY2CTB4ZTkJLyogRXhwZWN0ZWQgdmFsdWUgaW4gSUQgUmVnaXN0ZXIgZm9yIFBDODczNjYgKi8KIAogI2RlZmluZSBTSU9fQ0YxCQkweDIxCS8qIGNoaXAgY29uZmlnLCBiaXQwIGlzIGNoaXAgZW5hYmxlICovCiAKQEAgLTkxLDEzICs5MiwxNyBAQAogCiBzdGF0aWMgaW50IHBjODczNnhfc3VwZXJpb19wcmVzZW50KHZvaWQpCiB7CisJaW50IGlkOworCiAJLyogdHJ5IHRoZSAyIHBvc3NpYmxlIHZhbHVlcywgcmVhZCBhIGhhcmR3YXJlIHJlZyB0byB2ZXJpZnkgKi8KIAlzdXBlcmlvX2NtZCA9IFNJT19CQVNFMTsKLQlpZiAoc3VwZXJpb19pbmIoU0lPX1NJRCkgPT0gU0lPX1NJRF9WQUxVRSkKKwlpZCA9IHN1cGVyaW9faW5iKFNJT19TSUQpOworCWlmIChpZCA9PSBTSU9fU0lEX1BDODczNjUgfHwgaWQgPT0gU0lPX1NJRF9QQzg3MzY2KQogCQlyZXR1cm4gc3VwZXJpb19jbWQ7CiAKIAlzdXBlcmlvX2NtZCA9IFNJT19CQVNFMjsKLQlpZiAoc3VwZXJpb19pbmIoU0lPX1NJRCkgPT0gU0lPX1NJRF9WQUxVRSkKKwlpZCA9IHN1cGVyaW9faW5iKFNJT19TSUQpOworCWlmIChpZCA9PSBTSU9fU0lEX1BDODczNjUgfHwgaWQgPT0gU0lPX1NJRF9QQzg3MzY2KQogCQlyZXR1cm4gc3VwZXJpb19jbWQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCBjODc1MmVhLi43MDVhODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC01NTgsOSArNTU4LDI2IEBACiAJdW5zaWduZWQgZG9udF9jb3VudF9lbnRyb3B5OjE7CiB9OwogCi1zdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgaW5wdXRfdGltZXJfc3RhdGU7CiBzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKmlycV90aW1lcl9zdGF0ZVtOUl9JUlFTXTsKIAorc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpnZXRfdGltZXJfcmFuZF9zdGF0ZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPj0gbnJfaXJxcykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaXJxX3RpbWVyX3N0YXRlW2lycV07Cit9CisKK3N0YXRpYyB2b2lkIHNldF90aW1lcl9yYW5kX3N0YXRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybjsKKworCWlycV90aW1lcl9zdGF0ZVtpcnFdID0gc3RhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSBpbnB1dF90aW1lcl9zdGF0ZTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gYWRkcyBlbnRyb3B5IHRvIHRoZSBlbnRyb3B5ICJwb29sIiBieSB1c2luZyB0aW1pbmcKICAqIGRlbGF5cy4gIEl0IHVzZXMgdGhlIHRpbWVyX3JhbmRfc3RhdGUgc3RydWN0dXJlIHRvIG1ha2UgYW4gZXN0aW1hdGUKQEAgLTY0OCwxMSArNjY1LDE1IEBACiAKIHZvaWQgYWRkX2ludGVycnVwdF9yYW5kb21uZXNzKGludCBpcnEpCiB7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV90aW1lcl9zdGF0ZVtpcnFdID09IE5VTEwpCisJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBnZXRfdGltZXJfcmFuZF9zdGF0ZShpcnEpOworCisJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybjsKIAogCURFQlVHX0VOVCgiaXJxIGV2ZW50ICVkXG4iLCBpcnEpOwotCWFkZF90aW1lcl9yYW5kb21uZXNzKGlycV90aW1lcl9zdGF0ZVtpcnFdLCAweDEwMCArIGlycSk7CisJYWRkX3RpbWVyX3JhbmRvbW5lc3Moc3RhdGUsIDB4MTAwICsgaXJxKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTE9DSwpAQCAtOTEyLDcgKzkzMywxMiBAQAogewogCXN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpzdGF0ZTsKIAotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCBpcnFfdGltZXJfc3RhdGVbaXJxXSkKKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybjsKKworCXN0YXRlID0gZ2V0X3RpbWVyX3JhbmRfc3RhdGUoaXJxKTsKKworCWlmIChzdGF0ZSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTkyMSw3ICs5NDcsNyBAQAogCSAqLwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUpCi0JCWlycV90aW1lcl9zdGF0ZVtpcnFdID0gc3RhdGU7CisJCXNldF90aW1lcl9yYW5kX3N0YXRlKGlycSwgc3RhdGUpOwogfQogCiAjaWZkZWYgQ09ORklHX0JMT0NLCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcnRjLmMgYi9kcml2ZXJzL2NoYXIvcnRjLmMKaW5kZXggMTc2ODNkZS4uMzJkYzg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3J0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9ydGMuYwpAQCAtNTE4LDE3ICs1MTgsMTcgQEAKIAkJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8CiAJCQkJCQkJUlRDX0FMV0FZU19CQ0QpIHsKIAkJCWlmIChzZWMgPCA2MCkKLQkJCQlCSU5fVE9fQkNEKHNlYyk7CisJCQkJc2VjID0gYmluMmJjZChzZWMpOwogCQkJZWxzZQogCQkJCXNlYyA9IDB4ZmY7CiAKIAkJCWlmIChtaW4gPCA2MCkKLQkJCQlCSU5fVE9fQkNEKG1pbik7CisJCQkJbWluID0gYmluMmJjZChtaW4pOwogCQkJZWxzZQogCQkJCW1pbiA9IDB4ZmY7CiAKIAkJCWlmIChocnMgPCAyNCkKLQkJCQlCSU5fVE9fQkNEKGhycyk7CisJCQkJaHJzID0gYmluMmJjZChocnMpOwogCQkJZWxzZQogCQkJCWhycyA9IDB4ZmY7CiAJCX0KQEAgLTYxNCwxMiArNjE0LDEyIEBACiAKIAkJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpCiAJCSAgICB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChzZWMpOwotCQkJQklOX1RPX0JDRChtaW4pOwotCQkJQklOX1RPX0JDRChocnMpOwotCQkJQklOX1RPX0JDRChkYXkpOwotCQkJQklOX1RPX0JDRChtb24pOwotCQkJQklOX1RPX0JDRCh5cnMpOworCQkJc2VjID0gYmluMmJjZChzZWMpOworCQkJbWluID0gYmluMmJjZChtaW4pOworCQkJaHJzID0gYmluMmJjZChocnMpOworCQkJZGF5ID0gYmluMmJjZChkYXkpOworCQkJbW9uID0gYmluMmJjZChtb24pOworCQkJeXJzID0gYmluMmJjZCh5cnMpOwogCQl9CiAKIAkJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKQEAgLTEwOTksNyArMTA5OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oeWVhcik7ICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uICovCiAKIAlpZiAoeWVhciA8IDIwKSB7CiAJCWVwb2NoID0gMjAwMDsKQEAgLTEzNTIsMTMgKzEzNTIsMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV93ZGF5KTsKKwkJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKKwkJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwkJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCQlydGNfdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fbWRheSk7CisJCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKKwkJcnRjX3RtLT50bV93ZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX3dkYXkpOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUNIX0RFQ1NUQVRJT04KQEAgLTEzOTIsOSArMTM5Miw5IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9taW4pOwotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1faG91cik7CisJCWFsbV90bS0+dG1fc2VjID0gYmNkMmJpbihhbG1fdG0tPnRtX3NlYyk7CisJCWFsbV90bS0+dG1fbWluID0gYmNkMmJpbihhbG1fdG0tPnRtX21pbik7CisJCWFsbV90bS0+dG1faG91ciA9IGJjZDJiaW4oYWxtX3RtLT50bV9ob3VyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeC5jIGIvZHJpdmVycy9jaGFyL3N4LmMKaW5kZXggNWI4ZDdhMS4uYmE0ZTg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N4LmMKKysrIGIvZHJpdmVycy9jaGFyL3N4LmMKQEAgLTI1MDQsNyArMjUwNCw3IEBACiAJCWRlbF90aW1lcigmYm9hcmQtPnRpbWVyKTsKIAkJaWYgKHBkZXYpIHsKICNpZmRlZiBDT05GSUdfUENJCi0JCQlwY2lfaW91bm1hcChwZGV2LCBib2FyZC0+YmFzZTIpOworCQkJaW91bm1hcChib2FyZC0+YmFzZTIpOwogCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIElTX0NGX0JPQVJEKGJvYXJkKSA/IDMgOiAyKTsKICNlbmRpZgogCQl9IGVsc2UgewpAQCAtMjY3Nyw3ICsyNjc3LDcgQEAKIAl9CiAJYm9hcmQtPmh3X2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgcmVnKTsKIAlib2FyZC0+YmFzZTIgPQotCWJvYXJkLT5iYXNlID0gcGNpX2lvbWFwKHBkZXYsIHJlZywgV0lORE9XX0xFTihib2FyZCkpOworCWJvYXJkLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGJvYXJkLT5od19iYXNlLCBXSU5ET1dfTEVOKGJvYXJkKSk7CiAJaWYgKCFib2FyZC0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3JlZzsKQEAgLTI3MDMsNyArMjcwMyw3IEBACiAKIAlyZXR1cm4gMDsKIGVycl91bm1hcDoKLQlwY2lfaW91bm1hcChwZGV2LCBib2FyZC0+YmFzZTIpOworCWlvdW5tYXAoYm9hcmQtPmJhc2UyKTsKIGVycl9yZWc6CiAJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIHJlZyk7CiBlcnJfZmxhZzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeXNycS5jIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKaW5kZXggZGNlNGNjMC4uY2UwZDlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5c3JxLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfc2hvd190aW1lcnNfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd190aW1lcnMsCiAJLmhlbHBfbXNnCT0gInNob3ctYWxsLXRpbWVycyhRKSIsCi0JLmFjdGlvbl9tc2cJPSAiU2hvdyBQZW5kaW5nIFRpbWVycyIsCisJLmFjdGlvbl9tc2cJPSAiU2hvdyBjbG9ja2V2ZW50IGRldmljZXMgJiBwZW5kaW5nIGhydGltZXJzIChubyBvdGhlcnMpIiwKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9tb3VudHJvKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCBlNzBkMTNkLi45YzQ3ZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTExNTcsNyArMTE1Nyw3IEBACiAgKiBPbmNlIGFsbCByZWZlcmVuY2VzIHRvIHBsYXRmb3JtIGRldmljZSBhcmUgZG93biB0byAwLAogICogcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHRwbV9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit2b2lkIHRwbV9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCmluZGV4IGZmZTliNGUuLjU0YzgzNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKKysrIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJfQogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwotCWlmIChpcnEgPCAwIHx8IGlycSA+PSBOUl9JUlFTKQorCWlmIChpcnEgPCAwIHx8IGlycSA+PSBucl9pcnFzKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJcmV0dXJuIGNhc2NhZGVfaXJxKGlycSwgZ2l1X2dldF9pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3MWQyYWM0Li5jMjAxNzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtMjM3LDkgKzIzNywxMiBAQAogCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGFyZywgMTYsICZiYXNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKGJhc2UgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FUkFOR0U7CisjZW5kaWYKIAlwcmludGsoS0VSTl9JTkZPICJQTVRNUiBJT1BvcnQgb3ZlcnJpZGU6IDB4JTA0eCAtPiAweCUwNGx4XG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KXBtdG1yX2lvcG9ydCwgYmFzZSk7CisJICAgICAgIHBtdG1yX2lvcG9ydCwgYmFzZSk7CiAJcG10bXJfaW9wb3J0ID0gYmFzZTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggY2QzMDM5MC4uOTA0ZTU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC00OCwxMyArNDgsMTMgQEAKIAkgIGNhbiBiZSBpbnRlZ3JhdGVkIGluIGNoaXBzIHN1Y2ggYXMgdGhlIEF0bWVsIEFUMzJhcDcwMDAuCiAKIGNvbmZpZyBGU0xfRE1BCi0JYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHgvTVBDODN4eCBETUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBQQworCXRyaXN0YXRlICJGcmVlc2NhbGUgRWxvIGFuZCBFbG8gUGx1cyBETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZTTF9TT0MKIAlzZWxlY3QgRE1BX0VOR0lORQogCS0tLWhlbHAtLS0KLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIERNQSBlbmdpbmUuIE5vdywgaXQgc3VwcG9ydAotCSAgTVBDODU2MC80MCwgTVBDODU1NSwgTVBDODU0OCBhbmQgTVBDODY0MSBwcm9jZXNzb3JzLgotCSAgVGhlIE1QQzgzNDksIE1QQzgzNjAgaXMgYWxzbyBzdXBwb3J0ZWQuCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBFbG8gYW5kIEVsbyBQbHVzIERNQSBjb250cm9sbGVycy4KKwkgIFRoZSBFbG8gaXMgdGhlIERNQSBjb250cm9sbGVyIG9uIHNvbWUgODJ4eCBhbmQgODN4eCBwYXJ0cywgYW5kIHRoZQorCSAgRWxvIFBsdXMgaXMgdGhlIERNQSBjb250cm9sbGVyIG9uIDg1eHggYW5kIDg2eHggcGFydHMuCiAKIGNvbmZpZyBNVl9YT1IKIAlib29sICJNYXJ2ZWxsIFhPUiBlbmdpbmUgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwppbmRleCBhMDhkMTk3Li5kMWUzODFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKKysrIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCkBAIC0zMjUsNyArMzI1LDEyIEBACiAJc3RydWN0IGRtYXRlc3RfdGhyZWFkCSp0aHJlYWQ7CiAJdW5zaWduZWQgaW50CQlpOwogCi0JZHRjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRtYXRlc3RfY2hhbiksIEdGUF9BVE9NSUMpOworCS8qIEhhdmUgd2UgYWxyZWFkeSBiZWVuIHRvbGQgYWJvdXQgdGhpcyBjaGFubmVsPyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHRjLCAmZG1hdGVzdF9jaGFubmVscywgbm9kZSkKKwkJaWYgKGR0Yy0+Y2hhbiA9PSBjaGFuKQorCQkJcmV0dXJuIERNQV9EVVA7CisKKwlkdGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF9jaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkdGMpIHsKIAkJcHJfd2FybmluZygiZG1hdGVzdDogTm8gbWVtb3J5IGZvciAlc1xuIiwgY2hhbi0+ZGV2LmJ1c19pZCk7CiAJCXJldHVybiBETUFfTkFLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwppbmRleCBjMDA1OWNhLi4wYjk1ZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwpAQCAtMzcwLDcgKzM3MCwxMCBAQAogCQkJCQlzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7Ci0JTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIEhhcyB0aGlzIGNoYW5uZWwgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZD8gKi8KKwlpZiAoZnNsX2NoYW4tPmRlc2NfcG9vbCkKKwkJcmV0dXJuIDE7CiAKIAkvKiBXZSBuZWVkIHRoZSBkZXNjcmlwdG9yIHRvIGJlIGFsaWduZWQgdG8gMzJieXRlcwogCSAqIGZvciBtZWV0aW5nIEZTTCBETUEgc3BlY2lmaWNhdGlvbiByZXF1aXJlbWVudC4KQEAgLTQxMCw2ICs0MTMsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CiAJZG1hX3Bvb2xfZGVzdHJveShmc2xfY2hhbi0+ZGVzY19wb29sKTsKKworCWZzbF9jaGFuLT5kZXNjX3Bvb2wgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKQEAgLTc4NiwxNTkgKzc5MSwyOSBAQAogCWZzbF9jaGFuX2xkX2NsZWFudXAoZnNsX2NoYW4pOwogfQogCi1zdGF0aWMgdm9pZCBmc2xfZG1hX2NhbGxiYWNrX3Rlc3Qodm9pZCAqcGFyYW0pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfZG1hX2NoYW5fcHJvYmUoc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2LAorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGZlYXR1cmUsIGNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSBwYXJhbTsKLQlpZiAoZnNsX2NoYW4pCi0JCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBjYWxsYmFjayBpcyBvayFcbiIpOwotfQotCi1zdGF0aWMgaW50IGZzbF9kbWFfc2VsZl90ZXN0KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKLQlpbnQgZXJyID0gMDsKLQlkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfc3JjOwotCWRtYV9jb29raWVfdCBjb29raWU7Ci0JdTggKnNyYywgKmRlc3Q7Ci0JaW50IGk7Ci0Jc2l6ZV90IHRlc3Rfc2l6ZTsKLQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4MSwgKnR4MiwgKnR4MzsKLQotCXRlc3Rfc2l6ZSA9IDQwOTY7Ci0KLQlzcmMgPSBrbWFsbG9jKHRlc3Rfc2l6ZSAqIDIsIEdGUF9LRVJORUwpOwotCWlmICghc3JjKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKLQkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIHRlc3QhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGVzdCA9IHNyYyArIHRlc3Rfc2l6ZTsKLQotCWZvciAoaSA9IDA7IGkgPCB0ZXN0X3NpemU7IGkrKykKLQkJc3JjW2ldID0gKHU4KSBpOwotCi0JY2hhbiA9ICZmc2xfY2hhbi0+Y29tbW9uOwotCi0JaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbiwgTlVMTCkgPCAxKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKLQkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyByZXNvdXJjZXMgZm9yIERNQVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFRYIDEgKi8KLQlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjLCB0ZXN0X3NpemUgLyAyLAotCQkJCSBETUFfVE9fREVWSUNFKTsKLQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIGRlc3QsIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJICBETUFfRlJPTV9ERVZJQ0UpOwotCXR4MSA9IGZzbF9kbWFfcHJlcF9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QsIGRtYV9zcmMsIHRlc3Rfc2l6ZSAvIDIsIDApOwotCWFzeW5jX3R4X2Fjayh0eDEpOwotCi0JY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgxKTsKLQlmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwotCW1zbGVlcCgyKTsKLQotCWlmIChmc2xfZG1hX2lzX2NvbXBsZXRlKGNoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IFRpbWUgb3V0IVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JLyogVGVzdCBmcmVlIGFuZCByZS1hbGxvYyBjaGFubmVsIHJlc291cmNlcyAqLwotCWZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhjaGFuKTsKLQotCWlmIChmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGNoYW4sIE5VTEwpIDwgMSkgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCi0JCQkJInNlbGZ0ZXN0OiBDYW5ub3QgYWxsb2MgcmVzb3VyY2VzIGZvciBETUFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfcmVzb3VyY2VzOwotCX0KLQotCS8qIENvbnRpbnVlIHRvIHRlc3QKLQkgKiBUWCAyCi0JICovCi0JZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYyArIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9UT19ERVZJQ0UpOwotCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCArIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9GUk9NX0RFVklDRSk7Ci0JdHgyID0gZnNsX2RtYV9wcmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8gNCwgMCk7Ci0JYXN5bmNfdHhfYWNrKHR4Mik7Ci0KLQkvKiBUWCAzICovCi0JZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYyArIHRlc3Rfc2l6ZSAqIDMgLyA0LAotCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfVE9fREVWSUNFKTsKLQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIGRlc3QgKyB0ZXN0X3NpemUgKiAzIC8gNCwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX0ZST01fREVWSUNFKTsKLQl0eDMgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKLQlhc3luY190eF9hY2sodHgzKTsKLQotCS8qIEludGVycnVwdCB0eCB0ZXN0ICovCi0JdHgxID0gZnNsX2RtYV9wcmVwX2ludGVycnVwdChjaGFuLCAwKTsKLQlhc3luY190eF9hY2sodHgxKTsKLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDEpOwotCi0JLyogVGVzdCBleGNoYW5naW5nIHRoZSBwcmVwYXJlZCB0eCBzb3J0ICovCi0JY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgzKTsKLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDIpOwotCi0JaWYgKGRtYV9oYXNfY2FwKERNQV9JTlRFUlJVUFQsICgoc3RydWN0IGZzbF9kbWFfZGV2aWNlICopCi0JICAgIGRldl9nZXRfZHJ2ZGF0YShmc2xfY2hhbi0+ZGV2LT5wYXJlbnQpKS0+Y29tbW9uLmNhcF9tYXNrKSkgewotCQl0eDMtPmNhbGxiYWNrID0gZnNsX2RtYV9jYWxsYmFja190ZXN0OwotCQl0eDMtPmNhbGxiYWNrX3BhcmFtID0gZnNsX2NoYW47Ci0JfQotCWZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7Ci0JbXNsZWVwKDIpOwotCi0JaWYgKGZzbF9kbWFfaXNfY29tcGxldGUoY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKSAhPSBETUFfU1VDQ0VTUykgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGltZSBvdXQhXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3Jlc291cmNlczsKLQl9Ci0KLQllcnIgPSBtZW1jbXAoc3JjLCBkZXN0LCB0ZXN0X3NpemUpOwotCWlmIChlcnIpIHsKLQkJZm9yIChpID0gMDsgKCooc3JjICsgaSkgPT0gKihkZXN0ICsgaSkpICYmIChpIDwgdGVzdF9zaXplKTsKLQkJCQlpKyspOwotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGVzdCBmYWlsZWQsIGRhdGEgJWQvJWxkIGlzICIKLQkJCQkiZXJyb3IhIHNyYyAweCV4LCBkZXN0IDB4JXhcbiIsCi0JCQkJaSwgKGxvbmcpdGVzdF9zaXplLCAqKHNyYyArIGkpLCAqKGRlc3QgKyBpKSk7Ci0JfQotCi1mcmVlX3Jlc291cmNlczoKLQlmc2xfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoY2hhbik7Ci1vdXQ6Ci0Ja2ZyZWUoc3JjKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBvZl9mc2xfZG1hX2NoYW5fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LAotCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2OwogCXN0cnVjdCBmc2xfZG1hX2NoYW4gKm5ld19mc2xfY2hhbjsKIAlpbnQgZXJyOwogCi0JZmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPmRldi5wYXJlbnQpOwotCUJVR19PTighZmRldik7Ci0KIAkvKiBhbGxvYyBjaGFubmVsICovCiAJbmV3X2ZzbF9jaGFuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9kbWFfY2hhbiksIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2ZzbF9jaGFuKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgIgorCQlkZXZfZXJyKGZkZXYtPmRldiwgIk5vIGZyZWUgbWVtb3J5IGZvciBhbGxvY2F0aW5nICIKIAkJCQkiZG1hIGNoYW5uZWxzIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIGdldCBkbWEgY2hhbm5lbCByZWdpc3RlciBiYXNlICovCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYtPm5vZGUsIDAsICZuZXdfZnNsX2NoYW4tPnJlZyk7CisJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmbmV3X2ZzbF9jaGFuLT5yZWcpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCi0JCQkJZGV2LT5ub2RlLT5mdWxsX25hbWUpOworCQlkZXZfZXJyKGZkZXYtPmRldiwgIkNhbid0IGdldCAlcyBwcm9wZXJ0eSAncmVnJ1xuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUpOwogCQlnb3RvIGVycl9ub19yZWc7CiAJfQogCi0JbmV3X2ZzbF9jaGFuLT5mZWF0dXJlID0gKih1MzIgKiltYXRjaC0+ZGF0YTsKKwluZXdfZnNsX2NoYW4tPmZlYXR1cmUgPSBmZWF0dXJlOwogCiAJaWYgKCFmZGV2LT5mZWF0dXJlKQogCQlmZGV2LT5mZWF0dXJlID0gbmV3X2ZzbF9jaGFuLT5mZWF0dXJlOwpAQCAtOTQ4LDEzICs4MjMsMTMgQEAKIAkgKi8KIAlXQVJOX09OKGZkZXYtPmZlYXR1cmUgIT0gbmV3X2ZzbF9jaGFuLT5mZWF0dXJlKTsKIAotCW5ld19mc2xfY2hhbi0+ZGV2ID0gJmRldi0+ZGV2OworCW5ld19mc2xfY2hhbi0+ZGV2ID0gJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldjsKIAluZXdfZnNsX2NoYW4tPnJlZ19iYXNlID0gaW9yZW1hcChuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCwKIAkJCW5ld19mc2xfY2hhbi0+cmVnLmVuZCAtIG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0ICsgMSk7CiAKIAluZXdfZnNsX2NoYW4tPmlkID0gKChuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCAtIDB4MTAwKSAmIDB4ZmZmKSA+PiA3OwogCWlmIChuZXdfZnNsX2NoYW4tPmlkID4gRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZXJlIGlzIG5vICVkIGNoYW5uZWwhXG4iLAorCQlkZXZfZXJyKGZkZXYtPmRldiwgIlRoZXJlIGlzIG5vICVkIGNoYW5uZWwhXG4iLAogCQkJCW5ld19mc2xfY2hhbi0+aWQpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9ub19jaGFuOwpAQCAtOTg4LDI5ICs4NjMsMjMgQEAKIAkJCSZmZGV2LT5jb21tb24uY2hhbm5lbHMpOwogCWZkZXYtPmNvbW1vbi5jaGFuY250Kys7CiAKLQluZXdfZnNsX2NoYW4tPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+bm9kZSwgMCk7CisJbmV3X2ZzbF9jaGFuLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKIAlpZiAobmV3X2ZzbF9jaGFuLT5pcnEgIT0gTk9fSVJRKSB7CiAJCWVyciA9IHJlcXVlc3RfaXJxKG5ld19mc2xfY2hhbi0+aXJxLAogCQkJCQkmZnNsX2RtYV9jaGFuX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJCSJmc2xkbWEtY2hhbm5lbCIsIG5ld19mc2xfY2hhbik7CiAJCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGNoYW5uZWwgJXMgcmVxdWVzdF9pcnEgZXJyb3IgIgotCQkJCSJ3aXRoIHJldHVybiAlZFxuIiwgZGV2LT5ub2RlLT5mdWxsX25hbWUsIGVycik7CisJCQlkZXZfZXJyKGZkZXYtPmRldiwgIkRNQSBjaGFubmVsICVzIHJlcXVlc3RfaXJxIGVycm9yICIKKwkJCQkid2l0aCByZXR1cm4gJWRcbiIsIG5vZGUtPmZ1bGxfbmFtZSwgZXJyKTsKIAkJCWdvdG8gZXJyX25vX2lycTsKIAkJfQogCX0KIAotCWVyciA9IGZzbF9kbWFfc2VsZl90ZXN0KG5ld19mc2xfY2hhbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfc2VsZl90ZXN0OwotCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiIyVkICglcyksIGlycSAlZFxuIiwgbmV3X2ZzbF9jaGFuLT5pZCwKLQkJCQltYXRjaC0+Y29tcGF0aWJsZSwgbmV3X2ZzbF9jaGFuLT5pcnEpOworCWRldl9pbmZvKGZkZXYtPmRldiwgIiMlZCAoJXMpLCBpcnEgJWRcbiIsIG5ld19mc2xfY2hhbi0+aWQsCisJCQkJY29tcGF0aWJsZSwgbmV3X2ZzbF9jaGFuLT5pcnEpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9zZWxmX3Rlc3Q6Ci0JZnJlZV9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsIG5ld19mc2xfY2hhbik7CiBlcnJfbm9faXJxOgogCWxpc3RfZGVsKCZuZXdfZnNsX2NoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSk7CiBlcnJfbm9fY2hhbjoKQEAgLTEwMjAsMzggKzg4OSwyMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLWNvbnN0IHUzMiBtcGM4NTQwX2RtYV9pcF9mZWF0dXJlID0gRlNMX0RNQV9JUF84NVhYIHwgRlNMX0RNQV9CSUdfRU5ESUFOOwotY29uc3QgdTMyIG1wYzgzNDlfZG1hX2lwX2ZlYXR1cmUgPSBGU0xfRE1BX0lQXzgzWFggfCBGU0xfRE1BX0xJVFRMRV9FTkRJQU47Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZzbF9kbWFfY2hhbl9pZHNbXSA9IHsKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIiwKLQkJLmRhdGEgPSAodm9pZCAqKSZtcGM4NTQwX2RtYV9pcF9mZWF0dXJlLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYS1jaGFubmVsIiwKLQkJLmRhdGEgPSAodm9pZCAqKSZtcGM4MzQ5X2RtYV9pcF9mZWF0dXJlLAotCX0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfY2hhbl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAib2YtZnNsLWRtYS1jaGFubmVsIiwKLQkubWF0Y2hfdGFibGUgPSBvZl9mc2xfZG1hX2NoYW5faWRzLAotCS5wcm9iZSA9IG9mX2ZzbF9kbWFfY2hhbl9wcm9iZSwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IG9mX2ZzbF9kbWFfY2hhbl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBmc2xfZG1hX2NoYW5fcmVtb3ZlKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZjaGFuKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfY2hhbl9kcml2ZXIpOworCWZyZWVfaXJxKGZjaGFuLT5pcnEsIGZjaGFuKTsKKwlsaXN0X2RlbCgmZmNoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSk7CisJaW91bm1hcChmY2hhbi0+cmVnX2Jhc2UpOworCWtmcmVlKGZjaGFuKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgb2ZfZnNsX2RtYV9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCiAJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGludCBpcnE7CiAJc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CiAKIAlmZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9kbWFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmZGV2KSB7CkBAIC0xMDg1LDkgKzkzNiw5IEBACiAJZmRldi0+Y29tbW9uLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKIAlmZGV2LT5jb21tb24uZGV2ID0gJmRldi0+ZGV2OwogCi0JaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKLQlpZiAoaXJxICE9IE5PX0lSUSkgewotCQllcnIgPSByZXF1ZXN0X2lycShpcnEsICZmc2xfZG1hX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJZmRldi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKKwlpZiAoZmRldi0+aXJxICE9IE5PX0lSUSkgeworCQllcnIgPSByZXF1ZXN0X2lycShmZGV2LT5pcnEsICZmc2xfZG1hX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJCSJmc2xkbWEtZGV2aWNlIiwgZmRldik7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGRldmljZSByZXF1ZXN0X2lycSBlcnJvciAiCkBAIC0xMDk3LDcgKzk0OCwyMSBAQAogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmKGRldi0+ZGV2KSwgZmRldik7Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKGRldi0+bm9kZSwgb2ZfZnNsX2RtYV9jaGFuX2lkcywgJmRldi0+ZGV2KTsKKworCS8qIFdlIGNhbm5vdCB1c2Ugb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKCkgYmVjYXVzZSB0aGVyZSBpcyBubworCSAqIG9mX3BsYXRmb3JtX2J1c19yZW1vdmUuICBJbnN0ZWFkLCB3ZSBtYW51YWxseSBpbnN0YW50aWF0ZSBldmVyeSBETUEKKwkgKiBjaGFubmVsIG9iamVjdC4KKwkgKi8KKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRldi0+bm9kZSwgY2hpbGQpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiKSkKKwkJCWZzbF9kbWFfY2hhbl9wcm9iZShmZGV2LCBjaGlsZCwKKwkJCQlGU0xfRE1BX0lQXzg1WFggfCBGU0xfRE1BX0JJR19FTkRJQU4sCisJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIik7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgImZzbCxlbG8tZG1hLWNoYW5uZWwiKSkKKwkJCWZzbF9kbWFfY2hhbl9wcm9iZShmZGV2LCBjaGlsZCwKKwkJCQlGU0xfRE1BX0lQXzgzWFggfCBGU0xfRE1BX0xJVFRMRV9FTkRJQU4sCisJCQkJImZzbCxlbG8tZG1hLWNoYW5uZWwiKTsKKwl9CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZmZGV2LT5jb21tb24pOwogCXJldHVybiAwOwpAQCAtMTEwOSw2ICs5NzQsMzAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG9mX2ZzbF9kbWFfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldikKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisJdW5zaWduZWQgaW50IGk7CisKKwlmZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvZl9kZXYtPmRldik7CisKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmZkZXYtPmNvbW1vbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRTsgaSsrKQorCQlpZiAoZmRldi0+Y2hhbltpXSkKKwkJCWZzbF9kbWFfY2hhbl9yZW1vdmUoZmRldi0+Y2hhbltpXSk7CisKKwlpZiAoZmRldi0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoZmRldi0+aXJxLCBmZGV2KTsKKworCWlvdW5tYXAoZmRldi0+cmVnX2Jhc2UpOworCisJa2ZyZWUoZmRldik7CisJZGV2X3NldF9kcnZkYXRhKCZvZl9kZXYtPmRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZnNsX2RtYV9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYSIsIH0sCkBAIC0xMTE2LDE1ICsxMDA1LDMyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBvZl9mc2xfZG1hX2RyaXZlciA9IHsKLQkubmFtZSA9ICJvZi1mc2wtZG1hIiwKKwkubmFtZSA9ICJmc2wtZWxvLWRtYSIsCiAJLm1hdGNoX3RhYmxlID0gb2ZfZnNsX2RtYV9pZHMsCiAJLnByb2JlID0gb2ZfZnNsX2RtYV9wcm9iZSwKKwkucmVtb3ZlID0gb2ZfZnNsX2RtYV9yZW1vdmUsCiB9OwogCiBzdGF0aWMgX19pbml0IGludCBvZl9mc2xfZG1hX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7CisJaW50IHJldDsKKworCXByX2luZm8oIkZyZWVzY2FsZSBFbG8gLyBFbG8gUGx1cyBETUEgZHJpdmVyXG4iKTsKKworCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9kcml2ZXIpOworCWlmIChyZXQpCisJCXByX2VycigiZnNsZG1hOiBmYWlsZWQgdG8gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyXG4iKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChvZl9mc2xfZG1hX2NoYW5faW5pdCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgb2ZfZnNsX2RtYV9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfZHJpdmVyKTsKK30KKwogc3Vic3lzX2luaXRjYWxsKG9mX2ZzbF9kbWFfaW5pdCk7Cittb2R1bGVfZXhpdChvZl9mc2xfZG1hX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBFbG8gLyBFbG8gUGx1cyBETUEgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuaCBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCmluZGV4IDZmYWYwN2IuLjRmMjFhNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCkBAIC0xMTQsNiArMTE0LDcgQEAKIAlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqY2hhbltGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFXTsKIAl1MzIgZmVhdHVyZTsJCS8qIFRoZSBzYW1lIGFzIERNQSBjaGFubmVscyAqLworCWludCBpcnE7CQkvKiBDaGFubmVsIElSUSAqLwogfTsKIAogLyogRGVmaW5lIG1hY3JvcyBmb3IgZnNsX2RtYV9jaGFuLT5mZWF0dXJlIHByb3BlcnR5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwppbmRleCBiYzhjNmUzLi4xZWY2OGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKQEAgLTk3MSwxMSArOTcxLDkgQEAKIAlzd2l0Y2ggKGlvYXRfY2hhbi0+ZGV2aWNlLT52ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6CiAJCXJldHVybiBpb2F0MV9kbWFfZ2V0X25leHRfZGVzY3JpcHRvcihpb2F0X2NoYW4pOwotCQlicmVhazsKIAljYXNlIElPQVRfVkVSXzJfMDoKIAljYXNlIElPQVRfVkVSXzNfMDoKIAkJcmV0dXJuIGlvYXQyX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7Ci0JCWJyZWFrOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwppbmRleCAwZTAyNGZlLi44ODcwNzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJY3Nyb3ctPm5yX3BhZ2VzID0gKHIuZW5kIC0gci5zdGFydCArIDEpID4+IFBBR0VfU0hJRlQ7CiAJCWNzcm93LT5sYXN0X3BhZ2UgPSBjc3Jvdy0+Zmlyc3RfcGFnZSArIGNzcm93LT5ucl9wYWdlcyAtIDE7CiAJCWNzcm93LT5tdHlwZSA9IE1FTV9YRFI7Ci0JCWNzcm93LT5lZGFjX21vZGUgPSBFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEOworCQljc3Jvdy0+ZWRhY19tb2RlID0gRURBQ19TRUNERUQ7CiAJCWRldl9kYmcobWNpLT5kZXYsCiAJCQkiSW5pdGlhbGl6ZWQgb24gbm9kZSAlZCwgY2hhbm1hc2s9MHgleCwiCiAJCQkiIGZpcnN0X3BhZ2U9MHglbHgsIG5yX3BhZ2VzPTB4JXhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IGRlYjE1NGEuLjQzNTM0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC03MzIsNyArNzMyLDYgQEAKIAogCWF0dHItPmF0dHIubmFtZSA9IG5hbWU7CiAJYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUjsKLQlhdHRyLT5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlhdHRyLT5oZHIgPSBoZHI7CiAJYXR0ci0+c2hvdyA9IHNob3c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwppbmRleCA5MTEyODMwLi5mYWExY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCWlmICghdGVzdF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncykpCiAJCXN0YXR1cyA9IC1FSU87CiAJZWxzZQotCQlzdGF0dXMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKSk7CisJCXN0YXR1cyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICEhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoZ3BpbykpOwogCiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTEwNSw3ICsxMTA1LDcgQEAKIAogCW1pZ2h0X3NsZWVwX2lmKGV4dHJhX2NoZWNrcyk7CiAJY2hpcCA9IGdwaW9fdG9fY2hpcChncGlvKTsKLQlyZXR1cm4gY2hpcC0+Z2V0KGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKTsKKwlyZXR1cm4gY2hpcC0+Z2V0ID8gY2hpcC0+Z2V0KGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKSA6IDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvX2dldF92YWx1ZV9jYW5zbGVlcCk7CiAKQEAgLTExNDMsNyArMTE0Myw3IEBACiAKIAkJaWYgKCFpc19vdXQpIHsKIAkJCWludAkJaXJxID0gZ3Bpb190b19pcnEoZ3Bpbyk7Ci0JCQlzdHJ1Y3QgaXJxX2Rlc2MJKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJCXN0cnVjdCBpcnFfZGVzYwkqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAkJCS8qIFRoaXMgcmFjZXMgd2l0aCByZXF1ZXN0X2lycSgpLCBzZXRfaXJxX3R5cGUoKSwKIAkJCSAqIGFuZCBzZXRfaXJxX3dha2UoKSAuLi4gYnV0IHRob3NlIGFyZSAicmFyZSIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDYxMGQ2ZmQuLmE4YjMzYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogIwogbWVudWNvbmZpZyBEUk0KIAl0cmlzdGF0ZSAiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChYRnJlZTg2IDQuMS4wIGFuZCBoaWdoZXIgRFJJIHN1cHBvcnQpIgotCWRlcGVuZHMgb24gKEFHUCB8fCBBR1A9bikgJiYgUENJICYmICFFTVVMQVRFRF9DTVBYQ0hHCisJZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiBQQ0kgJiYgIUVNVUxBVEVEX0NNUFhDSEcgJiYgTU1VCiAJaGVscAogCSAgS2VybmVsLWxldmVsIHN1cHBvcnQgZm9yIHRoZSBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpCiAJICBpbnRyb2R1Y2VkIGluIFhGcmVlODYgNC4wLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IG5lZWQgdG8gc2VsZWN0CkBAIC04Nyw2ICs4Nyw3IEBACiBjb25maWcgRFJNX1NJUwogCXRyaXN0YXRlICJTaVMgdmlkZW8gY2FyZHMiCiAJZGVwZW5kcyBvbiBEUk0gJiYgQUdQCisJZGVwZW5kcyBvbiBGQl9TSVMgfHwgRkJfU0lTPW4KIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBTaVMgNjMwIG9yIGNvbXBhdGlibGUgdmlkZW8KICAgICAgICAgICBjaGlwc2V0LiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2lzLiBBR1AKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBlOWY5YTk3Li43NGRhOTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC00LDggKzQsOSBAQAogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQogCi1kcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NvbnRleHQubyBkcm1fZG1hLm8gZHJtX2RyYXdhYmxlLm8gXAotCQlkcm1fZHJ2Lm8gZHJtX2ZvcHMubyBkcm1faW9jdGwubyBkcm1faXJxLm8gXAorZHJtLXkgICAgICAgOj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKKwkJZHJtX2NvbnRleHQubyBkcm1fZG1hLm8gZHJtX2RyYXdhYmxlLm8gXAorCQlkcm1fZHJ2Lm8gZHJtX2ZvcHMubyBkcm1fZ2VtLm8gZHJtX2lvY3RsLm8gZHJtX2lycS5vIFwKIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3Byb2MubyBkcm1fc3R1Yi5vIGRybV92bS5vIFwKIAkJZHJtX2FncHN1cHBvcnQubyBkcm1fc2NhdHRlci5vIGF0aV9wY2lnYXJ0Lm8gZHJtX3BjaS5vIFwKIAkJZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fc21hbi5vIGRybV9tbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYWdwc3VwcG9ydC5jCmluZGV4IGFlZmE1YWMuLjNkMzNiODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYWdwc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYWdwc3VwcG9ydC5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2FncC5oPgogCiAjaWYgX19PU19IQVNfQUdQCiAKQEAgLTQ1Miw0ICs0NTMsNTMgQEAKIAlyZXR1cm4gYWdwX3VuYmluZF9tZW1vcnkoaGFuZGxlKTsKIH0KIAotI2VuZGlmCQkJCS8qIF9fT1NfSEFTX0FHUCAqLworLyoqCisgKiBCaW5kcyBhIGNvbGxlY3Rpb24gb2YgcGFnZXMgaW50byBBR1AgbWVtb3J5IGF0IHRoZSBnaXZlbiBvZmZzZXQsIHJldHVybmluZworICogdGhlIEFHUCBtZW1vcnkgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlbS4KKyAqCisgKiBObyByZWZlcmVuY2UgaXMgaGVsZCBvbiB0aGUgcGFnZXMgZHVyaW5nIHRoaXMgdGltZSAtLSBpdCBpcyB1cCB0byB0aGUKKyAqIGNhbGxlciB0byBoYW5kbGUgdGhhdC4KKyAqLworRFJNX0FHUF9NRU0gKgorZHJtX2FncF9iaW5kX3BhZ2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCSAgIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzLAorCQkgICB1aW50MzJfdCBndHRfb2Zmc2V0LAorCQkgICB1MzIgdHlwZSkKK3sKKwlEUk1fQUdQX01FTSAqbWVtOworCWludCByZXQsIGk7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwltZW0gPSBkcm1fYWdwX2FsbG9jYXRlX21lbW9yeShkZXYtPmFncC0+YnJpZGdlLCBudW1fcGFnZXMsCisJCQkJICAgICAgdHlwZSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJWxkIHBhZ2VzXG4iLAorCQkJICBudW1fcGFnZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCW1lbS0+bWVtb3J5W2ldID0gcGh5c190b19nYXJ0KHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSkpOworCW1lbS0+cGFnZV9jb3VudCA9IG51bV9wYWdlczsKKworCW1lbS0+aXNfZmx1c2hlZCA9IHRydWU7CisJcmV0ID0gZHJtX2FncF9iaW5kX21lbW9yeShtZW0sIGd0dF9vZmZzZXQgLyBQQUdFX1NJWkUpOworCWlmIChyZXQgIT0gMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBiaW5kIEFHUCBtZW1vcnk6ICVkXG4iLCByZXQpOworCQlhZ3BfZnJlZV9tZW1vcnkobWVtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIG1lbTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2FncF9iaW5kX3BhZ2VzKTsKKwordm9pZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlhZ3BfZmx1c2hfY2hpcHNldChkZXYtPmFncC0+YnJpZGdlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2FncF9jaGlwc2V0X2ZsdXNoKTsKKworI2VuZGlmIC8qIF9fT1NfSEFTX0FHUCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTk0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRYLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQXV0aG9yczogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX1g4NikKK3N0YXRpYyB2b2lkCitkcm1fY2xmbHVzaF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVpbnQ4X3QgKnBhZ2VfdmlydHVhbDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlwYWdlX3ZpcnR1YWwgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRTsgaSArPSBib290X2NwdV9kYXRhLng4Nl9jbGZsdXNoX3NpemUpCisJCWNsZmx1c2gocGFnZV92aXJ0dWFsICsgaSk7CisJa3VubWFwX2F0b21pYyhwYWdlX3ZpcnR1YWwsIEtNX1VTRVIwKTsKK30KKyNlbmRpZgorCit2b2lkCitkcm1fY2xmbHVzaF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZXNbXSwgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCit7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisJaWYgKGNwdV9oYXNfY2xmbHVzaCkgeworCQl1bnNpZ25lZCBsb25nIGk7CisKKwkJbWIoKTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgKytpKQorCQkJZHJtX2NsZmx1c2hfcGFnZSgqcGFnZXMrKyk7CisJCW1iKCk7CisKKwkJcmV0dXJuOworCX0KKworCXdiaW52ZCgpOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGRybV9jbGZsdXNoX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IDQ1MmMyZDguLjk2ZjQxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtMTE2LDcgKzExNiwxMyBAQAogCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfV0FJVF9WQkxBTkssIGRybV93YWl0X3ZibGFuaywgMCksCiAKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFU0VUX0NUTCwgZHJtX21vZGVzZXRfY3RsLCAwKSwKKwogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1VQREFURV9EUkFXLCBkcm1fdXBkYXRlX2RyYXdhYmxlX2luZm8sIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fQ0xPU0UsIGRybV9nZW1fY2xvc2VfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9GTElOSywgZHJtX2dlbV9mbGlua19pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9PUEVOLCBkcm1fZ2VtX29wZW5faW9jdGwsIERSTV9BVVRIKSwKIH07CiAKICNkZWZpbmUgRFJNX0NPUkVfSU9DVExfQ09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3RscyApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IDg1MWE1M2YuLjBkNDY2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKIAlwcml2LT5maWxwID0gZmlscDsKLQlwcml2LT51aWQgPSBjdXJyZW50LT5ldWlkOworCXByaXYtPnVpZCA9IGN1cnJlbnRfZXVpZCgpOwogCXByaXYtPnBpZCA9IHRhc2tfcGlkX25yKGN1cnJlbnQpOwogCXByaXYtPm1pbm9yID0gaWRyX2ZpbmQoJmRybV9taW5vcnNfaWRyLCBtaW5vcl9pZCk7CiAJcHJpdi0+aW9jdGxfY291bnQgPSAwOwpAQCAtMjU2LDYgKzI1Niw5IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+bGhlYWQpOwogCisJaWYgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQorCQlkcm1fZ2VtX29wZW4oZGV2LCBwcml2KTsKKwogCWlmIChkZXYtPmRyaXZlci0+b3BlbikgewogCQlyZXQgPSBkZXYtPmRyaXZlci0+b3BlbihkZXYsIHByaXYpOwogCQlpZiAocmV0IDwgMCkKQEAgLTQwMCw2ICs0MDMsOSBAQAogCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzKGRldiwgZmlsZV9wcml2KTsKIAl9CiAKKwlpZiAoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pCisJCWRybV9nZW1fcmVsZWFzZShkZXYsIGZpbGVfcHJpdik7CisKIAlkcm1fZmFzeW5jKC0xLCBmaWxwLCAwKTsKIAogCW11dGV4X2xvY2soJmRldi0+Y3R4bGlzdF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QxYWZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisKKy8qKiBAZmlsZSBkcm1fZ2VtLmMKKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgc29tZSBvZiB0aGUgYmFzZSBpb2N0bHMgYW5kIGxpYnJhcnkgcm91dGluZXMgZm9yCisgKiB0aGUgZ3JhcGhpY3MgbWVtb3J5IG1hbmFnZXIgaW1wbGVtZW50ZWQgYnkgZWFjaCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIEJlY2F1c2UgdmFyaW91cyBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyBpbiB0ZXJtcyBvZgorICogc3luY2hyb25pemF0aW9uIGFuZCBtaWdyYXRpb24gc3RyYXRlZ2llcywgaW1wbGVtZW50aW5nIHRoYXQgaXMgbGVmdCB1cCB0bworICogdGhlIGRyaXZlciwgYW5kIGFsbCB0aGF0IHRoZSBnZW5lcmFsIEFQSSBwcm92aWRlcyBzaG91bGQgYmUgZ2VuZXJpYyAtLQorICogYWxsb2NhdGluZyBvYmplY3RzLCByZWFkaW5nL3dyaXRpbmcgZGF0YSB3aXRoIHRoZSBjcHUsIGZyZWVpbmcgb2JqZWN0cy4KKyAqIEV2ZW4gdGhlcmUsIHBsYXRmb3JtLWRlcGVuZGVudCBvcHRpbWl6YXRpb25zIGZvciByZWFkaW5nL3dyaXRpbmcgZGF0YSB3aXRoCisgKiB0aGUgQ1BVIG1lYW4gd2UnbGwgbGlrZWx5IGhvb2sgdGhvc2Ugb3V0IHRvIGRyaXZlci1zcGVjaWZpYyBjYWxscy4gIEhvd2V2ZXIsCisgKiB0aGUgRFJJMiBpbXBsZW1lbnRhdGlvbiB3YW50cyB0byBoYXZlIGF0IGxlYXN0IGFsbG9jYXRlL21tYXAgYmUgZ2VuZXJpYy4KKyAqCisgKiBUaGUgZ29hbCB3YXMgdG8gaGF2ZSBzd2FwLWJhY2tlZCBvYmplY3QgYWxsb2NhdGlvbiBtYW5hZ2VkIHRocm91Z2gKKyAqIHN0cnVjdCBmaWxlLiAgSG93ZXZlciwgZmlsZSBkZXNjcmlwdG9ycyBhcyBoYW5kbGVzIHRvIGEgc3RydWN0IGZpbGUgaGF2ZQorICogdHdvIG1ham9yIGZhaWxpbmdzOgorICogLSBQcm9jZXNzIGxpbWl0cyBwcmV2ZW50IG1vcmUgdGhhbiAxMDI0IG9yIHNvIGJlaW5nIHVzZWQgYXQgYSB0aW1lIGJ5CisgKiAgIGRlZmF1bHQuCisgKiAtIEluYWJpbGl0eSB0byBhbGxvY2F0ZSBoaWdoIGZkcyB3aWxsIGFnZ3JhdmF0ZSB0aGUgWCBTZXJ2ZXIncyBzZWxlY3QoKQorICogICBoYW5kbGluZywgYW5kIGxpa2VseSB0aGF0IG9mIG1hbnkgR0wgY2xpZW50IGFwcGxpY2F0aW9ucyBhcyB3ZWxsLgorICoKKyAqIFRoaXMgbGVkIHRvIGEgcGxhbiBvZiB1c2luZyBvdXIgb3duIGludGVnZXIgSURzIChjYWxsZWQgaGFuZGxlcywgZm9sbG93aW5nCisgKiBEUk0gdGVybWlub2xvZ3kpIHRvIG1pbWljIGZkcywgYW5kIGltcGxlbWVudCB0aGUgZmQgc3lzY2FsbHMgd2UgbmVlZCBhcworICogaW9jdGxzLiAgVGhlIG9iamVjdHMgdGhlbXNlbHZlcyB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHN0cnVjdCBmaWxlIHNvCisgKiB0aGF0IHdlIGNhbiB0cmFuc2l0aW9uIHRvIGZkcyBpZiB0aGUgcmVxdWlyZWQga2VybmVsIGluZnJhc3RydWN0dXJlIHNob3dzCisgKiB1cCBhdCBhIGxhdGVyIGRhdGUsIGFuZCBhcyBvdXIgaW50ZXJmYWNlIHdpdGggc2htZnMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLgorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgR0VNIGRldmljZSBmaWVsZHMKKyAqLworCitpbnQKK2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19pbml0KCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCWlkcl9pbml0KCZkZXYtPm9iamVjdF9uYW1lX2lkcik7CisJYXRvbWljX3NldCgmZGV2LT5vYmplY3RfY291bnQsIDApOworCWF0b21pY19zZXQoJmRldi0+b2JqZWN0X21lbW9yeSwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5waW5fY291bnQsIDApOworCWF0b21pY19zZXQoJmRldi0+cGluX21lbW9yeSwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5ndHRfY291bnQsIDApOworCWF0b21pY19zZXQoJmRldi0+Z3R0X21lbW9yeSwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQWxsb2NhdGUgYSBHRU0gb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSB3aXRoIHNobWZzIGJhY2tpbmcgc3RvcmUKKyAqLworc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK2RybV9nZW1fb2JqZWN0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJQlVHX09OKChzaXplICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKTsKKworCW9iaiA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpvYmopLCBHRlBfS0VSTkVMKTsKKworCW9iai0+ZGV2ID0gZGV2OworCW9iai0+ZmlscCA9IHNobWVtX2ZpbGVfc2V0dXAoImRybSBtbSBvYmplY3QiLCBzaXplLCAwKTsKKwlpZiAoSVNfRVJSKG9iai0+ZmlscCkpIHsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJa3JlZl9pbml0KCZvYmotPnJlZmNvdW50KTsKKwlrcmVmX2luaXQoJm9iai0+aGFuZGxlY291bnQpOworCW9iai0+c2l6ZSA9IHNpemU7CisJaWYgKGRldi0+ZHJpdmVyLT5nZW1faW5pdF9vYmplY3QgIT0gTlVMTCAmJgorCSAgICBkZXYtPmRyaXZlci0+Z2VtX2luaXRfb2JqZWN0KG9iaikgIT0gMCkgeworCQlmcHV0KG9iai0+ZmlscCk7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKwlhdG9taWNfaW5jKCZkZXYtPm9iamVjdF9jb3VudCk7CisJYXRvbWljX2FkZChvYmotPnNpemUsICZkZXYtPm9iamVjdF9tZW1vcnkpOworCXJldHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2FsbG9jKTsKKworLyoqCisgKiBSZW1vdmVzIHRoZSBtYXBwaW5nIGZyb20gaGFuZGxlIHRvIGZpbHAgZm9yIHRoaXMgb2JqZWN0LgorICovCitzdGF0aWMgaW50Citkcm1fZ2VtX2hhbmRsZV9kZWxldGUoc3RydWN0IGRybV9maWxlICpmaWxwLCBpbnQgaGFuZGxlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwkvKiBUaGlzIGlzIGdyb3NzLiBUaGUgaWRyIHN5c3RlbSBkb2Vzbid0IGxldCB1cyB0cnkgYSBkZWxldGUgYW5kCisJICogcmV0dXJuIGFuIGVycm9yIGNvZGUuICBJdCBqdXN0IHNwZXdzIGlmIHlvdSBmYWlsIGF0IGRlbGV0aW5nLgorCSAqIFNvLCB3ZSBoYXZlIHRvIGdyYWIgYSBsb2NrIGFyb3VuZCBmaW5kaW5nIHRoZSBvYmplY3QgYW5kIHRoZW4KKwkgKiBkb2luZyB0aGUgZGVsZXRlIG9uIGl0IGFuZCBkcm9wcGluZyB0aGUgcmVmY291bnQsIG9yIHRoZSB1c2VyCisJICogY291bGQgcmFjZSB1cyB0byBkb3VibGUtZGVjcmVtZW50IHRoZSByZWZjb3VudCBhbmQgY2F1c2UgYQorCSAqIHVzZS1hZnRlci1mcmVlIGxhdGVyLiAgR2l2ZW4gdGhlIGZyZXF1ZW5jeSBvZiBvdXIgaGFuZGxlIGxvb2t1cHMsCisJICogd2UgbWF5IHdhbnQgdG8gdXNlIGlkYSBmb3IgbnVtYmVyIGFsbG9jYXRpb24gYW5kIGEgaGFzaCB0YWJsZQorCSAqIGZvciB0aGUgcG9pbnRlcnMsIGFueXdheS4KKwkgKi8KKwlzcGluX2xvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCisJLyogQ2hlY2sgaWYgd2UgY3VycmVudGx5IGhhdmUgYSByZWZlcmVuY2Ugb24gdGhlIG9iamVjdCAqLworCW9iaiA9IGlkcl9maW5kKCZmaWxwLT5vYmplY3RfaWRyLCBoYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlzcGluX3VubG9jaygmZmlscC0+dGFibGVfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYgPSBvYmotPmRldjsKKworCS8qIFJlbGVhc2UgcmVmZXJlbmNlIGFuZCBkZWNyZW1lbnQgcmVmY291bnQuICovCisJaWRyX3JlbW92ZSgmZmlscC0+b2JqZWN0X2lkciwgaGFuZGxlKTsKKwlzcGluX3VubG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDcmVhdGUgYSBoYW5kbGUgZm9yIHRoaXMgb2JqZWN0LiBUaGlzIGFkZHMgYSBoYW5kbGUgcmVmZXJlbmNlCisgKiB0byB0aGUgb2JqZWN0LCB3aGljaCBpbmNsdWRlcyBhIHJlZ3VsYXIgcmVmZXJlbmNlIGNvdW50LiBDYWxsZXJzCisgKiB3aWxsIGxpa2VseSB3YW50IHRvIGRlcmVmZXJlbmNlIHRoZSBvYmplY3QgYWZ0ZXJ3YXJkcy4KKyAqLworaW50Citkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICAgIGludCAqaGFuZGxlcCkKK3sKKwlpbnQJcmV0OworCisJLyoKKwkgKiBHZXQgdGhlIHVzZXItdmlzaWJsZSBoYW5kbGUgdXNpbmcgaWRyLgorCSAqLworYWdhaW46CisJLyogZW5zdXJlIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSB0byBhbGxvY2F0ZSBhIGhhbmRsZSAqLworCWlmIChpZHJfcHJlX2dldCgmZmlsZV9wcml2LT5vYmplY3RfaWRyLCBHRlBfS0VSTkVMKSA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGRvIHRoZSBhbGxvY2F0aW9uIHVuZGVyIG91ciBzcGlubG9jayAqLworCXNwaW5fbG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKwlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZmlsZV9wcml2LT5vYmplY3RfaWRyLCBvYmosIDEsIGhhbmRsZXApOworCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJZ290byBhZ2FpbjsKKworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV9yZWZlcmVuY2Uob2JqKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9oYW5kbGVfY3JlYXRlKTsKKworLyoqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBuYW1lZCBieSB0aGUgaGFuZGxlLiAqLworc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK2RybV9nZW1fb2JqZWN0X2xvb2t1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCSAgICAgIGludCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwlzcGluX2xvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCisJLyogQ2hlY2sgaWYgd2UgY3VycmVudGx5IGhhdmUgYSByZWZlcmVuY2Ugb24gdGhlIG9iamVjdCAqLworCW9iaiA9IGlkcl9maW5kKCZmaWxwLT5vYmplY3RfaWRyLCBoYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlzcGluX3VubG9jaygmZmlscC0+dGFibGVfbG9jayk7CisJCXJldHVybiBOVUxMOworCX0KKworCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCisJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCisJcmV0dXJuIG9iajsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfbG9va3VwKTsKKworLyoqCisgKiBSZWxlYXNlcyB0aGUgaGFuZGxlIHRvIGFuIG1tIG9iamVjdC4KKyAqLworaW50Citkcm1fZ2VtX2Nsb3NlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbG9zZSAqYXJncyA9IGRhdGE7CisJaW50IHJldDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9kZWxldGUoZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDcmVhdGUgYSBnbG9iYWwgbmFtZSBmb3IgYW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlIG5hbWUuCisgKgorICogTm90ZSB0aGF0IHRoZSBuYW1lIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2U7IHdoZW4gdGhlIG9iamVjdAorICogaXMgZnJlZWQsIHRoZSBuYW1lIGdvZXMgYXdheS4KKyAqLworaW50Citkcm1fZ2VtX2ZsaW5rX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9mbGluayAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCithZ2FpbjoKKwlpZiAoaWRyX3ByZV9nZXQoJmRldi0+b2JqZWN0X25hbWVfaWRyLCBHRlBfS0VSTkVMKSA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAob2JqLT5uYW1lKSB7CisJCWFyZ3MtPm5hbWUgPSBvYmotPm5hbWU7CisJCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmRldi0+b2JqZWN0X25hbWVfaWRyLCBvYmosIDEsCisJCQkJICZvYmotPm5hbWUpOworCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJZ290byBhZ2FpbjsKKworCWlmIChyZXQgIT0gMCkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogTGVhdmUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBsb29rdXAgYXJvdW5kIGFzIHRoZQorCSAqIG5hbWUgdGFibGUgbm93IGhvbGRzIG9uZQorCSAqLworCWFyZ3MtPm5hbWUgPSAodWludDY0X3QpIG9iai0+bmFtZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIE9wZW4gYW4gb2JqZWN0IHVzaW5nIHRoZSBnbG9iYWwgbmFtZSwgcmV0dXJuaW5nIGEgaGFuZGxlIGFuZCB0aGUgc2l6ZS4KKyAqCisgKiBUaGlzIGhhbmRsZSAob2YgY291cnNlKSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LCBzbyB0aGUgb2JqZWN0CisgKiB3aWxsIG5vdCBnbyBhd2F5IHVudGlsIHRoZSBoYW5kbGUgaXMgZGVsZXRlZC4KKyAqLworaW50Citkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9nZW1fb3BlbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKwlpbnQgaGFuZGxlOworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlvYmogPSBpZHJfZmluZCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIChpbnQpIGFyZ3MtPm5hbWUpOworCWlmIChvYmopCisJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG9iaiwgJmhhbmRsZSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKKwlhcmdzLT5zaXplID0gb2JqLT5zaXplOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIGF0IGRldmljZSBvcGVuIHRpbWUsIHNldHMgdXAgdGhlIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgcmVmY291bnRpbmcKKyAqIG9mIG1tIG9iamVjdHMuCisgKi8KK3ZvaWQKK2RybV9nZW1fb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKK3sKKwlpZHJfaW5pdCgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyKTsKKwlzcGluX2xvY2tfaW5pdCgmZmlsZV9wcml2YXRlLT50YWJsZV9sb2NrKTsKK30KKworLyoqCisgKiBDYWxsZWQgYXQgZGV2aWNlIGNsb3NlIHRvIHJlbGVhc2UgdGhlIGZpbGUncworICogaGFuZGxlIHJlZmVyZW5jZXMgb24gb2JqZWN0cy4KKyAqLworc3RhdGljIGludAorZHJtX2dlbV9vYmplY3RfcmVsZWFzZV9oYW5kbGUoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBwdHI7CisKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Uob2JqKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENhbGxlZCBhdCBjbG9zZSB0aW1lIHdoZW4gdGhlIGZpbHAgaXMgZ29pbmcgYXdheS4KKyAqCisgKiBSZWxlYXNlcyBhbnkgcmVtYWluaW5nIHJlZmVyZW5jZXMgb24gb2JqZWN0cyBieSB0aGlzIGZpbHAuCisgKi8KK3ZvaWQKK2RybV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSkKK3sKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWRyX2Zvcl9lYWNoKCZmaWxlX3ByaXZhdGUtPm9iamVjdF9pZHIsCisJCSAgICAgJmRybV9nZW1fb2JqZWN0X3JlbGVhc2VfaGFuZGxlLCBOVUxMKTsKKworCWlkcl9kZXN0cm95KCZmaWxlX3ByaXZhdGUtPm9iamVjdF9pZHIpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCisvKioKKyAqIENhbGxlZCBhZnRlciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBoYXMgYmVlbiBsb3N0LgorICoKKyAqIEZyZWVzIHRoZSBvYmplY3QKKyAqLwordm9pZAorZHJtX2dlbV9vYmplY3RfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKikga3JlZjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCWlmIChkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0ICE9IE5VTEwpCisJCWRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3Qob2JqKTsKKworCWZwdXQob2JqLT5maWxwKTsKKwlhdG9taWNfZGVjKCZkZXYtPm9iamVjdF9jb3VudCk7CisJYXRvbWljX3N1YihvYmotPnNpemUsICZkZXYtPm9iamVjdF9tZW1vcnkpOworCWtmcmVlKG9iaik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2ZyZWUpOworCisvKioKKyAqIENhbGxlZCBhZnRlciB0aGUgbGFzdCBoYW5kbGUgdG8gdGhlIG9iamVjdCBoYXMgYmVlbiBjbG9zZWQKKyAqCisgKiBSZW1vdmVzIGFueSBuYW1lIGZvciB0aGUgb2JqZWN0LiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlCisgKiBjYWxsZWQgYmVmb3JlIGRybV9nZW1fb2JqZWN0X2ZyZWUgb3Igd2UnbGwgYmUgdG91Y2hpbmcKKyAqIGZyZWVkIG1lbW9yeQorICovCit2b2lkCitkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IGNvbnRhaW5lcl9vZihrcmVmLAorCQkJCQkJICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QsCisJCQkJCQkgIGhhbmRsZWNvdW50KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisKKwkvKiBSZW1vdmUgYW55IG5hbWUgZm9yIHRoaXMgb2JqZWN0ICovCisJc3Bpbl9sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCWlmIChvYmotPm5hbWUpIHsKKwkJaWRyX3JlbW92ZSgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIG9iai0+bmFtZSk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCQkvKgorCQkgKiBUaGUgb2JqZWN0IG5hbWUgaGVsZCBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCwgZHJvcAorCQkgKiB0aGF0IG5vdy4KKwkJICovCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2hhbmRsZV9mcmVlKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggNTNmMGU1YS4uNDA5MWI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC02Myw3ICs2Myw3IEBACiAJICAgIHAtPmRldm51bSAhPSBQQ0lfU0xPVChkZXYtPnBkZXYtPmRldmZuKSB8fCBwLT5mdW5jbnVtICE9IFBDSV9GVU5DKGRldi0+cGRldi0+ZGV2Zm4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXAtPmlycSA9IGRldi0+aXJxOworCXAtPmlycSA9IGRldi0+cGRldi0+aXJxOwogCiAJRFJNX0RFQlVHKCIlZDolZDolZCA9PiBJUlEgJWRcbiIsIHAtPmJ1c251bSwgcC0+ZGV2bnVtLCBwLT5mdW5jbnVtLAogCQkgIHAtPmlycSk7CkBAIC03MSwyNSArNzEsMTM3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZibGFua19kaXNhYmxlX2ZuKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilhcmc7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgaTsKKworCWlmICghZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fY3J0Y3M7IGkrKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dmJsYW5rX3JlZmNvdW50W2ldKSA9PSAwICYmCisJCSAgICBkZXYtPnZibGFua19lbmFibGVkW2ldKSB7CisJCQlEUk1fREVCVUcoImRpc2FibGluZyB2Ymxhbmsgb24gY3J0YyAlZFxuIiwgaSk7CisJCQlkZXYtPmxhc3RfdmJsYW5rW2ldID0KKwkJCQlkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19jb3VudGVyKGRldiwgaSk7CisJCQlkZXYtPmRyaXZlci0+ZGlzYWJsZV92YmxhbmsoZGV2LCBpKTsKKwkJCWRldi0+dmJsYW5rX2VuYWJsZWRbaV0gPSAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRybV92YmxhbmtfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCS8qIEJhaWwgaWYgdGhlIGRyaXZlciBkaWRuJ3QgY2FsbCBkcm1fdmJsYW5rX2luaXQoKSAqLworCWlmIChkZXYtPm51bV9jcnRjcyA9PSAwKQorCQlyZXR1cm47CisKKwlkZWxfdGltZXIoJmRldi0+dmJsYW5rX2Rpc2FibGVfdGltZXIpOworCisJdmJsYW5rX2Rpc2FibGVfZm4oKHVuc2lnbmVkIGxvbmcpZGV2KTsKKworCWRybV9mcmVlKGRldi0+dmJsX3F1ZXVlLCBzaXplb2YoKmRldi0+dmJsX3F1ZXVlKSAqIGRldi0+bnVtX2NydGNzLAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsX3NpZ3MsIHNpemVvZigqZGV2LT52Ymxfc2lncykgKiBkZXYtPm51bV9jcnRjcywKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPl92YmxhbmtfY291bnQsIHNpemVvZigqZGV2LT5fdmJsYW5rX2NvdW50KSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsYW5rX3JlZmNvdW50LCBzaXplb2YoKmRldi0+dmJsYW5rX3JlZmNvdW50KSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsYW5rX2VuYWJsZWQsIHNpemVvZigqZGV2LT52YmxhbmtfZW5hYmxlZCkgKgorCQkgZGV2LT5udW1fY3J0Y3MsIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPmxhc3RfdmJsYW5rLCBzaXplb2YoKmRldi0+bGFzdF92YmxhbmspICogZGV2LT5udW1fY3J0Y3MsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52YmxhbmtfaW5tb2Rlc2V0LCBzaXplb2YoKmRldi0+dmJsYW5rX2lubW9kZXNldCkgKgorCQkgZGV2LT5udW1fY3J0Y3MsIERSTV9NRU1fRFJJVkVSKTsKKworCWRldi0+bnVtX2NydGNzID0gMDsKK30KKworaW50IGRybV92YmxhbmtfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbnVtX2NydGNzKQoreworCWludCBpLCByZXQgPSAtRU5PTUVNOworCisJc2V0dXBfdGltZXIoJmRldi0+dmJsYW5rX2Rpc2FibGVfdGltZXIsIHZibGFua19kaXNhYmxlX2ZuLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxfbG9jayk7CisJYXRvbWljX3NldCgmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcsIDApOworCWRldi0+bnVtX2NydGNzID0gbnVtX2NydGNzOworCisJZGV2LT52YmxfcXVldWUgPSBkcm1fYWxsb2Moc2l6ZW9mKHdhaXRfcXVldWVfaGVhZF90KSAqIG51bV9jcnRjcywKKwkJCQkgICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibF9xdWV1ZSkKKwkJZ290byBlcnI7CisKKwlkZXYtPnZibF9zaWdzID0gZHJtX2FsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIG51bV9jcnRjcywKKwkJCQkgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsX3NpZ3MpCisJCWdvdG8gZXJyOworCisJZGV2LT5fdmJsYW5rX2NvdW50ID0gZHJtX2FsbG9jKHNpemVvZihhdG9taWNfdCkgKiBudW1fY3J0Y3MsCisJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT5fdmJsYW5rX2NvdW50KQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsYW5rX3JlZmNvdW50ID0gZHJtX2FsbG9jKHNpemVvZihhdG9taWNfdCkgKiBudW1fY3J0Y3MsCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibGFua19yZWZjb3VudCkKKwkJZ290byBlcnI7CisKKwlkZXYtPnZibGFua19lbmFibGVkID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZihpbnQpLAorCQkJCQkgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52YmxhbmtfZW5hYmxlZCkKKwkJZ290byBlcnI7CisKKwlkZXYtPmxhc3RfdmJsYW5rID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZih1MzIpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPmxhc3RfdmJsYW5rKQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsYW5rX2lubW9kZXNldCA9IGRybV9jYWxsb2MobnVtX2NydGNzLCBzaXplb2YoaW50KSwKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsYW5rX2lubW9kZXNldCkKKwkJZ290byBlcnI7CisKKwkvKiBaZXJvIHBlci1jcnRjIHZibGFuayBzdHVmZiAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0Y3M7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZibF9xdWV1ZVtpXSk7CisJCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzW2ldKTsKKwkJYXRvbWljX3NldCgmZGV2LT5fdmJsYW5rX2NvdW50W2ldLCAwKTsKKwkJYXRvbWljX3NldCgmZGV2LT52YmxhbmtfcmVmY291bnRbaV0sIDApOworCX0KKworCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDA7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWRybV92YmxhbmtfY2xlYW51cChkZXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfaW5pdCk7CisKIC8qKgogICogSW5zdGFsbCBJUlEgaGFuZGxlci4KICAqCiAgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCi0gKiBccGFyYW0gaXJxIElSUSBudW1iZXIuCiAgKgotICogSW5pdGlhbGl6ZXMgdGhlIElSUSByZWxhdGVkIGRhdGEsIGFuZCBzZXR1cHMgZHJtX2RldmljZTo6dmJsX3F1ZXVlLiBJbnN0YWxscyB0aGUgaGFuZGxlciwgY2FsbGluZyB0aGUgZHJpdmVyCisgKiBJbml0aWFsaXplcyB0aGUgSVJRIHJlbGF0ZWQgZGF0YS4gSW5zdGFsbHMgdGhlIGhhbmRsZXIsIGNhbGxpbmcgdGhlIGRyaXZlcgogICogXGMgZHJtX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCgpIGFuZCBcYyBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCgpIGZ1bmN0aW9ucwogICogYmVmb3JlIGFuZCBhZnRlciB0aGUgaW5zdGFsbGF0aW9uLgogICovCi1zdGF0aWMgaW50IGRybV9pcnFfaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBkcm1faXJxX2luc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2hfZmxhZ3MgPSAwOwogCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZGV2LT5pcnEgPT0gMCkKKwlpZiAoZGV2LT5wZGV2LT5pcnEgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CkBAIC0xMDcsMTggKzIxOSw3IEBACiAJZGV2LT5pcnFfZW5hYmxlZCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5pcnEpOwotCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSVJRX1ZCTCkpIHsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52YmxfcXVldWUpOwotCi0JCXNwaW5fbG9ja19pbml0KCZkZXYtPnZibF9sb2NrKTsKLQotCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52Ymxfc2lncyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzMik7Ci0KLQkJZGV2LT52YmxfcGVuZGluZyA9IDA7Ci0JfQorCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPnBkZXYtPmlycSk7CiAKIAkvKiBCZWZvcmUgaW5zdGFsbGluZyBoYW5kbGVyICovCiAJZGV2LT5kcml2ZXItPmlycV9wcmVpbnN0YWxsKGRldik7CkBAIC0xMjcsOCArMjI4LDkgQEAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9JUlFfU0hBUkVEKSkKIAkJc2hfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZXYtPmRyaXZlci0+aXJxX2hhbmRsZXIsCisJcmV0ID0gcmVxdWVzdF9pcnEoZHJtX2Rldl90b19pcnEoZGV2KSwgZGV2LT5kcml2ZXItPmlycV9oYW5kbGVyLAogCQkJICBzaF9mbGFncywgZGV2LT5kZXZuYW1lLCBkZXYpOworCiAJaWYgKHJldCA8IDApIHsKIAkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlkZXYtPmlycV9lbmFibGVkID0gMDsKQEAgLTEzNywxMCArMjM5LDE2IEBACiAJfQogCiAJLyogQWZ0ZXIgaW5zdGFsbGluZyBoYW5kbGVyICovCi0JZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOworCXJldCA9IGRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRldi0+aXJxX2VuYWJsZWQgPSAwOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkcm1faXJxX2luc3RhbGwpOwogCiAvKioKICAqIFVuaW5zdGFsbCB0aGUgSVJRIGhhbmRsZXIuCkBAIC0xNjQsMTcgKzI3MiwxOCBAQAogCWlmICghaXJxX2VuYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRldi0+aXJxKTsKKwlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5wZGV2LT5pcnEpOwogCiAJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKIAotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKGRldi0+cGRldi0+aXJxLCBkZXYpOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CiAKIAlkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZHJtX2lycV91bmluc3RhbGwpOwogCiAvKioKQEAgLTIwMSw3ICszMTAsNyBAQAogCQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQkJcmV0dXJuIDA7CiAJCWlmIChkZXYtPmlmX3ZlcnNpb24gPCBEUk1fSUZfVkVSU0lPTigxLCAyKSAmJgotCQkgICAgY3RsLT5pcnEgIT0gZGV2LT5pcnEpCisJCSAgICBjdGwtPmlycSAhPSBkZXYtPnBkZXYtPmlycSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR1cm4gZHJtX2lycV9pbnN0YWxsKGRldik7CiAJY2FzZSBEUk1fVU5JTlNUX0hBTkRMRVI6CkBAIC0yMTQsNiArMzIzLDE3NCBAQAogfQogCiAvKioKKyAqIGRybV92YmxhbmtfY291bnQgLSByZXRyaWV2ZSAiY29va2VkIiB2YmxhbmsgY291bnRlciB2YWx1ZQorICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gcmV0cmlldmUKKyAqCisgKiBGZXRjaGVzIHRoZSAiY29va2VkIiB2YmxhbmsgY291bnQgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YKKyAqIHZibGFuayBldmVudHMgc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCBpbmNsdWRpbmcgbG9zdCBldmVudHMgZHVlIHRvCisgKiBtb2Rlc2V0dGluZyBhY3Rpdml0eS4KKyAqLwordTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2NvdW50KTsKKworLyoqCisgKiBkcm1fdXBkYXRlX3ZibGFua19jb3VudCAtIHVwZGF0ZSB0aGUgbWFzdGVyIHZibGFuayBjb3VudGVyCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0YzogY291bnRlciB0byB1cGRhdGUKKyAqCisgKiBDYWxsIGJhY2sgaW50byB0aGUgZHJpdmVyIHRvIHVwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgdmJsYW5rIGNvdW50ZXIKKyAqIChzcGVjaWZpZWQgYnkgQGNydGMpLiAgRGVhbCB3aXRoIHdyYXBhcm91bmQsIGlmIGl0IG9jY3VycmVkLCBhbmQKKyAqIHVwZGF0ZSB0aGUgbGFzdCByZWFkIHZhbHVlIHNvIHdlIGNhbiBkZWFsIHdpdGggd3JhcGFyb3VuZCBvbiB0aGUgbmV4dAorICogY2FsbCBpZiBuZWNlc3NhcnkuCisgKgorICogT25seSBuZWNlc3Nhcnkgd2hlbiBnb2luZyBmcm9tIG9mZi0+b24sIHRvIGFjY291bnQgZm9yIGZyYW1lcyB3ZQorICogZGlkbid0IGdldCBhbiBpbnRlcnJ1cHQgZm9yLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGhvbGQgZGV2LT52YmxfbG9jayBzaW5jZSB0aGlzIHJlYWRzICYgd3JpdGVzCisgKiBkZXZpY2UgdmJsYW5rIGZpZWxkcy4KKyAqLworc3RhdGljIHZvaWQgZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJdTMyIGN1cl92YmxhbmssIGRpZmY7CisKKwkvKgorCSAqIEludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBwcmlvciB0byB0aGlzIGNhbGwsIHNvIGRlYWwgd2l0aCBjb3VudGVyCisJICogd3JhcCBpZiBuZWVkZWQuCisJICogTk9URSEgIEl0J3MgcG9zc2libGUgd2UgbG9zdCBhIGZ1bGwgZGV2LT5tYXhfdmJsYW5rX2NvdW50IGV2ZW50cworCSAqIGhlcmUgaWYgdGhlIHJlZ2lzdGVyIGlzIHNtYWxsIG9yIHdlIGhhZCB2YmxhbmsgaW50ZXJydXB0cyBvZmYgZm9yCisJICogYSBsb25nIHRpbWUuCisJICovCisJY3VyX3ZibGFuayA9IGRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBjcnRjKTsKKwlkaWZmID0gY3VyX3ZibGFuayAtIGRldi0+bGFzdF92YmxhbmtbY3J0Y107CisJaWYgKGN1cl92YmxhbmsgPCBkZXYtPmxhc3RfdmJsYW5rW2NydGNdKSB7CisJCWRpZmYgKz0gZGV2LT5tYXhfdmJsYW5rX2NvdW50OworCisJCURSTV9ERUJVRygibGFzdF92YmxhbmtbJWRdPTB4JXgsIGN1cl92Ymxhbms9MHgleCA9PiBkaWZmPTB4JXhcbiIsCisJCQkgIGNydGMsIGRldi0+bGFzdF92YmxhbmtbY3J0Y10sIGN1cl92YmxhbmssIGRpZmYpOworCX0KKworCURSTV9ERUJVRygiZW5hYmxpbmcgdmJsYW5rIGludGVycnVwdHMgb24gY3J0YyAlZCwgbWlzc2VkICVkXG4iLAorCQkgIGNydGMsIGRpZmYpOworCisJYXRvbWljX2FkZChkaWZmLCAmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKK30KKworLyoqCisgKiBkcm1fdmJsYW5rX2dldCAtIGdldCBhIHJlZmVyZW5jZSBjb3VudCBvbiB2YmxhbmsgZXZlbnRzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hpY2ggQ1JUQyB0byBvd24KKyAqCisgKiBBY3F1aXJlIGEgcmVmZXJlbmNlIGNvdW50IG9uIHZibGFuayBldmVudHMgdG8gYXZvaWQgaGF2aW5nIHRoZW0gZGlzYWJsZWQKKyAqIHdoaWxlIGluIHVzZS4KKyAqCisgKiBSRVRVUk5TCisgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZmFpbHVyZS4KKyAqLworaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCS8qIEdvaW5nIGZyb20gMC0+MSBtZWFucyB3ZSBoYXZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkgPT0gMSAmJgorCSAgICAhZGV2LT52YmxhbmtfZW5hYmxlZFtjcnRjXSkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+ZW5hYmxlX3ZibGFuayhkZXYsIGNydGMpOworCQlEUk1fREVCVUcoImVuYWJsaW5nIHZibGFuayBvbiBjcnRjICVkLCByZXQ6ICVkXG4iLCBjcnRjLCByZXQpOworCQlpZiAocmV0KQorCQkJYXRvbWljX2RlYygmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pOworCQllbHNlIHsKKwkJCWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10gPSAxOworCQkJZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2dldCk7CisKKy8qKgorICogZHJtX3ZibGFua19wdXQgLSBnaXZlIHVwIG93bmVyc2hpcCBvZiB2YmxhbmsgZXZlbnRzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hpY2ggY291bnRlciB0byBnaXZlIHVwCisgKgorICogUmVsZWFzZSBvd25lcnNoaXAgb2YgYSBnaXZlbiB2YmxhbmsgY291bnRlciwgdHVybmluZyBvZmYgaW50ZXJydXB0cworICogaWYgcG9zc2libGUuCisgKi8KK3ZvaWQgZHJtX3ZibGFua19wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJLyogTGFzdCB1c2VyIHNjaGVkdWxlcyBpbnRlcnJ1cHQgZGlzYWJsZSAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkpCisJCW1vZF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lciwgamlmZmllcyArIDUqRFJNX0haKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19wdXQpOworCisvKioKKyAqIGRybV9tb2Rlc2V0X2N0bCAtIGhhbmRsZSB2YmxhbmsgZXZlbnQgY291bnRlciBjaGFuZ2VzIGFjcm9zcyBtb2RlIHN3aXRjaAorICogQERSTV9JT0NUTF9BUkdTOiBzdGFuZGFyZCBpb2N0bCBhcmd1bWVudHMKKyAqCisgKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGNhbGwgdGhlICVfRFJNX1BSRV9NT0RFU0VUIGFuZCAlX0RSTV9QT1NUX01PREVTRVQKKyAqIGlvY3RscyBhcm91bmQgbW9kZXNldHRpbmcgc28gdGhhdCBhbnkgbG9zdCB2YmxhbmsgZXZlbnRzIGFyZSBhY2NvdW50ZWQgZm9yLgorICoKKyAqIEdlbmVyYWxseSB0aGUgY291bnRlciB3aWxsIHJlc2V0IGFjcm9zcyBtb2RlIHNldHMuICBJZiBpbnRlcnJ1cHRzIGFyZQorICogZW5hYmxlZCBhcm91bmQgdGhpcyBjYWxsLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNpbmNlIHRoZSBjb3VudGVyCisgKiB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIGluY3JlbWVudGVkLgorICovCitpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsICptb2Rlc2V0ID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWludCBjcnRjLCByZXQgPSAwOworCisJLyogSWYgZHJtX3ZibGFua19pbml0KCkgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwganVzdCBuby1vcCAqLworCWlmICghZGV2LT5udW1fY3J0Y3MpCisJCWdvdG8gb3V0OworCisJY3J0YyA9IG1vZGVzZXQtPmNydGM7CisJaWYgKGNydGMgPj0gZGV2LT5udW1fY3J0Y3MpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUbyBhdm9pZCBhbGwgdGhlIHByb2JsZW1zIHRoYXQgbWlnaHQgaGFwcGVuIGlmIGludGVycnVwdHMKKwkgKiB3ZXJlIGVuYWJsZWQvZGlzYWJsZWQgYXJvdW5kIG9yIGJldHdlZW4gdGhlc2UgY2FsbHMsIHdlIGp1c3QKKwkgKiBoYXZlIHRoZSBrZXJuZWwgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgQ1JUQyAoanVzdCBvbmNlIHRob3VnaAorCSAqIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIGNvdW50IGlmIG11bHRpcGxlLCBtaXNtYXRjaCBjYWxscyBvY2N1ciksCisJICogc28gdGhhdCBpbnRlcnJ1cHRzIHJlbWFpbiBlbmFibGVkIGluIHRoZSBpbnRlcmltLgorCSAqLworCXN3aXRjaCAobW9kZXNldC0+Y21kKSB7CisJY2FzZSBfRFJNX1BSRV9NT0RFU0VUOgorCQlpZiAoIWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgeworCQkJZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdID0gMTsKKwkJCWRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBfRFJNX1BPU1RfTU9ERVNFVDoKKwkJaWYgKGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwkJCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDE7CisJCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCQkJZHJtX3ZibGFua19wdXQoZGV2LCBjcnRjKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKICAqIFdhaXQgZm9yIFZCTEFOSy4KICAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgpAQCAtMjMyLDE0ICs1MDksMTQgQEAKICAqCiAgKiBJZiBhIHNpZ25hbCBpcyBub3QgcmVxdWVzdGVkLCB0aGVuIGNhbGxzIHZibGFua193YWl0KCkuCiAgKi8KLWludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitpbnQgZHJtX3dhaXRfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAl1bmlvbiBkcm1fd2FpdF92YmxhbmsgKnZibHdhaXQgPSBkYXRhOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcSwgY3J0YzsKIAotCWlmICgoIWRldi0+aXJxKSB8fCAoIWRldi0+aXJxX2VuYWJsZWQpKQorCWlmICgoIWRldi0+cGRldi0+aXJxKSB8fCAoIWRldi0+aXJxX2VuYWJsZWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJgpAQCAtMjUxLDEzICs1MjgsMTcgQEAKIAl9CiAKIAlmbGFncyA9IHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX0ZMQUdTX01BU0s7CisJY3J0YyA9IGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZID8gMSA6IDA7CiAKLQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8KLQkJCQkgICAgRFJJVkVSX0lSUV9WQkwyIDogRFJJVkVSX0lSUV9WQkwpKQorCWlmIChjcnRjID49IGRldi0+bnVtX2NydGNzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNlcSA9IGF0b21pY19yZWFkKChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgPyAmZGV2LT52YmxfcmVjZWl2ZWQyCi0JCQkgIDogJmRldi0+dmJsX3JlY2VpdmVkKTsKKwlyZXQgPSBkcm1fdmJsYW5rX2dldChkZXYsIGNydGMpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWNxdWlyZSB2YmxhbmsgY291bnRlciwgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXNlcSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKIAogCXN3aXRjaCAodmJsd2FpdC0+cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfVFlQRVNfTUFTSykgewogCWNhc2UgX0RSTV9WQkxBTktfUkVMQVRJVkU6CkBAIC0yNjYsNyArNTQ3LDggQEAKIAljYXNlIF9EUk1fVkJMQU5LX0FCU09MVVRFOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOwogCX0KIAogCWlmICgoZmxhZ3MgJiBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKSAmJgpAQCAtMjc2LDggKzU1OCw3IEBACiAKIAlpZiAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TSUdOQUwpIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQkJc3RydWN0IGxpc3RfaGVhZCAqdmJsX3NpZ3MgPSAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpCi0JCQkJICAgICAgPyAmZGV2LT52Ymxfc2lnczIgOiAmZGV2LT52Ymxfc2lnczsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdmJsX3NpZ3MgPSAmZGV2LT52Ymxfc2lnc1tjcnRjXTsKIAkJc3RydWN0IGRybV92Ymxfc2lnICp2Ymxfc2lnOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CkBAIC0yOTgsMjIgKzU3OSwyOSBAQAogCQkJfQogCQl9CiAKLQkJaWYgKGRldi0+dmJsX3BlbmRpbmcgPj0gMTAwKSB7CisJCWlmIChhdG9taWNfcmVhZCgmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcpID49IDEwMCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCWRldi0+dmJsX3BlbmRpbmcrKzsKLQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CiAKLQkJaWYgKCEKLQkJICAgICh2Ymxfc2lnID0KLQkJICAgICBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fdmJsX3NpZyksIERSTV9NRU1fRFJJVkVSKSkpIHsKLQkJCXJldHVybiAtRU5PTUVNOworCQl2Ymxfc2lnID0gZHJtX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRybV92Ymxfc2lnKSwKKwkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJaWYgKCF2Ymxfc2lnKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBkb25lOwogCQl9CiAKLQkJbWVtc2V0KCh2b2lkICopdmJsX3NpZywgMCwgc2l6ZW9mKCp2Ymxfc2lnKSk7CisJCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7CisJCWlmIChyZXQpIHsKKwkJCWRybV9mcmVlKHZibF9zaWcsIHNpemVvZihzdHJ1Y3QgZHJtX3ZibF9zaWcpLAorCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJYXRvbWljX2luYygmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcpOwogCiAJCXZibF9zaWctPnNlcXVlbmNlID0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZTsKIAkJdmJsX3NpZy0+aW5mby5zaV9zaWdubyA9IHZibHdhaXQtPnJlcXVlc3Quc2lnbmFsOwpAQCAtMzI3LDIwICs2MTUsMjkgQEAKIAogCQl2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSA9IHNlcTsKIAl9IGVsc2UgewotCQlpZiAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpIHsKLQkJCWlmIChkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQyKQotCQkJCXJldCA9IGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdDIoZGV2LCAmdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSk7Ci0JCX0gZWxzZSBpZiAoZGV2LT5kcml2ZXItPnZibGFua193YWl0KQotCQkJcmV0ID0KLQkJCSAgICBkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQoZGV2LAotCQkJCQkJICAgICAmdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSk7CisJCURSTV9ERUJVRygid2FpdGluZyBvbiB2YmxhbmsgY291bnQgJWQsIGNydGMgJWRcbiIsCisJCQkgIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UsIGNydGMpOworCQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlW2NydGNdLCAzICogRFJNX0haLAorCQkJICAgICgoZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpCisJCQkgICAgICAtIHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkpOwogCi0JCWRvX2dldHRpbWVvZmRheSgmbm93KTsKLQkJdmJsd2FpdC0+cmVwbHkudHZhbF9zZWMgPSBub3cudHZfc2VjOwotCQl2Ymx3YWl0LT5yZXBseS50dmFsX3VzZWMgPSBub3cudHZfdXNlYzsKKwkJaWYgKHJldCAhPSAtRUlOVFIpIHsKKwkJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCisJCQl2Ymx3YWl0LT5yZXBseS50dmFsX3NlYyA9IG5vdy50dl9zZWM7CisJCQl2Ymx3YWl0LT5yZXBseS50dmFsX3VzZWMgPSBub3cudHZfdXNlYzsKKwkJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOworCQkJRFJNX0RFQlVHKCJyZXR1cm5pbmcgJWQgdG8gY2xpZW50XG4iLAorCQkJCSAgdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UpOworCQl9IGVsc2UgeworCQkJRFJNX0RFQlVHKCJ2Ymxhbmsgd2FpdCBpbnRlcnJ1cHRlZCBieSBzaWduYWxcbiIpOworCQl9CiAJfQogCi0gICAgICBkb25lOgorZG9uZToKKwlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0OCw0NCArNjQ1LDU3IEBACiAgKiBTZW5kIHRoZSBWQkxBTksgc2lnbmFscy4KICAqCiAgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCisgKiBccGFyYW0gY3J0YyBDUlRDIHdoZXJlIHRoZSB2YmxhbmsgZXZlbnQgb2NjdXJyZWQKICAqCiAgKiBTZW5kcyBhIHNpZ25hbCBmb3IgZWFjaCB0YXNrIGluIGRybV9kZXZpY2U6OnZibF9zaWdzIGFuZCBlbXB0aWVzIHRoZSBsaXN0LgogICoKICAqIElmIGEgc2lnbmFsIGlzIG5vdCByZXF1ZXN0ZWQsIHRoZW4gY2FsbHMgdmJsYW5rX3dhaXQoKS4KICAqLwotdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIGRybV92Ymxfc2VuZF9zaWduYWxzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogeworCXN0cnVjdCBkcm1fdmJsX3NpZyAqdmJsX3NpZywgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lnczsKKwl1bnNpZ25lZCBpbnQgdmJsX3NlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGZsYWdzKTsKIAotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJc3RydWN0IGRybV92Ymxfc2lnICp2Ymxfc2lnLCAqdG1wOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lncyA9IGkgPyAmZGV2LT52Ymxfc2lnczIgOiAmZGV2LT52Ymxfc2lnczsKLQkJdW5zaWduZWQgaW50IHZibF9zZXEgPSBhdG9taWNfcmVhZChpID8gJmRldi0+dmJsX3JlY2VpdmVkMiA6Ci0JCQkJCQkgICAmZGV2LT52YmxfcmVjZWl2ZWQpOworCXZibF9zaWdzID0gJmRldi0+dmJsX3NpZ3NbY3J0Y107CisJdmJsX3NlcSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmJsX3NpZywgdG1wLCB2Ymxfc2lncywgaGVhZCkgewotCQkJaWYgKCh2Ymxfc2VxIC0gdmJsX3NpZy0+c2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkgewotCQkJCXZibF9zaWctPmluZm8uc2lfY29kZSA9IHZibF9zZXE7Ci0JCQkJc2VuZF9zaWdfaW5mbyh2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vLAotCQkJCQkgICAgICAmdmJsX3NpZy0+aW5mbywgdmJsX3NpZy0+dGFzayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZibF9zaWcsIHRtcCwgdmJsX3NpZ3MsIGhlYWQpIHsKKwkgICAgaWYgKCh2Ymxfc2VxIC0gdmJsX3NpZy0+c2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkgeworCQl2Ymxfc2lnLT5pbmZvLnNpX2NvZGUgPSB2Ymxfc2VxOworCQlzZW5kX3NpZ19pbmZvKHZibF9zaWctPmluZm8uc2lfc2lnbm8sCisJCQkgICAgICAmdmJsX3NpZy0+aW5mbywgdmJsX3NpZy0+dGFzayk7CiAKLQkJCQlsaXN0X2RlbCgmdmJsX3NpZy0+aGVhZCk7CisJCWxpc3RfZGVsKCZ2Ymxfc2lnLT5oZWFkKTsKIAotCQkJCWRybV9mcmVlKHZibF9zaWcsIHNpemVvZigqdmJsX3NpZyksCi0JCQkJCSBEUk1fTUVNX0RSSVZFUik7Ci0KLQkJCQlkZXYtPnZibF9wZW5kaW5nLS07Ci0JCQl9Ci0JCX0KKwkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKCp2Ymxfc2lnKSwKKwkJCSBEUk1fTUVNX0RSSVZFUik7CisJCWF0b21pY19kZWMoJmRldi0+dmJsX3NpZ25hbF9wZW5kaW5nKTsKKwkJZHJtX3ZibGFua19wdXQoZGV2LCBjcnRjKTsKKwkgICAgfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGZsYWdzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChkcm1fdmJsX3NlbmRfc2lnbmFscyk7CisvKioKKyAqIGRybV9oYW5kbGVfdmJsYW5rIC0gaGFuZGxlIGEgdmJsYW5rIGV2ZW50CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hlcmUgdGhpcyBldmVudCBvY2N1cnJlZAorICoKKyAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGluIHRoZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KKyAqIHVwZGF0ZSB0aGUgdmJsYW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4KKyAqLwordm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlhdG9taWNfaW5jKCZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlW2NydGNdKTsKKwlkcm1fdmJsX3NlbmRfc2lnbmFscyhkZXYsIGNydGMpOworfQorRVhQT1JUX1NZTUJPTChkcm1faGFuZGxlX3ZibGFuayk7CiAKIC8qKgogICogVGFza2xldCB3cmFwcGVyIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKaW5kZXggMDE3NzAxMi4uODAzYmM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCkBAIC0xMzMsNiArMTMzLDcgQEAKIHsKIAlyZXR1cm4gZHJtX2FncF9mcmVlX21lbW9yeShoYW5kbGUpID8gMCA6IC1FSU5WQUw7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9mcmVlX2FncCk7CiAKIC8qKiBXcmFwcGVyIGFyb3VuZCBhZ3BfYmluZF9tZW1vcnkoKSAqLwogaW50IGRybV9iaW5kX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSwgdW5zaWduZWQgaW50IHN0YXJ0KQpAQCAtMTQ1LDYgKzE0Niw3IEBACiB7CiAJcmV0dXJuIGRybV9hZ3BfdW5iaW5kX21lbW9yeShoYW5kbGUpOwogfQorRVhQT1JUX1NZTUJPTChkcm1fdW5iaW5kX2FncCk7CiAKICNlbHNlICAvKiAgX19PU19IQVNfQUdQICAqLwogc3RhdGljIGlubGluZSB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwppbmRleCBkY2ZmOWU5Li4yMTdhZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCkBAIC0xNjksNiArMTY5LDcgQEAKIAogCXJldHVybiBjaGlsZDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX21tX2dldF9ibG9jayk7CiAKIC8qCiAgKiBQdXQgYSBibG9jay4gTWVyZ2Ugd2l0aCB0aGUgcHJldmlvdXMgYW5kIC8gb3IgbmV4dCBibG9jayBpZiB0aGV5IGFyZSBmcmVlLgpAQCAtMjE3LDYgKzIxOCw3IEBACiAJCWRybV9mcmVlKGN1ciwgc2l6ZW9mKCpjdXIpLCBEUk1fTUVNX01NKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGRybV9tbV9wdXRfYmxvY2spOwogCiBzdHJ1Y3QgZHJtX21tX25vZGUgKmRybV9tbV9zZWFyY2hfZnJlZShjb25zdCBzdHJ1Y3QgZHJtX21tICogbW0sCiAJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCkBAIC0yNjUsNiArMjY3LDcgQEAKIAogCXJldHVybiAoaGVhZC0+bmV4dC0+bmV4dCA9PSBoZWFkKTsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX21tX3NlYXJjaF9mcmVlKTsKIAogaW50IGRybV9tbV9pbml0KHN0cnVjdCBkcm1fbW0gKiBtbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewpAQCAtMjczLDcgKzI3Niw3IEBACiAKIAlyZXR1cm4gZHJtX21tX2NyZWF0ZV90YWlsX25vZGUobW0sIHN0YXJ0LCBzaXplKTsKIH0KLQorRVhQT1JUX1NZTUJPTChkcm1fbW1faW5pdCk7CiAKIHZvaWQgZHJtX21tX3Rha2Vkb3duKHN0cnVjdCBkcm1fbW0gKiBtbSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKaW5kZXggOTNiMWUwNC4uYWU3M2I3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKQEAgLTQ5LDYgKzQ5LDEwIEBACiAJCQkgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwogc3RhdGljIGludCBkcm1fYnVmc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCiAJCQkgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiAjaWYgRFJNX0RFQlVHX0NPREUKIHN0YXRpYyBpbnQgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCiAJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwpAQCAtNjAsMTMgKzY0LDE2IEBACiBzdGF0aWMgc3RydWN0IGRybV9wcm9jX2xpc3QgewogCWNvbnN0IGNoYXIgKm5hbWU7CS8qKjwgZmlsZSBuYW1lICovCiAJaW50ICgqZikgKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKik7CQkvKio8IHByb2MgY2FsbGJhY2sqLworCXUzMiBkcml2ZXJfZmVhdHVyZXM7IC8qKjwgUmVxdWlyZWQgZHJpdmVyIGZlYXR1cmVzIGZvciB0aGlzIGVudHJ5ICovCiB9IGRybV9wcm9jX2xpc3RbXSA9IHsKLQl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvfSwKLQl7Im1lbSIsIGRybV9tZW1faW5mb30sCi0JeyJ2bSIsIGRybV92bV9pbmZvfSwKLQl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvfSwKLQl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mb30sCi0JeyJidWZzIiwgZHJtX2J1ZnNfaW5mb30sCisJeyJuYW1lIiwgZHJtX25hbWVfaW5mbywgMH0sCisJeyJtZW0iLCBkcm1fbWVtX2luZm8sIDB9LAorCXsidm0iLCBkcm1fdm1faW5mbywgMH0sCisJeyJjbGllbnRzIiwgZHJtX2NsaWVudHNfaW5mbywgMH0sCisJeyJxdWV1ZXMiLCBkcm1fcXVldWVzX2luZm8sIDB9LAorCXsiYnVmcyIsIGRybV9idWZzX2luZm8sIDB9LAorCXsiZ2VtX25hbWVzIiwgZHJtX2dlbV9uYW1lX2luZm8sIERSSVZFUl9HRU19LAorCXsiZ2VtX29iamVjdHMiLCBkcm1fZ2VtX29iamVjdF9pbmZvLCBEUklWRVJfR0VNfSwKICNpZiBEUk1fREVCVUdfQ09ERQogCXsidm1hIiwgZHJtX3ZtYV9pbmZvfSwKICNlbmRpZgpAQCAtOTAsOCArOTcsOSBAQAogaW50IGRybV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwKIAkJICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7Ci0JaW50IGksIGo7CisJaW50IGksIGosIHJldDsKIAljaGFyIG5hbWVbNjRdOwogCiAJc3ByaW50ZihuYW1lLCAiJWQiLCBtaW5vcl9pZCk7CkBAIC0xMDIsMjMgKzExMCw0MiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBEUk1fUFJPQ19FTlRSSUVTOyBpKyspIHsKKwkJdTMyIGZlYXR1cmVzID0gZHJtX3Byb2NfbGlzdFtpXS5kcml2ZXJfZmVhdHVyZXM7CisKKwkJaWYgKGZlYXR1cmVzICE9IDAgJiYKKwkJICAgIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgZmVhdHVyZXMpICE9IGZlYXR1cmVzKQorCQkJY29udGludWU7CisKIAkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAogCQkJCQlTX0lGUkVHIHwgU19JUlVHTywgbWlub3ItPmRldl9yb290KTsKIAkJaWYgKCFlbnQpIHsKIAkJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvJXMvJXNcbiIsCiAJCQkJICBuYW1lLCBkcm1fcHJvY19saXN0W2ldLm5hbWUpOwotCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCi0JCQkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKLQkJCW1pbm9yLT5kZXZfcm9vdCA9IE5VTEw7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZmFpbDsKIAkJfQogCQllbnQtPnJlYWRfcHJvYyA9IGRybV9wcm9jX2xpc3RbaV0uZjsKIAkJZW50LT5kYXRhID0gbWlub3I7CiAJfQogCisJaWYgKGRldi0+ZHJpdmVyLT5wcm9jX2luaXQpIHsKKwkJcmV0ID0gZGV2LT5kcml2ZXItPnByb2NfaW5pdChtaW5vcik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiRFJNOiBEcml2ZXIgZmFpbGVkIHRvIGluaXRpYWxpemUgIgorCQkJCSAgIi9wcm9jL2RyaS5cbiIpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCiAJcmV0dXJuIDA7CisgZmFpbDoKKworCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwKKwkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7CisJcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgcm9vdCk7CisJbWlub3ItPmRldl9yb290ID0gTlVMTDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTEzMywxMiArMTYwLDE2IEBACiAgKi8KIGludCBkcm1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CiAJaW50IGk7CiAJY2hhciBuYW1lWzY0XTsKIAogCWlmICghcm9vdCB8fCAhbWlub3ItPmRldl9yb290KQogCQlyZXR1cm4gMDsKIAorCWlmIChkZXYtPmRyaXZlci0+cHJvY19jbGVhbnVwKQorCQlkZXYtPmRyaXZlci0+cHJvY19jbGVhbnVwKG1pbm9yKTsKKwogCWZvciAoaSA9IDA7IGkgPCBEUk1fUFJPQ19FTlRSSUVTOyBpKyspCiAJCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwgbWlub3ItPmRldl9yb290KTsKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yLT5pbmRleCk7CkBAIC00ODAsNiArNTExLDg0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgeworICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqYnVmOworICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGVvZjsKK307CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9vbmVfbmFtZV9pbmZvKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcHRyOworCXN0cnVjdCBkcm1fZ2VtX25hbWVfaW5mb19kYXRhICAgKm5pZCA9IGRhdGE7CisKKwlEUk1fSU5GTygibmFtZSAlZCBzaXplICV6ZFxuIiwgb2JqLT5uYW1lLCBvYmotPnNpemUpOworCWlmIChuaWQtPmVvZikKKwkJcmV0dXJuIDA7CisKKwluaWQtPmxlbiArPSBzcHJpbnRmKCZuaWQtPmJ1ZltuaWQtPmxlbl0sCisJCQkgICAgIiU2ZCAlOHpkICU3ZCAlOGRcbiIsCisJCQkgICAgb2JqLT5uYW1lLCBvYmotPnNpemUsCisJCQkgICAgYXRvbWljX3JlYWQoJm9iai0+aGFuZGxlY291bnQucmVmY291bnQpLAorCQkJICAgIGF0b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNvdW50KSk7CisJaWYgKG5pZC0+bGVuID4gRFJNX1BST0NfTElNSVQpIHsKKwkJbmlkLT5lb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSBuaWQ7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCW5pZC5sZW4gPSBzcHJpbnRmKGJ1ZiwgIiAgbmFtZSAgICAgc2l6ZSBoYW5kbGVzIHJlZmNvdW50XG4iKTsKKwluaWQuYnVmID0gYnVmOworCW5pZC5lb2YgPSAwOworCWlkcl9mb3JfZWFjaCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIGRybV9nZW1fb25lX25hbWVfaW5mbywgJm5pZCk7CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJaWYgKG5pZC5sZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbmlkLmxlbiAtIG9mZnNldDsKK30KKworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCIlZCBvYmplY3RzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfY291bnQpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfbWVtb3J5KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbm5lZFxuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX2NvdW50KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbiBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX21lbW9yeSkpOworCURSTV9QUk9DX1BSSU5UKCIlZCBndHQgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPmd0dF9tZW1vcnkpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IHRvdGFsXG4iLCBkZXYtPmd0dF90b3RhbCk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKICNpZiBEUk1fREVCVUdfQ09ERQogCiBzdGF0aWMgaW50IGRybV9fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCmluZGV4IGMyZjU4NGYuLjE0MWUzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCkBAIC0xMDcsNyArMTA3LDYgQEAKICNpZmRlZiBfX2FscGhhX18KIAlkZXYtPmhvc2UgPSBwZGV2LT5zeXNkYXRhOwogI2VuZGlmCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAlpZiAoZHJtX2h0X2NyZWF0ZSgmZGV2LT5tYXBfaGFzaCwgMTIpKSB7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUyLDYgKzE1MSwxNSBAQAogCQlnb3RvIGVycm9yX291dF91bnJlZzsKIAl9CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSB7CisJCXJldGNvZGUgPSBkcm1fZ2VtX2luaXQoZGV2KTsKKwkJaWYgKHJldGNvZGUpIHsKKwkJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpemUgZ3JhcGhpY3MgZXhlY3V0aW9uICIKKwkJCQkgICJtYW5hZ2VyIChHRU0pXG4iKTsKKwkJCWdvdG8gZXJyb3Jfb3V0X3VucmVnOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKICAgICAgIGVycm9yX291dF91bnJlZzoKQEAgLTMxNyw2ICszMjUsNyBAQAogaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yX3ApCiB7CiAJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAqbWlub3JfcDsKKwogCURSTV9ERUJVRygicmVsZWFzZSBzZWNvbmRhcnkgbWlub3IgJWRcbiIsIG1pbm9yLT5pbmRleCk7CiAKIAlpZiAobWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCBhZjIxMWEwLi4xNjExYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIGVycl9vdXRfZmlsZXM6CiAJaWYgKGkgPiAwKQogCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZtaW5vci0+a2RldiwgJmRldmljZV9hdHRyc1tpXSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2pdKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogZXJyX291dDoKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBhOWU2MDQ2Li41YmE3OGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMyw3ICszLDEyIEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotaTkxNS15IDo9IGk5MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5vIGk5MTVfbWVtLm8KK2k5MTUteSA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vIGk5MTVfb3ByZWdpb24ubyBcCisgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAorCSAgaTkxNV9nZW0ubyBcCisJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKKwkgIGk5MTVfZ2VtX3Byb2MubyBcCisJICBpOTE1X2dlbV90aWxpbmcubwogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggOWFjNDcyMC4uZGIzNDc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC00MCw0MCArNDAsOTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTkxNV9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+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+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKQEAgLTQ4Niw3ICs1MDYsNyBAQAogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlpZiAoZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCkgeworCQlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKSB7CiAJCQlCRUdJTl9MUF9SSU5HKDIpOwogCQkJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CkBAIC01MTYsNiArNTM2LDkgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKIAorCWlmICghZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCXJldHVybiAtRUlOVkFMOworCiAJRFJNX0RFQlVHKCIlczogcGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLAogCQkgIF9fZnVuY19fLAogCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCkBAIC01MjQsNyArNTQ3LDcgQEAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCUJFR0lOX0xQX1JJTkcoMik7Ci0JT1VUX1JJTkcoSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsKKwlPVVRfUklORyhNSV9GTFVTSCB8IE1JX1JFQURfRkxVU0gpOwogCU9VVF9SSU5HKDApOwogCUFEVkFOQ0VfTFBfUklORygpOwogCkBAIC01NDksOCArNTcyLDggQEAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAogCUJFR0lOX0xQX1JJTkcoNCk7Ci0JT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7Ci0JT1VUX1JJTkcoMjApOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyg1IDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CkBAIC01NzAsOSArNTkzLDE1IEBACiBzdGF0aWMgaW50IGk5MTVfZmx1c2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCWludCByZXQ7CiAKLQlyZXR1cm4gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9iYXRjaGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNTkzLDE2ICs2MjIsMTkgQEAKIAlEUk1fREVCVUcoImk5MTUgYmF0Y2hidWZmZXIsIHN0YXJ0ICV4IHVzZWQgJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGJhdGNoLT5zdGFydCwgYmF0Y2gtPnVzZWQsIGJhdGNoLT5udW1fY2xpcHJlY3RzKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzICYmIERSTV9WRVJJRllBUkVBX1JFQUQoYmF0Y2gtPmNsaXByZWN0cywKIAkJCQkJCSAgICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCiAJCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CisJaWYgKHNhcmVhX3ByaXYpCisJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MTksNyArNjUxLDcgQEAKIAlEUk1fREVCVUcoImk5MTUgY21kYnVmZmVyLCBidWYgJXAgc3ogJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGNtZGJ1Zi0+YnVmLCBjbWRidWYtPnN6LCBjbWRidWYtPm51bV9jbGlwcmVjdHMpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoY21kYnVmLT5udW1fY2xpcHJlY3RzICYmCiAJICAgIERSTV9WRVJJRllBUkVBX1JFQUQoY21kYnVmLT5jbGlwcmVjdHMsCkBAIC02MjksMjQgKzY2MSwzMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0ID0gaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlciBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKKwlpZiAoc2FyZWFfcHJpdikKKwkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk5MTVfZmxpcF9idWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogeworCWludCByZXQ7CisKIAlEUk1fREVCVUcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCXJldHVybiBpOTE1X2Rpc3BhdGNoX2ZsaXAoZGV2KTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9kaXNwYXRjaF9mbGlwKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGk5MTVfZ2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTY2Myw3ICs3MDQsNyBAQAogCiAJc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsKIAljYXNlIEk5MTVfUEFSQU1fSVJRX0FDVElWRToKLQkJdmFsdWUgPSBkZXYtPmlycSA/IDEgOiAwOworCQl2YWx1ZSA9IGRldi0+cGRldi0+aXJxID8gMSA6IDA7CiAJCWJyZWFrOwogCWNhc2UgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUjoKIAkJdmFsdWUgPSBkZXZfcHJpdi0+YWxsb3dfYmF0Y2hidWZmZXIgPyAxIDogMDsKQEAgLTY3MSw2ICs3MTIsMTIgQEAKIAljYXNlIEk5MTVfUEFSQU1fTEFTVF9ESVNQQVRDSDoKIAkJdmFsdWUgPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwogCQlicmVhazsKKwljYXNlIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRDoKKwkJdmFsdWUgPSBkZXYtPnBjaV9kZXZpY2U7CisJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNfR0VNOgorCQl2YWx1ZSA9IDE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigiVW5rbm93biBwYXJhbWV0ZXIgJWRcbiIsIHBhcmFtLT5wYXJhbSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjk3LDggKzc0NCw2IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgSTkxNV9TRVRQQVJBTV9VU0VfTUlfQkFUQ0hCVUZGRVJfU1RBUlQ6Ci0JCWlmICghSVNfSTk2NUcoZGV2KSkKLQkJCWRldl9wcml2LT51c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQgPSBwYXJhbS0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgSTkxNV9TRVRQQVJBTV9URVhfTFJVX0xPR19HUkFOVUxBUklUWToKIAkJZGV2X3ByaXYtPnRleF9scnVfbG9nX2dyYW51bGFyaXR5ID0gcGFyYW0tPnZhbHVlOwpAQCAtNzQ5LDggKzc5NCw4IEBACiAJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gZGV2X3ByaXYtPmh3c19tYXAuaGFuZGxlOwogCiAJbWVtc2V0KGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwgMCwgUEFHRV9TSVpFKTsKLQlJOTE1X1dSSVRFKDB4MDIwODAsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwotCURSTV9ERUJVRygibG9hZCBod3MgMHgyMDgwIHdpdGggZ2Z4IG1lbSAweCV4XG4iLAorCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CisJRFJNX0RFQlVHKCJsb2FkIGh3cyBIV1NfUEdBIHdpdGggZ2Z4IG1lbSAweCV4XG4iLAogCQkJZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CiAJRFJNX0RFQlVHKCJsb2FkIGh3cyBhdCAlcFxuIiwgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKTsKIAlyZXR1cm4gMDsKQEAgLTc3NiwxNCArODIxLDM4IEBACiAJbWVtc2V0KGRldl9wcml2LCAwLCBzaXplb2YoZHJtX2k5MTVfcHJpdmF0ZV90KSk7CiAKIAlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKKwlkZXZfcHJpdi0+ZGV2ID0gZGV2OwogCiAJLyogQWRkIHJlZ2lzdGVyIG1hcCAobmVlZGVkIGZvciBzdXNwZW5kL3Jlc3VtZSkgKi8KIAliYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIG1taW9fYmFyKTsKIAlzaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCBtbWlvX2Jhcik7CiAKLQlyZXQgPSBkcm1fYWRkbWFwKGRldiwgYmFzZSwgc2l6ZSwgX0RSTV9SRUdJU1RFUlMsCi0JCQkgX0RSTV9LRVJORUwgfCBfRFJNX0RSSVZFUiwKLQkJCSAmZGV2X3ByaXYtPm1taW9fbWFwKTsKKwlkZXZfcHJpdi0+cmVncyA9IGlvcmVtYXAoYmFzZSwgc2l6ZSk7CisKKwlpOTE1X2dlbV9sb2FkKGRldik7CisKKwkvKiBJbml0IEhXUyAqLworCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgeworCQlyZXQgPSBpOTE1X2luaXRfcGh5c19od3MoZGV2KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBPbiB0aGUgOTQ1Ry9HTSwgdGhlIGNoaXBzZXQgcmVwb3J0cyB0aGUgTVNJIGNhcGFiaWxpdHkgb24gdGhlCisJICogaW50ZWdyYXRlZCBncmFwaGljcyBldmVuIHRob3VnaCB0aGUgc3VwcG9ydCBpc24ndCBhY3R1YWxseSB0aGVyZQorCSAqIGFjY29yZGluZyB0byB0aGUgcHVibGlzaGVkIHNwZWNzLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gZnVuY3Rpb24KKwkgKiBjb3JyZWN0bHkgaW4gdGVzdGluZyBvbiA5NDVHLgorCSAqIFRoaXMgbWF5IGJlIGEgc2lkZSBlZmZlY3Qgb2YgTVNJIGhhdmluZyBiZWVuIG1hZGUgYXZhaWxhYmxlIGZvciBQRUcKKwkgKiBhbmQgdGhlIHJlZ2lzdGVycyBiZWluZyBjbG9zZWx5IGFzc29jaWF0ZWQuCisJICovCisJaWYgKCFJU19JOTQ1RyhkZXYpICYmICFJU19JOTQ1R00oZGV2KSkKKwkJaWYgKHBjaV9lbmFibGVfbXNpKGRldi0+cGRldikpCisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgTVNJXG4iKTsKKworCWludGVsX29wcmVnaW9uX2luaXQoZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jayk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03OTEsOCArODYwLDE1IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChkZXZfcHJpdi0+bW1pb19tYXApCi0JCWRybV9ybW1hcChkZXYsIGRldl9wcml2LT5tbWlvX21hcCk7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCXBjaV9kaXNhYmxlX21zaShkZXYtPnBkZXYpOworCisJaTkxNV9mcmVlX2h3cyhkZXYpOworCisJaWYgKGRldl9wcml2LT5yZWdzICE9IE5VTEwpCisJCWlvdW5tYXAoZGV2X3ByaXYtPnJlZ3MpOworCisJaW50ZWxfb3ByZWdpb25fZnJlZShkZXYpOwogCiAJZHJtX2ZyZWUoZGV2LT5kZXZfcHJpdmF0ZSwgc2l6ZW9mKGRybV9pOTE1X3ByaXZhdGVfdCksCiAJCSBEUk1fTUVNX0RSSVZFUik7CkBAIC04MDAsNiArODc2LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBpOTE1X2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmk5MTVfZmlsZV9wcml2OworCisJRFJNX0RFQlVHKCJcbiIpOworCWk5MTVfZmlsZV9wcml2ID0gKHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKikKKwkgICAgZHJtX2FsbG9jKHNpemVvZigqaTkxNV9maWxlX3ByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKKworCWlmICghaTkxNV9maWxlX3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZmlsZV9wcml2LT5kcml2ZXJfcHJpdiA9IGk5MTVfZmlsZV9wcml2OworCisJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3NlcW5vID0gMDsKKwlpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fdGhyb3R0bGVfc2Vxbm8gPSAwOworCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgaTkxNV9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtODA3LDYgKzkwMiw4IEBACiAJaWYgKCFkZXZfcHJpdikKIAkJcmV0dXJuOwogCisJaTkxNV9nZW1fbGFzdGNsb3NlKGRldik7CisKIAlpZiAoZGV2X3ByaXYtPmFncF9oZWFwKQogCQlpOTE1X21lbV90YWtlZG93bigmKGRldl9wcml2LT5hZ3BfaGVhcCkpOwogCkBAIC04MTksNiArOTE2LDEzIEBACiAJaTkxNV9tZW1fcmVsZWFzZShkZXYsIGZpbGVfcHJpdiwgZGV2X3ByaXYtPmFncF9oZWFwKTsKIH0KIAordm9pZCBpOTE1X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCisJZHJtX2ZyZWUoaTkxNV9maWxlX3ByaXYsIHNpemVvZigqaTkxNV9maWxlX3ByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKK30KKwogc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW10gPSB7CiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9JTklULCBpOTE1X2RtYV9pbml0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfRkxVU0gsIGk5MTVfZmx1c2hfaW9jdGwsIERSTV9BVVRIKSwKQEAgLTgzNiw3ICs5NDAsMjMgQEAKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X1NFVF9WQkxBTktfUElQRSwgIGk5MTVfdmJsYW5rX3BpcGVfc2V0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkgKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFVF9WQkxBTktfUElQRSwgIGk5MTVfdmJsYW5rX3BpcGVfZ2V0LCBEUk1fQVVUSCApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGk5MTVfdmJsYW5rX3N3YXAsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9JOTE1X0hXU19BRERSLCBpOTE1X3NldF9zdGF0dXNfcGFnZSwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfSFdTX0FERFIsIGk5MTVfc2V0X3N0YXR1c19wYWdlLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0lOSVQsIGk5MTVfZ2VtX2luaXRfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUiwgaTkxNV9nZW1fZXhlY2J1ZmZlciwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1BJTiwgaTkxNV9nZW1fcGluX2lvY3RsLCBEUk1fQVVUSHxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9VTlBJTiwgaTkxNV9nZW1fdW5waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0JVU1ksIGk5MTVfZ2VtX2J1c3lfaW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9USFJPVFRMRSwgaTkxNV9nZW1fdGhyb3R0bGVfaW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FTlRFUlZULCBpOTE1X2dlbV9lbnRlcnZ0X2lvY3RsLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0xFQVZFVlQsIGk5MTVfZ2VtX2xlYXZldnRfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fQ1JFQVRFLCBpOTE1X2dlbV9jcmVhdGVfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1BSRUFELCBpOTE1X2dlbV9wcmVhZF9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUFdSSVRFLCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX01NQVAsIGk5MTVfZ2VtX21tYXBfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4sIGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NXX0ZJTklTSCwgaTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9TRVRfVElMSU5HLCBpOTE1X2dlbV9zZXRfdGlsaW5nLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9HRVRfVElMSU5HLCBpOTE1X2dlbV9nZXRfdGlsaW5nLCAwKSwKIH07CiAKIGludCBpOTE1X21heF9pb2N0bCA9IERSTV9BUlJBWV9TSVpFKGk5MTVfaW9jdGxzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDkzYWVkMWMuLmE4MGVhZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMzgsMjExICszOCw5IEBACiAJaTkxNV9QQ0lfSURTCiB9OwogCi1lbnVtIHBpcGUgewotICAgIFBJUEVfQSA9IDAsCi0gICAgUElQRV9CLAotfTsKLQotc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChwaXBlID09IFBJUEVfQSkKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9BKSAmIERQTExfVkNPX0VOQUJMRSk7Ci0JZWxzZQotCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0IpICYgRFBMTF9WQ09fRU5BQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV9zYXZlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7Ci0JdTMyICphcnJheTsKLQlpbnQgaTsKLQotCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKLQkJcmV0dXJuOwotCi0JaWYgKHBpcGUgPT0gUElQRV9BKQotCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKLQllbHNlCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOwotCi0JZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JCWFycmF5W2ldID0gSTkxNV9SRUFEKHJlZyArIChpIDw8IDIpKTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7Ci0JdTMyICphcnJheTsKLQlpbnQgaTsKLQotCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKLQkJcmV0dXJuOwotCi0JaWYgKHBpcGUgPT0gUElQRV9BKQotCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKLQllbHNlCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOwotCi0JZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JCUk5MTVfV1JJVEUocmVnICsgKGkgPDwgMiksIGFycmF5W2ldKTsKLX0KLQotc3RhdGljIHU4IGk5MTVfcmVhZF9pbmRleGVkKHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcpCi17Ci0Jb3V0YihyZWcsIGluZGV4X3BvcnQpOwotCXJldHVybiBpbmIoZGF0YV9wb3J0KTsKLX0KLQotc3RhdGljIHU4IGk5MTVfcmVhZF9hcih1MTYgc3QwMSwgdTggcmVnLCB1MTYgcGFsZXR0ZV9lbmFibGUpCi17Ci0JaW5iKHN0MDEpOwotCW91dGIocGFsZXR0ZV9lbmFibGUgfCByZWcsIFZHQV9BUl9JTkRFWCk7Ci0JcmV0dXJuIGluYihWR0FfQVJfREFUQV9SRUFEKTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV93cml0ZV9hcih1OCBzdDAxLCB1OCByZWcsIHU4IHZhbCwgdTE2IHBhbGV0dGVfZW5hYmxlKQotewotCWluYihzdDAxKTsKLQlvdXRiKHBhbGV0dGVfZW5hYmxlIHwgcmVnLCBWR0FfQVJfSU5ERVgpOwotCW91dGIodmFsLCBWR0FfQVJfREFUQV9XUklURSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfd3JpdGVfaW5kZXhlZCh1MTYgaW5kZXhfcG9ydCwgdTE2IGRhdGFfcG9ydCwgdTggcmVnLCB1OCB2YWwpCi17Ci0Jb3V0YihyZWcsIGluZGV4X3BvcnQpOwotCW91dGIodmFsLCBkYXRhX3BvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3NhdmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgaTsKLQl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7Ci0KLQkvKiBWR0EgY29sb3IgcGFsZXR0ZSByZWdpc3RlcnMgKi8KLQlkZXZfcHJpdi0+c2F2ZURBQ01BU0sgPSBpbmIoVkdBX0RBQ01BU0spOwotCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KLQlvdXRiKDAsIFZHQV9EQUNSWCk7Ci0JLyogUmVhZCAzIGJ5dGVzIG9mIGNvbG9yIGRhdGEgZnJvbSBlYWNoIGluZGV4ICovCi0JZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVEQUNEQVRBW2ldID0gaW5iKFZHQV9EQUNEQVRBKTsKLQotCS8qIE1TUiBiaXRzICovCi0JZGV2X3ByaXYtPnNhdmVNU1IgPSBpbmIoVkdBX01TUl9SRUFEKTsKLQlpZiAoZGV2X3ByaXYtPnNhdmVNU1IgJiBWR0FfTVNSX0NHQV9NT0RFKSB7Ci0JCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX0NHQTsKLQkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX0NHQTsKLQkJc3QwMSA9IFZHQV9TVDAxX0NHQTsKLQl9IGVsc2UgewotCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9NREE7Ci0JCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9NREE7Ci0JCXN0MDEgPSBWR0FfU1QwMV9NREE7Ci0JfQotCi0JLyogQ1JUIGNvbnRyb2xsZXIgcmVncyAqLwotCWk5MTVfd3JpdGVfaW5kZXhlZChjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSwKLQkJCSAgIGk5MTVfcmVhZF9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCAweDExKSAmCi0JCQkgICAofjB4ODApKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MjQ7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVDUltpXSA9Ci0JCQlpOTE1X3JlYWRfaW5kZXhlZChjcl9pbmRleCwgY3JfZGF0YSwgaSk7Ci0JLyogTWFrZSBzdXJlIHdlIGRvbid0IHR1cm4gb2ZmIENSIGdyb3VwIDAgd3JpdGVzICovCi0JZGV2X3ByaXYtPnNhdmVDUlsweDExXSAmPSB+MHg4MDsKLQotCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwotCWluYihzdDAxKTsKLQlkZXZfcHJpdi0+c2F2ZUFSX0lOREVYID0gaW5iKFZHQV9BUl9JTkRFWCk7Ci0JZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCi0JCWRldl9wcml2LT5zYXZlQVJbaV0gPSBpOTE1X3JlYWRfYXIoc3QwMSwgaSwgMCk7Ci0JaW5iKHN0MDEpOwotCW91dGIoZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCwgVkdBX0FSX0lOREVYKTsKLQlpbmIoc3QwMSk7Ci0KLQkvKiBHcmFwaGljcyBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCi0JCWRldl9wcml2LT5zYXZlR1JbaV0gPQotCQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgaSk7Ci0KLQlkZXZfcHJpdi0+c2F2ZUdSWzB4MTBdID0KLQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCk7Ci0JZGV2X3ByaXYtPnNhdmVHUlsweDExXSA9Ci0JCWk5MTVfcmVhZF9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTEpOwotCWRldl9wcml2LT5zYXZlR1JbMHgxOF0gPQotCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4KTsKLQotCS8qIFNlcXVlbmNlciByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZVNSW2ldID0KLQkJCWk5MTVfcmVhZF9pbmRleGVkKFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGkpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgaTsKLQl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7Ci0KLQkvKiBNU1IgYml0cyAqLwotCW91dGIoZGV2X3ByaXYtPnNhdmVNU1IsIFZHQV9NU1JfV1JJVEUpOwotCWlmIChkZXZfcHJpdi0+c2F2ZU1TUiAmIFZHQV9NU1JfQ0dBX01PREUpIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfQ0dBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfQ0dBOwotCQlzdDAxID0gVkdBX1NUMDFfQ0dBOwotCX0gZWxzZSB7Ci0JCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX01EQTsKLQkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX01EQTsKLQkJc3QwMSA9IFZHQV9TVDAxX01EQTsKLQl9Ci0KLQkvKiBTZXF1ZW5jZXIgcmVnaXN0ZXJzLCBkb24ndCB3cml0ZSBTUjA3ICovCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLQkJaTkxNV93cml0ZV9pbmRleGVkKFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGksCi0JCQkJICAgZGV2X3ByaXYtPnNhdmVTUltpXSk7Ci0KLQkvKiBDUlQgY29udHJvbGxlciByZWdzICovCi0JLyogRW5hYmxlIENSIGdyb3VwIDAgd3JpdGVzICovCi0JaTkxNV93cml0ZV9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCAweDExLCBkZXZfcHJpdi0+c2F2ZUNSWzB4MTFdKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MjQ7IGkrKykKLQkJaTkxNV93cml0ZV9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCBpLCBkZXZfcHJpdi0+c2F2ZUNSW2ldKTsKLQotCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVncyAqLwotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCi0JCWk5MTVfd3JpdGVfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpLAotCQkJCSAgIGRldl9wcml2LT5zYXZlR1JbaV0pOwotCi0JaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTAsCi0JCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MTBdKTsKLQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSwKLQkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMV0pOwotCWk5MTVfd3JpdGVfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4LAotCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDE4XSk7Ci0KLQkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KLQlpbmIoc3QwMSk7Ci0JZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCi0JCWk5MTVfd3JpdGVfYXIoc3QwMSwgaSwgZGV2X3ByaXYtPnNhdmVBUltpXSwgMCk7Ci0JaW5iKHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCi0Jb3V0YihkZXZfcHJpdi0+c2F2ZUFSX0lOREVYIHwgMHgyMCwgVkdBX0FSX0lOREVYKTsKLQlpbmIoc3QwMSk7Ci0KLQkvKiBWR0EgY29sb3IgcGFsZXR0ZSByZWdpc3RlcnMgKi8KLQlvdXRiKGRldl9wcml2LT5zYXZlREFDTUFTSywgVkdBX0RBQ01BU0spOwotCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KLQlvdXRiKDAsIFZHQV9EQUNXWCk7Ci0JLyogUmVhZCAzIGJ5dGVzIG9mIGNvbG9yIGRhdGEgZnJvbSBlYWNoIGluZGV4ICovCi0JZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkrKykKLQkJb3V0YihkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0sIFZHQV9EQUNEQVRBKTsKLQotfQotCiBzdGF0aWMgaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgaTsKIAogCWlmICghZGV2IHx8ICFkZXZfcHJpdikgewogCQlwcmludGsoS0VSTl9FUlIgImRldjogJXAsIGRldl9wcml2OiAlcFxuIiwgZGV2LCBkZXZfcHJpdik7CkBAIC0yNTQsMTIyICs1MiwxMCBAQAogCQlyZXR1cm4gMDsKIAogCXBjaV9zYXZlX3N0YXRlKGRldi0+cGRldik7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsICZkZXZfcHJpdi0+c2F2ZUxCQik7CiAKLQkvKiBEaXNwbGF5IGFyYml0cmF0aW9uIGNvbnRyb2wgKi8KLQlkZXZfcHJpdi0+c2F2ZURTUEFSQiA9IEk5MTVfUkVBRChEU1BBUkIpOworCWk5MTVfc2F2ZV9zdGF0ZShkZXYpOwogCi0JLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLwotCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7Ci0JZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7Ci0JZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOwotCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKLQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCA9IEk5MTVfUkVBRChEUExMX0FfTUQpOwotCWRldl9wcml2LT5zYXZlSFRPVEFMX0EgPSBJOTE1X1JFQUQoSFRPVEFMX0EpOwotCWRldl9wcml2LT5zYXZlSEJMQU5LX0EgPSBJOTE1X1JFQUQoSEJMQU5LX0EpOwotCWRldl9wcml2LT5zYXZlSFNZTkNfQSA9IEk5MTVfUkVBRChIU1lOQ19BKTsKLQlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKLQlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKLQlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7Ci0JZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKLQotCWRldl9wcml2LT5zYXZlRFNQQUNOVFIgPSBJOTE1X1JFQUQoRFNQQUNOVFIpOwotCWRldl9wcml2LT5zYXZlRFNQQVNUUklERSA9IEk5MTVfUkVBRChEU1BBU1RSSURFKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEFTSVpFID0gSTkxNV9SRUFEKERTUEFTSVpFKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEFQT1MgPSBJOTE1X1JFQUQoRFNQQVBPUyk7Ci0JZGV2X3ByaXYtPnNhdmVEU1BBQkFTRSA9IEk5MTVfUkVBRChEU1BBQkFTRSk7Ci0JaWYgKElTX0k5NjVHKGRldikpIHsKLQkJZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiA9IEk5MTVfUkVBRChEU1BBU1VSRik7Ci0JCWRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQVRJTEVPRkYpOwotCX0KLQlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7Ci0JZGV2X3ByaXYtPnNhdmVQSVBFQVNUQVQgPSBJOTE1X1JFQUQoSTkxNVJFR19QSVBFQVNUQVQpOwotCi0JLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLwotCWRldl9wcml2LT5zYXZlUElQRUJDT05GID0gSTkxNV9SRUFEKFBJUEVCQ09ORik7Ci0JZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyA9IEk5MTVfUkVBRChQSVBFQlNSQyk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKEZQQjApOwotCWRldl9wcml2LT5zYXZlRlBCMSA9IEk5MTVfUkVBRChGUEIxKTsKLQlkZXZfcHJpdi0+c2F2ZURQTExfQiA9IEk5MTVfUkVBRChEUExMX0IpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCA9IEk5MTVfUkVBRChEUExMX0JfTUQpOwotCWRldl9wcml2LT5zYXZlSFRPVEFMX0IgPSBJOTE1X1JFQUQoSFRPVEFMX0IpOwotCWRldl9wcml2LT5zYXZlSEJMQU5LX0IgPSBJOTE1X1JFQUQoSEJMQU5LX0IpOwotCWRldl9wcml2LT5zYXZlSFNZTkNfQiA9IEk5MTVfUkVBRChIU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CID0gSTkxNV9SRUFEKFZUT1RBTF9CKTsKLQlkZXZfcHJpdi0+c2F2ZVZCTEFOS19CID0gSTkxNV9SRUFEKFZCTEFOS19CKTsKLQlkZXZfcHJpdi0+c2F2ZVZTWU5DX0IgPSBJOTE1X1JFQUQoVlNZTkNfQik7Ci0JZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKLQotCWRldl9wcml2LT5zYXZlRFNQQkNOVFIgPSBJOTE1X1JFQUQoRFNQQkNOVFIpOwotCWRldl9wcml2LT5zYXZlRFNQQlNUUklERSA9IEk5MTVfUkVBRChEU1BCU1RSSURFKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEJTSVpFID0gSTkxNV9SRUFEKERTUEJTSVpFKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEJQT1MgPSBJOTE1X1JFQUQoRFNQQlBPUyk7Ci0JZGV2X3ByaXYtPnNhdmVEU1BCQkFTRSA9IEk5MTVfUkVBRChEU1BCQkFTRSk7Ci0JaWYgKElTX0k5NjVHTShkZXYpIHx8IElTX0lHRF9HTShkZXYpKSB7Ci0JCWRldl9wcml2LT5zYXZlRFNQQlNVUkYgPSBJOTE1X1JFQUQoRFNQQlNVUkYpOwotCQlkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGID0gSTkxNV9SRUFEKERTUEJUSUxFT0ZGKTsKLQl9Ci0JaTkxNV9zYXZlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOwotCWRldl9wcml2LT5zYXZlUElQRUJTVEFUID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUJTVEFUKTsKLQotCS8qIENSVCBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKLQotCS8qIExWRFMgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUFBfQ09OVFJPTCk7Ci0JZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKLQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKLQkJZGV2X3ByaXYtPnNhdmVMVkRTID0gSTkxNV9SRUFEKExWRFMpOwotCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MID0gSTkxNV9SRUFEKFBGSVRfQ09OVFJPTCk7Ci0JZGV2X3ByaXYtPnNhdmVMVkRTUFBfT04gPSBJOTE1X1JFQUQoTFZEU1BQX09OKTsKLQlkZXZfcHJpdi0+c2F2ZUxWRFNQUF9PRkYgPSBJOTE1X1JFQUQoTFZEU1BQX09GRik7Ci0JZGV2X3ByaXYtPnNhdmVQUF9DWUNMRSA9IEk5MTVfUkVBRChQUF9DWUNMRSk7Ci0KLQkvKiBGSVhNRTogc2F2ZSBUViAmIFNEVk8gc3RhdGUgKi8KLQotCS8qIEZCQyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFID0gSTkxNV9SRUFEKEZCQ19DRkJfQkFTRSk7Ci0JZGV2X3ByaXYtPnNhdmVGQkNfTExfQkFTRSA9IEk5MTVfUkVBRChGQkNfTExfQkFTRSk7Ci0JZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MKTsKLQotCS8qIEludGVycnVwdCBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlSUlSID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOwotCWRldl9wcml2LT5zYXZlSUVSID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX0VOQUJMRV9SKTsKLQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJOTE1UkVHX0lOVF9NQVNLX1IpOwotCi0JLyogVkdBIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVWQ0xLX0RJVklTT1JfVkdBMCA9IEk5MTVfUkVBRChWQ0xLX0RJVklTT1JfVkdBMCk7Ci0JZGV2X3ByaXYtPnNhdmVWQ0xLX0RJVklTT1JfVkdBMSA9IEk5MTVfUkVBRChWQ0xLX0RJVklTT1JfVkdBMSk7Ci0JZGV2X3ByaXYtPnNhdmVWQ0xLX1BPU1RfRElWID0gSTkxNV9SRUFEKFZDTEtfUE9TVF9ESVYpOwotCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOwotCi0JLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVEX1NUQVRFID0gSTkxNV9SRUFEKERfU1RBVEUpOwotCWRldl9wcml2LT5zYXZlRFNQQ0xLX0dBVEVfRCA9IEk5MTVfUkVBRChEU1BDTEtfR0FURV9EKTsKLQotCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCA9IEk5MTVfUkVBRChDQUNIRV9NT0RFXzApOwotCi0JLyogTWVtb3J5IEFyYml0cmF0aW9uIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVNSV9BUkJfU1RBVEUgPSBJOTE1X1JFQUQoTUlfQVJCX1NUQVRFKTsKLQotCS8qIFNjcmF0Y2ggc3BhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlkZXZfcHJpdi0+c2F2ZVNXRjBbaV0gPSBJOTE1X1JFQUQoU1dGMCArIChpIDw8IDIpKTsKLQkJZGV2X3ByaXYtPnNhdmVTV0YxW2ldID0gSTkxNV9SRUFEKFNXRjEwICsgKGkgPDwgMikpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZVNXRjJbaV0gPSBJOTE1X1JFQUQoU1dGMzAgKyAoaSA8PCAyKSk7Ci0KLQlpOTE1X3NhdmVfdmdhKGRldik7CisJaW50ZWxfb3ByZWdpb25fZnJlZShkZXYpOwogCiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKIAkJLyogU2h1dCBkb3duIHRoZSBkZXZpY2UgKi8KQEAgLTM4MiwxNTUgKzY4LDE1IEBACiAKIHN0YXRpYyBpbnQgaTkxNV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2LT5wZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkKIAkJcmV0dXJuIC0xOwogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7CiAKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsIGRldl9wcml2LT5zYXZlTEJCKTsKKwlpOTE1X3Jlc3RvcmVfc3RhdGUoZGV2KTsKIAotCUk5MTVfV1JJVEUoRFNQQVJCLCBkZXZfcHJpdi0+c2F2ZURTUEFSQik7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCi0JLyogUHJpbWUgdGhlIGNsb2NrICovCi0JaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCi0JCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKLQkJdWRlbGF5KDE1MCk7Ci0JfQotCUk5MTVfV1JJVEUoRlBBMCwgZGV2X3ByaXYtPnNhdmVGUEEwKTsKLQlJOTE1X1dSSVRFKEZQQTEsIGRldl9wcml2LT5zYXZlRlBBMSk7Ci0JLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKLQl1ZGVsYXkoMTUwKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJSTkxNV9XUklURShEUExMX0FfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9BX01EKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIFJlc3RvcmUgbW9kZSAqLwotCUk5MTVfV1JJVEUoSFRPVEFMX0EsIGRldl9wcml2LT5zYXZlSFRPVEFMX0EpOwotCUk5MTVfV1JJVEUoSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlSEJMQU5LX0EpOwotCUk5MTVfV1JJVEUoSFNZTkNfQSwgZGV2X3ByaXYtPnNhdmVIU1lOQ19BKTsKLQlJOTE1X1dSSVRFKFZUT1RBTF9BLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BKTsKLQlJOTE1X1dSSVRFKFZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19BKTsKLQlJOTE1X1dSSVRFKFZTWU5DX0EsIGRldl9wcml2LT5zYXZlVlNZTkNfQSk7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0EsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9BKTsKLQotCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwotCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOwotCUk5MTVfV1JJVEUoRFNQQVBPUywgZGV2X3ByaXYtPnNhdmVEU1BBUE9TKTsKLQlJOTE1X1dSSVRFKFBJUEVBU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDKTsKLQlJOTE1X1dSSVRFKERTUEFCQVNFLCBkZXZfcHJpdi0+c2F2ZURTUEFCQVNFKTsKLQlJOTE1X1dSSVRFKERTUEFTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQVNUUklERSk7Ci0JaWYgKElTX0k5NjVHKGRldikpIHsKLQkJSTkxNV9XUklURShEU1BBU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BBU1VSRik7Ci0JCUk5MTVfV1JJVEUoRFNQQVRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYpOwotCX0KLQotCUk5MTVfV1JJVEUoUElQRUFDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVBQ09ORik7Ci0KLQlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7Ci0JLyogRW5hYmxlIHRoZSBwbGFuZSAqLwotCUk5MTVfV1JJVEUoRFNQQUNOVFIsIGRldl9wcml2LT5zYXZlRFNQQUNOVFIpOwotCUk5MTVfV1JJVEUoRFNQQUJBU0UsIEk5MTVfUkVBRChEU1BBQkFTRSkpOwotCi0JLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLwotCWlmIChkZXZfcHJpdi0+c2F2ZURQTExfQiAmIERQTExfVkNPX0VOQUJMRSkgewotCQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IgJgotCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7Ci0JCXVkZWxheSgxNTApOwotCX0KLQlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7Ci0JSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOwotCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQik7Ci0JdWRlbGF5KDE1MCk7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCUk5MTVfV1JJVEUoRFBMTF9CX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCk7Ci0JdWRlbGF5KDE1MCk7Ci0KLQkvKiBSZXN0b3JlIG1vZGUgKi8KLQlJOTE1X1dSSVRFKEhUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CKTsKLQlJOTE1X1dSSVRFKEhCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZUhCTEFOS19CKTsKLQlJOTE1X1dSSVRFKEhTWU5DX0IsIGRldl9wcml2LT5zYXZlSFNZTkNfQik7Ci0JSTkxNV9XUklURShWVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQik7Ci0JSTkxNV9XUklURShWQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQik7Ci0JSTkxNV9XUklURShWU1lOQ19CLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0IpOwotCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7Ci0KLQkvKiBSZXN0b3JlIHBsYW5lIGluZm8gKi8KLQlJOTE1X1dSSVRFKERTUEJTSVpFLCBkZXZfcHJpdi0+c2F2ZURTUEJTSVpFKTsKLQlJOTE1X1dSSVRFKERTUEJQT1MsIGRldl9wcml2LT5zYXZlRFNQQlBPUyk7Ci0JSTkxNV9XUklURShQSVBFQlNSQywgZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyk7Ci0JSTkxNV9XUklURShEU1BCQkFTRSwgZGV2X3ByaXYtPnNhdmVEU1BCQkFTRSk7Ci0JSTkxNV9XUklURShEU1BCU1RSSURFLCBkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUpOwotCWlmIChJU19JOTY1RyhkZXYpKSB7Ci0JCUk5MTVfV1JJVEUoRFNQQlNVUkYsIGRldl9wcml2LT5zYXZlRFNQQlNVUkYpOwotCQlJOTE1X1dSSVRFKERTUEJUSUxFT0ZGLCBkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGKTsKLQl9Ci0KLQlJOTE1X1dSSVRFKFBJUEVCQ09ORiwgZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYpOwotCi0JaTkxNV9yZXN0b3JlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOwotCS8qIEVuYWJsZSB0aGUgcGxhbmUgKi8KLQlJOTE1X1dSSVRFKERTUEJDTlRSLCBkZXZfcHJpdi0+c2F2ZURTUEJDTlRSKTsKLQlJOTE1X1dSSVRFKERTUEJCQVNFLCBJOTE1X1JFQUQoRFNQQkJBU0UpKTsKLQotCS8qIENSVCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKLQotCS8qIExWRFMgc3RhdGUgKi8KLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKLQkJSTkxNV9XUklURShMVkRTLCBkZXZfcHJpdi0+c2F2ZUxWRFMpOwotCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCi0JCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7Ci0KLQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOwotCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOwotCUk5MTVfV1JJVEUoTFZEU1BQX09OLCBkZXZfcHJpdi0+c2F2ZUxWRFNQUF9PTik7Ci0JSTkxNV9XUklURShMVkRTUFBfT0ZGLCBkZXZfcHJpdi0+c2F2ZUxWRFNQUF9PRkYpOwotCUk5MTVfV1JJVEUoUFBfQ1lDTEUsIGRldl9wcml2LT5zYXZlUFBfQ1lDTEUpOwotCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKLQotCS8qIEZJWE1FOiByZXN0b3JlIFRWICYgU0RWTyBzdGF0ZSAqLwotCi0JLyogRkJDIGluZm8gKi8KLQlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOwotCUk5MTVfV1JJVEUoRkJDX0xMX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UpOwotCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wyLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMik7Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7Ci0KLQkvKiBWR0Egc3RhdGUgKi8KLQlJOTE1X1dSSVRFKFZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKLQlJOTE1X1dSSVRFKFZDTEtfRElWSVNPUl9WR0EwLCBkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0EwKTsKLQlJOTE1X1dSSVRFKFZDTEtfRElWSVNPUl9WR0ExLCBkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0ExKTsKLQlJOTE1X1dSSVRFKFZDTEtfUE9TVF9ESVYsIGRldl9wcml2LT5zYXZlVkNMS19QT1NUX0RJVik7Ci0JdWRlbGF5KDE1MCk7Ci0KLQkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChEX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZURfU1RBVEUpOwotCUk5MTVfV1JJVEUgKERTUENMS19HQVRFX0QsIGRldl9wcml2LT5zYXZlRFNQQ0xLX0dBVEVfRCk7Ci0KLQkvKiBDYWNoZSBtb2RlIHN0YXRlICovCi0JSTkxNV9XUklURSAoQ0FDSEVfTU9ERV8wLCBkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCB8IDB4ZmZmZjAwMDApOwotCi0JLyogTWVtb3J5IGFyYml0cmF0aW9uIHN0YXRlICovCi0JSTkxNV9XUklURSAoTUlfQVJCX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSB8IDB4ZmZmZjAwMDApOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJSTkxNV9XUklURShTV0YwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMFtpXSk7Ci0JCUk5MTVfV1JJVEUoU1dGMTAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YxW2krN10pOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlJOTE1X1dSSVRFKFNXRjMwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMltpXSk7Ci0KLQlpOTE1X3Jlc3RvcmVfdmdhKGRldik7CisJaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDEsMTcgKzg3LDE5IEBACiAJICovCiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1JFUVVJUkVfQUdQIHwgLyogRFJJVkVSX1VTRV9NVFJSIHwqLwotCSAgICBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8IERSSVZFUl9JUlFfVkJMIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwyLAorCSAgICBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8IERSSVZFUl9HRU0sCiAJLmxvYWQgPSBpOTE1X2RyaXZlcl9sb2FkLAogCS51bmxvYWQgPSBpOTE1X2RyaXZlcl91bmxvYWQsCisJLm9wZW4gPSBpOTE1X2RyaXZlcl9vcGVuLAogCS5sYXN0Y2xvc2UgPSBpOTE1X2RyaXZlcl9sYXN0Y2xvc2UsCiAJLnByZWNsb3NlID0gaTkxNV9kcml2ZXJfcHJlY2xvc2UsCisJLnBvc3RjbG9zZSA9IGk5MTVfZHJpdmVyX3Bvc3RjbG9zZSwKIAkuc3VzcGVuZCA9IGk5MTVfc3VzcGVuZCwKIAkucmVzdW1lID0gaTkxNV9yZXN1bWUsCiAJLmRldmljZV9pc19hZ3AgPSBpOTE1X2RyaXZlcl9kZXZpY2VfaXNfYWdwLAotCS52Ymxhbmtfd2FpdCA9IGk5MTVfZHJpdmVyX3ZibGFua193YWl0LAotCS52Ymxhbmtfd2FpdDIgPSBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdDIsCisJLmdldF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gaTkxNV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGk5MTVfZGlzYWJsZV92YmxhbmssCiAJLmlycV9wcmVpbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IGk5MTVfZHJpdmVyX2lycV91bmluc3RhbGwsCkBAIC01NTksNiArMTA3LDEwIEBACiAJLnJlY2xhaW1fYnVmZmVycyA9IGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycywKIAkuZ2V0X21hcF9vZnMgPSBkcm1fY29yZV9nZXRfbWFwX29mcywKIAkuZ2V0X3JlZ19vZnMgPSBkcm1fY29yZV9nZXRfcmVnX29mcywKKwkucHJvY19pbml0ID0gaTkxNV9nZW1fcHJvY19pbml0LAorCS5wcm9jX2NsZWFudXAgPSBpOTE1X2dlbV9wcm9jX2NsZWFudXAsCisJLmdlbV9pbml0X29iamVjdCA9IGk5MTVfZ2VtX2luaXRfb2JqZWN0LAorCS5nZW1fZnJlZV9vYmplY3QgPSBpOTE1X2dlbV9mcmVlX29iamVjdCwKIAkuaW9jdGxzID0gaTkxNV9pb2N0bHMsCiAJLmZvcHMgPSB7CiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGQ3MzI2ZDkuLmVhZTRlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMzAsNiArMzAsOCBAQAogI2lmbmRlZiBfSTkxNV9EUlZfSF8KICNkZWZpbmUgX0k5MTVfRFJWX0hfCiAKKyNpbmNsdWRlICJpOTE1X3JlZy5oIgorCiAvKiBHZW5lcmFsIGN1c3RvbWl6YXRpb246CiAgKi8KIApAQCAtMzcsNyArMzksMTIgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJImk5MTUiCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiSW50ZWwgR3JhcGhpY3MiCi0jZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAwNjAxMTkiCisjZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAwODA3MzAiCisKK2VudW0gcGlwZSB7CisJUElQRV9BID0gMCwKKwlQSVBFX0IsCit9OwogCiAvKiBJbnRlcmZhY2UgaGlzdG9yeToKICAqCkBAIC01MywxNiArNjAsMjMgQEAKICNkZWZpbmUgRFJJVkVSX01JTk9SCQk2CiAjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTAKIAorI2RlZmluZSBXQVRDSF9DT0hFUkVOQ1kJMAorI2RlZmluZSBXQVRDSF9CVUYJMAorI2RlZmluZSBXQVRDSF9FWEVDCTAKKyNkZWZpbmUgV0FUQ0hfTFJVCTAKKyNkZWZpbmUgV0FUQ0hfUkVMT0MJMAorI2RlZmluZSBXQVRDSF9JTkFDVElWRQkwCisjZGVmaW5lIFdBVENIX1BXUklURQkwCisKIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9yaW5nX2J1ZmZlciB7CiAJaW50IHRhaWxfbWFzazsKLQl1bnNpZ25lZCBsb25nIFN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgRW5kOwogCXVuc2lnbmVkIGxvbmcgU2l6ZTsKIAl1OCAqdmlydHVhbF9zdGFydDsKIAlpbnQgaGVhZDsKIAlpbnQgdGFpbDsKIAlpbnQgc3BhY2U7CiAJZHJtX2xvY2FsX21hcF90IG1hcDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnJpbmdfb2JqOwogfSBkcm1faTkxNV9yaW5nX2J1ZmZlcl90OwogCiBzdHJ1Y3QgbWVtX2Jsb2NrIHsKQEAgLTc2LDEzICs5MCwyOCBAQAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3ZibF9zd2FwIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJZHJtX2RyYXdhYmxlX3QgZHJ3X2lkOwotCXVuc2lnbmVkIGludCBwaXBlOworCXVuc2lnbmVkIGludCBwbGFuZTsKIAl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CiB9IGRybV9pOTE1X3ZibF9zd2FwX3Q7CiAKK3N0cnVjdCBvcHJlZ2lvbl9oZWFkZXI7CitzdHJ1Y3Qgb3ByZWdpb25fYWNwaTsKK3N0cnVjdCBvcHJlZ2lvbl9zd3NjaTsKK3N0cnVjdCBvcHJlZ2lvbl9hc2xlOworCitzdHJ1Y3QgaW50ZWxfb3ByZWdpb24geworCXN0cnVjdCBvcHJlZ2lvbl9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3Qgb3ByZWdpb25fYWNwaSAqYWNwaTsKKwlzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgKnN3c2NpOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlOworCWludCBlbmFibGVkOworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCXZvaWQgX19pb21lbSAqcmVnczsKIAlkcm1fbG9jYWxfbWFwX3QgKnNhcmVhOwotCWRybV9sb2NhbF9tYXBfdCAqbW1pb19tYXA7CiAKIAlkcm1faTkxNV9zYXJlYV90ICpzYXJlYV9wcml2OwogCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgcmluZzsKQEAgLTkwLDIwICsxMTksMjUgQEAKIAlkcm1fZG1hX2hhbmRsZV90ICpzdGF0dXNfcGFnZV9kbWFoOwogCXZvaWQgKmh3X3N0YXR1c19wYWdlOwogCWRtYV9hZGRyX3QgZG1hX3N0YXR1c19wYWdlOwotCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKKwl1aW50MzJfdCBjb3VudGVyOwogCXVuc2lnbmVkIGludCBzdGF0dXNfZ2Z4X2FkZHI7CiAJZHJtX2xvY2FsX21hcF90IGh3c19tYXA7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpod3Nfb2JqOwogCiAJdW5zaWduZWQgaW50IGNwcDsKIAlpbnQgYmFja19vZmZzZXQ7CiAJaW50IGZyb250X29mZnNldDsKIAlpbnQgY3VycmVudF9wYWdlOwogCWludCBwYWdlX2ZsaXBwaW5nOwotCWludCB1c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQ7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVldWU7CiAJYXRvbWljX3QgaXJxX3JlY2VpdmVkOwotCWF0b21pY190IGlycV9lbWl0dGVkOworCS8qKiBQcm90ZWN0cyB1c2VyX2lycV9yZWZjb3VudCBhbmQgaXJxX21hc2tfcmVnICovCisJc3BpbmxvY2tfdCB1c2VyX2lycV9sb2NrOworCS8qKiBSZWZjb3VudCBmb3IgaTkxNV91c2VyX2lycV9nZXQoKSB2ZXJzdXMgaTkxNV91c2VyX2lycV9wdXQoKS4gKi8KKwlpbnQgdXNlcl9pcnFfcmVmY291bnQ7CisJLyoqIENhY2hlZCB2YWx1ZSBvZiBJTVIgdG8gYXZvaWQgcmVhZHMgaW4gdXBkYXRpbmcgdGhlIGJpdGZpZWxkICovCisJdTMyIGlycV9tYXNrX3JlZzsKIAogCWludCB0ZXhfbHJ1X2xvZ19ncmFudWxhcml0eTsKIAlpbnQgYWxsb3dfYmF0Y2hidWZmZXI7CkBAIC0xMTUsNiArMTQ5LDggQEAKIAlkcm1faTkxNV92Ymxfc3dhcF90IHZibF9zd2FwczsKIAl1bnNpZ25lZCBpbnQgc3dhcHNfcGVuZGluZzsKIAorCXN0cnVjdCBpbnRlbF9vcHJlZ2lvbiBvcHJlZ2lvbjsKKwogCS8qIFJlZ2lzdGVyIHN0YXRlICovCiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwpAQCAtMTM5LDcgKzE3NSw3IEBACiAJdTMyIHNhdmVEU1BBU1RSSURFOwogCXUzMiBzYXZlRFNQQVNJWkU7CiAJdTMyIHNhdmVEU1BBUE9TOwotCXUzMiBzYXZlRFNQQUJBU0U7CisJdTMyIHNhdmVEU1BBQUREUjsKIAl1MzIgc2F2ZURTUEFTVVJGOwogCXUzMiBzYXZlRFNQQVRJTEVPRkY7CiAJdTMyIHNhdmVQRklUX1BHTV9SQVRJT1M7CkBAIC0xNjAsMjQgKzE5NiwyNCBAQAogCXUzMiBzYXZlRFNQQlNUUklERTsKIAl1MzIgc2F2ZURTUEJTSVpFOwogCXUzMiBzYXZlRFNQQlBPUzsKLQl1MzIgc2F2ZURTUEJCQVNFOworCXUzMiBzYXZlRFNQQkFERFI7CiAJdTMyIHNhdmVEU1BCU1VSRjsKIAl1MzIgc2F2ZURTUEJUSUxFT0ZGOwotCXUzMiBzYXZlVkNMS19ESVZJU09SX1ZHQTA7Ci0JdTMyIHNhdmVWQ0xLX0RJVklTT1JfVkdBMTsKLQl1MzIgc2F2ZVZDTEtfUE9TVF9ESVY7CisJdTMyIHNhdmVWR0EwOworCXUzMiBzYXZlVkdBMTsKKwl1MzIgc2F2ZVZHQV9QRDsKIAl1MzIgc2F2ZVZHQUNOVFJMOwogCXUzMiBzYXZlQURQQTsKIAl1MzIgc2F2ZUxWRFM7Ci0JdTMyIHNhdmVMVkRTUFBfT047Ci0JdTMyIHNhdmVMVkRTUFBfT0ZGOworCXUzMiBzYXZlUFBfT05fREVMQVlTOworCXUzMiBzYXZlUFBfT0ZGX0RFTEFZUzsKIAl1MzIgc2F2ZURWT0E7CiAJdTMyIHNhdmVEVk9COwogCXUzMiBzYXZlRFZPQzsKIAl1MzIgc2F2ZVBQX09OOwogCXUzMiBzYXZlUFBfT0ZGOwogCXUzMiBzYXZlUFBfQ09OVFJPTDsKLQl1MzIgc2F2ZVBQX0NZQ0xFOworCXUzMiBzYXZlUFBfRElWSVNPUjsKIAl1MzIgc2F2ZVBGSVRfQ09OVFJPTDsKIAl1MzIgc2F2ZV9wYWxldHRlX2FbMjU2XTsKIAl1MzIgc2F2ZV9wYWxldHRlX2JbMjU2XTsKQEAgLTE5MCw3ICsyMjYsNyBAQAogCXUzMiBzYXZlSU1SOwogCXUzMiBzYXZlQ0FDSEVfTU9ERV8wOwogCXUzMiBzYXZlRF9TVEFURTsKLQl1MzIgc2F2ZURTUENMS19HQVRFX0Q7CisJdTMyIHNhdmVDR18yRF9ESVM7CiAJdTMyIHNhdmVNSV9BUkJfU1RBVEU7CiAJdTMyIHNhdmVTV0YwWzE2XTsKIAl1MzIgc2F2ZVNXRjFbMTZdOwpAQCAtMjAzLDggKzIzOSwxODAgQEAKIAl1OCBzYXZlREFDTUFTSzsKIAl1OCBzYXZlREFDREFUQVsyNTYqM107IC8qIDI1NiAzLWJ5dGUgY29sb3JzICovCiAJdTggc2F2ZUNSWzM3XTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBkcm1fbW0gZ3R0X3NwYWNlOworCisJCS8qKgorCQkgKiBMaXN0IG9mIG9iamVjdHMgY3VycmVudGx5IGludm9sdmVkIGluIHJlbmRlcmluZyBmcm9tIHRoZQorCQkgKiByaW5nYnVmZmVyLgorCQkgKgorCQkgKiBBIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBidWZmZXIgd2hpbGUgb24gdGhpcyBsaXN0LgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbGlzdDsKKworCQkvKioKKwkJICogTGlzdCBvZiBvYmplY3RzIHdoaWNoIGFyZSBub3QgaW4gdGhlIHJpbmdidWZmZXIgYnV0IHdoaWNoCisJCSAqIHN0aWxsIGhhdmUgYSB3cml0ZV9kb21haW4gd2hpY2ggbmVlZHMgdG8gYmUgZmx1c2hlZCBiZWZvcmUKKwkJICogdW5iaW5kaW5nLgorCQkgKgorCQkgKiBBIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBidWZmZXIgd2hpbGUgb24gdGhpcyBsaXN0LgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBmbHVzaGluZ19saXN0OworCisJCS8qKgorCQkgKiBMUlUgbGlzdCBvZiBvYmplY3RzIHdoaWNoIGFyZSBub3QgaW4gdGhlIHJpbmdidWZmZXIgYW5kCisJCSAqIGFyZSByZWFkeSB0byB1bmJpbmQsIGJ1dCBhcmUgc3RpbGwgaW4gdGhlIEdUVC4KKwkJICoKKwkJICogQSByZWZlcmVuY2UgaXMgbm90IGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QsCisJCSAqIGFzIG1lcmVseSBiZWluZyBHVFQtYm91bmQgc2hvdWxkbid0IHByZXZlbnQgaXRzIGJlaW5nCisJCSAqIGZyZWVkLCBhbmQgd2UnbGwgcHVsbCBpdCBvZmYgdGhlIGxpc3QgaW4gdGhlIGZyZWUgcGF0aC4KKwkJICovCisJCXN0cnVjdCBsaXN0X2hlYWQgaW5hY3RpdmVfbGlzdDsKKworCQkvKioKKwkJICogTGlzdCBvZiBicmVhZGNydW1icyBhc3NvY2lhdGVkIHdpdGggR1BVIHJlcXVlc3RzIGN1cnJlbnRseQorCQkgKiBvdXRzdGFuZGluZy4KKwkJICovCisJCXN0cnVjdCBsaXN0X2hlYWQgcmVxdWVzdF9saXN0OworCisJCS8qKgorCQkgKiBXZSBsZWF2ZSB0aGUgdXNlciBJUlEgb2ZmIGFzIG11Y2ggYXMgcG9zc2libGUsCisJCSAqIGJ1dCB0aGlzIG1lYW5zIHRoYXQgcmVxdWVzdHMgd2lsbCBmaW5pc2ggYW5kIG5ldmVyCisJCSAqIGJlIHJldGlyZWQgb25jZSB0aGUgc3lzdGVtIGdvZXMgaWRsZS4gU2V0IGEgdGltZXIgdG8KKwkJICogZmlyZSBwZXJpb2RpY2FsbHkgd2hpbGUgdGhlIHJpbmcgaXMgcnVubmluZy4gV2hlbiBpdAorCQkgKiBmaXJlcywgZ28gcmV0aXJlIHJlcXVlc3RzLgorCQkgKi8KKwkJc3RydWN0IGRlbGF5ZWRfd29yayByZXRpcmVfd29yazsKKworCQkvKiogV29yayB0YXNrIGZvciB2YmxhbmstcmVsYXRlZCByaW5nIGFjY2VzcyAqLworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdmJsYW5rX3dvcms7CisKKwkJdWludDMyX3QgbmV4dF9nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIFdhaXRpbmcgc2VxdWVuY2UgbnVtYmVyLCBpZiBhbnkKKwkJICovCisJCXVpbnQzMl90IHdhaXRpbmdfZ2VtX3NlcW5vOworCisJCS8qKgorCQkgKiBMYXN0IHNlcSBzZWVuIGF0IGlycSB0aW1lCisJCSAqLworCQl1aW50MzJfdCBpcnFfZ2VtX3NlcW5vOworCisJCS8qKgorCQkgKiBGbGFnIGlmIHRoZSBYIFNlcnZlciwgYW5kIHRodXMgRFJNLCBpcyBub3QgY3VycmVudGx5IGluCisJCSAqIGNvbnRyb2wgb2YgdGhlIGRldmljZS4KKwkJICoKKwkJICogVGhpcyBpcyBzZXQgYmV0d2VlbiBMZWF2ZVZUIGFuZCBFbnRlclZULiAgSXQgbmVlZHMgdG8gYmUKKwkJICogcmVwbGFjZWQgd2l0aCBhIHNlbWFwaG9yZS4gIEl0IGFsc28gbmVlZHMgdG8gYmUKKwkJICogdHJhbnNpdGlvbmVkIGF3YXkgZnJvbSBmb3Iga2VybmVsIG1vZGVzZXR0aW5nLgorCQkgKi8KKwkJaW50IHN1c3BlbmRlZDsKKworCQkvKioKKwkJICogRmxhZyBpZiB0aGUgaGFyZHdhcmUgYXBwZWFycyB0byBiZSB3ZWRnZWQuCisJCSAqCisJCSAqIFRoaXMgaXMgc2V0IHdoZW4gYXR0ZW1wdHMgdG8gaWRsZSB0aGUgZGV2aWNlIHRpbWVvdXQuCisJCSAqIEl0IHByZXZlbnRzIGNvbW1hbmQgc3VibWlzc2lvbiBmcm9tIG9jY3VyaW5nIGFuZCBtYWtlcworCQkgKiBldmVyeSBwZW5kaW5nIHJlcXVlc3QgZmFpbAorCQkgKi8KKwkJaW50IHdlZGdlZDsKKworCQkvKiogQml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBYIHRpbGluZyAqLworCQl1aW50MzJfdCBiaXRfNl9zd2l6emxlX3g7CisJCS8qKiBCaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIFkgdGlsaW5nICovCisJCXVpbnQzMl90IGJpdF82X3N3aXp6bGVfeTsKKwl9IG1tOwogfSBkcm1faTkxNV9wcml2YXRlX3Q7CiAKKy8qKiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXR0YWNoZWQgdG8gZWFjaCBkcm1fZ2VtX29iamVjdCAqLworc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgeworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJLyoqIEN1cnJlbnQgc3BhY2UgYWxsb2NhdGVkIHRvIHRoaXMgb2JqZWN0IGluIHRoZSBHVFQsIGlmIGFueS4gKi8KKwlzdHJ1Y3QgZHJtX21tX25vZGUgKmd0dF9zcGFjZTsKKworCS8qKiBUaGlzIG9iamVjdCdzIHBsYWNlIG9uIHRoZSBhY3RpdmUvZmx1c2hpbmcvaW5hY3RpdmUgbGlzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKioKKwkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGlzIG9uIHRoZSBhY3RpdmUgb3IgZmx1c2hpbmcgbGlzdHMKKwkgKiAoaGFzIHBlbmRpbmcgcmVuZGVyaW5nKSwgYW5kIGlzIG5vdCBzZXQgaWYgaXQncyBvbiBpbmFjdGl2ZSAocmVhZHkKKwkgKiB0byBiZSB1bmJvdW5kKS4KKwkgKi8KKwlpbnQgYWN0aXZlOworCisJLyoqCisJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiB3cml0dGVuIHRvIHNpbmNlIGxhc3QgYm91bmQKKwkgKiB0byB0aGUgR1RUCisJICovCisJaW50IGRpcnR5OworCisJLyoqIEFHUCBtZW1vcnkgc3RydWN0dXJlIGZvciBvdXIgR1RUIGJpbmRpbmcuICovCisJRFJNX0FHUF9NRU0gKmFncF9tZW07CisKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdDsKKworCS8qKgorCSAqIEN1cnJlbnQgb2Zmc2V0IG9mIHRoZSBvYmplY3QgaW4gR1RUIHNwYWNlLgorCSAqCisJICogVGhpcyBpcyB0aGUgc2FtZSBhcyBndHRfc3BhY2UtPnN0YXJ0CisJICovCisJdWludDMyX3QgZ3R0X29mZnNldDsKKworCS8qKiBCb29sZWFuIHdoZXRoZXIgdGhpcyBvYmplY3QgaGFzIGEgdmFsaWQgZ3R0IG9mZnNldC4gKi8KKwlpbnQgZ3R0X2JvdW5kOworCisJLyoqIEhvdyBtYW55IHVzZXJzIGhhdmUgcGlubmVkIHRoaXMgb2JqZWN0IGluIEdUVCBzcGFjZSAqLworCWludCBwaW5fY291bnQ7CisKKwkvKiogQnJlYWRjcnVtYiBvZiBsYXN0IHJlbmRlcmluZyB0byB0aGUgYnVmZmVyLiAqLworCXVpbnQzMl90IGxhc3RfcmVuZGVyaW5nX3NlcW5vOworCisJLyoqIEN1cnJlbnQgdGlsaW5nIG1vZGUgZm9yIHRoZSBvYmplY3QuICovCisJdWludDMyX3QgdGlsaW5nX21vZGU7CisKKwkvKiogQUdQIG1hcHBpbmcgdHlwZSAoQUdQX1VTRVJfTUVNT1JZIG9yIEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlkgKi8KKwl1aW50MzJfdCBhZ3BfdHlwZTsKKworCS8qKgorCSAqIEZsYWdnaW5nIG9mIHdoaWNoIGluZGl2aWR1YWwgcGFnZXMgYXJlIHZhbGlkIGluIEdFTV9ET01BSU5fQ1BVIHdoZW4KKwkgKiBHRU1fRE9NQUlOX0NQVSBpcyBub3QgaW4gdGhlIG9iamVjdCdzIHJlYWQgZG9tYWluLgorCSAqLworCXVpbnQ4X3QgKnBhZ2VfY3B1X3ZhbGlkOworfTsKKworLyoqCisgKiBSZXF1ZXN0IHF1ZXVlIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgcmVxdWVzdCBxdWV1ZSBhbGxvd3MgdXMgdG8gbm90ZSBzZXF1ZW5jZSBudW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGVtaXR0ZWQKKyAqIGFuZCBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBidWZmZXJzIHRvIGJlIHJldGlyZWQuCisgKgorICogQnkga2VlcGluZyB0aGlzIGxpc3QsIHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gZG8gcXVlc3Rpb25hYmxlCisgKiBzZXF1ZW5jZS1udW1iZXIgY29tcGFyaXNvbnMgb24gYnVmZmVyIGxhc3RfcmVuZGVyaW5nX3NlcW5vcywgYW5kIGFzc29jaWF0ZQorICogYW4gZW1pc3Npb24gdGltZSB3aXRoIHNlcW5vcyBmb3IgdHJhY2tpbmcgaG93IGZhciBhaGVhZCBvZiB0aGUgR1BVIHdlIGFyZS4KKyAqLworc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsKKwkvKiogR0VNIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0LiAqLworCXVpbnQzMl90IHNlcW5vOworCisJLyoqIFRpbWUgYXQgd2hpY2ggdGhpcyByZXF1ZXN0IHdhcyBlbWl0dGVkLCBpbiBqaWZmaWVzLiAqLworCXVuc2lnbmVkIGxvbmcgZW1pdHRlZF9qaWZmaWVzOworCisJLyoqIENhY2hlIGRvbWFpbnMgdGhhdCB3ZXJlIGZsdXNoZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0LiAqLworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlIHsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBsYXN0X2dlbV9zZXFubzsKKwkJdWludDMyX3QgbGFzdF9nZW1fdGhyb3R0bGVfc2Vxbm87CisJfSBtbTsKK307CisKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXTsKIGV4dGVybiBpbnQgaTkxNV9tYXhfaW9jdGw7CiAKQEAgLTIxMiwzMSArNDIwLDQyIEBACiBleHRlcm4gdm9pZCBpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGludCBpOTE1X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJuIGludCBpOTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gaW50IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB2b2lkIGk5MTVfZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X2RyaXZlcl9kZXZpY2VfaXNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiBsb25nIGk5MTVfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcywKKwkJCSBpbnQgaSwgaW50IERSMSwgaW50IERSNCk7CiAKIC8qIGk5MTVfaXJxLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgaTkxNV91c2VyX2lycV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfdXNlcl9pcnFfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotZXh0ZXJuIGludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdDIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdm9pZCBpOTE1X2dlbV92Ymxhbmtfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBleHRlcm4gaXJxcmV0dXJuX3QgaTkxNV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19waXBlX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV92YmxhbmtfcGlwZV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGk5MTVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBpOTE1X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgaTkxNV9lbmFibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKTsKIAogLyogaTkxNV9tZW0uYyAqLwogZXh0ZXJuIGludCBpOTE1X21lbV9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMjUwLDExICs0NjksOTkgQEAKIGV4dGVybiB2b2lkIGk5MTVfbWVtX3Rha2Vkb3duKHN0cnVjdCBtZW1fYmxvY2sgKipoZWFwKTsKIGV4dGVybiB2b2lkIGk5MTVfbWVtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCiAJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKKy8qIGk5MTVfZ2VtLmMgKi8KK2ludCBpOTE1X2dlbV9pbml0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9wcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX21tYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fcGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fdW5waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3Rocm90dGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2VudGVydnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9sZWF2ZXZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2dldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgaTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBpOTE1X2dlbV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwordm9pZCBpOTE1X2dlbV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGk5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCk7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3VpbnQzMl90IGk5MTVfZ2V0X2dlbV9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAotI2RlZmluZSBJOTE1X1JFQUQocmVnKSAgICAgICAgICBEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvX21hcCwgKHJlZykpCi0jZGVmaW5lIEk5MTVfV1JJVEUocmVnLHZhbCkgICAgIERSTV9XUklURTMyKGRldl9wcml2LT5tbWlvX21hcCwgKHJlZyksICh2YWwpKQotI2RlZmluZSBJOTE1X1JFQUQxNihyZWcpCURSTV9SRUFEMTYoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSkKLSNkZWZpbmUgSTkxNV9XUklURTE2KHJlZyx2YWwpCURSTV9XUklURTE2KGRldl9wcml2LT5tbWlvX21hcCwgKHJlZyksICh2YWwpKQorLyogaTkxNV9nZW1fdGlsaW5nLmMgKi8KK3ZvaWQgaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qIGk5MTVfZ2VtX2RlYnVnLmMgKi8KK3ZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKKyNpZiBXQVRDSF9JTkFDVElWRQordm9pZCBpOTE1X3ZlcmlmeV9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CisjZWxzZQorI2RlZmluZSBpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIGZpbGUsIGxpbmUpCisjZW5kaWYKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X2NoZWNrX2NvaGVyZW5jeShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGhhbmRsZSk7Cit2b2lkIGk5MTVfZ2VtX2R1bXBfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAorCQkJICBjb25zdCBjaGFyICp3aGVyZSwgdWludDMyX3QgbWFyayk7Cit2b2lkIGk5MTVfZHVtcF9scnUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqd2hlcmUpOworCisvKiBpOTE1X3N1c3BlbmQuYyAqLworZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9zdXNwZW5kLmMgKi8KK2V4dGVybiBpbnQgaTkxNV9zYXZlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qIGk5MTVfb3ByZWdpb24uYyAqLworZXh0ZXJuIGludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaW50ZWxfb3ByZWdpb25fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9wcmVnaW9uX2FzbGVfaW50cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9wcmVnaW9uX2VuYWJsZV9hc2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKioKKyAqIExvY2sgdGVzdCBmb3Igd2hlbiBpdCdzIGp1c3QgZm9yIHN5bmNocm9uaXphdGlvbiBvZiByaW5nIGFjY2Vzcy4KKyAqCisgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgd2hlbiBHRU0gaXMgaW5pdGlhbGl6ZWQgYXMgbm9ib2R5IGVsc2UKKyAqIGhhcyBhY2Nlc3MgdG8gdGhlIHJpbmcuCisgKi8KKyNkZWZpbmUgUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpIGRvIHsJCQlcCisJaWYgKCgoZHJtX2k5MTVfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZSktPnJpbmcucmluZ19vYmogPT0gTlVMTCkgXAorCQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSTkxNV9SRUFEKHJlZykgICAgICAgICAgcmVhZGwoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURShyZWcsIHZhbCkgICAgIHdyaXRlbCh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykJcmVhZHcoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURTE2KHJlZywgdmFsKQl3cml0ZWwodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1JFQUQ4KHJlZykJCXJlYWRiKGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfV1JJVEU4KHJlZywgdmFsKQl3cml0ZWIodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKQogCiAjZGVmaW5lIEk5MTVfVkVSQk9TRSAwCiAKQEAgLTI4NCw4MTYgKzU5MSwyOSBAQAogCWlmIChJOTE1X1ZFUkJPU0UpIERSTV9ERUJVRygiQURWQU5DRV9MUF9SSU5HICV4XG4iLCBvdXRyaW5nKTsJXAogCWRldl9wcml2LT5yaW5nLnRhaWwgPSBvdXRyaW5nOwkJCQkJXAogCWRldl9wcml2LT5yaW5nLnNwYWNlIC09IG91dGNvdW50ICogNDsJCQkJXAotCUk5MTVfV1JJVEUoTFBfUklORyArIFJJTkdfVEFJTCwgb3V0cmluZyk7CQkJXAorCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCBvdXRyaW5nKTsJCQlcCiB9IHdoaWxlKDApCiAKLWV4dGVybiBpbnQgaTkxNV93YWl0X3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwotCi0vKiBFeHRlbmRlZCBjb25maWcgc3BhY2UgKi8KLSNkZWZpbmUgTEJCIDB4ZjQKLQotLyogVkdBIHN0dWZmICovCi0KLSNkZWZpbmUgVkdBX1NUMDFfTURBIDB4M2JhCi0jZGVmaW5lIFZHQV9TVDAxX0NHQSAweDNkYQotCi0jZGVmaW5lIFZHQV9NU1JfV1JJVEUgMHgzYzIKLSNkZWZpbmUgVkdBX01TUl9SRUFEIDB4M2NjCi0jZGVmaW5lICAgVkdBX01TUl9NRU1fRU4gKDE8PDEpCi0jZGVmaW5lICAgVkdBX01TUl9DR0FfTU9ERSAoMTw8MCkKLQotI2RlZmluZSBWR0FfU1JfSU5ERVggMHgzYzQKLSNkZWZpbmUgVkdBX1NSX0RBVEEgMHgzYzUKLQotI2RlZmluZSBWR0FfQVJfSU5ERVggMHgzYzAKLSNkZWZpbmUgICBWR0FfQVJfVklEX0VOICgxPDw1KQotI2RlZmluZSBWR0FfQVJfREFUQV9XUklURSAweDNjMAotI2RlZmluZSBWR0FfQVJfREFUQV9SRUFEIDB4M2MxCi0KLSNkZWZpbmUgVkdBX0dSX0lOREVYIDB4M2NlCi0jZGVmaW5lIFZHQV9HUl9EQVRBIDB4M2NmCi0vKiBHUjA1ICovCi0jZGVmaW5lICAgVkdBX0dSX01FTV9SRUFEX01PREVfU0hJRlQgMwotI2RlZmluZSAgICAgVkdBX0dSX01FTV9SRUFEX01PREVfUExBTkUgMQotLyogR1IwNiAqLwotI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9NQVNLIDB4YwotI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9TSElGVCAyCi0jZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9BRkZGRiAwCi0jZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9CRkZGRiAxCi0jZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CN0ZGRiAyCi0jZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CRkZGRiAzCi0KLSNkZWZpbmUgVkdBX0RBQ01BU0sgMHgzYzYKLSNkZWZpbmUgVkdBX0RBQ1JYIDB4M2M3Ci0jZGVmaW5lIFZHQV9EQUNXWCAweDNjOAotI2RlZmluZSBWR0FfREFDREFUQSAweDNjOQotCi0jZGVmaW5lIFZHQV9DUl9JTkRFWF9NREEgMHgzYjQKLSNkZWZpbmUgVkdBX0NSX0RBVEFfTURBIDB4M2I1Ci0jZGVmaW5lIFZHQV9DUl9JTkRFWF9DR0EgMHgzZDQKLSNkZWZpbmUgVkdBX0NSX0RBVEFfQ0dBIDB4M2Q1Ci0KLSNkZWZpbmUgR0ZYX09QX1VTRVJfSU5URVJSVVBUCQkoKDA8PDI5KXwoMjw8MjMpKQotI2RlZmluZSBHRlhfT1BfQlJFQUtQT0lOVF9JTlRFUlJVUFQJKCgwPDwyOSl8KDE8PDIzKSkKLSNkZWZpbmUgQ01EX1JFUE9SVF9IRUFECQkJKDc8PDIzKQotI2RlZmluZSBDTURfU1RPUkVfRFdPUkRfSURYCQkoKDB4MjE8PDIzKSB8IDB4MSkKLSNkZWZpbmUgQ01EX09QX0JBVENIX0JVRkZFUiAgKCgweDA8PDI5KXwoMHgzMDw8MjMpfDB4MSkKLQotI2RlZmluZSBJTlNUX1BBUlNFUl9DTElFTlQgICAweDAwMDAwMDAwCi0jZGVmaW5lIElOU1RfT1BfRkxVU0ggICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgSU5TVF9GTFVTSF9NQVBfQ0FDSEUgMHgwMDAwMDAwMQotCi0jZGVmaW5lIEJCMV9TVEFSVF9BRERSX01BU0sgICAofjB4NykKLSNkZWZpbmUgQkIxX1BST1RFQ1RFRCAgICAgICAgICgxPDwwKQotI2RlZmluZSBCQjFfVU5QUk9URUNURUQgICAgICAgKDA8PDApCi0jZGVmaW5lIEJCMl9FTkRfQUREUl9NQVNLICAgICAofjB4NykKLQotLyogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gKi8KLSNkZWZpbmUgRkJDX0NGQl9CQVNFCQkweDAzMjAwIC8qIDRrIHBhZ2UgYWxpZ25lZCAqLwotI2RlZmluZSBGQkNfTExfQkFTRQkJMHgwMzIwNCAvKiA0ayBwYWdlIGFsaWduZWQgKi8KLSNkZWZpbmUgRkJDX0NPTlRST0wJCTB4MDMyMDgKLSNkZWZpbmUgICBGQkNfQ1RMX0VOCQkoMTw8MzEpCi0jZGVmaW5lICAgRkJDX0NUTF9QRVJJT0RJQwkoMTw8MzApCi0jZGVmaW5lICAgRkJDX0NUTF9JTlRFUlZBTF9TSElGVCAoMTYpCi0jZGVmaW5lICAgRkJDX0NUTF9VTkNPTVBSRVNTSUJMRSAoMTw8MTQpCi0jZGVmaW5lICAgRkJDX0NUTF9TVFJJREVfU0hJRlQJKDUpCi0jZGVmaW5lICAgRkJDX0NUTF9GRU5DRU5PCSgxPDwwKQotI2RlZmluZSBGQkNfQ09NTUFORAkJMHgwMzIwYwotI2RlZmluZSAgIEZCQ19DTURfQ09NUFJFU1MJKDE8PDApCi0jZGVmaW5lIEZCQ19TVEFUVVMJCTB4MDMyMTAKLSNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0lORwkoMTw8MzEpCi0jZGVmaW5lICAgRkJDX1NUQVRfQ09NUFJFU1NFRAkoMTw8MzApCi0jZGVmaW5lICAgRkJDX1NUQVRfTU9ESUZJRUQJKDE8PDI5KQotI2RlZmluZSAgIEZCQ19TVEFUX0NVUlJFTlRfTElORQkoMTw8MCkKLSNkZWZpbmUgRkJDX0NPTlRST0wyCQkweDAzMjE0Ci0jZGVmaW5lICAgRkJDX0NUTF9GRU5DRV9EQkwJKDA8PDQpCi0jZGVmaW5lICAgRkJDX0NUTF9JRExFX0lNTQkoMDw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfRlVMTAkoMTw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfTElORQkoMjw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfREVCVUcJKDM8PDIpCi0jZGVmaW5lICAgRkJDX0NUTF9DUFVfRkVOQ0UJKDE8PDEpCi0jZGVmaW5lICAgRkJDX0NUTF9QTEFORUEJKDA8PDApCi0jZGVmaW5lICAgRkJDX0NUTF9QTEFORUIJKDE8PDApCi0jZGVmaW5lIEZCQ19GRU5DRV9PRkYJCTB4MDMyMWIKLQotI2RlZmluZSBGQkNfTExfU0laRQkJKDE1MzYpCi0jZGVmaW5lIEZCQ19MTF9QQUQJCSgzMikKLQotLyogSW50ZXJydXB0IGJpdHM6Ci0gKi8KLSNkZWZpbmUgVVNFUl9JTlRfRkxBRyAgICAoMTw8MSkKLSNkZWZpbmUgVlNZTkNfUElQRUJfRkxBRyAoMTw8NSkKLSNkZWZpbmUgVlNZTkNfUElQRUFfRkxBRyAoMTw8NykKLSNkZWZpbmUgSFdCX09PTV9GTEFHICAgICAoMTw8MTMpIC8qIGJpbm5lciBvdXQgb2YgbWVtb3J5ICovCi0KLSNkZWZpbmUgSTkxNVJFR19IV1NUQU0JCTB4MDIwOTgKLSNkZWZpbmUgSTkxNVJFR19JTlRfSURFTlRJVFlfUgkweDAyMGE0Ci0jZGVmaW5lIEk5MTVSRUdfSU5UX01BU0tfUgkweDAyMGE4Ci0jZGVmaW5lIEk5MTVSRUdfSU5UX0VOQUJMRV9SCTB4MDIwYTAKLQotI2RlZmluZSBJOTE1UkVHX1BJUEVBU1RBVAkweDcwMDI0Ci0jZGVmaW5lIEk5MTVSRUdfUElQRUJTVEFUCTB4NzEwMjQKLQotI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE3KQotI2RlZmluZSBJOTE1X1ZCTEFOS19DTEVBUgkJKDFVTDw8MSkKLQotI2RlZmluZSBTUlhfSU5ERVgJCTB4M2M0Ci0jZGVmaW5lIFNSWF9EQVRBCQkweDNjNQotI2RlZmluZSBTUjAxCQkJMQotI2RlZmluZSBTUjAxX1NDUkVFTl9PRkYJCSgxPDw1KQotCi0jZGVmaW5lIFBQQ1IJCQkweDYxMjA0Ci0jZGVmaW5lIFBQQ1JfT04JCQkoMTw8MCkKLQotI2RlZmluZSBEVk9CCQkJMHg2MTE0MAotI2RlZmluZSBEVk9CX09OCQkJKDE8PDMxKQotI2RlZmluZSBEVk9DCQkJMHg2MTE2MAotI2RlZmluZSBEVk9DX09OCQkJKDE8PDMxKQotI2RlZmluZSBMVkRTCQkJMHg2MTE4MAotI2RlZmluZSBMVkRTX09OCQkJKDE8PDMxKQotCi0jZGVmaW5lIEFEUEEJCQkweDYxMTAwCi0jZGVmaW5lIEFEUEFfRFBNU19NQVNLCQkofigzPDwxMCkpCi0jZGVmaW5lIEFEUEFfRFBNU19PTgkJKDA8PDEwKQotI2RlZmluZSBBRFBBX0RQTVNfU1VTUEVORAkoMTw8MTApCi0jZGVmaW5lIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKLSNkZWZpbmUgQURQQV9EUE1TX09GRgkJKDM8PDEwKQotCi0jZGVmaW5lIE5PUElEICAgICAgICAgICAgICAgICAgIDB4MjA5NAotI2RlZmluZSBMUF9SSU5HCQkJMHgyMDMwCi0jZGVmaW5lIEhQX1JJTkcJCQkweDIwNDAKLS8qIFRoZSBiaW5uZXIgaGFzIGl0cyBvd24gcmluZyBidWZmZXI6Ci0gKi8KLSNkZWZpbmUgSFdCX1JJTkcJCTB4MjQwMAotCi0jZGVmaW5lIFJJTkdfVEFJTAkJMHgwMAotI2RlZmluZSBUQUlMX0FERFIJCTB4MDAxRkZGRjgKLSNkZWZpbmUgUklOR19IRUFECQkweDA0Ci0jZGVmaW5lIEhFQURfV1JBUF9DT1VOVAkJMHhGRkUwMDAwMAotI2RlZmluZSBIRUFEX1dSQVBfT05FCQkweDAwMjAwMDAwCi0jZGVmaW5lIEhFQURfQUREUgkJMHgwMDFGRkZGQwotI2RlZmluZSBSSU5HX1NUQVJUCQkweDA4Ci0jZGVmaW5lIFNUQVJUX0FERFIJCTB4MHhGRkZGRjAwMAotI2RlZmluZSBSSU5HX0xFTgkJMHgwQwotI2RlZmluZSBSSU5HX05SX1BBR0VTCQkweDAwMUZGMDAwCi0jZGVmaW5lIFJJTkdfUkVQT1JUX01BU0sJMHgwMDAwMDAwNgotI2RlZmluZSBSSU5HX1JFUE9SVF82NEsJCTB4MDAwMDAwMDIKLSNkZWZpbmUgUklOR19SRVBPUlRfMTI4SwkweDAwMDAwMDA0Ci0jZGVmaW5lIFJJTkdfTk9fUkVQT1JUCQkweDAwMDAwMDAwCi0jZGVmaW5lIFJJTkdfVkFMSURfTUFTSwkJMHgwMDAwMDAwMQotI2RlZmluZSBSSU5HX1ZBTElECQkweDAwMDAwMDAxCi0jZGVmaW5lIFJJTkdfSU5WQUxJRAkJMHgwMDAwMDAwMAotCi0vKiBJbnN0cnVjdGlvbiBwYXJzZXIgZXJyb3IgcmVnOgotICovCi0jZGVmaW5lIElQRUlSCQkJMHgyMDg4Ci0KLS8qIFNjcmF0Y2ggcGFkIGRlYnVnIDAgcmVnOgotICovCi0jZGVmaW5lIFNDUEQwCQkJMHgyMDljCi0KLS8qIEVycm9yIHN0YXR1cyByZWc6Ci0gKi8KLSNkZWZpbmUgRVNSCQkJMHgyMGI4Ci0KLS8qIFNlY29uZGFyeSBETUEgZmV0Y2ggYWRkcmVzcyBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgRE1BX0ZBRERfUwkJMHgyMGQ0Ci0KLS8qIE1lbW9yeSBJbnRlcmZhY2UgQXJiaXRyYXRpb24gU3RhdGUKLSAqLwotI2RlZmluZSBNSV9BUkJfU1RBVEUJCTB4MjBlNAotCi0vKiBDYWNoZSBtb2RlIDAgcmVnLgotICogIC0gTWFuaXB1bGF0aW5nIHJlbmRlciBjYWNoZSBiZWhhdmlvdXIgaXMgY2VudHJhbAotICogICAgdG8gdGhlIGNvbmNlcHQgb2Ygem9uZSByZW5kZXJpbmcsIHR1bmluZyB0aGlzIHJlZyBjYW4gaGVscCBhdm9pZAotICogICAgdW5uZWNlc3NhcnkgcmVuZGVyIGNhY2hlIHJlYWRzIGFuZCBldmVuIHdyaXRlcyAoZm9yIHovc3RlbmNpbCkKLSAqICAgIGF0IGJlZ2lubmluZyBhbmQgZW5kIG9mIHNjZW5lLgorLyoqCisgKiBSZWFkcyBhIGR3b3JkIG91dCBvZiB0aGUgc3RhdHVzIHBhZ2UsIHdoaWNoIGlzIHdyaXR0ZW4gdG8gZnJvbSB0aGUgY29tbWFuZAorICogcXVldWUgYnkgYXV0b21hdGljIHVwZGF0ZXMsIE1JX1JFUE9SVF9IRUFELCBNSV9TVE9SRV9EQVRBX0lOREVYLCBvcgorICogTUlfU1RPUkVfREFUQV9JTU0uCiAgKgotICogLSBUbyBjaGFuZ2UgYSBiaXQsIHdyaXRlIHRvIHRoaXMgcmVnIHdpdGggYSBtYXNrIGJpdCBzZXQgYW5kIHRoZQotICogYml0IG9mIGludGVyZXN0IGVpdGhlciBzZXQgb3IgY2xlYXJlZC4gIEVHOiAoQklUPDwxNikgfCBCSVQgdG8gc2V0LgorICogVGhlIGZvbGxvd2luZyBkd29yZHMgaGF2ZSBhIHJlc2VydmVkIG1lYW5pbmc6CisgKiAweDAwOiBJU1IgY29weSwgdXBkYXRlZCB3aGVuIGFuIElTUiBiaXQgbm90IHNldCBpbiB0aGUgSFdTVEFNIGNoYW5nZXMuCisgKiAweDA0OiByaW5nIDAgaGVhZCBwb2ludGVyCisgKiAweDA1OiByaW5nIDEgaGVhZCBwb2ludGVyICg5MTUtY2xhc3MpCisgKiAweDA2OiByaW5nIDIgaGVhZCBwb2ludGVyICg5MTUtY2xhc3MpCisgKiAweDEwLTB4MWI6IENvbnRleHQgc3RhdHVzIERXb3JkcyAoR000NSkKKyAqIDB4MWY6IExhc3Qgd3JpdHRlbiBzdGF0dXMgb2Zmc2V0LiAoR000NSkKKyAqCisgKiBUaGUgYXJlYSBmcm9tIGR3b3JkIDB4MjAgdG8gMHgzZmYgaXMgYXZhaWxhYmxlIGZvciBkcml2ZXIgdXNhZ2UuCiAgKi8KLSNkZWZpbmUgQ2FjaGVfTW9kZV8wCQkweDIxMjAKLSNkZWZpbmUgQ0FDSEVfTU9ERV8wCQkweDIxMjAKLSNkZWZpbmUgQ00wX01BU0tfU0hJRlQgICAgICAgICAgMTYKLSNkZWZpbmUgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCi0jZGVmaW5lIENNMF9aUl9PUFRfRElTQUJMRSAgICAgICgxPDw1KQotI2RlZmluZSBDTTBfREVQVEhfRVZJQ1RfRElTQUJMRSAoMTw8NCkKLSNkZWZpbmUgQ00wX0NPTE9SX0VWSUNUX0RJU0FCTEUgKDE8PDMpCi0jZGVmaW5lIENNMF9ERVBUSF9XUklURV9ESVNBQkxFICgxPDwxKQotI2RlZmluZSBDTTBfUkNfT1BfRkxVU0hfRElTQUJMRSAoMTw8MCkKLQotCi0vKiBHcmFwaGljcyBmbHVzaCBjb250cm9sLiAgQSBDUFUgd3JpdGUgZmx1c2hlcyB0aGUgR1dCIG9mIGFsbCB3cml0ZXMuCi0gKiBUaGUgZGF0YSBpcyBkaXNjYXJkZWQuCi0gKi8KLSNkZWZpbmUgR0ZYX0ZMU0hfQ05UTAkJMHgyMTcwCi0KLS8qIEJpbm5lciBjb250cm9sLiAgRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGJpbiBwb2ludGVyIGxpc3Q6Ci0gKi8KLSNkZWZpbmUgQklOQ1RMCQkJMHgyNDIwCi0jZGVmaW5lIEJDX01BU0sJCQkoMSA8PCA5KQotCi0vKiBCaW5uZWQgc2NlbmUgaW5mby4KLSAqLwotI2RlZmluZSBCSU5TQ0VORQkJMHgyNDI4Ci0jZGVmaW5lIEJTX09QX0xPQUQJCSgxIDw8IDgpCi0jZGVmaW5lIEJTX01BU0sJCQkoMSA8PCAyMikKLQotLyogQmluIGNvbW1hbmQgcGFyc2VyIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCQ1BECQkJMHgyNDgwCi0KLS8qIEJpbiBtZW1vcnkgY29udHJvbCBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQk1DRAkJCTB4MjQ4NAotCi0vKiBCaW4gZGF0YSBjYWNoZSBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQkRDRAkJCTB4MjQ4OAotCi0vKiBCaW5uZXIgcG9pbnRlciBjYWNoZSBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQlBDRAkJCTB4MjQ4YwotCi0vKiBCaW5uZXIgc2NyYXRjaCBwYWQgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEJJTlNLUEQJCQkweDI0ZjAKLQotLyogSFdCIHNjcmF0Y2ggcGFkIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBIV0JTS1BECQkJMHgyNGY0Ci0KLS8qIEJpbm5lciBtZW1vcnkgcG9vbCByZWc6Ci0gKi8KLSNkZWZpbmUgQk1QX0JVRkZFUgkJMHgyNDMwCi0jZGVmaW5lIEJNUF9QQUdFX1NJWkVfNEsJKDAgPDwgMTApCi0jZGVmaW5lIEJNUF9CVUZGRVJfU0laRV9TSElGVAkxCi0jZGVmaW5lIEJNUF9FTkFCTEUJCSgxIDw8IDApCi0KLS8qIEdldC9wdXQgbWVtb3J5IGZyb20gdGhlIGJpbm5lciBtZW1vcnkgcG9vbDoKLSAqLwotI2RlZmluZSBCTVBfR0VUCQkJMHgyNDM4Ci0jZGVmaW5lIEJNUF9QVVQJCQkweDI0NDAKLSNkZWZpbmUgQk1QX09GRlNFVF9TSElGVAk1Ci0KLS8qIDNEIHN0YXRlIHBhY2tldHM6Ci0gKi8KLSNkZWZpbmUgR0ZYX09QX1JBU1RFUl9SVUxFUyAgICAoKDB4Mzw8MjkpfCgweDc8PDI0KSkKLQotI2RlZmluZSBHRlhfT1BfU0NJU1NPUiAgICAgICAgICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQotI2RlZmluZSBTQ19VUERBVEVfU0NJU1NPUiAgICAgICAoMHgxPDwxKQotI2RlZmluZSBTQ19FTkFCTEVfTUFTSyAgICAgICAgICAoMHgxPDwwKQotI2RlZmluZSBTQ19FTkFCTEUgICAgICAgICAgICAgICAoMHgxPDwwKQotCi0jZGVmaW5lIEdGWF9PUF9MT0FEX0lORElSRUNUICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDc8PDE2KSkKLQotI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9JTkZPICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MTw8MTYpfCgweDEpKQotI2RlZmluZSBTQ0lfWU1JTl9NQVNLICAgICAgKDB4ZmZmZjw8MTYpCi0jZGVmaW5lIFNDSV9YTUlOX01BU0sgICAgICAoMHhmZmZmPDwwKQotI2RlZmluZSBTQ0lfWU1BWF9NQVNLICAgICAgKDB4ZmZmZjw8MTYpCi0jZGVmaW5lIFNDSV9YTUFYX01BU0sgICAgICAoMHhmZmZmPDwwKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0VOQUJMRQkgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX1JFQ1QJICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MTw8MTYpfDEpCi0jZGVmaW5lIEdGWF9PUF9DT0xPUl9GQUNUT1IgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4MTw8MTYpfDB4MCkKLSNkZWZpbmUgR0ZYX09QX1NUSVBQTEUgICAgICAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4Mzw8MTYpKQotI2RlZmluZSBHRlhfT1BfTUFQX0lORk8gICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfDB4NCkKLSNkZWZpbmUgR0ZYX09QX0RFU1RCVUZGRVJfVkFSUyAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4NTw8MTYpfDB4MCkKLSNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk8gICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MDw8MTYpfCgweDMpKQotCi0jZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgKCgweDc5MDA8PDE2KXwweDIpCi0KLSNkZWZpbmUgU1JDX0NPUFlfQkxUX0NNRCAgICAgICAgICAgICAgICAoKDI8PDI5KXwoMHg0Mzw8MjIpfDQpCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9DTUQJCSgoMjw8MjkpfCgweDUzPDwyMil8NikKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1dSSVRFX0FMUEhBCSgxPDwyMSkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1dSSVRFX1JHQgkoMTw8MjApCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9TUkNfVElMRUQJKDE8PDE1KQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVECSgxPDwxMSkKLQotI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIJCSgoMHgzMDw8MjMpfDEpCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9TVEFSVAkoMHgzMTw8MjMpCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9FTkQJKDB4QTw8MjMpCi0jZGVmaW5lIE1JX0JBVENIX05PTl9TRUNVUkUJKDEpCi0jZGVmaW5lIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSAoMTw8OCkKLQotI2RlZmluZSBNSV9XQUlUX0ZPUl9FVkVOVCAgICAgICAoKDB4Mzw8MjMpKQotI2RlZmluZSBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVAgICAgICAoMTw8NikKLSNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpCi0jZGVmaW5lIE1JX1dBSVRfRk9SX1BMQU5FX0FfU0NBTkxJTkVTICgxPDwxKQotCi0jZGVmaW5lIE1JX0xPQURfU0NBTl9MSU5FU19JTkNMICAoKDB4MTI8PDIzKSkKLQotI2RlZmluZSBDTURfT1BfRElTUExBWUJVRkZFUl9JTkZPICgoMHgwPDwyOSl8KDB4MTQ8PDIzKXwyKQotI2RlZmluZSBBU1lOQ19GTElQICAgICAgICAgICAgICAgICgxPDwyMikKLSNkZWZpbmUgRElTUExBWV9QTEFORV9BICAgICAgICAgICAoMDw8MjApCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfQiAgICAgICAgICAgKDE8PDIwKQotCi0vKiBEaXNwbGF5IHJlZ3MgKi8KLSNkZWZpbmUgRFNQQUNOVFIgICAgICAgICAgICAgICAgMHg3MDE4MAotI2RlZmluZSBEU1BCQ05UUiAgICAgICAgICAgICAgICAweDcxMTgwCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9NQVNLICAgICAgICAgICAgICAgICAoMTw8MjQpCi0KLS8qIERlZmluZSB0aGUgcmVnaW9uIG9mIGludGVyZXN0IGZvciB0aGUgYmlubmVyOgotICovCi0jZGVmaW5lIENNRF9PUF9CSU5fQ09OVFJPTAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg0PDwxNil8NCkKLQotI2RlZmluZSBDTURfT1BfREVTVEJVRkZFUl9JTkZPCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4OGU8PDE2KXwxKQotCi0jZGVmaW5lIENNRF9NSV9GTFVTSCAgICAgICAgICgweDA0IDw8IDIzKQotI2RlZmluZSBNSV9OT19XUklURV9GTFVTSCAgICAoMSA8PCAyKQotI2RlZmluZSBNSV9SRUFEX0ZMVVNIICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBNSV9FWEVfRkxVU0ggICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBNSV9FTkRfU0NFTkUgICAgICAgICAoMSA8PCA0KSAvKiBmbHVzaCBiaW5uZXIgYW5kIGluY3Igc2NlbmUgY291bnQgKi8KLSNkZWZpbmUgTUlfU0NFTkVfQ09VTlQgICAgICAgKDEgPDwgMykgLyoganVzdCBpbmNyZW1lbnQgc2NlbmUgY291bnQgKi8KLQotI2RlZmluZSBCUkVBRENSVU1CX0JJVFMgMzEKLSNkZWZpbmUgQlJFQURDUlVNQl9NQVNLICgoMVUgPDwgQlJFQURDUlVNQl9CSVRTKSAtIDEpCi0KLSNkZWZpbmUgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSAgKCgodm9sYXRpbGUgdTMyKikoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSlbNV0pCiAjZGVmaW5lIFJFQURfSFdTUChkZXZfcHJpdiwgcmVnKSAgKCgodm9sYXRpbGUgdTMyKikoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSlbcmVnXSkKKyNkZWZpbmUgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSBSRUFEX0hXU1AoZGV2X3ByaXYsIDUpCisjZGVmaW5lIEk5MTVfR0VNX0hXU19JTkRFWAkJMHgyMAogCi0jZGVmaW5lIEJMQ19QV01fQ1RMCQkweDYxMjU0Ci0jZGVmaW5lIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQJCSgxNykKLQotI2RlZmluZSBCTENfUFdNX0NUTDIJCTB4NjEyNTAKLS8qKgotICogVGhpcyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCAxNSBiaXRzIG9mIHRoZSBudW1iZXIgb2YgYmFja2xpZ2h0IGN5Y2xlcyBpbiBhCi0gKiBjb21wbGV0ZSBjeWNsZSBvZiB0aGUgbW9kdWxhdGVkIGJhY2tsaWdodCBjb250cm9sLgotICoKLSAqIFRoZSBhY3R1YWwgdmFsdWUgaXMgdGhpcyBmaWVsZCBtdWx0aXBsaWVkIGJ5IHR3by4KLSAqLwotI2RlZmluZSBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0sJCSgweDdmZmYgPDwgMTcpCi0jZGVmaW5lIEJMTV9MRUdBQ1lfTU9ERQkJCQkoMSA8PCAxNikKLS8qKgotICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBvdXQgb2YgdGhlIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlIGZvciB3aGljaAotICogdGhlIGJhY2tsaWdodCBpcyBvbi4KLSAqCi0gKiBUaGlzIGZpZWxkIG11c3QgYmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY3ljbGVzIGluIHRoZSBjb21wbGV0ZQotICogYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUuCi0gKi8KLSNkZWZpbmUgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfU0hJRlQJCSgwKQotI2RlZmluZSBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLCQkoMHhmZmZmKQotCi0jZGVmaW5lIEk5MTVfR0NGR0MJCQkweGYwCi0jZGVmaW5lIEk5MTVfTE9XX0ZSRVFVRU5DWV9FTkFCTEUJCSgxIDw8IDcpCi0jZGVmaW5lIEk5MTVfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkJKDAgPDwgNCkKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLXzMzM19NSFoJCSg0IDw8IDQpCi0jZGVmaW5lIEk5MTVfRElTUExBWV9DTE9DS19NQVNLCQkJKDcgPDwgNCkKLQotI2RlZmluZSBJODU1X0hQTExDQwkJCTB4YzAKLSNkZWZpbmUgSTg1NV9DTE9DS19DT05UUk9MX01BU0sJCQkoMyA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzEzM18yMDAJCQkoMCA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzEwMF8yMDAJCQkoMSA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzEwMF8xMzMJCQkoMiA8PCAwKQotI2RlZmluZSBJODU1X0NMT0NLXzE2Nl8yNTAJCQkoMyA8PCAwKQotCi0vKiBwMzE3LCAzMTkKLSAqLwotI2RlZmluZSBWQ0xLMl9WQ09fTSAgICAgICAgMHg2MDA4IC8qIHRyZWF0IGFzIDE2IGJpdD8gKGluY2x1ZGVzIG1zYnMpICovCi0jZGVmaW5lIFZDTEsyX1ZDT19OICAgICAgICAweDYwMGEKLSNkZWZpbmUgVkNMSzJfVkNPX0RJVl9TRUwgIDB4NjAxMgotCi0jZGVmaW5lIFZDTEtfRElWSVNPUl9WR0EwICAgMHg2MDAwCi0jZGVmaW5lIFZDTEtfRElWSVNPUl9WR0ExICAgMHg2MDA0Ci0jZGVmaW5lIFZDTEtfUE9TVF9ESVYJICAgIDB4NjAxMAotLyoqIFNlbGVjdHMgYSBwb3N0IGRpdmlzb3Igb2YgNCBpbnN0ZWFkIG9mIDIuICovCi0jIGRlZmluZSBWR0ExX1BEX1AyX0RJVl80CSgxIDw8IDE1KQotLyoqIE92ZXJyaWRlcyB0aGUgcDIgcG9zdCBkaXZpc29yIGZpZWxkICovCi0jIGRlZmluZSBWR0ExX1BEX1AxX0RJVl8yCSgxIDw8IDEzKQotIyBkZWZpbmUgVkdBMV9QRF9QMV9TSElGVAk4Ci0vKiogUDEgdmFsdWUgaXMgMiBncmVhdGVyIHRoYW4gdGhpcyBmaWVsZCAqLwotIyBkZWZpbmUgVkdBMV9QRF9QMV9NQVNLCSgweDFmIDw8IDgpCi0vKiogU2VsZWN0cyBhIHBvc3QgZGl2aXNvciBvZiA0IGluc3RlYWQgb2YgMi4gKi8KLSMgZGVmaW5lIFZHQTBfUERfUDJfRElWXzQJKDEgPDwgNykKLS8qKiBPdmVycmlkZXMgdGhlIHAyIHBvc3QgZGl2aXNvciBmaWVsZCAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMV9ESVZfMgkoMSA8PCA1KQotIyBkZWZpbmUgVkdBMF9QRF9QMV9TSElGVAkwCi0vKiogUDEgdmFsdWUgaXMgMiBncmVhdGVyIHRoYW4gdGhpcyBmaWVsZCAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMV9NQVNLCSgweDFmIDw8IDApCi0KLS8qIFBDSSBEIHN0YXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRF9TVEFURQkJMHg2MTA0Ci0jZGVmaW5lIERTUENMS19HQVRFX0QJMHg2MjAwCi0KLS8qIEk4MzAgQ1JUQyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgSFRPVEFMX0EJMHg2MDAwMAotI2RlZmluZSBIQkxBTktfQQkweDYwMDA0Ci0jZGVmaW5lIEhTWU5DX0EJCTB4NjAwMDgKLSNkZWZpbmUgVlRPVEFMX0EJMHg2MDAwYwotI2RlZmluZSBWQkxBTktfQQkweDYwMDEwCi0jZGVmaW5lIFZTWU5DX0EJCTB4NjAwMTQKLSNkZWZpbmUgUElQRUFTUkMJMHg2MDAxYwotI2RlZmluZSBCQ0xSUEFUX0EJMHg2MDAyMAotI2RlZmluZSBWU1lOQ1NISUZUX0EJMHg2MDAyOAotCi0jZGVmaW5lIEhUT1RBTF9CCTB4NjEwMDAKLSNkZWZpbmUgSEJMQU5LX0IJMHg2MTAwNAotI2RlZmluZSBIU1lOQ19CCQkweDYxMDA4Ci0jZGVmaW5lIFZUT1RBTF9CCTB4NjEwMGMKLSNkZWZpbmUgVkJMQU5LX0IJMHg2MTAxMAotI2RlZmluZSBWU1lOQ19CCQkweDYxMDE0Ci0jZGVmaW5lIFBJUEVCU1JDCTB4NjEwMWMKLSNkZWZpbmUgQkNMUlBBVF9CCTB4NjEwMjAKLSNkZWZpbmUgVlNZTkNTSElGVF9CCTB4NjEwMjgKLQotI2RlZmluZSBQUF9TVEFUVVMJMHg2MTIwMAotIyBkZWZpbmUgUFBfT04JCQkJCSgxIDw8IDMxKQotLyoqCi0gKiBJbmRpY2F0ZXMgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYW5lbCBhcmUgb246Ci0gKgotICogLSBQTEwgZW5hYmxlZAotICogLSBwaXBlIGVuYWJsZWQKLSAqIC0gTFZEUy9EVk9CL0RWT0Mgb24KLSAqLwotIyBkZWZpbmUgUFBfUkVBRFkJCQkJKDEgPDwgMzApCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9OT05FCQkJKDAgPDwgMjgpCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9PTgkJCQkoMSA8PCAyOCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX09GRgkJCSgyIDw8IDI4KQotIyBkZWZpbmUgUFBfU0VRVUVOQ0VfTUFTSwkJCTB4MzAwMDAwMDAKLSNkZWZpbmUgUFBfQ09OVFJPTAkweDYxMjA0Ci0jIGRlZmluZSBQT1dFUl9UQVJHRVRfT04JCQkoMSA8PCAwKQotCi0jZGVmaW5lIExWRFNQUF9PTiAgICAgICAweDYxMjA4Ci0jZGVmaW5lIExWRFNQUF9PRkYgICAgICAweDYxMjBjCi0jZGVmaW5lIFBQX0NZQ0xFICAgICAgICAweDYxMjEwCi0KLSNkZWZpbmUgUEZJVF9DT05UUk9MCTB4NjEyMzAKLSMgZGVmaW5lIFBGSVRfRU5BQkxFCQkJCSgxIDw8IDMxKQotIyBkZWZpbmUgUEZJVF9QSVBFX01BU0sJCQkJKDMgPDwgMjkpCi0jIGRlZmluZSBQRklUX1BJUEVfU0hJRlQJCQkyOQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfRElTQUJMRQkJCSgwIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfQklMSU5FQVIJCQkoMSA8PCAxMCkKLSMgZGVmaW5lIFZFUlRfSU5URVJQX01BU0sJCQkoMyA8PCAxMCkKLSMgZGVmaW5lIFZFUlRfQVVUT19TQ0FMRQkJCSgxIDw8IDkpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfRElTQUJMRQkJCSgwIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfQklMSU5FQVIJCQkoMSA8PCA2KQotIyBkZWZpbmUgSE9SSVpfSU5URVJQX01BU0sJCQkoMyA8PCA2KQotIyBkZWZpbmUgSE9SSVpfQVVUT19TQ0FMRQkJCSgxIDw8IDUpCi0jIGRlZmluZSBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEUJCSgxIDw8IDMpCi0KLSNkZWZpbmUgUEZJVF9QR01fUkFUSU9TCTB4NjEyMzQKLSMgZGVmaW5lIFBGSVRfVkVSVF9TQ0FMRV9NQVNLCQkJMHhmZmYwMDAwMAotIyBkZWZpbmUgUEZJVF9IT1JJWl9TQ0FMRV9NQVNLCQkJMHgwMDAwZmZmMAotCi0jZGVmaW5lIFBGSVRfQVVUT19SQVRJT1MJMHg2MTIzOAotCi0KLSNkZWZpbmUgRFBMTF9BCQkweDA2MDE0Ci0jZGVmaW5lIERQTExfQgkJMHgwNjAxOAotIyBkZWZpbmUgRFBMTF9WQ09fRU5BQkxFCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBEUExMX0RWT19ISUdIX1NQRUVECQkJKDEgPDwgMzApCi0jIGRlZmluZSBEUExMX1NZTkNMT0NLX0VOQUJMRQkJCSgxIDw8IDI5KQotIyBkZWZpbmUgRFBMTF9WR0FfTU9ERV9ESVMJCQkoMSA8PCAyOCkKLSMgZGVmaW5lIERQTExCX01PREVfREFDX1NFUklBTAkJCSgxIDw8IDI2KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMQl9NT0RFX0xWRFMJCQkoMiA8PCAyNikgLyogaTkxNSAqLwotIyBkZWZpbmUgRFBMTF9NT0RFX01BU0sJCQkJKDMgPDwgMjYpCi0jIGRlZmluZSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwCSgwIDw8IDI0KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzUJCSgxIDw8IDI0KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl8xNAkJKDAgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcJCSgxIDw8IDI0KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCQkJMHgwMzAwMDAwMCAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0sJCTB4MDBmZjAwMDAgLyogaTkxNSAqLwotLyoqCi0gKiAgVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gREFDL3NlcmlhbCBtb2RlLCBkZWZpbmVzIHAxIGFzIHR3byBwbHVzIHRoaXMKLSAqIGJpdGZpZWxkLCBvciBqdXN0IDIgaWYgUExMX1AxX0RJVklERV9CWV9UV08gaXMgc2V0LgotICovCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMAkweDAwMWYwMDAwCi0vKioKLSAqIFRoZSBpODMwIGdlbmVyYXRpb24sIGluIExWRFMgbW9kZSwgZGVmaW5lcyBQMSBhcyB0aGUgYml0IG51bWJlciBzZXQgd2l0aGluCi0gKiB0aGlzIGZpZWxkIChvbmx5IG9uZSBiaXQgbWF5IGJlIHNldCkuCi0gKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwX0xWRFMJMHgwMDNmMDAwMAotIyBkZWZpbmUgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVAkJMTYKLSMgZGVmaW5lIFBMTF9QMl9ESVZJREVfQllfNAkJCSgxIDw8IDIzKSAvKiBpODMwLCByZXF1aXJlZCBpbiBEVk8gbm9uLWdhbmcgKi8KLSMgZGVmaW5lIFBMTF9QMV9ESVZJREVfQllfVFdPCQkJKDEgPDwgMjEpIC8qIGk4MzAgKi8KLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfRFJFRkNMSwkJCSgwIDw8IDEzKQotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9UVkNMS0lOQQkJCSgxIDw8IDEzKSAvKiBpODMwICovCi0jIGRlZmluZSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQwkJKDIgPDwgMTMpIC8qIFNEVk8gVFZDTEtJTiAqLwotIyBkZWZpbmUgUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTgkoMyA8PCAxMykKLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfTUFTSwkJCSgzIDw8IDEzKQotIyBkZWZpbmUgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQJCTkKLS8qCi0gKiBQYXJhbGxlbCB0byBTZXJpYWwgTG9hZCBQdWxzZSBwaGFzZSBzZWxlY3Rpb24uCi0gKiBTZWxlY3RzIHRoZSBwaGFzZSBmb3IgdGhlIDEwWCBEUExMIGNsb2NrIGZvciB0aGUgUENJZQotICogZGlnaXRhbCBkaXNwbGF5IHBvcnQuIFRoZSByYW5nZSBpcyA0IHRvIDEzOyAxMCBvciBtb3JlCi0gKiBpcyBqdXN0IGEgZmxpcCBkZWxheS4gVGhlIGRlZmF1bHQgaXMgNgotICovCi0jIGRlZmluZSBQTExfTE9BRF9QVUxTRV9QSEFTRV9NQVNLCQkoMHhmIDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKQotIyBkZWZpbmUgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExCQkoMSA8PCA4KQotCi0vKioKLSAqIFNEVk8gbXVsdGlwbGllciBmb3IgOTQ1Ry9HTS4gTm90IHVzZWQgb24gOTY1LgotICoKLSAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKLSAqLwotIyBkZWZpbmUgU0RWT19NVUxUSVBMSUVSX01BU0sJCQkweDAwMDAwMGZmCi0jIGRlZmluZSBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVMJCTQKLSMgZGVmaW5lIFNEVk9fTVVMVElQTElFUl9TSElGVF9WR0EJCTAKLQotLyoqIEBkZWZncm91cCBEUExMX01ECi0gKiBAewotICovCi0vKiogUGlwZSBBIFNEVk8vVURJIGNsb2NrIG11bHRpcGxpZXIvZGl2aWRlciByZWdpc3RlciBmb3IgRzk2NS4gKi8KLSNkZWZpbmUgRFBMTF9BX01ECQkweDA2MDFjCi0vKiogUGlwZSBCIFNEVk8vVURJIGNsb2NrIG11bHRpcGxpZXIvZGl2aWRlciByZWdpc3RlciBmb3IgRzk2NS4gKi8KLSNkZWZpbmUgRFBMTF9CX01ECQkweDA2MDIwCi0vKioKLSAqIFVESSBwaXhlbCBkaXZpZGVyLCBjb250cm9sbGluZyBob3cgbWFueSBwaXhlbHMgYXJlIHN0dWZmZWQgaW50byBhIHBhY2tldC4KLSAqCi0gKiBWYWx1ZSBpcyBwaXhlbHMgbWludXMgMS4gIE11c3QgYmUgc2V0IHRvIDEgcGl4ZWwgZm9yIFNEVk8uCi0gKi8KLSMgZGVmaW5lIERQTExfTURfVURJX0RJVklERVJfTUFTSwkJMHgzZjAwMDAwMAotIyBkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9TSElGVAkJMjQKLS8qKiBVREkgcGl4ZWwgZGl2aWRlciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX0RJVklERVJfTUFTSy4gKi8KLSMgZGVmaW5lIERQTExfTURfVkdBX1VESV9ESVZJREVSX01BU0sJCTB4MDAzZjAwMDAKLSMgZGVmaW5lIERQTExfTURfVkdBX1VESV9ESVZJREVSX1NISUZUCQkxNgotLyoqCi0gKiBTRFZPL1VESSBwaXhlbCBtdWx0aXBsaWVyLgotICoKLSAqIFNEVk8gcmVxdWlyZXMgdGhhdCB0aGUgYnVzIGNsb2NrIHJhdGUgYmUgYmV0d2VlbiAxIGFuZCAyIEdoeiwgYW5kIHRoZSBidXMKLSAqIGNsb2NrIHJhdGUgaXMgMTAgdGltZXMgdGhlIERQTEwgY2xvY2suICBBdCBsb3cgcmVzb2x1dGlvbi9yZWZyZXNoIHJhdGUKLSAqIG1vZGVzLCB0aGUgYnVzIHJhdGUgd291bGQgYmUgYmVsb3cgdGhlIGxpbWl0cywgc28gU0RWTyBhbGxvd3MgZm9yIHN0dWZmaW5nCi0gKiBkdW1teSBieXRlcyBpbiB0aGUgZGF0YXN0cmVhbSBhdCBhbiBpbmNyZWFzZWQgY2xvY2sgcmF0ZSwgd2l0aCBib3RoIHNpZGVzIG9mCi0gKiB0aGUgbGluayBrbm93aW5nIGhvdyBtYW55IGJ5dGVzIGFyZSBmaWxsLgotICoKLSAqIFNvLCBmb3IgYSBtb2RlIHdpdGggYSBkb3RjbG9jayBvZiA2NU1oeiwgd2Ugd291bGQgd2FudCB0byBkb3VibGUgdGhlIGNsb2NrCi0gKiByYXRlIHRvIDEzME1oeiB0byBnZXQgYSBidXMgcmF0ZSBvZiAxLjMwR2h6LiAgVGhlIERQTEwgY2xvY2sgcmF0ZSB3b3VsZCBiZQotICogc2V0IHRvIDEzME1oeiwgYW5kIHRoZSBTRFZPIG11bHRpcGxpZXIgc2V0IHRvIDJ4IGluIHRoaXMgcmVnaXN0ZXIgYW5kCi0gKiB0aHJvdWdoIGFuIFNEVk8gY29tbWFuZC4KLSAqCi0gKiBUaGlzIHJlZ2lzdGVyIGZpZWxkIGhhcyB2YWx1ZXMgb2YgbXVsdGlwbGljYXRpb24gZmFjdG9yIG1pbnVzIDEsIHdpdGgKLSAqIGEgbWF4aW11bSBtdWx0aXBsaWVyIG9mIDUgZm9yIFNEVk8uCi0gKi8KLSMgZGVmaW5lIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwkJMHgwMDAwM2YwMAotIyBkZWZpbmUgRFBMTF9NRF9VRElfTVVMVElQTElFUl9TSElGVAkJOAotLyoqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0suCi0gKiBUaGlzIGJlc3QgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlICgzKSBvciB0aGUgQ1JUIHdvbid0IHdvcmsuIE5vLAotICogSSBkb24ndCBlbnRpcmVseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkb2VzLi4uCi0gKi8KLSMgZGVmaW5lIERQTExfTURfVkdBX1VESV9NVUxUSVBMSUVSX01BU0sJMHgwMDAwMDAzZgotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfU0hJRlQJMAotLyoqIEB9ICovCi0KLSNkZWZpbmUgRFBMTF9URVNUCQkweDYwNmMKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfMQkJCSgwIDw8IDIyKQotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl8yCQkJKDEgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX1NEVk9fRElWXzQJCQkoMiA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfTUFTSwkJKDMgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX05fQllQQVNTCQkJKDEgPDwgMTkpCi0jIGRlZmluZSBEUExMQl9URVNUX01fQllQQVNTCQkJKDEgPDwgMTgpCi0jIGRlZmluZSBEUExMQl9JTlBVVF9CVUZGRVJfRU5BQkxFCQkoMSA8PCAxNikKLSMgZGVmaW5lIERQTExBX1RFU1RfTl9CWVBBU1MJCQkoMSA8PCAzKQotIyBkZWZpbmUgRFBMTEFfVEVTVF9NX0JZUEFTUwkJCSgxIDw8IDIpCi0jIGRlZmluZSBEUExMQV9JTlBVVF9CVUZGRVJfRU5BQkxFCQkoMSA8PCAwKQotCi0jZGVmaW5lIEFEUEEJCQkweDYxMTAwCi0jZGVmaW5lIEFEUEFfREFDX0VOQUJMRQkJKDE8PDMxKQotI2RlZmluZSBBRFBBX0RBQ19ESVNBQkxFCTAKLSNkZWZpbmUgQURQQV9QSVBFX1NFTEVDVF9NQVNLCSgxPDwzMCkKLSNkZWZpbmUgQURQQV9QSVBFX0FfU0VMRUNUCTAKLSNkZWZpbmUgQURQQV9QSVBFX0JfU0VMRUNUCSgxPDwzMCkKLSNkZWZpbmUgQURQQV9VU0VfVkdBX0hWUE9MQVJJVFkgKDE8PDE1KQotI2RlZmluZSBBRFBBX1NFVFNfSFZQT0xBUklUWQkwCi0jZGVmaW5lIEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMSkKLSNkZWZpbmUgQURQQV9WU1lOQ19DTlRMX0VOQUJMRQkwCi0jZGVmaW5lIEFEUEFfSFNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMCkKLSNkZWZpbmUgQURQQV9IU1lOQ19DTlRMX0VOQUJMRQkwCi0jZGVmaW5lIEFEUEFfVlNZTkNfQUNUSVZFX0hJR0gJKDE8PDQpCi0jZGVmaW5lIEFEUEFfVlNZTkNfQUNUSVZFX0xPVwkwCi0jZGVmaW5lIEFEUEFfSFNZTkNfQUNUSVZFX0hJR0gJKDE8PDMpCi0jZGVmaW5lIEFEUEFfSFNZTkNfQUNUSVZFX0xPVwkwCi0KLSNkZWZpbmUgRlBBMAkJMHgwNjA0MAotI2RlZmluZSBGUEExCQkweDA2MDQ0Ci0jZGVmaW5lIEZQQjAJCTB4MDYwNDgKLSNkZWZpbmUgRlBCMQkJMHgwNjA0YwotIyBkZWZpbmUgRlBfTl9ESVZfTUFTSwkJCQkweDAwM2YwMDAwCi0jIGRlZmluZSBGUF9OX0RJVl9TSElGVAkJCQkxNgotIyBkZWZpbmUgRlBfTTFfRElWX01BU0sJCQkJMHgwMDAwM2YwMAotIyBkZWZpbmUgRlBfTTFfRElWX1NISUZUCQkJOAotIyBkZWZpbmUgRlBfTTJfRElWX01BU0sJCQkJMHgwMDAwMDAzZgotIyBkZWZpbmUgRlBfTTJfRElWX1NISUZUCQkJMAotCi0KLSNkZWZpbmUgUE9SVF9IT1RQTFVHX0VOCQkweDYxMTEwCi0jIGRlZmluZSBTRFZPQl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI2KQotIyBkZWZpbmUgU0RWT0NfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAyNSkKLSMgZGVmaW5lIFRWX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMTgpCi0jIGRlZmluZSBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUCQkoMSA8PCAzKQotCi0jZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKLSMgZGVmaW5lIENSVF9IT1RQTFVHX0lOVF9TVEFUVVMJCQkoMSA8PCAxMSkKLSMgZGVmaW5lIFRWX0hPVFBMVUdfSU5UX1NUQVRVUwkJCSgxIDw8IDEwKQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLCQkoMyA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9DT0xPUgkJKDMgPDwgOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX01PTklUT1JfTU9OTwkJKDIgPDwgOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX01PTklUT1JfTk9ORQkJKDAgPDwgOCkKLSMgZGVmaW5lIFNEVk9DX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgNykKLSMgZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgNikKLQotI2RlZmluZSBTRFZPQgkJCTB4NjExNDAKLSNkZWZpbmUgU0RWT0MJCQkweDYxMTYwCi0jZGVmaW5lIFNEVk9fRU5BQkxFCQkJCSgxIDw8IDMxKQotI2RlZmluZSBTRFZPX1BJUEVfQl9TRUxFQ1QJCQkoMSA8PCAzMCkKLSNkZWZpbmUgU0RWT19TVEFMTF9TRUxFQ1QJCQkoMSA8PCAyOSkKLSNkZWZpbmUgU0RWT19JTlRFUlJVUFRfRU5BQkxFCQkJKDEgPDwgMjYpCi0vKioKLSAqIDkxNUcvR00gU0RWTyBwaXhlbCBtdWx0aXBsaWVyLgotICoKLSAqIFByb2dyYW1tZWQgdmFsdWUgaXMgbXVsdGlwbGllciAtIDEsIHVwIHRvIDV4LgotICoKLSAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKLSAqLwotI2RlZmluZSBTRFZPX1BPUlRfTVVMVElQTFlfTUFTSwkJCSg3IDw8IDIzKQotI2RlZmluZSBTRFZPX1BPUlRfTVVMVElQTFlfU0hJRlQJCTIzCi0jZGVmaW5lIFNEVk9fUEhBU0VfU0VMRUNUX01BU0sJCQkoMTUgPDwgMTkpCi0jZGVmaW5lIFNEVk9fUEhBU0VfU0VMRUNUX0RFRkFVTFQJCSg2IDw8IDE5KQotI2RlZmluZSBTRFZPX0NMT0NLX09VVFBVVF9JTlZFUlQJCSgxIDw8IDE4KQotI2RlZmluZSBTRFZPQ19HQU5HX01PREUJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIFNEVk9fQk9SREVSX0VOQUJMRQkJCSgxIDw8IDcpCi0jZGVmaW5lIFNEVk9CX1BDSUVfQ09OQ1VSUkVOQ1kJCQkoMSA8PCAzKQotI2RlZmluZSBTRFZPX0RFVEVDVEVECQkJCSgxIDw8IDIpCi0vKiBCaXRzIHRvIGJlIHByZXNlcnZlZCB3aGVuIHdyaXRpbmcgKi8KLSNkZWZpbmUgU0RWT0JfUFJFU0VSVkVfTUFTSwkJCSgoMSA8PCAxNykgfCAoMSA8PCAxNikgfCAoMSA8PCAxNCkpCi0jZGVmaW5lIFNEVk9DX1BSRVNFUlZFX01BU0sJCQkoMSA8PCAxNykKLQotLyoqIEBkZWZncm91cCBMVkRTCi0gKiBAewotICovCi0vKioKLSAqIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgdGhlIExWRFMgb3V0cHV0IGVuYWJsZSwgcGlwZSBzZWxlY3Rpb24sIGFuZCBkYXRhCi0gKiBmb3JtYXQgc2VsZWN0aW9uLgotICoKLSAqIEFsbCBvZiB0aGUgY2xvY2svZGF0YSBwYWlycyBhcmUgZm9yY2UgcG93ZXJlZCBkb3duIGJ5IHBvd2VyIHNlcXVlbmNpbmcuCi0gKi8KLSNkZWZpbmUgTFZEUwkJCTB4NjExODAKLS8qKgotICogRW5hYmxlcyB0aGUgTFZEUyBwb3J0LiAgVGhpcyBiaXQgbXVzdCBiZSBzZXQgYmVmb3JlIERQTExzIGFyZSBlbmFibGVkLCBhcwotICogdGhlIERQTEwgc2VtYW50aWNzIGNoYW5nZSB3aGVuIHRoZSBMVkRTIGlzIGFzc2lnbmVkIHRvIHRoYXQgcGlwZS4KLSAqLwotIyBkZWZpbmUgTFZEU19QT1JUX0VOCQkJKDEgPDwgMzEpCi0vKiogU2VsZWN0cyBwaXBlIEIgZm9yIExWRFMgZGF0YS4gIE11c3QgYmUgc2V0IG9uIHByZS05NjUuICovCi0jIGRlZmluZSBMVkRTX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCi0KLS8qKgotICogRW5hYmxlcyB0aGUgQTAtQTIgZGF0YSBwYWlycyBhbmQgQ0xLQSwgY29udGFpbmluZyAxOCBiaXRzIG9mIGNvbG9yIGRhdGEgcGVyCi0gKiBwaXhlbC4KLSAqLwotIyBkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfTUFTSwkoMyA8PCA4KQotIyBkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfRE9XTgkoMCA8PCA4KQotIyBkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfVVAJKDMgPDwgOCkKLS8qKgotICogQ29udHJvbHMgdGhlIEEzIGRhdGEgcGFpciwgd2hpY2ggY29udGFpbnMgdGhlIGFkZGl0aW9uYWwgTFNCcyBmb3IgMjQgYml0Ci0gKiBtb2RlLiAgT25seSBlbmFibGVkIGlmIExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIGFsc28gaW5kaWNhdGVzIGl0IHNob3VsZCBiZQotICogb24uCi0gKi8KLSMgZGVmaW5lIExWRFNfQTNfUE9XRVJfTUFTSwkJKDMgPDwgNikKLSMgZGVmaW5lIExWRFNfQTNfUE9XRVJfRE9XTgkJKDAgPDwgNikKLSMgZGVmaW5lIExWRFNfQTNfUE9XRVJfVVAJCSgzIDw8IDYpCi0vKioKLSAqIENvbnRyb2xzIHRoZSBDTEtCIHBhaXIuICBUaGlzIHNob3VsZCBvbmx5IGJlIHNldCB3aGVuIExWRFNfQjBCM19QT1dFUl9VUAotICogaXMgc2V0LgotICovCi0jIGRlZmluZSBMVkRTX0NMS0JfUE9XRVJfTUFTSwkJKDMgPDwgNCkKLSMgZGVmaW5lIExWRFNfQ0xLQl9QT1dFUl9ET1dOCQkoMCA8PCA0KQotIyBkZWZpbmUgTFZEU19DTEtCX1BPV0VSX1VQCQkoMyA8PCA0KQotCi0vKioKLSAqIENvbnRyb2xzIHRoZSBCMC1CMyBkYXRhIHBhaXJzLiAgVGhpcyBtdXN0IGJlIHNldCB0byBtYXRjaCB0aGUgRFBMTCBwMgotICogc2V0dGluZyBmb3Igd2hldGhlciB3ZSBhcmUgaW4gZHVhbC1jaGFubmVsIG1vZGUuICBUaGUgQjMgcGFpciB3aWxsCi0gKiBhZGRpdGlvbmFsbHkgb25seSBiZSBwb3dlcmVkIHVwIHdoZW4gTFZEU19BM19QT1dFUl9VUCBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIExWRFNfQjBCM19QT1dFUl9NQVNLCQkoMyA8PCAyKQotIyBkZWZpbmUgTFZEU19CMEIzX1BPV0VSX0RPV04JCSgwIDw8IDIpCi0jIGRlZmluZSBMVkRTX0IwQjNfUE9XRVJfVVAJCSgzIDw8IDIpCi0KLSNkZWZpbmUgUElQRUFDT05GIDB4NzAwMDgKLSNkZWZpbmUgUElQRUFDT05GX0VOQUJMRQkoMTw8MzEpCi0jZGVmaW5lIFBJUEVBQ09ORl9ESVNBQkxFCTAKLSNkZWZpbmUgUElQRUFDT05GX0RPVUJMRV9XSURFCSgxPDwzMCkKLSNkZWZpbmUgSTk2NV9QSVBFQ09ORl9BQ1RJVkUJKDE8PDMwKQotI2RlZmluZSBQSVBFQUNPTkZfU0lOR0xFX1dJREUJMAotI2RlZmluZSBQSVBFQUNPTkZfUElQRV9VTkxPQ0tFRCAwCi0jZGVmaW5lIFBJUEVBQ09ORl9QSVBFX0xPQ0tFRAkoMTw8MjUpCi0jZGVmaW5lIFBJUEVBQ09ORl9QQUxFVFRFCTAKLSNkZWZpbmUgUElQRUFDT05GX0dBTU1BCQkoMTw8MjQpCi0jZGVmaW5lIFBJUEVDT05GX0ZPUkNFX0JPUkRFUgkoMTw8MjUpCi0jZGVmaW5lIFBJUEVDT05GX1BST0dSRVNTSVZFCSgwIDw8IDIxKQotI2RlZmluZSBQSVBFQ09ORl9JTlRFUkxBQ0VfV19GSUVMRF9JTkRJQ0FUSU9OCSg2IDw8IDIxKQotI2RlZmluZSBQSVBFQ09ORl9JTlRFUkxBQ0VfRklFTERfMF9PTkxZCQkoNyA8PCAyMSkKLQotI2RlZmluZSBEU1BBUkIJICAweDcwMDMwCi0jZGVmaW5lIERTUEFSQl9DU1RBUlRfTUFTSwkoMHg3ZiA8PCA3KQotI2RlZmluZSBEU1BBUkJfQ1NUQVJUX1NISUZUCTcKLSNkZWZpbmUgRFNQQVJCX0JTVEFSVF9NQVNLCSgweDdmKQkJIAotI2RlZmluZSBEU1BBUkJfQlNUQVJUX1NISUZUCTAKLQotI2RlZmluZSBQSVBFQkNPTkYgMHg3MTAwOAotI2RlZmluZSBQSVBFQkNPTkZfRU5BQkxFCSgxPDwzMSkKLSNkZWZpbmUgUElQRUJDT05GX0RJU0FCTEUJMAotI2RlZmluZSBQSVBFQkNPTkZfRE9VQkxFX1dJREUJKDE8PDMwKQotI2RlZmluZSBQSVBFQkNPTkZfRElTQUJMRQkwCi0jZGVmaW5lIFBJUEVCQ09ORl9HQU1NQQkJKDE8PDI0KQotI2RlZmluZSBQSVBFQkNPTkZfUEFMRVRURQkwCi0KLSNkZWZpbmUgUElQRUJHQ01BWFJFRAkJMHg3MTAxMAotI2RlZmluZSBQSVBFQkdDTUFYR1JFRU4JCTB4NzEwMTQKLSNkZWZpbmUgUElQRUJHQ01BWEJMVUUJCTB4NzEwMTgKLSNkZWZpbmUgUElQRUJTVEFUCQkweDcxMDI0Ci0jZGVmaW5lIFBJUEVCRlJBTUVISUdICQkweDcxMDQwCi0jZGVmaW5lIFBJUEVCRlJBTUVQSVhFTAkJMHg3MTA0NAotCi0jZGVmaW5lIERTUEFDTlRSCQkweDcwMTgwCi0jZGVmaW5lIERTUEJDTlRSCQkweDcxMTgwCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfRU5BQkxFCQkJKDE8PDMxKQotI2RlZmluZSBESVNQTEFZX1BMQU5FX0RJU0FCTEUJCQkwCi0jZGVmaW5lIERJU1BQTEFORV9HQU1NQV9FTkFCTEUJCQkoMTw8MzApCi0jZGVmaW5lIERJU1BQTEFORV9HQU1NQV9ESVNBQkxFCQkJMAotI2RlZmluZSBESVNQUExBTkVfUElYRk9STUFUX01BU0sJCSgweGY8PDI2KQotI2RlZmluZSBESVNQUExBTkVfOEJQUAkJCQkoMHgyPDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzE1XzE2QlBQCQkJKDB4NDw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV8xNkJQUAkJCQkoMHg1PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzMyQlBQX05PX0FMUEhBCQkoMHg2PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzMyQlBQCQkJCSgweDc8PDI2KQotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX0VOQUJMRQkJCSgxPDwyNSkKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19ESVNBQkxFCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9NQVNLCQkJKDE8PDI0KQotI2RlZmluZSBESVNQUExBTkVfU0VMX1BJUEVfQQkJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX0IJCQkoMTw8MjQpCi0jZGVmaW5lIERJU1BQTEFORV9TUkNfS0VZX0VOQUJMRQkJKDE8PDIyKQotI2RlZmluZSBESVNQUExBTkVfU1JDX0tFWV9ESVNBQkxFCQkwCi0jZGVmaW5lIERJU1BQTEFORV9MSU5FX0RPVUJMRQkJCSgxPDwyMCkKLSNkZWZpbmUgRElTUFBMQU5FX05PX0xJTkVfRE9VQkxFCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfRklSU1QJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9TRUNPTkQJKDE8PDE4KQotLyogcGxhbmUgQiBvbmx5ICovCi0jZGVmaW5lIERJU1BQTEFORV9BTFBIQV9UUkFOU19FTkFCTEUJCSgxPDwxNSkKLSNkZWZpbmUgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NQUklURV9BQk9WRV9ESVNQTEFZQQkJMAotI2RlZmluZSBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX09WRVJMQVkJCSgxKQotCi0jZGVmaW5lIERTUEFCQVNFCQkweDcwMTg0Ci0jZGVmaW5lIERTUEFTVFJJREUJCTB4NzAxODgKLQotI2RlZmluZSBEU1BCQkFTRQkJMHg3MTE4NAotI2RlZmluZSBEU1BCQUREUgkJRFNQQkJBU0UKLSNkZWZpbmUgRFNQQlNUUklERQkJMHg3MTE4OAotCi0jZGVmaW5lIERTUEFLRVlWQUwJCTB4NzAxOTQKLSNkZWZpbmUgRFNQQUtFWU1BU0sJCTB4NzAxOTgKLQotI2RlZmluZSBEU1BBUE9TCQkJMHg3MDE4QyAvKiByZXNlcnZlZCAqLwotI2RlZmluZSBEU1BBU0laRQkJMHg3MDE5MAotI2RlZmluZSBEU1BCUE9TCQkJMHg3MTE4QwotI2RlZmluZSBEU1BCU0laRQkJMHg3MTE5MAotCi0jZGVmaW5lIERTUEFTVVJGCQkweDcwMTlDCi0jZGVmaW5lIERTUEFUSUxFT0ZGCQkweDcwMUE0Ci0KLSNkZWZpbmUgRFNQQlNVUkYJCTB4NzExOUMKLSNkZWZpbmUgRFNQQlRJTEVPRkYJCTB4NzExQTQKLQotI2RlZmluZSBWR0FDTlRSTAkJMHg3MTQwMAotIyBkZWZpbmUgVkdBX0RJU1BfRElTQUJMRQkJCSgxIDw8IDMxKQotIyBkZWZpbmUgVkdBXzJYX01PREUJCQkJKDEgPDwgMzApCi0jIGRlZmluZSBWR0FfUElQRV9CX1NFTEVDVAkJCSgxIDw8IDI5KQotCi0vKgotICogU29tZSBCSU9TIHNjcmF0Y2ggYXJlYSByZWdpc3RlcnMuICBUaGUgODQ1IChhbmQgODMwPykgc3RvcmUgdGhlIGFtb3VudAotICogb2YgdmlkZW8gbWVtb3J5IGF2YWlsYWJsZSB0byB0aGUgQklPUyBpbiBTV0YxLgotICovCi0KLSNkZWZpbmUgU1dGMAkJCTB4NzE0MTAKLQotLyoKLSAqIDg1NSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAqLwotI2RlZmluZSBTV0YxMAkJCTB4NzA0MTAKLQotI2RlZmluZSBTV0YzMAkJCTB4NzI0MTQKLQotLyoKLSAqIE92ZXJsYXkgcmVnaXN0ZXJzLiAgVGhlc2UgYXJlIG92ZXJsYXkgcmVnaXN0ZXJzIGFjY2Vzc2VkIHZpYSBNTUlPLgotICogVGhvc2UgbG9hZGVkIHZpYSB0aGUgb3ZlcmxheSByZWdpc3RlciBwYWdlIGFyZSBkZWZpbmVkIGluIGk4MzBfdmlkZW8uYy4KLSAqLwotI2RlZmluZSBPVkFERAkJCTB4MzAwMDAKLQotI2RlZmluZSBET1ZTVEEJCQkweDMwMDA4Ci0jZGVmaW5lIE9DX0JVRgkJCSgweDM8PDIwKQotCi0jZGVmaW5lIE9HQU1DNQkJCTB4MzAwMTAKLSNkZWZpbmUgT0dBTUM0CQkJMHgzMDAxNAotI2RlZmluZSBPR0FNQzMJCQkweDMwMDE4Ci0jZGVmaW5lIE9HQU1DMgkJCTB4MzAwMWMKLSNkZWZpbmUgT0dBTUMxCQkJMHgzMDAyMAotI2RlZmluZSBPR0FNQzAJCQkweDMwMDI0Ci0vKgotICogUGFsZXR0ZSByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBQQUxFVFRFX0EJCTB4MGEwMDAKLSNkZWZpbmUgUEFMRVRURV9CCQkweDBhODAwCitleHRlcm4gaW50IGk5MTVfd2FpdF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKTsKIAogI2RlZmluZSBJU19JODMwKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU3NykKICNkZWZpbmUgSVNfODQ1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1NjIpCkBAIC0xMTE5LDcgKzYzOSw3IEBACiAKICNkZWZpbmUgSVNfSTk2NUdNKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkEwMikKIAotI2RlZmluZSBJU19JR0RfR00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyKQorI2RlZmluZSBJU19HTTQ1KGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkE0MikKIAogI2RlZmluZSBJU19HNFgoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTAyIHx8IFwKIAkJICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMTIgfHwgXApAQCAtMTEzMyw5ICs2NTMsOSBAQAogCQkgICAgICBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0czMyhkZXYpKQogCiAjZGVmaW5lIElTX01PQklMRShkZXYpIChJU19JODMwKGRldikgfHwgSVNfSTg1WChkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8IFwKLQkJCUlTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHTShkZXYpIHx8IElTX0lHRF9HTShkZXYpKQorCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpKQogCi0jZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikgKElTX0czMyhkZXYpIHx8IElTX0lHRF9HTShkZXYpIHx8IElTX0c0WChkZXYpKQorI2RlZmluZSBJOTE1X05FRURfR0ZYX0hXUyhkZXYpIChJU19HMzMoZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgSVNfRzRYKGRldikpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmU2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0wLDAgKzEsMjU3MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkgdWludDY0X3Qgc2l6ZSwKKwkJCQkgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludAoraTkxNV9nZW1fc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworaW50CitpOTE1X2dlbV9pbml0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgKmFyZ3MgPSBkYXRhOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKGFyZ3MtPmd0dF9zdGFydCA+PSBhcmdzLT5ndHRfZW5kIHx8CisJICAgIChhcmdzLT5ndHRfc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDAgfHwKKwkgICAgKGFyZ3MtPmd0dF9lbmQgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBhcmdzLT5ndHRfc3RhcnQsCisJICAgIGFyZ3MtPmd0dF9lbmQgLSBhcmdzLT5ndHRfc3RhcnQpOworCisJZGV2LT5ndHRfdG90YWwgPSAodWludDMyX3QpIChhcmdzLT5ndHRfZW5kIC0gYXJncy0+Z3R0X3N0YXJ0KTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IG1tIG9iamVjdCBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBpdC4KKyAqLworaW50CitpOTE1X2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCBoYW5kbGUsIHJldDsKKworCWFyZ3MtPnNpemUgPSByb3VuZHVwKGFyZ3MtPnNpemUsIFBBR0VfU0laRSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCAqLworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgYXJncy0+c2l6ZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG9iaiwgJmhhbmRsZSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgorICoKKyAqIE9uIGVycm9yLCB0aGUgY29udGVudHMgb2YgKmRhdGEgYXJlIHVuZGVmaW5lZC4KKyAqLworaW50CitpOTE1X2dlbV9wcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlzc2l6ZV90IHJlYWQ7CisJbG9mZl90IG9mZnNldDsKKwlpbnQgcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBCb3VuZHMgY2hlY2sgc291cmNlLgorCSAqCisJICogWFhYOiBUaGlzIGNvdWxkIHVzZSByZXZpZXcgZm9yIG92ZXJmbG93IGlzc3Vlcy4uLgorCSAqLworCWlmIChhcmdzLT5vZmZzZXQgPiBvYmotPnNpemUgfHwgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSB8fAorCSAgICBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplID4gb2JqLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluX3JhbmdlKG9iaiwgYXJncy0+b2Zmc2V0LCBhcmdzLT5zaXplLAorCQkJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCXJlYWQgPSB2ZnNfcmVhZChvYmotPmZpbHAsIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+ZGF0YV9wdHIsCisJCQlhcmdzLT5zaXplLCAmb2Zmc2V0KTsKKwlpZiAocmVhZCAhPSBhcmdzLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAocmVhZCA8IDApCisJCQlyZXR1cm4gcmVhZDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVHJ5IHRvIHdyaXRlIHF1aWNrbHkgd2l0aCBhbiBhdG9taWMga21hcC4gUmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KKyAqCisgKiBJZiB0aGlzIGZhaWxzICh3aGljaCBpbmNsdWRlcyBhIHBhcnRpYWwgd3JpdGUpLCB3ZSdsbCByZWRvIHRoZSB3aG9sZQorICogdGhpbmcgd2l0aCB0aGUgc2xvdyB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgbG93IHBlcmZvcm1hbmNlIG9mIGlvdW5tYXAgKGFwcHJveGltYXRlCisgKiAxMCUgY3B1IGNvc3Qgb24gbm9ybWFsIDNEIHdvcmtsb2FkcykuICBrbWFwX2F0b21pYyBvbiBISUdITUVNIGtlcm5lbHMKKyAqIGhhcHBlbnMgdG8gbGV0IHVzIG1hcCBjYXJkIG1lbW9yeSB3aXRob3V0IHRha2luZyBJUElzLiAgV2hlbiB0aGUgdm1hcAorICogcmV3b3JrIGxhbmRzIHdlIHNob3VsZCBiZSBhYmxlIHRvIGR1bXAgdGhpcyBoYWNrLgorICovCitzdGF0aWMgaW5saW5lIGludCBmYXN0X3VzZXJfd3JpdGUodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgX191c2VyICp1c2VyX2RhdGEsCisJCQkJICBpbnQgbCwgaW50IG8pCit7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwl1bnNpZ25lZCBsb25nIHVud3JpdHRlbjsKKwljaGFyICp2YWRkcl9hdG9taWM7CisKKwl2YWRkcl9hdG9taWMgPSBrbWFwX2F0b21pY19wZm4ocGZuLCBLTV9VU0VSMCk7CisjaWYgV0FUQ0hfUFdSSVRFCisJRFJNX0lORk8oInB3cml0ZSBpICVkIG8gJWQgbCAlZCBwZm4gJWxkIHZhZGRyICVwXG4iLAorCQkgaSwgbywgbCwgcGZuLCB2YWRkcl9hdG9taWMpOworI2VuZGlmCisJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pY19ub2NhY2hlKHZhZGRyX2F0b21pYyArIG8sIHVzZXJfZGF0YSwgbCk7CisJa3VubWFwX2F0b21pYyh2YWRkcl9hdG9taWMsIEtNX1VTRVIwKTsKKwlyZXR1cm4gIXVud3JpdHRlbjsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fZ3R0X3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzc2l6ZV90IHJlbWFpbjsKKwlsb2ZmX3Qgb2Zmc2V0OworCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwl1c2VyX2RhdGEgPSAoY2hhciBfX3VzZXIgKikgKHVpbnRwdHJfdCkgYXJncy0+ZGF0YV9wdHI7CisJcmVtYWluID0gYXJncy0+c2l6ZTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9kYXRhLCByZW1haW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCAwKTsKKwlpZiAocmV0KSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBpOTE1X2dlbV9zZXRfZG9tYWluKG9iaiwgZmlsZV9wcml2LAorCQkJCSAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgYXJncy0+b2Zmc2V0OworCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQl1bnNpZ25lZCBsb25nIHBmbjsKKwkJaW50IGksIG8sIGw7CisKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBpID0gcGFnZSBudW1iZXIKKwkJICogbyA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBsID0gYnl0ZXMgdG8gY29weQorCQkgKi8KKwkJaSA9IG9mZnNldCA+PiBQQUdFX1NISUZUOworCQlvID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJbCA9IHJlbWFpbjsKKwkJaWYgKChvICsgbCkgPiBQQUdFX1NJWkUpCisJCQlsID0gUEFHRV9TSVpFIC0gbzsKKworCQlwZm4gPSAoZGV2LT5hZ3AtPmJhc2UgPj4gUEFHRV9TSElGVCkgKyBpOworCisJCWlmICghZmFzdF91c2VyX3dyaXRlKHBmbiwgdXNlcl9kYXRhLCBsLCBvKSkgeworCQkJdW5zaWduZWQgbG9uZyB1bndyaXR0ZW47CisJCQljaGFyIF9faW9tZW0gKnZhZGRyOworCisJCQl2YWRkciA9IGlvcmVtYXBfd2MocGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CisjaWYgV0FUQ0hfUFdSSVRFCisJCQlEUk1fSU5GTygicHdyaXRlIHNsb3cgaSAlZCBvICVkIGwgJWQgIgorCQkJCSAicGZuICVsZCB2YWRkciAlcFxuIiwKKwkJCQkgaSwgbywgbCwgcGZuLCB2YWRkcik7CisjZW5kaWYKKwkJCWlmICh2YWRkciA9PSBOVUxMKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyKHZhZGRyICsgbywgdXNlcl9kYXRhLCBsKTsKKyNpZiBXQVRDSF9QV1JJVEUKKwkJCURSTV9JTkZPKCJ1bndyaXR0ZW4gJWxkXG4iLCB1bndyaXR0ZW4pOworI2VuZGlmCisJCQlpb3VubWFwKHZhZGRyKTsKKwkJCWlmICh1bndyaXR0ZW4pIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfQorCisJCXJlbWFpbiAtPSBsOworCQl1c2VyX2RhdGEgKz0gbDsKKwkJb2Zmc2V0ICs9IGw7CisJfQorI2lmIFdBVENIX1BXUklURSAmJiAxCisJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwlpOTE1X2dlbV9kdW1wX29iamVjdChvYmosIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUsIF9fZnVuY19fLCB+MCk7CisJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKyNlbmRpZgorCitmYWlsOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHdyaXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJaW50IHJldDsKKwlsb2ZmX3Qgb2Zmc2V0OworCXNzaXplX3Qgd3JpdHRlbjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX3NldF9kb21haW4ob2JqLCBmaWxlX3ByaXYsCisJCQkJICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlpZiAocmV0KSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCXdyaXR0ZW4gPSB2ZnNfd3JpdGUob2JqLT5maWxwLAorCQkJICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyLAorCQkJICAgIGFyZ3MtPnNpemUsICZvZmZzZXQpOworCWlmICh3cml0dGVuICE9IGFyZ3MtPnNpemUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmICh3cml0dGVuIDwgMCkKKwkJCXJldHVybiB3cml0dGVuOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFdyaXRlcyBkYXRhIHRvIHRoZSBvYmplY3QgcmVmZXJlbmNlZCBieSBoYW5kbGUuCisgKgorICogT24gZXJyb3IsIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHRoYXQgd2VyZSB0byBiZSBtb2RpZmllZCBhcmUgdW5kZWZpbmVkLgorICovCitpbnQKK2k5MTVfZ2VtX3B3cml0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQgPSAwOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBCb3VuZHMgY2hlY2sgZGVzdGluYXRpb24uCisJICoKKwkgKiBYWFg6IFRoaXMgY291bGQgdXNlIHJldmlldyBmb3Igb3ZlcmZsb3cgaXNzdWVzLi4uCisJICovCisJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIHx8CisJICAgIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUgPiBvYmotPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2UgY2FuIG9ubHkgZG8gdGhlIEdUVCBwd3JpdGUgb24gdW50aWxlZCBidWZmZXJzLCBhcyBvdGhlcndpc2UKKwkgKiBpdCB3b3VsZCBlbmQgdXAgZ29pbmcgdGhyb3VnaCB0aGUgZmVuY2VkIGFjY2VzcywgYW5kIHdlJ2xsIGdldAorCSAqIGRpZmZlcmVudCBkZXRpbGluZyBiZWhhdmlvciBiZXR3ZWVuIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisJICogcHJlYWQvcHdyaXRlIGN1cnJlbnRseSBhcmUgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRoZSBDUFUKKwkgKiBwZXJzcGVjdGl2ZSwgcmVxdWlyaW5nIG1hbnVhbCBkZXRpbGluZyBieSB0aGUgY2xpZW50LgorCSAqLworCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfTk9ORSAmJgorCSAgICBkZXYtPmd0dF90b3RhbCAhPSAwKQorCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCWVsc2UKKwkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCisjaWYgV0FUQ0hfUFdSSVRFCisJaWYgKHJldCkKKwkJRFJNX0lORk8oInB3cml0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisjZW5kaWYKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHVzZXIgc3BhY2UgcHJlcGFyZXMgdG8gdXNlIGFuIG9iamVjdAorICovCitpbnQKK2k5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oInNldF9kb21haW5faW9jdGwgJXAoJWQpLCAlMDh4ICUwOHhcbiIsCisJCSBvYmosIG9iai0+c2l6ZSwgYXJncy0+cmVhZF9kb21haW5zLCBhcmdzLT53cml0ZV9kb21haW4pOworI2VuZGlmCisJcmV0ID0gaTkxNV9nZW1fc2V0X2RvbWFpbihvYmosIGZpbGVfcHJpdiwKKwkJCQkgIGFyZ3MtPnJlYWRfZG9tYWlucywgYXJncy0+d3JpdGVfZG9tYWluKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gdXNlciBzcGFjZSBoYXMgZG9uZSB3cml0ZXMgdG8gdGhpcyBidWZmZXIKKyAqLworaW50CitpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6IHN3X2ZpbmlzaCAlZCAoJXAgJWQpXG4iLAorCQkgX19mdW5jX18sIGFyZ3MtPmhhbmRsZSwgb2JqLCBvYmotPnNpemUpOworI2VuZGlmCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogUGlubmVkIGJ1ZmZlcnMgbWF5IGJlIHNjYW5vdXQsIHNvIGZsdXNoIHRoZSBjYWNoZSAqLworCWlmICgob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSAmJiBvYmpfcHJpdi0+cGluX2NvdW50KSB7CisJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOworCX0KKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogTWFwcyB0aGUgY29udGVudHMgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlIGFkZHJlc3MgaXQgaXMgbWFwcGVkCisgKiBpbnRvLgorICoKKyAqIFdoaWxlIHRoZSBtYXBwaW5nIGhvbGRzIGEgcmVmZXJlbmNlIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LCBpdCBkb2Vzbid0CisgKiBpbXBseSBhIHJlZiBvbiB0aGUgb2JqZWN0IGl0c2VsZi4KKyAqLworaW50CitpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJbG9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJYWRkciA9IGRvX21tYXAob2JqLT5maWxwLCAwLCBhcmdzLT5zaXplLAorCQkgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKwkJICAgICAgIGFyZ3MtPm9mZnNldCk7CisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKElTX0VSUigodm9pZCAqKWFkZHIpKQorCQlyZXR1cm4gYWRkcjsKKworCWFyZ3MtPmFkZHJfcHRyID0gKHVpbnQ2NF90KSBhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgaTsKKworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0ID09IE5VTEwpCisJCXJldHVybjsKKworCisJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykKKwkJaWYgKG9ial9wcml2LT5wYWdlX2xpc3RbaV0gIT0gTlVMTCkgeworCQkJaWYgKG9ial9wcml2LT5kaXJ0eSkKKwkJCQlzZXRfcGFnZV9kaXJ0eShvYmpfcHJpdi0+cGFnZV9saXN0W2ldKTsKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChvYmpfcHJpdi0+cGFnZV9saXN0W2ldKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmpfcHJpdi0+cGFnZV9saXN0W2ldKTsKKwkJfQorCW9ial9wcml2LT5kaXJ0eSA9IDA7CisKKwlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9saXN0LAorCQkgcGFnZV9jb3VudCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlvYmpfcHJpdi0+cGFnZV9saXN0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEFkZCBhIHJlZmVyZW5jZSBpZiB3ZSdyZSBuZXdseSBlbnRlcmluZyB0aGUgYWN0aXZlIGxpc3QuICovCisJaWYgKCFvYmpfcHJpdi0+YWN0aXZlKSB7CisJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShvYmopOworCQlvYmpfcHJpdi0+YWN0aXZlID0gMTsKKwl9CisJLyogTW92ZSBmcm9tIHdoYXRldmVyIGxpc3Qgd2Ugd2VyZSBvbiB0byB0aGUgdGFpbCBvZiBleGVjdXRpb24uICovCisJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5saXN0LAorCQkgICAgICAgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7Cit9CisKKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApCisJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKwllbHNlCisJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKKworCWlmIChvYmpfcHJpdi0+YWN0aXZlKSB7CisJCW9ial9wcml2LT5hY3RpdmUgPSAwOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCX0KKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBzZXF1ZW5jZSBudW1iZXIsIGVtaXR0aW5nIGEgd3JpdGUgb2YgaXQgdG8gdGhlIHN0YXR1cyBwYWdlCisgKiBwbHVzIGFuIGludGVycnVwdCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGk5MTVfdXNlcl9pbnRlcnJ1cHRfaGFuZGxlci4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHN0cnVjdF9sb2NrIGhlbGQuCisgKgorICogUmV0dXJuZWQgc2VxdWVuY2UgbnVtYmVycyBhcmUgbm9uemVybyBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgdWludDMyX3QKK2k5MTVfYWRkX3JlcXVlc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgZmx1c2hfZG9tYWlucykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJdWludDMyX3Qgc2Vxbm87CisJaW50IHdhc19lbXB0eTsKKwlSSU5HX0xPQ0FMUzsKKworCXJlcXVlc3QgPSBkcm1fY2FsbG9jKDEsIHNpemVvZigqcmVxdWVzdCksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAocmVxdWVzdCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIEdyYWIgdGhlIHNlcW5vIHdlJ3JlIGdvaW5nIHRvIG1ha2UgdGhpcyByZXF1ZXN0IGJlLCBhbmQgYnVtcCB0aGUKKwkgKiBuZXh0IChza2lwcGluZyAwIHNvIGl0IGNhbiBiZSB0aGUgcmVzZXJ2ZWQgbm8tc2Vxbm8gdmFsdWUpLgorCSAqLworCXNlcW5vID0gZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vOworCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubysrOworCWlmIChkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gPT0gMCkKKwkJZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vKys7CisKKwlCRUdJTl9MUF9SSU5HKDQpOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyhJOTE1X0dFTV9IV1NfSU5ERVggPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOworCU9VVF9SSU5HKHNlcW5vKTsKKworCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKKwlBRFZBTkNFX0xQX1JJTkcoKTsKKworCURSTV9ERUJVRygiJWRcbiIsIHNlcW5vKTsKKworCXJlcXVlc3QtPnNlcW5vID0gc2Vxbm87CisJcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzID0gamlmZmllczsKKwlyZXF1ZXN0LT5mbHVzaF9kb21haW5zID0gZmx1c2hfZG9tYWluczsKKwl3YXNfZW1wdHkgPSBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0LCAmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7CisKKwlpZiAod2FzX2VtcHR5ICYmICFkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywgSFopOworCXJldHVybiBzZXFubzsKK30KKworLyoqCisgKiBDb21tYW5kIGV4ZWN1dGlvbiBiYXJyaWVyCisgKgorICogRW5zdXJlcyB0aGF0IGFsbCBjb21tYW5kcyBpbiB0aGUgcmluZyBhcmUgZmluaXNoZWQKKyAqIGJlZm9yZSBzaWduYWxsaW5nIHRoZSBDUFUKKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X3JldGlyZV9jb21tYW5kcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGNtZCA9IE1JX0ZMVVNIIHwgTUlfTk9fV1JJVEVfRkxVU0g7CisJdWludDMyX3QgZmx1c2hfZG9tYWlucyA9IDA7CisJUklOR19MT0NBTFM7CisKKwkvKiBUaGUgc2FtcGxlciBhbHdheXMgZ2V0cyBmbHVzaGVkIG9uIGk5NjUgKHNpZ2gpICovCisJaWYgKElTX0k5NjVHKGRldikpCisJCWZsdXNoX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CisJQkVHSU5fTFBfUklORygyKTsKKwlPVVRfUklORyhjbWQpOworCU9VVF9SSU5HKDApOyAvKiBub29wICovCisJQURWQU5DRV9MUF9SSU5HKCk7CisJcmV0dXJuIGZsdXNoX2RvbWFpbnM7Cit9CisKKy8qKgorICogTW92ZXMgYnVmZmVycyBhc3NvY2lhdGVkIG9ubHkgd2l0aCB0aGUgZ2l2ZW4gYWN0aXZlIHNlcW5vIGZyb20gdGhlIGFjdGl2ZQorICogdG8gaW5hY3RpdmUgbGlzdCwgcG90ZW50aWFsbHkgZnJlZWluZyB0aGVtLgorICovCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qIE1vdmUgYW55IGJ1ZmZlcnMgb24gdGhlIGFjdGl2ZSBsaXN0IHRoYXQgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkCisJICogYnkgdGhlIHJpbmdidWZmZXIgdG8gdGhlIGZsdXNoaW5nL2luYWN0aXZlIGxpc3RzIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSkgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCSAgICBsaXN0KTsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQkvKiBJZiB0aGUgc2Vxbm8gYmVpbmcgcmV0aXJlZCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRlc3QgaW4gdGhlCisJCSAqIGxpc3QsIHRoZW4gdGhlIG9sZGVzdCBpbiB0aGUgbGlzdCBtdXN0IHN0aWxsIGJlIG5ld2VyIHRoYW4KKwkJICogdGhpcyBzZXFuby4KKwkJICovCisJCWlmIChvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gIT0gcmVxdWVzdC0+c2Vxbm8pCisJCQlyZXR1cm47CisjaWYgV0FUQ0hfTFJVCisJCURSTV9JTkZPKCIlczogcmV0aXJlICVkIG1vdmVzIHRvIGluYWN0aXZlIGxpc3QgJXBcbiIsCisJCQkgX19mdW5jX18sIHJlcXVlc3QtPnNlcW5vLCBvYmopOworI2VuZGlmCisKKwkJaWYgKG9iai0+d3JpdGVfZG9tYWluICE9IDApIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJCQkgICAgICAgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJCX0KKwl9CisKKwlpZiAocmVxdWVzdC0+Zmx1c2hfZG9tYWlucyAhPSAwKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKm5leHQ7CisKKwkJLyogQ2xlYXIgdGhlIHdyaXRlIGRvbWFpbiBhbmQgYWN0aXZpdHkgZnJvbSBhbnkgYnVmZmVycworCQkgKiB0aGF0IGFyZSBqdXN0IHdhaXRpbmcgZm9yIGEgZmx1c2ggbWF0Y2hpbmcgdGhlIG9uZSByZXRpcmVkLgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCBuZXh0LAorCQkJCQkgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIHJlcXVlc3QtPmZsdXNoX2RvbWFpbnMpIHsKKwkJCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKKwkJCX0KKwkJfQorCisJfQorfQorCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2VxMi4KKyAqLworc3RhdGljIGludAoraTkxNV9zZXFub19wYXNzZWQodWludDMyX3Qgc2VxMSwgdWludDMyX3Qgc2VxMikKK3sKKwlyZXR1cm4gKGludDMyX3QpKHNlcTEgLSBzZXEyKSA+PSAwOworfQorCit1aW50MzJfdAoraTkxNV9nZXRfZ2VtX3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4gUkVBRF9IV1NQKGRldl9wcml2LCBJOTE1X0dFTV9IV1NfSU5ERVgpOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSByZXF1ZXN0IGxpc3QgYXMgc2VxdWVuY2UgbnVtYmVycyBhcmUgcGFzc2VkLgorICovCit2b2lkCitpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBzZXFubzsKKworCXNlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwkJdWludDMyX3QgcmV0aXJpbmdfc2Vxbm87CisKKwkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKKwkJCQkJICAgbGlzdCk7CisJCXJldGlyaW5nX3NlcW5vID0gcmVxdWVzdC0+c2Vxbm87CisKKwkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCByZXRpcmluZ19zZXFubykgfHwKKwkJICAgIGRldl9wcml2LT5tbS53ZWRnZWQpIHsKKwkJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0KGRldiwgcmVxdWVzdCk7CisKKwkJCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0KTsKKwkJCWRybV9mcmVlKHJlcXVlc3QsIHNpemVvZigqcmVxdWVzdCksIERSTV9NRU1fRFJJVkVSKTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCWRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQltbS5yZXRpcmVfd29yay53b3JrKTsKKwlkZXYgPSBkZXZfcHJpdi0+ZGV2OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCWlmICghZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCAmJgorCSAgICAhbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLCBIWik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKKy8qKgorICogV2FpdHMgZm9yIGEgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHNpZ25hbGVkLCBhbmQgY2xlYW5zIHVwIHRoZQorICogcmVxdWVzdCBhbmQgb2JqZWN0IGxpc3RzIGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQgZXZlbnQuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHNlcW5vKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQgPSAwOworCisJQlVHX09OKHNlcW5vID09IDApOworCisJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSwgc2Vxbm8pKSB7CisJCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IHNlcW5vOworCQlpOTE1X3VzZXJfaXJxX2dldChkZXYpOworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2X3ByaXYtPmlycV9xdWV1ZSwKKwkJCQkJICAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpLAorCQkJCQkJCQkgc2Vxbm8pIHx8CisJCQkJCSAgICAgICBkZXZfcHJpdi0+bW0ud2VkZ2VkKTsKKwkJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKKwkJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gMDsKKwl9CisJaWYgKGRldl9wcml2LT5tbS53ZWRnZWQpCisJCXJldCA9IC1FSU87CisKKwlpZiAocmV0ICYmIHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCURSTV9FUlJPUigiJXMgcmV0dXJucyAlZCAoYXdhaXRpbmcgJWQgYXQgJWQpXG4iLAorCQkJICBfX2Z1bmNfXywgcmV0LCBzZXFubywgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOworCisJLyogRGlyZWN0bHkgZGlzcGF0Y2ggcmVxdWVzdCByZXRpcmluZy4gIFdoaWxlIHdlIGhhdmUgdGhlIHdvcmsgcXVldWUKKwkgKiB0byBoYW5kbGUgdGhpcywgdGhlIHdhaXRlciBvbiBhIHJlcXVlc3Qgb2Z0ZW4gd2FudHMgYW4gYXNzb2NpYXRlZAorCSAqIGJ1ZmZlciB0byBoYXZlIG1hZGUgaXQgdG8gdGhlIGluYWN0aXZlIGxpc3QsIGFuZCB3ZSB3b3VsZCBuZWVkCisJICogYSBzZXBhcmF0ZSB3YWl0IHF1ZXVlIHRvIGhhbmRsZSB0aGF0LgorCSAqLworCWlmIChyZXQgPT0gMCkKKwkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkgICAgICAgdWludDMyX3QgaW52YWxpZGF0ZV9kb21haW5zLAorCSAgICAgICB1aW50MzJfdCBmbHVzaF9kb21haW5zKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGNtZDsKKwlSSU5HX0xPQ0FMUzsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiJXM6IGludmFsaWRhdGUgJTA4eCBmbHVzaCAlMDh4XG4iLCBfX2Z1bmNfXywKKwkJICBpbnZhbGlkYXRlX2RvbWFpbnMsIGZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisKKwlpZiAoZmx1c2hfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpCisJCWRybV9hZ3BfY2hpcHNldF9mbHVzaChkZXYpOworCisJaWYgKChpbnZhbGlkYXRlX2RvbWFpbnMgfCBmbHVzaF9kb21haW5zKSAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCQkgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCS8qCisJCSAqIHJlYWQvd3JpdGUgY2FjaGVzOgorCQkgKgorCQkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGlzIGFsd2F5cyBpbnZhbGlkYXRlZCwgYnV0IGlzCisJCSAqIG9ubHkgZmx1c2hlZCBpZiBNSV9OT19XUklURV9GTFVTSCBpcyB1bnNldC4gIE9uIDk2NSwgaXQgaXMKKwkJICogYWxzbyBmbHVzaGVkIGF0IDJkIHZlcnN1cyAzZCBwaXBlbGluZSBzd2l0Y2hlcy4KKwkJICoKKwkJICogcmVhZC1vbmx5IGNhY2hlczoKKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIgaXMgZmx1c2hlZCBvbiBwcmUtOTY1IGlmCisJCSAqIE1JX1JFQURfRkxVU0ggaXMgc2V0LCBhbmQgaXMgYWx3YXlzIGZsdXNoZWQgb24gOTY1LgorCQkgKgorCQkgKiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCBtYXkgbm90IGV4aXN0PworCQkgKgorCQkgKiBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCisJCSAqIGludmFsaWRhdGVkIHdoZW4gTUlfRVhFX0ZMVVNIIGlzIHNldC4KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgd2hpY2ggZXhpc3RzIG9uIDk2NSwgaXMKKwkJICogaW52YWxpZGF0ZWQgd2l0aCBldmVyeSBNSV9GTFVTSC4KKwkJICoKKwkJICogVExCczoKKwkJICoKKwkJICogT24gOTY1LCBUTEJzIGFzc29jaWF0ZWQgd2l0aCBJOTE1X0dFTV9ET01BSU5fQ09NTUFORAorCQkgKiBhbmQgSTkxNV9HRU1fRE9NQUlOX0NQVSBpbiBhcmUgaW52YWxpZGF0ZWQgYXQgUFRFIHdyaXRlIGFuZAorCQkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGFuZCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgorCQkgKiBhcmUgZmx1c2hlZCBhdCBhbnkgTUlfRkxVU0guCisJCSAqLworCisJCWNtZCA9IE1JX0ZMVVNIIHwgTUlfTk9fV1JJVEVfRkxVU0g7CisJCWlmICgoaW52YWxpZGF0ZV9kb21haW5zfGZsdXNoX2RvbWFpbnMpICYKKwkJICAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpCisJCQljbWQgJj0gfk1JX05PX1dSSVRFX0ZMVVNIOworCQlpZiAoIUlTX0k5NjVHKGRldikpIHsKKwkJCS8qCisJCQkgKiBPbiB0aGUgOTY1LCB0aGUgc2FtcGxlciBjYWNoZSBhbHdheXMgZ2V0cyBmbHVzaGVkCisJCQkgKiBhbmQgdGhpcyBiaXQgaXMgcmVzZXJ2ZWQuCisJCQkgKi8KKwkJCWlmIChpbnZhbGlkYXRlX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fU0FNUExFUikKKwkJCQljbWQgfD0gTUlfUkVBRF9GTFVTSDsKKwkJfQorCQlpZiAoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKQorCQkJY21kIHw9IE1JX0VYRV9GTFVTSDsKKworI2lmIFdBVENIX0VYRUMKKwkJRFJNX0lORk8oIiVzOiBxdWV1ZSBmbHVzaCAlMDh4IHRvIHJpbmdcbiIsIF9fZnVuY19fLCBjbWQpOworI2VuZGlmCisJCUJFR0lOX0xQX1JJTkcoMik7CisJCU9VVF9SSU5HKGNtZCk7CisJCU9VVF9SSU5HKDApOyAvKiBub29wICovCisJCUFEVkFOQ0VfTFBfUklORygpOworCX0KK30KKworLyoqCisgKiBFbnN1cmVzIHRoYXQgYWxsIHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMKKyAqIHNhZmUgdG8gdW5iaW5kIGZyb20gdGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCS8qIElmIHRoZXJlIGFyZSB3cml0ZXMgcXVldWVkIHRvIHRoZSBidWZmZXIsIGZsdXNoIGFuZAorCSAqIGNyZWF0ZSBhIG5ldyBzZXFubyB0byB3YWl0IGZvci4KKwkgKi8KKwlpZiAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpIHsKKwkJdWludDMyX3Qgd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCIlczogZmx1c2hpbmcgb2JqZWN0ICVwIGZyb20gd3JpdGUgZG9tYWluICUwOHhcbiIsCisJCQkgIF9fZnVuY19fLCBvYmosIHdyaXRlX2RvbWFpbik7CisjZW5kaWYKKwkJaTkxNV9nZW1fZmx1c2goZGV2LCAwLCB3cml0ZV9kb21haW4pOworCisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmopOworCQlvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwKKwkJCQkJCQkJICB3cml0ZV9kb21haW4pOworCQlCVUdfT04ob2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID09IDApOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IGZsdXNoIG1vdmVzIHRvIGV4ZWMgbGlzdCAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyByZW5kZXJpbmcgcXVldWVkIG9uIHRoZSBidWZmZXIgYmVpbmcgZXZpY3RlZCwgd2FpdCBmb3IKKwkgKiBpdC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPmFjdGl2ZSkgeworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IG9iamVjdCAlcCB3YWl0IGZvciBzZXFubyAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywgb2JqLCBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworI2VuZGlmCisJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBVbmJpbmRzIGFuIG9iamVjdCBmcm9tIHRoZSBHVFQgYXBlcnR1cmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldCA9IDA7CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6JWQgJXBcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgb2JqKTsKKwlEUk1fSU5GTygiZ3R0X3NwYWNlICVwXG4iLCBvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKyNlbmRpZgorCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgIT0gMCkgeworCQlEUk1fRVJST1IoIkF0dGVtcHRpbmcgdG8gdW5iaW5kIHBpbm5lZCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXYWl0IGZvciBhbnkgcmVuZGVyaW5nIHRvIGNvbXBsZXRlCisJICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIndhaXRfcmVuZGVyaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogTW92ZSB0aGUgb2JqZWN0IHRvIHRoZSBDUFUgZG9tYWluIHRvIGVuc3VyZSB0aGF0CisJICogYW55IHBvc3NpYmxlIENQVSB3cml0ZXMgd2hpbGUgaXQncyBub3QgaW4gdGhlIEdUVAorCSAqIGFyZSBmbHVzaGVkIHdoZW4gd2UgZ28gdG8gcmVtYXAgaXQuIFRoaXMgd2lsbAorCSAqIGFsc28gZW5zdXJlIHRoYXQgYWxsIHBlbmRpbmcgR1BVIHdyaXRlcyBhcmUgZmluaXNoZWQKKwkgKiBiZWZvcmUgd2UgdW5iaW5kLgorCSAqLworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwgSTkxNV9HRU1fRE9NQUlOX0NQVSwKKwkJCQkJIEk5MTVfR0VNX0RPTUFJTl9DUFUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJzZXRfZG9tYWluIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG9ial9wcml2LT5hZ3BfbWVtICE9IE5VTEwpIHsKKwkJZHJtX3VuYmluZF9hZ3Aob2JqX3ByaXYtPmFncF9tZW0pOworCQlkcm1fZnJlZV9hZ3Aob2JqX3ByaXYtPmFncF9tZW0sIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CisJCW9ial9wcml2LT5hZ3BfbWVtID0gTlVMTDsKKwl9CisKKwlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CisKKwlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKworCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlKSB7CisJCWF0b21pY19kZWMoJmRldi0+Z3R0X2NvdW50KTsKKwkJYXRvbWljX3N1YihvYmotPnNpemUsICZkZXYtPmd0dF9tZW1vcnkpOworCisJCWRybV9tbV9wdXRfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CisJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBOVUxMOworCX0KKworCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgTFJVIGxpc3QgaWYgcHJlc2VudC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9ial9wcml2LT5saXN0KSkKKwkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoOzspIHsKKwkJLyogSWYgdGhlcmUncyBhbiBpbmFjdGl2ZSBidWZmZXIgYXZhaWxhYmxlIG5vdywgZ3JhYiBpdAorCQkgKiBhbmQgYmUgZG9uZS4KKwkJICovCisJCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpKSB7CisJCQlvYmpfcHJpdiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAorCQkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCQkJICAgIGxpc3QpOworCQkJb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJCUJVR19PTihvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApOworI2lmIFdBVENIX0xSVQorCQkJRFJNX0lORk8oIiVzOiBldmljdGluZyAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwkJCUJVR19PTihvYmpfcHJpdi0+YWN0aXZlKTsKKworCQkJLyogV2FpdCBvbiB0aGUgcmVuZGVyaW5nIGFuZCB1bmJpbmQgdGhlIGJ1ZmZlci4gKi8KKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgd2UgZGlkbid0IGdldCBhbnl0aGluZywgYnV0IHRoZSByaW5nIGlzIHN0aWxsIHByb2Nlc3NpbmcKKwkJICogdGhpbmdzLCB3YWl0IGZvciBvbmUgb2YgdGhvc2UgdGhpbmdzIHRvIGZpbmlzaCBhbmQgaG9wZWZ1bGx5CisJCSAqIGxlYXZlIHVzIGEgYnVmZmVyIHRvIGV2aWN0LgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSkgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJCQlyZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCwKKwkJCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKKwkJCQkJCSAgIGxpc3QpOworCisJCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChkZXYsIHJlcXVlc3QtPnNlcW5vKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisKKwkJCS8qIGlmIHdhaXRpbmcgY2F1c2VkIGFuIG9iamVjdCB0byBiZWNvbWUgaW5hY3RpdmUsCisJCQkgKiB0aGVuIGxvb3AgYXJvdW5kIGFuZCB3YWl0IGZvciBpdC4gT3RoZXJ3aXNlLCB3ZQorCQkJICogYXNzdW1lIHRoYXQgd2FpdGluZyBmcmVlZCBhbmQgdW5ib3VuZCBzb21ldGhpbmcsCisJCQkgKiBzbyB0aGVyZSBzaG91bGQgbm93IGJlIHNvbWUgc3BhY2UgaW4gdGhlIEdUVAorCQkJICovCisJCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgd2UgZGlkbid0IGhhdmUgYW55dGhpbmcgb24gdGhlIHJlcXVlc3QgbGlzdCBidXQgdGhlcmUKKwkJICogYXJlIGJ1ZmZlcnMgYXdhaXRpbmcgYSBmbHVzaCwgZW1pdCBvbmUgYW5kIHRyeSBhZ2Fpbi4KKwkJICogV2hlbiB3ZSB3YWl0IG9uIGl0LCB0aG9zZSBidWZmZXJzIHdhaXRpbmcgZm9yIHRoYXQgZmx1c2gKKwkJICogd2lsbCBnZXQgbW92ZWQgdG8gaW5hY3RpdmUuCisJCSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSkgeworCQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJCSAgICBsaXN0KTsKKwkJCW9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKKwkJCQkgICAgICAgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9iai0+d3JpdGVfZG9tYWluKTsKKwkJCWk5MTVfYWRkX3JlcXVlc3QoZGV2LCBvYmotPndyaXRlX2RvbWFpbik7CisKKwkJCW9iaiA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCURSTV9FUlJPUigiaW5hY3RpdmUgZW1wdHkgJWQgcmVxdWVzdCBlbXB0eSAlZCAiCisJCQkgICJmbHVzaGluZyBlbXB0eSAlZFxuIiwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpLAorCQkJICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKKwkJLyogSWYgd2UgZGlkbid0IGRvIGFueSBvZiB0aGUgYWJvdmUsIHRoZXJlJ3Mgbm90aGluZyB0byBiZSBkb25lCisJCSAqIGFuZCB3ZSBqdXN0IGNhbid0IGZpdCBpdCBpbi4KKwkJICovCisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCBwYWdlX2NvdW50LCBpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldDsKKworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0KQorCQlyZXR1cm4gMDsKKworCS8qIEdldCB0aGUgbGlzdCBvZiBwYWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhleSdsbCBiZSBwaW5uZWQKKwkgKiBhdCB0aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4KKwkgKi8KKwlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOworCUJVR19PTihvYmpfcHJpdi0+cGFnZV9saXN0ICE9IE5VTEwpOworCW9ial9wcml2LT5wYWdlX2xpc3QgPSBkcm1fY2FsbG9jKHBhZ2VfY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFsZWQgdG8gYWxsb2NhdGUgcGFnZSBsaXN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5vZGUgPSBvYmotPmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgeworCQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgaSwgTlVMTCk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQlEUk1fRVJST1IoInJlYWRfbWFwcGluZ19wYWdlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJb2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSA9IHBhZ2U7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIEZpbmRzIGZyZWUgc3BhY2UgaW4gdGhlIEdUVCBhcGVydHVyZSBhbmQgYmluZHMgdGhlIG9iamVjdCB0aGVyZS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBhbGlnbm1lbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9tbV9ub2RlICpmcmVlX3NwYWNlOworCWludCBwYWdlX2NvdW50LCByZXQ7CisKKwlpZiAoYWxpZ25tZW50ID09IDApCisJCWFsaWdubWVudCA9IFBBR0VfU0laRTsKKwlpZiAoYWxpZ25tZW50ICYgKFBBR0VfU0laRSAtIDEpKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgYWxpZ25tZW50IHJlcXVlc3RlZCAldVxuIiwgYWxpZ25tZW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisgc2VhcmNoX2ZyZWU6CisJZnJlZV9zcGFjZSA9IGRybV9tbV9zZWFyY2hfZnJlZSgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwKKwkJCQkJb2JqLT5zaXplLCBhbGlnbm1lbnQsIDApOworCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpIHsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IGRybV9tbV9nZXRfYmxvY2soZnJlZV9zcGFjZSwgb2JqLT5zaXplLAorCQkJCQkJICAgICAgIGFsaWdubWVudCk7CisJCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlICE9IE5VTEwpIHsKKwkJCW9ial9wcml2LT5ndHRfc3BhY2UtPnByaXZhdGUgPSBvYmo7CisJCQlvYmpfcHJpdi0+Z3R0X29mZnNldCA9IG9ial9wcml2LT5ndHRfc3BhY2UtPnN0YXJ0OworCQl9CisJfQorCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJLyogSWYgdGhlIGd0dCBpcyBlbXB0eSBhbmQgd2UncmUgc3RpbGwgaGF2aW5nIHRyb3VibGUKKwkJICogZml0dGluZyBvdXIgb2JqZWN0IGluLCB3ZSdyZSBvdXQgb2YgbWVtb3J5LgorCQkgKi8KKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBHVFQgZnVsbCwgZXZpY3Rpbmcgc29tZXRoaW5nXG4iLCBfX2Z1bmNfXyk7CisjZW5kaWYKKwkJaWYgKGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpICYmCisJCSAgICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKSB7CisJCQlEUk1fRVJST1IoIkdUVCBmdWxsLCBidXQgTFJVIGxpc3QgZW1wdHlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoZGV2KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBldmljdCBhIGJ1ZmZlciAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZ290byBzZWFyY2hfZnJlZTsKKwl9CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiQmluZGluZyBvYmplY3Qgb2Ygc2l6ZSAlZCBhdCAweCUwOHhcbiIsCisJCSBvYmotPnNpemUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKyNlbmRpZgorCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KG9iaik7CisJaWYgKHJldCkgeworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwYWdlX2NvdW50ID0gb2JqLT5zaXplIC8gUEFHRV9TSVpFOworCS8qIENyZWF0ZSBhbiBBR1AgbWVtb3J5IHN0cnVjdHVyZSBwb2ludGluZyBhdCBvdXIgcGFnZXMsIGFuZCBiaW5kIGl0CisJICogaW50byB0aGUgR1RULgorCSAqLworCW9ial9wcml2LT5hZ3BfbWVtID0gZHJtX2FncF9iaW5kX3BhZ2VzKGRldiwKKwkJCQkJICAgICAgIG9ial9wcml2LT5wYWdlX2xpc3QsCisJCQkJCSAgICAgICBwYWdlX2NvdW50LAorCQkJCQkgICAgICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+YWdwX3R5cGUpOworCWlmIChvYmpfcHJpdi0+YWdwX21lbSA9PSBOVUxMKSB7CisJCWk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChvYmopOworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWF0b21pY19pbmMoJmRldi0+Z3R0X2NvdW50KTsKKwlhdG9taWNfYWRkKG9iai0+c2l6ZSwgJmRldi0+Z3R0X21lbW9yeSk7CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IEdQVSBkb21haW4uIEFzIGl0CisJICogd2Fzbid0IGluIHRoZSBHVFQsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgd2F5IGl0IGNvdWxkIGhhdmUgYmVlbiBpbgorCSAqIGEgR1BVIGNhY2hlCisJICovCisJQlVHX09OKG9iai0+cmVhZF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKwlCVUdfT04ob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgcGFnZSBsaXN0IHNldCB1cCwgdGhlbiB3ZSdyZSBub3QgcGlubmVkCisJICogdG8gR1BVLCBhbmQgd2UgY2FuIGlnbm9yZSB0aGUgY2FjaGUgZmx1c2ggYmVjYXVzZSBpdCdsbCBoYXBwZW4KKwkgKiBhZ2FpbiBhdCBiaW5kIHRpbWUuCisJICovCisJaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCwgb2JqLT5zaXplIC8gUEFHRV9TSVpFKTsKK30KKworLyoKKyAqIFNldCB0aGUgbmV4dCBkb21haW4gZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0LiBUaGlzCisgKiBtYXkgbm90IGFjdHVhbGx5IHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBmbHVzaGluZy9pbnZhbGlkaW5nIHRob3VnaCwKKyAqIGFzIHRoYXQgbWF5IHdhbnQgdG8gYmUgYmF0Y2hlZCB3aXRoIG90aGVyIHNldF9kb21haW4gb3BlcmF0aW9ucworICoKKyAqIFRoaXMgaXMgKHdlIGhvcGUpIHRoZSBvbmx5IHJlYWxseSB0cmlja3kgcGFydCBvZiBnZW0uIFRoZSBnb2FsCisgKiBpcyBmYWlybHkgc2ltcGxlIC0tIHRyYWNrIHdoaWNoIGNhY2hlcyBob2xkIGJpdHMgb2YgdGhlIG9iamVjdAorICogYW5kIG1ha2Ugc3VyZSB0aGV5IHJlbWFpbiBjb2hlcmVudC4gQSBmZXcgY29uY3JldGUgZXhhbXBsZXMgbWF5CisgKiBoZWxwIHRvIGV4cGxhaW4gaG93IGl0IHdvcmtzLiBGb3Igc2hvcnRoYW5kLCB3ZSB1c2UgdGhlIG5vdGF0aW9uCisgKiAocmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pLCBlLmcuIChDUFUsIENQVSkgdG8gaW5kaWNhdGUgdGhlCisgKiBhIHBhaXIgb2YgcmVhZCBhbmQgd3JpdGUgZG9tYWluIG1hc2tzLgorICoKKyAqIENhc2UgMTogdGhlIGJhdGNoIGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gV3JpdHRlbiBieSBDUFUKKyAqCTMuIE1hcHBlZCB0byBHVFQKKyAqCTQuIFJlYWQgYnkgR1BVCisgKgk1LiBVbm1hcHBlZCBmcm9tIEdUVAorICoJNi4gRnJlZWQKKyAqCisgKglMZXQncyB0YWtlIHRoZXNlIGEgc3RlcCBhdCBhIHRpbWUKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCQlQYWdlcyBhbGxvY2F0ZWQgZnJvbSB0aGUga2VybmVsIG1heSBzdGlsbCBoYXZlCisgKgkJY2FjaGUgY29udGVudHMsIHNvIHdlIHNldCB0aGVtIHRvIChDUFUsIENQVSkgYWx3YXlzLgorICoJMi4gV3JpdHRlbiBieSBDUFUgKHVzaW5nIHB3cml0ZSkKKyAqCQlUaGUgcHdyaXRlIGZ1bmN0aW9uIGNhbGxzIHNldF9kb21haW4gKENQVSwgQ1BVKSBhbmQKKyAqCQl0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyAoYXMgbm90aGluZyBjaGFuZ2VzKQorICoJMy4gTWFwcGVkIGJ5IEdUVAorICoJCVRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGF0IHRoZSBvYmplY3QgaXMgbm90CisgKgkJY3VycmVudGx5IGluIGFueSBHUFUtYmFzZWQgcmVhZCBvciB3cml0ZSBkb21haW5zCisgKgk0LiBSZWFkIGJ5IEdQVQorICoJCWk5MTVfZ2VtX2V4ZWNidWZmZXIgY2FsbHMgc2V0X2RvbWFpbiAoQ09NTUFORCwgMCkuCisgKgkJQXMgd3JpdGVfZG9tYWluIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gYWRkcyBpbiB0aGUKKyAqCQljdXJyZW50IHJlYWQgZG9tYWlucyAoQ1BVK0NPTU1BTkQsIDApLgorICoJCWZsdXNoX2RvbWFpbnMgaXMgc2V0IHRvIENQVS4KKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgaXMgc2V0IHRvIENPTU1BTkQKKyAqCQljbGZsdXNoIGlzIHJ1biB0byBnZXQgZGF0YSBvdXQgb2YgdGhlIENQVSBjYWNoZXMKKyAqCQl0aGVuIGk5MTVfZGV2X3NldF9kb21haW4gY2FsbHMgaTkxNV9nZW1fZmx1c2ggdG8KKyAqCQllbWl0IGFuIE1JX0ZMVVNIIGFuZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTUuIFVubWFwcGVkIGZyb20gR1RUCisgKgkJaTkxNV9nZW1fb2JqZWN0X3VuYmluZCBjYWxscyBzZXRfZG9tYWluIChDUFUsIENQVSkKKyAqCQlmbHVzaF9kb21haW5zIGFuZCBpbnZhbGlkYXRlX2RvbWFpbnMgZW5kIHVwIGJvdGggemVybworICoJCXNvIG5vIGZsdXNoaW5nL2ludmFsaWRhdGluZyBoYXBwZW5zCisgKgk2LiBGcmVlZAorICoJCXlheSwgZG9uZQorICoKKyAqIENhc2UgMjogVGhlIHNoYXJlZCByZW5kZXIgYnVmZmVyCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkyLiBNYXBwZWQgdG8gR1RUCisgKgkzLiBSZWFkL3dyaXR0ZW4gYnkgR1BVCisgKgk0LiBzZXRfZG9tYWluIHRvIChDUFUsQ1BVKQorICoJNS4gUmVhZC93cml0dGVuIGJ5IENQVQorICoJNi4gUmVhZC93cml0dGVuIGJ5IEdQVQorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJCVNhbWUgYXMgbGFzdCBleGFtcGxlLCAoQ1BVLCBDUFUpCisgKgkyLiBNYXBwZWQgdG8gR1RUCisgKgkJTm90aGluZyBjaGFuZ2VzIChhc3NlcnRpb25zIGZpbmQgdGhhdCBpdCBpcyBub3QgaW4gdGhlIEdQVSkKKyAqCTMuIFJlYWQvd3JpdHRlbiBieSBHUFUKKyAqCQlleGVjYnVmZmVyIGNhbGxzIHNldF9kb21haW4gKFJFTkRFUiwgUkVOREVSKQorICoJCWZsdXNoX2RvbWFpbnMgZ2V0cyBDUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgZ2V0cyBHUFUKKyAqCQljbGZsdXNoIChvYmopCisgKgkJTUlfRkxVU0ggYW5kIGRybV9hZ3BfY2hpcHNldF9mbHVzaAorICoJNC4gc2V0X2RvbWFpbiAoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyBnZXRzIEdQVQorICoJCWludmFsaWRhdGVfZG9tYWlucyBnZXRzIENQVQorICoJCXdhaXRfcmVuZGVyaW5nIChvYmopIHRvIG1ha2Ugc3VyZSBhbGwgZHJhd2luZyBpcyBjb21wbGV0ZS4KKyAqCQlUaGlzIHdpbGwgaW5jbHVkZSBhbiBNSV9GTFVTSCB0byBnZXQgdGhlIGRhdGEgZnJvbSBHUFUKKyAqCQl0byBtZW1vcnkKKyAqCQljbGZsdXNoIChvYmopIHRvIGludmFsaWRhdGUgdGhlIENQVSBjYWNoZQorICoJCUFub3RoZXIgTUlfRkxVU0ggaW4gaTkxNV9nZW1fZmx1c2ggKGVsaW1pbmF0ZSB0aGlzIHNvbWVob3c/KQorICoJNS4gUmVhZC93cml0dGVuIGJ5IENQVQorICoJCWNhY2hlIGxpbmVzIGFyZSBsb2FkZWQgYW5kIGRpcnRpZWQKKyAqCTYuIFJlYWQgd3JpdHRlbiBieSBHUFUKKyAqCQlTYW1lIGFzIGxhc3QgR1BVIGFjY2VzcworICoKKyAqIENhc2UgMzogVGhlIGNvbnN0YW50IGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gV3JpdHRlbiBieSBDUFUKKyAqCTMuIFJlYWQgYnkgR1BVCisgKgk0LiBVcGRhdGVkICh3cml0dGVuKSBieSBDUFUgYWdhaW4KKyAqCTUuIFJlYWQgYnkgR1BVCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkJKENQVSwgQ1BVKQorICoJMi4gV3JpdHRlbiBieSBDUFUKKyAqCQkoQ1BVLCBDUFUpCisgKgkzLiBSZWFkIGJ5IEdQVQorICoJCShDUFUrUkVOREVSLCAwKQorICoJCWZsdXNoX2RvbWFpbnMgPSBDUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSBSRU5ERVIKKyAqCQljbGZsdXNoIChvYmopCisgKgkJTUlfRkxVU0gKKyAqCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTQuIFVwZGF0ZWQgKHdyaXR0ZW4pIGJ5IENQVSBhZ2FpbgorICoJCShDUFUsIENQVSkKKyAqCQlmbHVzaF9kb21haW5zID0gMCAobm8gcHJldmlvdXMgd3JpdGUgZG9tYWluKQorICoJCWludmFsaWRhdGVfZG9tYWlucyA9IDAgKG5vIG5ldyByZWFkIGRvbWFpbnMpCisgKgk1LiBSZWFkIGJ5IEdQVQorICoJCShDUFUrUkVOREVSLCAwKQorICoJCWZsdXNoX2RvbWFpbnMgPSBDUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSBSRU5ERVIKKyAqCQljbGZsdXNoIChvYmopCisgKgkJTUlfRkxVU0gKKyAqCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJICAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZQkJKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJdWludDMyX3QJCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwOworCXVpbnQzMl90CQkJZmx1c2hfZG9tYWlucyA9IDA7CisJaW50CQkJCXJldDsKKworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCIlczogb2JqZWN0ICVwIHJlYWQgJTA4eCAtPiAlMDh4IHdyaXRlICUwOHggLT4gJTA4eFxuIiwKKwkJIF9fZnVuY19fLCBvYmosCisJCSBvYmotPnJlYWRfZG9tYWlucywgcmVhZF9kb21haW5zLAorCQkgb2JqLT53cml0ZV9kb21haW4sIHdyaXRlX2RvbWFpbik7CisjZW5kaWYKKwkvKgorCSAqIElmIHRoZSBvYmplY3QgaXNuJ3QgbW92aW5nIHRvIGEgbmV3IHdyaXRlIGRvbWFpbiwKKwkgKiBsZXQgdGhlIG9iamVjdCBzdGF5IGluIG11bHRpcGxlIHJlYWQgZG9tYWlucworCSAqLworCWlmICh3cml0ZV9kb21haW4gPT0gMCkKKwkJcmVhZF9kb21haW5zIHw9IG9iai0+cmVhZF9kb21haW5zOworCWVsc2UKKwkJb2JqX3ByaXYtPmRpcnR5ID0gMTsKKworCS8qCisJICogRmx1c2ggdGhlIGN1cnJlbnQgd3JpdGUgZG9tYWluIGlmCisJICogdGhlIG5ldyByZWFkIGRvbWFpbnMgZG9uJ3QgbWF0Y2guIEludmFsaWRhdGUKKwkgKiBhbnkgcmVhZCBkb21haW5zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBvbGQKKwkgKiB3cml0ZSBkb21haW4KKwkgKi8KKwlpZiAob2JqLT53cml0ZV9kb21haW4gJiYgb2JqLT53cml0ZV9kb21haW4gIT0gcmVhZF9kb21haW5zKSB7CisJCWZsdXNoX2RvbWFpbnMgfD0gb2JqLT53cml0ZV9kb21haW47CisJCWludmFsaWRhdGVfZG9tYWlucyB8PSByZWFkX2RvbWFpbnMgJiB+b2JqLT53cml0ZV9kb21haW47CisJfQorCS8qCisJICogSW52YWxpZGF0ZSBhbnkgcmVhZCBjYWNoZXMgd2hpY2ggbWF5IGhhdmUKKwkgKiBzdGFsZSBkYXRhLiBUaGF0IGlzLCBhbnkgbmV3IHJlYWQgZG9tYWlucy4KKwkgKi8KKwlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+cmVhZF9kb21haW5zOworCWlmICgoZmx1c2hfZG9tYWlucyB8IGludmFsaWRhdGVfZG9tYWlucykgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCIlczogQ1BVIGRvbWFpbiBmbHVzaCAlMDh4IGludmFsaWRhdGUgJTA4eFxuIiwKKwkJCSBfX2Z1bmNfXywgZmx1c2hfZG9tYWlucywgaW52YWxpZGF0ZV9kb21haW5zKTsKKyNlbmRpZgorCQkvKgorCQkgKiBJZiB3ZSdyZSBpbnZhbGlkaW5nIHRoZSBDUFUgY2FjaGUgYW5kIGZsdXNoaW5nIGEgR1BVIGNhY2hlLAorCQkgKiB0aGVuIHBhdXNlIGZvciByZW5kZXJpbmcgc28gdGhhdCB0aGUgR1BVIGNhY2hlcyB3aWxsIGJlCisJCSAqIGZsdXNoZWQgYmVmb3JlIHRoZSBjcHUgY2FjaGUgaXMgaW52YWxpZGF0ZWQKKwkJICovCisJCWlmICgoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgJiYKKwkJICAgIChmbHVzaF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwKKwkJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCkpKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCX0KKworCWlmICgod3JpdGVfZG9tYWluIHwgZmx1c2hfZG9tYWlucykgIT0gMCkKKwkJb2JqLT53cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW47CisKKwkvKiBJZiB3ZSdyZSBpbnZhbGlkYXRpbmcgdGhlIENQVSBkb21haW4sIGNsZWFyIHRoZSBwZXItcGFnZSBDUFUKKwkgKiBkb21haW4gbGlzdCBhcyB3ZWxsLgorCSAqLworCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgIT0gTlVMTCAmJgorCSAgICAod3JpdGVfZG9tYWluICE9IDAgfHwKKwkgICAgIHJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpKSB7CisJCWRybV9mcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCwgb2JqLT5zaXplIC8gUEFHRV9TSVpFLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID0gTlVMTDsKKwl9CisJb2JqLT5yZWFkX2RvbWFpbnMgPSByZWFkX2RvbWFpbnM7CisKKwlkZXYtPmludmFsaWRhdGVfZG9tYWlucyB8PSBpbnZhbGlkYXRlX2RvbWFpbnM7CisJZGV2LT5mbHVzaF9kb21haW5zIHw9IGZsdXNoX2RvbWFpbnM7CisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiByZWFkICUwOHggd3JpdGUgJTA4eCBpbnZhbGlkYXRlICUwOHggZmx1c2ggJTA4eFxuIiwKKwkJIF9fZnVuY19fLAorCQkgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkgZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMsIGRldi0+Zmx1c2hfZG9tYWlucyk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZXQgdGhlIHJlYWQvd3JpdGUgZG9tYWluIG9uIGEgcmFuZ2Ugb2YgdGhlIG9iamVjdC4KKyAqCisgKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgQ1BVIHJlYWRzLCBvdGhlcndpc2UgZHJvcHMgdG8gbm9ybWFsCisgKiBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbigpLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgdWludDY0X3Qgb2Zmc2V0LAorCQkJCSB1aW50NjRfdCBzaXplLAorCQkJCSB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkJIHVpbnQzMl90IHdyaXRlX2RvbWFpbikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQsIGk7CisKKwlpZiAob2JqLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWFkX2RvbWFpbnMgIT0gSTkxNV9HRU1fRE9NQUlOX0NQVSB8fAorCSAgICB3cml0ZV9kb21haW4gIT0gMCkKKwkJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwKKwkJCQkJCSAgcmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pOworCisJLyogV2FpdCBvbiBhbnkgR1BVIHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IHRvIGJlIGZsdXNoZWQuICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwgSTkxNV9HRU1fRE9NQUlOX0dUVCkpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgPT0gTlVMTCkgeworCQlvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQgPSBkcm1fY2FsbG9jKDEsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSwKKwkJCQkJCSAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwl9CisKKwkvKiBGbHVzaCB0aGUgY2FjaGUgb24gYW55IHBhZ2VzIHRoYXQgYXJlIHN0aWxsIGludmFsaWQgZnJvbSB0aGUgQ1BVJ3MKKwkgKiBwZXJzcGVjdGl2ZS4KKwkgKi8KKwlmb3IgKGkgPSBvZmZzZXQgLyBQQUdFX1NJWkU7IGkgPD0gKG9mZnNldCArIHNpemUgLSAxKSAvIFBBR0VfU0laRTsgaSsrKSB7CisJCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWRbaV0pCisJCQljb250aW51ZTsKKworCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0ICsgaSwgMSk7CisKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldID0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBPbmNlIGFsbCBvZiB0aGUgb2JqZWN0cyBoYXZlIGJlZW4gc2V0IGluIHRoZSBwcm9wZXIgZG9tYWluLAorICogcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGZsdXNoIGFuZCBpbnZhbGlkYXRlIG9wZXJhdGlvbnMuCisgKgorICogUmV0dXJucyB0aGUgd3JpdGUgZG9tYWlucyBmbHVzaGVkLCBmb3IgdXNlIGluIGZsdXNoIHRyYWNraW5nLgorICovCitzdGF0aWMgdWludDMyX3QKK2k5MTVfZ2VtX2Rldl9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdWludDMyX3QgZmx1c2hfZG9tYWlucyA9IGRldi0+Zmx1c2hfZG9tYWluczsKKworCS8qCisJICogTm93IHRoYXQgYWxsIHRoZSBidWZmZXJzIGFyZSBzeW5jZWQgdG8gdGhlIHByb3BlciBkb21haW5zLAorCSAqIGZsdXNoIGFuZCBpbnZhbGlkYXRlIHRoZSBjb2xsZWN0ZWQgZG9tYWlucworCSAqLworCWlmIChkZXYtPmludmFsaWRhdGVfZG9tYWlucyB8IGRldi0+Zmx1c2hfZG9tYWlucykgeworI2lmIFdBVENIX0VYRUMKKwkJRFJNX0lORk8oIiVzOiBpbnZhbGlkYXRlX2RvbWFpbnMgJTA4eCBmbHVzaF9kb21haW5zICUwOHhcbiIsCisJCQkgIF9fZnVuY19fLAorCQkJIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLAorCQkJIGRldi0+Zmx1c2hfZG9tYWlucyk7CisjZW5kaWYKKwkJaTkxNV9nZW1fZmx1c2goZGV2LAorCQkJICAgICAgIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLAorCQkJICAgICAgIGRldi0+Zmx1c2hfZG9tYWlucyk7CisJCWRldi0+aW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwkJZGV2LT5mbHVzaF9kb21haW5zID0gMDsKKwl9CisKKwlyZXR1cm4gZmx1c2hfZG9tYWluczsKK30KKworLyoqCisgKiBQaW4gYW4gb2JqZWN0IHRvIHRoZSBHVFQgYW5kIGV2YWx1YXRlIHRoZSByZWxvY2F0aW9ucyBsYW5kaW5nIGluIGl0LgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfcGluX2FuZF9yZWxvY2F0ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmVudHJ5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqcmVsb2NzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IGksIHJldDsKKwl1aW50MzJfdCBsYXN0X3JlbG9jX29mZnNldCA9IC0xOworCXZvaWQgX19pb21lbSAqcmVsb2NfcGFnZSA9IE5VTEw7CisKKwkvKiBDaG9vc2UgdGhlIEdUVCBvZmZzZXQgZm9yIG91ciBidWZmZXIgYW5kIHB1dCBpdCB0aGVyZS4gKi8KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgKHVpbnQzMl90KSBlbnRyeS0+YWxpZ25tZW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZW50cnktPm9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCisJcmVsb2NzID0gKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJICh1aW50cHRyX3QpIGVudHJ5LT5yZWxvY3NfcHRyOworCS8qIEFwcGx5IHRoZSByZWxvY2F0aW9ucywgdXNpbmcgdGhlIEdUVCBhcGVydHVyZSB0byBhdm9pZCBjYWNoZQorCSAqIGZsdXNoaW5nIHJlcXVpcmVtZW50cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnJlbG9jYXRpb25fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnRhcmdldF9vYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqX3ByaXY7CisJCXVpbnQzMl90IHJlbG9jX3ZhbCwgcmVsb2Nfb2Zmc2V0OworCQl1aW50MzJfdCBfX2lvbWVtICpyZWxvY19lbnRyeTsKKworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmcmVsb2MsIHJlbG9jcyArIGksIHNpemVvZihyZWxvYykpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXRhcmdldF9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAob2JqLT5kZXYsIGZpbGVfcHJpdiwKKwkJCQkJCSAgIHJlbG9jLnRhcmdldF9oYW5kbGUpOworCQlpZiAodGFyZ2V0X29iaiA9PSBOVUxMKSB7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUJBREY7CisJCX0KKwkJdGFyZ2V0X29ial9wcml2ID0gdGFyZ2V0X29iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJLyogVGhlIHRhcmdldCBidWZmZXIgc2hvdWxkIGhhdmUgYXBwZWFyZWQgYmVmb3JlIHVzIGluIHRoZQorCQkgKiBleGVjX29iamVjdCBsaXN0LCBzbyBpdCBzaG91bGQgaGF2ZSBhIEdUVCBzcGFjZSBib3VuZCBieSBub3cuCisJCSAqLworCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJObyBHVFQgc3BhY2UgZm91bmQgZm9yIG9iamVjdCAlZFxuIiwKKwkJCQkgIHJlbG9jLnRhcmdldF9oYW5kbGUpOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJlbG9jLm9mZnNldCA+IG9iai0+c2l6ZSAtIDQpIHsKKwkJCURSTV9FUlJPUigiUmVsb2NhdGlvbiBiZXlvbmQgb2JqZWN0IGJvdW5kczogIgorCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkIHNpemUgJWQuXG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LCAoaW50KSBvYmotPnNpemUpOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyZWxvYy5vZmZzZXQgJiAzKSB7CisJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gbm90IDQtYnl0ZSBhbGlnbmVkOiAiCisJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQuXG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0KTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZWxvYy53cml0ZV9kb21haW4gJiYgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gJiYKKwkJICAgIHJlbG9jLndyaXRlX2RvbWFpbiAhPSB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbikgeworCQkJRFJNX0VSUk9SKCJXcml0ZSBkb21haW4gY29uZmxpY3Q6ICIKKwkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCAiCisJCQkJICAibmV3ICUwOHggb2xkICUwOHhcbiIsCisJCQkJICBvYmosIHJlbG9jLnRhcmdldF9oYW5kbGUsCisJCQkJICAoaW50KSByZWxvYy5vZmZzZXQsCisJCQkJICByZWxvYy53cml0ZV9kb21haW4sCisJCQkJICB0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworI2lmIFdBVENIX1JFTE9DCisJCURSTV9JTkZPKCIlczogb2JqICVwIG9mZnNldCAlMDh4IHRhcmdldCAlZCAiCisJCQkgInJlYWQgJTA4eCB3cml0ZSAlMDh4IGd0dCAlMDh4ICIKKwkJCSAicHJlc3VtZWQgJTA4eCBkZWx0YSAlMDh4XG4iLAorCQkJIF9fZnVuY19fLAorCQkJIG9iaiwKKwkJCSAoaW50KSByZWxvYy5vZmZzZXQsCisJCQkgKGludCkgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCSAoaW50KSByZWxvYy5yZWFkX2RvbWFpbnMsCisJCQkgKGludCkgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJIChpbnQpIHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCwKKwkJCSAoaW50KSByZWxvYy5wcmVzdW1lZF9vZmZzZXQsCisJCQkgcmVsb2MuZGVsdGEpOworI2VuZGlmCisKKwkJdGFyZ2V0X29iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMgfD0gcmVsb2MucmVhZF9kb21haW5zOworCQl0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiB8PSByZWxvYy53cml0ZV9kb21haW47CisKKwkJLyogSWYgdGhlIHJlbG9jYXRpb24gYWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHZhbHVlIGluIGl0LCBubworCQkgKiBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgZG9uZS4KKwkJICovCisJCWlmICh0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgPT0gcmVsb2MucHJlc3VtZWRfb2Zmc2V0KSB7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTm93IHRoYXQgd2UncmUgZ29pbmcgdG8gYWN0dWFsbHkgd3JpdGUgc29tZSBkYXRhIGluLAorCQkgKiBtYWtlIHN1cmUgdGhhdCBhbnkgcmVuZGVyaW5nIHVzaW5nIHRoaXMgYnVmZmVyJ3MgY29udGVudHMKKwkJICogaXMgY29tcGxldGVkLgorCQkgKi8KKwkJaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisKKwkJLyogQXMgd2UncmUgd3JpdGluZyB0aHJvdWdoIHRoZSBndHQsIGZsdXNoCisJCSAqIGFueSBDUFUgd3JpdGVzIGJlZm9yZSB3ZSB3cml0ZSB0aGUgcmVsb2NhdGlvbnMKKwkJICovCisJCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwkJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwkJfQorCisJCS8qIE1hcCB0aGUgcGFnZSBjb250YWluaW5nIHRoZSByZWxvY2F0aW9uIHdlJ3JlIGdvaW5nIHRvCisJCSAqIHBlcmZvcm0uCisJCSAqLworCQlyZWxvY19vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLm9mZnNldDsKKwkJaWYgKHJlbG9jX3BhZ2UgPT0gTlVMTCB8fAorCQkgICAgKGxhc3RfcmVsb2Nfb2Zmc2V0ICYgfihQQUdFX1NJWkUgLSAxKSkgIT0KKwkJICAgIChyZWxvY19vZmZzZXQgJiB+KFBBR0VfU0laRSAtIDEpKSkgeworCQkJaWYgKHJlbG9jX3BhZ2UgIT0gTlVMTCkKKwkJCQlpb3VubWFwKHJlbG9jX3BhZ2UpOworCisJCQlyZWxvY19wYWdlID0gaW9yZW1hcF93YyhkZXYtPmFncC0+YmFzZSArCisJCQkJCQkocmVsb2Nfb2Zmc2V0ICYKKwkJCQkJCSB+KFBBR0VfU0laRSAtIDEpKSwKKwkJCQkJCVBBR0VfU0laRSk7CisJCQlsYXN0X3JlbG9jX29mZnNldCA9IHJlbG9jX29mZnNldDsKKwkJCWlmIChyZWxvY19wYWdlID09IE5VTEwpIHsKKwkJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCisJCXJlbG9jX2VudHJ5ID0gKHVpbnQzMl90IF9faW9tZW0gKikocmVsb2NfcGFnZSArCisJCQkJCSAgIChyZWxvY19vZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSkpKTsKKwkJcmVsb2NfdmFsID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2MuZGVsdGE7CisKKyNpZiBXQVRDSF9CVUYKKwkJRFJNX0lORk8oIkFwcGxpZWQgcmVsb2NhdGlvbjogJXBAMHglMDh4ICUwOHggLT4gJTA4eFxuIiwKKwkJCSAgb2JqLCAodW5zaWduZWQgaW50KSByZWxvYy5vZmZzZXQsCisJCQkgIHJlYWRsKHJlbG9jX2VudHJ5KSwgcmVsb2NfdmFsKTsKKyNlbmRpZgorCQl3cml0ZWwocmVsb2NfdmFsLCByZWxvY19lbnRyeSk7CisKKwkJLyogV3JpdGUgdGhlIHVwZGF0ZWQgcHJlc3VtZWQgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IGJhY2sgb3V0CisJCSAqIHRvIHRoZSB1c2VyLgorCQkgKi8KKwkJcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0OworCQlyZXQgPSBjb3B5X3RvX3VzZXIocmVsb2NzICsgaSwgJnJlbG9jLCBzaXplb2YocmVsb2MpKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCX0KKworCWlmIChyZWxvY19wYWdlICE9IE5VTEwpCisJCWlvdW5tYXAocmVsb2NfcGFnZSk7CisKKyNpZiBXQVRDSF9CVUYKKwlpZiAoMCkKKwkJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqLCAxMjgsIF9fZnVuY19fLCB+MCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqIERpc3BhdGNoIGEgYmF0Y2hidWZmZXIgdG8gdGhlIHJpbmcKKyAqLworc3RhdGljIGludAoraTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICpleGVjLAorCQkJICAgICAgdWludDY0X3QgZXhlY19vZmZzZXQpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcyA9IChzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKikKKwkJCQkJICAgICAodWludHB0cl90KSBleGVjLT5jbGlwcmVjdHNfcHRyOworCWludCBuYm94ID0gZXhlYy0+bnVtX2NsaXByZWN0czsKKwlpbnQgaSA9IDAsIGNvdW50OworCXVpbnQzMl90CWV4ZWNfc3RhcnQsIGV4ZWNfbGVuOworCVJJTkdfTE9DQUxTOworCisJZXhlY19zdGFydCA9ICh1aW50MzJfdCkgZXhlY19vZmZzZXQgKyBleGVjLT5iYXRjaF9zdGFydF9vZmZzZXQ7CisJZXhlY19sZW4gPSAodWludDMyX3QpIGV4ZWMtPmJhdGNoX2xlbjsKKworCWlmICgoZXhlY19zdGFydCB8IGV4ZWNfbGVuKSAmIDB4NykgeworCQlEUk1fRVJST1IoImFsaWdubWVudFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZXhlY19zdGFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb3VudCA9IG5ib3ggPyBuYm94IDogMTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChpIDwgbmJveCkgeworCQkJaW50IHJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBib3hlcywgaSwKKwkJCQkJCWV4ZWMtPkRSMSwgZXhlYy0+RFI0KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChJU19JODMwKGRldikgfHwgSVNfODQ1RyhkZXYpKSB7CisJCQlCRUdJTl9MUF9SSU5HKDQpOworCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSKTsKKwkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQgfCBNSV9CQVRDSF9OT05fU0VDVVJFKTsKKwkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQgKyBleGVjX2xlbiAtIDQpOworCQkJT1VUX1JJTkcoMCk7CisJCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwkJfSBlbHNlIHsKKwkJCUJFR0lOX0xQX1JJTkcoMik7CisJCQlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQkJCU9VVF9SSU5HKE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8CisJCQkJCSAoMiA8PCA2KSB8CisJCQkJCSBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOworCQkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQpOworCQkJfSBlbHNlIHsKKwkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfAorCQkJCQkgKDIgPDwgNikpOworCQkJCU9VVF9SSU5HKGV4ZWNfc3RhcnQgfCBNSV9CQVRDSF9OT05fU0VDVVJFKTsKKwkJCX0KKwkJCUFEVkFOQ0VfTFBfUklORygpOworCQl9CisJfQorCisJLyogWFhYIGJyZWFkY3J1bWIgKi8KKwlyZXR1cm4gMDsKK30KKworLyogVGhyb3R0bGUgb3VyIHJlbmRlcmluZyBieSB3YWl0aW5nIHVudGlsIHRoZSByaW5nIGhhcyBjb21wbGV0ZWQgb3VyIHJlcXVlc3RzCisgKiBlbWl0dGVkIG92ZXIgMjAgbXNlYyBhZ28uCisgKgorICogVGhpcyBzaG91bGQgZ2V0IHVzIHJlYXNvbmFibGUgcGFyYWxsZWxpc20gYmV0d2VlbiBDUFUgYW5kIEdQVSBidXQgYWxzbworICogcmVsYXRpdmVseSBsb3cgbGF0ZW5jeSB3aGVuIGJsb2NraW5nIG9uIGEgcGFydGljdWxhciByZXF1ZXN0IHRvIGZpbmlzaC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fcmluZ190aHJvdHRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisJaW50IHJldCA9IDA7CisJdWludDMyX3Qgc2Vxbm87CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2Vxbm8gPSBpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fdGhyb3R0bGVfc2Vxbm87CisJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3Rocm90dGxlX3NlcW5vID0KKwkJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3NlcW5vOworCWlmIChzZXFubykKKwkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoZGV2LCBzZXFubyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QgPSBOVUxMOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoX29iajsKKwlpbnQgcmV0LCBpLCBwaW5uZWQgPSAwOworCXVpbnQ2NF90IGV4ZWNfb2Zmc2V0OworCXVpbnQzMl90IHNlcW5vLCBmbHVzaF9kb21haW5zOworCisjaWYgV0FUQ0hfRVhFQworCURSTV9JTkZPKCJidWZmZXJzX3B0ciAlZCBidWZmZXJfY291bnQgJWQgbGVuICUwOHhcbiIsCisJCSAgKGludCkgYXJncy0+YnVmZmVyc19wdHIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgYXJncy0+YmF0Y2hfbGVuKTsKKyNlbmRpZgorCisJaWYgKGFyZ3MtPmJ1ZmZlcl9jb3VudCA8IDEpIHsKKwkJRFJNX0VSUk9SKCJleGVjYnVmIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIENvcHkgaW4gdGhlIGV4ZWMgbGlzdCBmcm9tIHVzZXJsYW5kICovCisJZXhlY19saXN0ID0gZHJtX2NhbGxvYyhzaXplb2YoKmV4ZWNfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKKwkJCSAgICAgICBEUk1fTUVNX0RSSVZFUik7CisJb2JqZWN0X2xpc3QgPSBkcm1fY2FsbG9jKHNpemVvZigqb2JqZWN0X2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQsCisJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoZXhlY19saXN0ID09IE5VTEwgfHwgb2JqZWN0X2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBleGVjIG9yIG9iamVjdCBsaXN0ICIKKwkJCSAgImZvciAlZCBidWZmZXJzXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHByZV9tdXRleF9lcnI7CisJfQorCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWNfbGlzdCwKKwkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKKwkJCSAgICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWlsZWQgJWRcbiIsCisJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCWlmIChkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CisJCURSTV9FUlJPUigiRXhlY2J1ZiB3aGlsZSB3ZWRnZWRcbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGRldl9wcml2LT5tbS5zdXNwZW5kZWQpIHsKKwkJRFJNX0VSUk9SKCJFeGVjYnVmIHdoaWxlIFZULXN3aXRjaGVkLlxuIik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFplcm8gdGhlIGdsb2FibCBmbHVzaC9pbnZhbGlkYXRlIGZsYWdzLiBUaGVzZQorCSAqIHdpbGwgYmUgbW9kaWZpZWQgYXMgZWFjaCBvYmplY3QgaXMgYm91bmQgdG8gdGhlCisJICogZ3R0CisJICovCisJZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgPSAwOworCWRldi0+Zmx1c2hfZG9tYWlucyA9IDA7CisKKwkvKiBMb29rIHVwIG9iamVjdCBoYW5kbGVzIGFuZCBwZXJmb3JtIHRoZSByZWxvY2F0aW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlvYmplY3RfbGlzdFtpXSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwKKwkJCQkJCSAgICAgICBleGVjX2xpc3RbaV0uaGFuZGxlKTsKKwkJaWYgKG9iamVjdF9saXN0W2ldID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0IGluZGV4ICVkXG4iLAorCQkJCSAgIGV4ZWNfbGlzdFtpXS5oYW5kbGUsIGkpOworCQkJcmV0ID0gLUVCQURGOworCQkJZ290byBlcnI7CisJCX0KKworCQlvYmplY3RfbGlzdFtpXS0+cGVuZGluZ19yZWFkX2RvbWFpbnMgPSAwOworCQlvYmplY3RfbGlzdFtpXS0+cGVuZGluZ193cml0ZV9kb21haW4gPSAwOworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX2FuZF9yZWxvY2F0ZShvYmplY3RfbGlzdFtpXSwKKwkJCQkJCSAgICAgICBmaWxlX3ByaXYsCisJCQkJCQkgICAgICAgJmV4ZWNfbGlzdFtpXSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigib2JqZWN0IGJpbmQgYW5kIHJlbG9jYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXBpbm5lZCA9IGkgKyAxOworCX0KKworCS8qIFNldCB0aGUgcGVuZGluZyByZWFkIGRvbWFpbnMgZm9yIHRoZSBiYXRjaCBidWZmZXIgdG8gQ09NTUFORCAqLworCWJhdGNoX29iaiA9IG9iamVjdF9saXN0W2FyZ3MtPmJ1ZmZlcl9jb3VudC0xXTsKKwliYXRjaF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJYmF0Y2hfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9IDA7CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmplY3RfbGlzdFtpXTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCQlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCQkvKiBXZSBldmljdGVkIHRoZSBidWZmZXIgaW4gdGhlIHByb2Nlc3Mgb2YgdmFsaWRhdGluZworCQkJICogb3VyIHNldCBvZiBidWZmZXJzIGluLiAgV2UgY291bGQgdHJ5IHRvIHJlY292ZXIgYnkKKwkJCSAqIGtpY2tpbmcgdGhlbSBldmVyeXRoaW5nIG91dCBhbmQgdHJ5aW5nIGFnYWluIGZyb20KKwkJCSAqIHRoZSBzdGFydC4KKwkJCSAqLworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyogbWFrZSBzdXJlIGFsbCBwcmV2aW91cyBtZW1vcnkgb3BlcmF0aW9ucyBoYXZlIHBhc3NlZCAqLworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosCisJCQkJCQkgb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucywKKwkJCQkJCSBvYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qIEZsdXNoL2ludmFsaWRhdGUgY2FjaGVzIGFuZCBjaGlwc2V0IGJ1ZmZlciAqLworCWZsdXNoX2RvbWFpbnMgPSBpOTE1X2dlbV9kZXZfc2V0X2RvbWFpbihkZXYpOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisjaWYgV0FUQ0hfQ09IRVJFTkNZCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCWk5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3kob2JqZWN0X2xpc3RbaV0sCisJCQkJCQlleGVjX2xpc3RbaV0uaGFuZGxlKTsKKwl9CisjZW5kaWYKKworCWV4ZWNfb2Zmc2V0ID0gZXhlY19saXN0W2FyZ3MtPmJ1ZmZlcl9jb3VudCAtIDFdLm9mZnNldDsKKworI2lmIFdBVENIX0VYRUMKKwlpOTE1X2dlbV9kdW1wX29iamVjdChvYmplY3RfbGlzdFthcmdzLT5idWZmZXJfY291bnQgLSAxXSwKKwkJCSAgICAgIGFyZ3MtPmJhdGNoX2xlbiwKKwkJCSAgICAgIF9fZnVuY19fLAorCQkJICAgICAgfjApOworI2VuZGlmCisKKwkodm9pZClpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisKKwkvKiBFeGVjIHRoZSBiYXRjaGJ1ZmZlciAqLworCXJldCA9IGk5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoZGV2LCBhcmdzLCBleGVjX29mZnNldCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImRpc3BhdGNoIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgY29tbWFuZHMgaW4gdGhlIGJhdGNoIGJ1ZmZlciBhcmUKKwkgKiBmaW5pc2hlZCBiZWZvcmUgdGhlIGludGVycnVwdCBmaXJlcworCSAqLworCWZsdXNoX2RvbWFpbnMgPSBpOTE1X3JldGlyZV9jb21tYW5kcyhkZXYpOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJLyoKKwkgKiBHZXQgYSBzZXFubyByZXByZXNlbnRpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudCBidWZmZXIsCisJICogd2hpY2ggd2UgY2FuIHdhaXQgb24uICBXZSB3b3VsZCBsaWtlIHRvIG1pdGlnYXRlIHRoZXNlIGludGVycnVwdHMsCisJICogbGlrZWx5IGJ5IG9ubHkgY3JlYXRpbmcgc2Vxbm9zIG9jY2FzaW9uYWxseSAoc28gdGhhdCB3ZSBoYXZlCisJICogKnNvbWUqIGludGVycnVwdHMgcmVwcmVzZW50aW5nIGNvbXBsZXRpb24gb2YgYnVmZmVycyB0aGF0IHdlIGNhbgorCSAqIHdhaXQgb24gd2hlbiB0cnlpbmcgdG8gY2xlYXIgdXAgZ3R0IHNwYWNlKS4KKwkgKi8KKwlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBmbHVzaF9kb21haW5zKTsKKwlCVUdfT04oc2Vxbm8gPT0gMCk7CisJaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3NlcW5vID0gc2Vxbm87CisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKG9iaik7CisJCW9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9IHNlcW5vOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IG1vdmUgdG8gZXhlYyBsaXN0ICVwXG4iLCBfX2Z1bmNfXywgb2JqKTsKKyNlbmRpZgorCX0KKyNpZiBXQVRDSF9MUlUKKwlpOTE1X2R1bXBfbHJ1KGRldiwgX19mdW5jX18pOworI2VuZGlmCisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwkvKiBDb3B5IHRoZSBuZXcgYnVmZmVyIG9mZnNldHMgYmFjayB0byB0aGUgdXNlcidzIGV4ZWMgbGlzdC4gKi8KKwlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICBleGVjX2xpc3QsCisJCQkgICBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOworCWlmIChyZXQpCisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKKwkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAorCQkJICAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOworZXJyOgorCWlmIChvYmplY3RfbGlzdCAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwaW5uZWQ7IGkrKykKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmplY3RfbGlzdFtpXSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKQorCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqZWN0X2xpc3RbaV0pOworCX0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworcHJlX211dGV4X2VycjoKKwlkcm1fZnJlZShvYmplY3RfbGlzdCwgc2l6ZW9mKCpvYmplY3RfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZXhlY19saXN0LCBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCisJCSBEUk1fTUVNX0RSSVZFUik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2k5MTVfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IGFsaWdubWVudCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KG9iaiwgYWxpZ25tZW50KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gYmluZDogJWQiLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlvYmpfcHJpdi0+cGluX2NvdW50Kys7CisKKwkvKiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBhY3RpdmUgYW5kIG5vdCBwZW5kaW5nIGEgZmx1c2gsCisJICogcmVtb3ZlIGl0IGZyb20gdGhlIGluYWN0aXZlIGxpc3QKKwkgKi8KKwlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCA9PSAxKSB7CisJCWF0b21pY19pbmMoJmRldi0+cGluX2NvdW50KTsKKwkJYXRvbWljX2FkZChvYmotPnNpemUsICZkZXYtPnBpbl9tZW1vcnkpOworCQlpZiAoIW9ial9wcml2LT5hY3RpdmUgJiYKKwkJICAgIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCSAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSA9PSAwICYmCisJCSAgICAhbGlzdF9lbXB0eSgmb2JqX3ByaXYtPmxpc3QpKQorCQkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmxpc3QpOworCX0KKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAoraTkxNV9nZW1fb2JqZWN0X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCW9ial9wcml2LT5waW5fY291bnQtLTsKKwlCVUdfT04ob2JqX3ByaXYtPnBpbl9jb3VudCA8IDApOworCUJVR19PTihvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpOworCisJLyogSWYgdGhlIG9iamVjdCBpcyBubyBsb25nZXIgcGlubmVkLCBhbmQgaXMKKwkgKiBuZWl0aGVyIGFjdGl2ZSBub3IgYmVpbmcgZmx1c2hlZCwgdGhlbiBzdGljayBpdCBvbgorCSAqIHRoZSBpbmFjdGl2ZSBsaXN0CisJICovCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgPT0gMCkgeworCQlpZiAoIW9ial9wcml2LT5hY3RpdmUgJiYKKwkJICAgIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCSAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSA9PSAwKQorCQkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5saXN0LAorCQkJCSAgICAgICAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCQlhdG9taWNfZGVjKCZkZXYtPnBpbl9jb3VudCk7CisJCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5waW5fbWVtb3J5KTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworfQorCitpbnQKK2k5MTVfZ2VtX3Bpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV9waW5faW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgYXJncy0+YWxpZ25tZW50KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogWFhYIC0gZmx1c2ggdGhlIENQVSBjYWNoZXMgZm9yIHBpbm5lZCBvYmplY3RzCisJICogYXMgdGhlIFggc2VydmVyIGRvZXNuJ3QgbWFuYWdlIGRvbWFpbnMgeWV0CisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwkJb2JqLT53cml0ZV9kb21haW4gPSAwOworCX0KKwlhcmdzLT5vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fdW5waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV91bnBpbl9pb2N0bCgpOiAlZFxuIiwKKwkJCSAgYXJncy0+aGFuZGxlKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUJBREY7CisJfQorCisJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX2J1c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJCYWQgaGFuZGxlIGluIGk5MTVfZ2VtX2J1c3lfaW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlhcmdzLT5idXN5ID0gb2JqX3ByaXYtPmFjdGl2ZTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fdGhyb3R0bGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworICAgIHJldHVybiBpOTE1X2dlbV9yaW5nX3Rocm90dGxlKGRldiwgZmlsZV9wcml2KTsKK30KKworaW50IGk5MTVfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9ial9wcml2ID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKm9ial9wcml2KSwgRFJNX01FTV9EUklWRVIpOworCWlmIChvYmpfcHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogV2UndmUganVzdCBhbGxvY2F0ZWQgcGFnZXMgZnJvbSB0aGUga2VybmVsLAorCSAqIHNvIHRoZXkndmUganVzdCBiZWVuIHdyaXR0ZW4gYnkgdGhlIENQVSB3aXRoCisJICogemVyb3MuIFRoZXknbGwgbmVlZCB0byBiZSBjbGZsdXNoZWQgYmVmb3JlIHdlCisJICogdXNlIHRoZW0gd2l0aCB0aGUgR1BVLgorCSAqLworCW9iai0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKKwlvYmotPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisKKwlvYmpfcHJpdi0+YWdwX3R5cGUgPSBBR1BfVVNFUl9NRU1PUlk7CisKKwlvYmotPmRyaXZlcl9wcml2YXRlID0gb2JqX3ByaXY7CisJb2JqX3ByaXYtPm9iaiA9IG9iajsKKwlJTklUX0xJU1RfSEVBRCgmb2JqX3ByaXYtPmxpc3QpOworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwl3aGlsZSAob2JqX3ByaXYtPnBpbl9jb3VudCA+IDApCisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCisJaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCisJZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkLCAxLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUob2JqLT5kcml2ZXJfcHJpdmF0ZSwgMSwgRFJNX01FTV9EUklWRVIpOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWludCByZXQ7CisJdWludDMyX3QgZmx1c2hfZG9tYWluczsKKworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4ob2JqLCByZWFkX2RvbWFpbnMsIHdyaXRlX2RvbWFpbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlmbHVzaF9kb21haW5zID0gaTkxNV9nZW1fZGV2X3NldF9kb21haW4ob2JqLT5kZXYpOworCisJaWYgKGZsdXNoX2RvbWFpbnMgJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpCisJCSh2b2lkKSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqIFVuYmluZHMgYWxsIG9iamVjdHMgdGhhdCBhcmUgb24gdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiAqLworc3RhdGljIGludAoraTkxNV9nZW1fZXZpY3RfZnJvbV9saXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCByZXQ7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJICAgIGxpc3QpOworCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApIHsKKwkJCURSTV9FUlJPUigiUGlubmVkIG9iamVjdCBpbiB1bmJpbmQgbGlzdFxuIik7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCQlpZiAocmV0ICE9IDApIHsKKwkJCURSTV9FUlJPUigiRXJyb3IgdW5iaW5kaW5nIG9iamVjdCBpbiBMZWF2ZVZUOiAlZFxuIiwKKwkJCQkgIHJldCk7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc2Vxbm8sIGN1cl9zZXFubywgbGFzdF9zZXFubzsKKwlpbnQgc3R1Y2ssIHJldDsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkIHx8IGRldl9wcml2LT5yaW5nLnJpbmdfb2JqID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCS8qIEhhY2shICBEb24ndCBsZXQgYW55Ym9keSBkbyBleGVjYnVmIHdoaWxlIHdlIGRvbid0IGNvbnRyb2wgdGhlIGNoaXAuCisJICogV2UgbmVlZCB0byByZXBsYWNlIHRoaXMgd2l0aCBhIHNlbWFwaG9yZSwgb3Igc29tZXRoaW5nLgorCSAqLworCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAxOworCisJLyogQ2FuY2VsIHRoZSByZXRpcmUgd29yayBoYW5kbGVyLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggaWYgcnVubmluZworCSAqLworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKworCS8qIEZsdXNoIHRoZSBHUFUgYWxvbmcgd2l0aCBhbGwgbm9uLUNQVSB3cml0ZSBkb21haW5zCisJICovCisJaTkxNV9nZW1fZmx1c2goZGV2LCB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCksCisJCSAgICAgICB+KEk5MTVfR0VNX0RPTUFJTl9DUFV8STkxNV9HRU1fRE9NQUlOX0dUVCkpOworCXNlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJCUk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKworCWlmIChzZXFubyA9PSAwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8gPSBzZXFubzsKKwlsYXN0X3NlcW5vID0gMDsKKwlzdHVjayA9IDA7CisJZm9yICg7OykgeworCQljdXJfc2Vxbm8gPSBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KTsKKwkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKGN1cl9zZXFubywgc2Vxbm8pKQorCQkJYnJlYWs7CisJCWlmIChsYXN0X3NlcW5vID09IGN1cl9zZXFubykgeworCQkJaWYgKHN0dWNrKysgPiAxMDApIHsKKwkJCQlEUk1fRVJST1IoImhhcmR3YXJlIHdlZGdlZFxuIik7CisJCQkJZGV2X3ByaXYtPm1tLndlZGdlZCA9IDE7CisJCQkJRFJNX1dBS0VVUCgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJbXNsZWVwKDEwKTsKKwkJbGFzdF9zZXFubyA9IGN1cl9zZXFubzsKKwl9CisJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gMDsKKworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCisJLyogQWN0aXZlIGFuZCBmbHVzaGluZyBzaG91bGQgbm93IGJlIGVtcHR5IGFzIHdlJ3ZlCisJICogd2FpdGVkIGZvciBhIHNlcXVlbmNlIGhpZ2hlciB0aGFuIGFueSBwZW5kaW5nIGV4ZWNidWZmZXIKKwkgKi8KKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKKworCS8qIFJlcXVlc3Qgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZSBhbHNvIHdhaXRlZAorCSAqIGZvciB0aGUgbGFzdCByZXF1ZXN0IGluIHRoZSBsaXN0CisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSk7CisKKwkvKiBNb3ZlIGFsbCBidWZmZXJzIG91dCBvZiB0aGUgR1RULiAqLworCXJldCA9IGk5MTVfZ2VtX2V2aWN0X2Zyb21fbGlzdChkZXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSk7CisKKwlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pbml0X2h3cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJLyogSWYgd2UgbmVlZCBhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoZSBzdGF0dXMgcGFnZSwgaXQncyBhbHJlYWR5CisJICogaW5pdGlhbGl6ZWQgYXQgZHJpdmVyIGxvYWQgdGltZS4KKwkgKi8KKwlpZiAoIUk5MTVfTkVFRF9HRlhfSFdTKGRldikpCisJCXJldHVybiAwOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCA0MDk2KTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3RhdHVzIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9ial9wcml2LT5hZ3BfdHlwZSA9IEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgNDA5Nik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkciA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0ga21hcChvYmpfcHJpdi0+cGFnZV9saXN0WzBdKTsKKwlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIHN0YXR1cyBwYWdlLlxuIik7CisJCW1lbXNldCgmZGV2X3ByaXYtPmh3c19tYXAsIDAsIHNpemVvZihkZXZfcHJpdi0+aHdzX21hcCkpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2X3ByaXYtPmh3c19vYmogPSBvYmo7CisJbWVtc2V0KGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwgMCwgUEFHRV9TSVpFKTsKKwlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCUk5MTVfUkVBRChIV1NfUEdBKTsgLyogcG9zdGluZyByZWFkICovCisJRFJNX0RFQlVHKCJod3Mgb2Zmc2V0OiAweCUwOHhcbiIsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCXUzMiBoZWFkOworCisJcmV0ID0gaTkxNV9nZW1faW5pdF9od3MoZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9hbGxvYyhkZXYsIDEyOCAqIDEwMjQpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCA0MDk2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGtlcm5lbCBtYXBwaW5nIGZvciB0aGUgcmluZy4gKi8KKwlkZXZfcHJpdi0+cmluZy5TaXplID0gb2JqLT5zaXplOworCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IG9iai0+c2l6ZSAtIDE7CisKKwlkZXZfcHJpdi0+cmluZy5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IG9iai0+c2l6ZTsKKwlkZXZfcHJpdi0+cmluZy5tYXAudHlwZSA9IDA7CisJZGV2X3ByaXYtPnJpbmcubWFwLmZsYWdzID0gMDsKKwlkZXZfcHJpdi0+cmluZy5tYXAubXRyciA9IDA7CisKKwlkcm1fY29yZV9pb3JlbWFwX3djKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgcmluZ2J1ZmZlci5cbiIpOworCQltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gb2JqOworCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOworCisJLyogU3RvcCB0aGUgcmluZyBpZiBpdCdzIHJ1bm5pbmcuICovCisJSTkxNV9XUklURShQUkIwX0NUTCwgMCk7CisJSTkxNV9XUklURShQUkIwX1RBSUwsIDApOworCUk5MTVfV1JJVEUoUFJCMF9IRUFELCAwKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHJpbmcuICovCisJSTkxNV9XUklURShQUkIwX1NUQVJULCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCisJLyogRzQ1IHJpbmcgaW5pdGlhbGl6YXRpb24gZmFpbHMgdG8gcmVzZXQgaGVhZCB0byB6ZXJvICovCisJaWYgKGhlYWQgIT0gMCkgeworCQlEUk1fRVJST1IoIlJpbmcgaGVhZCBub3QgcmVzZXQgdG8gemVybyAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwkJSTkxNV9XUklURShQUkIwX0hFQUQsIDApOworCisJCURSTV9FUlJPUigiUmluZyBoZWFkIGZvcmNlZCB0byB6ZXJvICIKKwkJCSAgImN0bCAlMDh4IGhlYWQgJTA4eCB0YWlsICUwOHggc3RhcnQgJTA4eFxuIiwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfQ1RMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfSEVBRCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1RBSUwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9TVEFSVCkpOworCX0KKworCUk5MTVfV1JJVEUoUFJCMF9DVEwsCisJCSAgICgob2JqLT5zaXplIC0gNDA5NikgJiBSSU5HX05SX1BBR0VTKSB8CisJCSAgIFJJTkdfTk9fUkVQT1JUIHwKKwkJICAgUklOR19WQUxJRCk7CisKKwloZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisKKwkvKiBJZiB0aGUgaGVhZCBpcyBzdGlsbCBub3QgemVybywgdGhlIHJpbmcgaXMgZGVhZCAqLworCWlmIChoZWFkICE9IDApIHsKKwkJRFJNX0VSUk9SKCJSaW5nIGluaXRpYWxpemF0aW9uIGZhaWxlZCAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogVXBkYXRlIG91ciBjYWNoZSBvZiB0aGUgcmluZyBzdGF0ZSAqLworCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yaW5nLnJpbmdfb2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShkZXZfcHJpdi0+cmluZy5yaW5nX29iaik7CisJZGV2X3ByaXYtPnJpbmcucmluZ19vYmogPSBOVUxMOworCW1lbXNldCgmZGV2X3ByaXYtPnJpbmcsIDAsIHNpemVvZihkZXZfcHJpdi0+cmluZykpOworCisJaWYgKGRldl9wcml2LT5od3Nfb2JqICE9IE5VTEwpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+aHdzX29iajsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCQlrdW5tYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlkZXZfcHJpdi0+aHdzX29iaiA9IE5VTEw7CisJCW1lbXNldCgmZGV2X3ByaXYtPmh3c19tYXAsIDAsIHNpemVvZihkZXZfcHJpdi0+aHdzX21hcCkpOworCQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBOVUxMOworCisJCS8qIFdyaXRlIGhpZ2ggYWRkcmVzcyBpbnRvIEhXU19QR0Egd2hlbiBkaXNhYmxpbmcuICovCisJCUk5MTVfV1JJVEUoSFdTX1BHQSwgMHgxZmZmZjAwMCk7CisJfQorfQorCitpbnQKK2k5MTVfZ2VtX2VudGVydnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlpZiAoZGV2X3ByaXYtPm1tLndlZGdlZCkgeworCQlEUk1fRVJST1IoIlJlZW5hYmxpbmcgd2VkZ2VkIGhhcmR3YXJlLCBnb29kIGx1Y2tcbiIpOworCQlkZXZfcHJpdi0+bW0ud2VkZ2VkID0gMDsKKwl9CisKKwlyZXQgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCWRldl9wcml2LT5tbS5zdXNwZW5kZWQgPSAwOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJZHJtX2lycV9pbnN0YWxsKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50CitpOTE1X2dlbV9sZWF2ZXZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1faWRsZShkZXYpOworCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitpOTE1X2dlbV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1faWRsZShkZXYpOworCWlmIChyZXQpCisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGlkbGUgaGFyZHdhcmU6ICVkXG4iLCByZXQpOworfQorCit2b2lkCitpOTE1X2dlbV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOworCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmssCisJCQkgIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIpOworCUlOSVRfV09SSygmZGV2X3ByaXYtPm1tLnZibGFua193b3JrLAorCQkgIGk5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIpOworCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyA9IDE7CisKKwlpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxYzA4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgS2VpdGggUGFja2FyZCA8a2VpdGhwQGtlaXRocC5jb20+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCisjaWYgV0FUQ0hfSU5BQ1RJVkUKK3ZvaWQKK2k5MTVfdmVyaWZ5X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwgbGlzdCkgeworCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCB8fCBvYmpfcHJpdi0+YWN0aXZlIHx8CisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkpCisJCQlEUk1fRVJST1IoImluYWN0aXZlICVwIChwICVkIGEgJWQgdyAleCkgICVzOiVkXG4iLAorCQkJCSAgb2JqLAorCQkJCSAgb2JqX3ByaXYtPnBpbl9jb3VudCwgb2JqX3ByaXYtPmFjdGl2ZSwKKwkJCQkgIG9iai0+d3JpdGVfZG9tYWluLCBmaWxlLCBsaW5lKTsKKwl9Cit9CisjZW5kaWYgLyogV0FUQ0hfSU5BQ1RJVkUgKi8KKworCisjaWYgV0FUQ0hfQlVGIHwgV0FUQ0hfRVhFQyB8IFdBVENIX1BXUklURQorc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2R1bXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwKKwkJICAgdWludDMyX3QgYmlhcywgdWludDMyX3QgbWFyaykKK3sKKwl1aW50MzJfdCAqbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWludCBpOworCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDQpCisJCURSTV9JTkZPKCIlMDh4OiAlMDh4JXNcbiIsCisJCQkgIChpbnQpIChiaWFzICsgaSksIG1lbVtpIC8gNF0sCisJCQkgIChiaWFzICsgaSA9PSBtYXJrKSA/ICIgKioqKioqKioiIDogIiIpOworCWt1bm1hcF9hdG9taWMobWVtLCBLTV9VU0VSMCk7CisJLyogZ2l2ZSBzeXNsb2cgdGltZSB0byBjYXRjaCB1cCAqLworCW1zbGVlcCgxKTsKK30KKwordm9pZAoraTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCSAgICAgY29uc3QgY2hhciAqd2hlcmUsIHVpbnQzMl90IG1hcmspCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZTsKKworCURSTV9JTkZPKCIlczogb2JqZWN0IGF0IG9mZnNldCAlMDh4XG4iLCB3aGVyZSwgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAobGVuICsgUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFOyBwYWdlKyspIHsKKwkJaW50IHBhZ2VfbGVuLCBjaHVuaywgY2h1bmtfbGVuOworCisJCXBhZ2VfbGVuID0gbGVuIC0gcGFnZSAqIFBBR0VfU0laRTsKKwkJaWYgKHBhZ2VfbGVuID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW4gPSBQQUdFX1NJWkU7CisKKwkJZm9yIChjaHVuayA9IDA7IGNodW5rIDwgcGFnZV9sZW47IGNodW5rICs9IDEyOCkgeworCQkJY2h1bmtfbGVuID0gcGFnZV9sZW4gLSBjaHVuazsKKwkJCWlmIChjaHVua19sZW4gPiAxMjgpCisJCQkJY2h1bmtfbGVuID0gMTI4OworCQkJaTkxNV9nZW1fZHVtcF9wYWdlKG9ial9wcml2LT5wYWdlX2xpc3RbcGFnZV0sCisJCQkJCSAgIGNodW5rLCBjaHVuayArIGNodW5rX2xlbiwKKwkJCQkJICAgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKworCQkJCQkgICBwYWdlICogUEFHRV9TSVpFLAorCQkJCQkgICBtYXJrKTsKKwkJfQorCX0KK30KKyNlbmRpZgorCisjaWYgV0FUQ0hfTFJVCit2b2lkCitpOTE1X2R1bXBfbHJ1KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKndoZXJlKQoreworCWRybV9pOTE1X3ByaXZhdGVfdAkJKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXY7CisKKwlEUk1fSU5GTygiYWN0aXZlIGxpc3QgJXMge1xuIiwgd2hlcmUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCURSTV9JTkZPKCIgICAgJXA6ICUwOHhcbiIsIG9ial9wcml2LAorCQkJIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJfQorCURSTV9JTkZPKCJ9XG4iKTsKKwlEUk1fSU5GTygiZmx1c2hpbmcgbGlzdCAlcyB7XG4iLCB3aGVyZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fSU5GTygiICAgICVwOiAlMDh4XG4iLCBvYmpfcHJpdiwKKwkJCSBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCX0KKwlEUk1fSU5GTygifVxuIik7CisJRFJNX0lORk8oImluYWN0aXZlICVzIHtcbiIsIHdoZXJlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCisJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwl9CisJRFJNX0lORk8oIn1cbiIpOworfQorI2VuZGlmCisKKworI2lmIFdBVENIX0NPSEVSRU5DWQordm9pZAoraTkxNV9nZW1fb2JqZWN0X2NoZWNrX2NvaGVyZW5jeShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZTsKKwl1aW50MzJfdCAqZ3R0X21hcHBpbmc7CisJdWludDMyX3QgKmJhY2tpbmdfbWFwID0gTlVMTDsKKwlpbnQgYmFkX2NvdW50ID0gMDsKKworCURSTV9JTkZPKCIlczogY2hlY2tpbmcgY29oZXJlbmN5IG9mIG9iamVjdCAlcEAweCUwOHggKCVkLCAlZGtiKTpcbiIsCisJCSBfX2Z1bmNfXywgb2JqLCBvYmpfcHJpdi0+Z3R0X29mZnNldCwgaGFuZGxlLAorCQkgb2JqLT5zaXplIC8gMTAyNCk7CisKKwlndHRfbWFwcGluZyA9IGlvcmVtYXAoZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldCwKKwkJCSAgICAgIG9iai0+c2l6ZSk7CisJaWYgKGd0dF9tYXBwaW5nID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIEdUVCBzcGFjZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgb2JqLT5zaXplIC8gUEFHRV9TSVpFOyBwYWdlKyspIHsKKwkJaW50IGk7CisKKwkJYmFja2luZ19tYXAgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZV9saXN0W3BhZ2VdLCBLTV9VU0VSMCk7CisKKwkJaWYgKGJhY2tpbmdfbWFwID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBiYWNraW5nIHBhZ2VcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gNDsgaSsrKSB7CisJCQl1aW50MzJfdCBjcHV2YWwgPSBiYWNraW5nX21hcFtpXTsKKwkJCXVpbnQzMl90IGd0dHZhbCA9IHJlYWRsKGd0dF9tYXBwaW5nICsKKwkJCQkJCXBhZ2UgKiAxMDI0ICsgaSk7CisKKwkJCWlmIChjcHV2YWwgIT0gZ3R0dmFsKSB7CisJCQkJRFJNX0lORk8oImluY29oZXJlbnQgQ1BVIHZzIEdQVSBhdCAweCUwOHg6ICIKKwkJCQkJICIweCUwOHggdnMgMHglMDh4XG4iLAorCQkJCQkgKGludCkob2JqX3ByaXYtPmd0dF9vZmZzZXQgKworCQkJCQkgICAgICAgcGFnZSAqIFBBR0VfU0laRSArIGkgKiA0KSwKKwkJCQkJIGNwdXZhbCwgZ3R0dmFsKTsKKwkJCQlpZiAoYmFkX2NvdW50KysgPj0gOCkgeworCQkJCQlEUk1fSU5GTygiLi4uXG4iKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQl9CisJCWt1bm1hcF9hdG9taWMoYmFja2luZ19tYXAsIEtNX1VTRVIwKTsKKwkJYmFja2luZ19tYXAgPSBOVUxMOworCX0KKworIG91dDoKKwlpZiAoYmFja2luZ19tYXAgIT0gTlVMTCkKKwkJa3VubWFwX2F0b21pYyhiYWNraW5nX21hcCwgS01fVVNFUjApOworCWlvdW5tYXAoZ3R0X21hcHBpbmcpOworCisJLyogZ2l2ZSBzeXNsb2cgdGltZSB0byBjYXRjaCB1cCAqLworCW1zbGVlcCgxKTsKKworCS8qIERpcmVjdGx5IGZsdXNoIHRoZSBvYmplY3QsIHNpbmNlIHdlIGp1c3QgbG9hZGVkIHZhbHVlcyB3aXRoIHRoZSBDUFUKKwkgKiBmcm9tIHRoZSBiYWNraW5nIHBhZ2VzIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRpc3R1cmIgdGhlIGNhY2hlCisJICogbWFuYWdlbWVudCB0aGF0IHdlJ3JlIHRyeWluZyB0byBvYnNlcnZlLgorCSAqLworCisJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZDQxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wcm9jLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIGludCBpOTE1X2dlbV9hY3RpdmVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCWludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkFjdGl2ZTpcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+bmFtZSkgeworCQkJRFJNX1BST0NfUFJJTlQoIiAgICAlcCglZCk6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLCBvYmotPm5hbWUsCisJCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgICAgJXA6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0KKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fZmx1c2hpbmdfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiRmx1c2hpbmc6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+bmFtZSkgeworCQkJRFJNX1BST0NfUFJJTlQoIiAgICAlcCglZCk6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLCBvYmotPm5hbWUsCisJCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgICAgJXA6ICUwOHggJTA4eCAlZFxuIiwgb2JqLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0KKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1faW5hY3RpdmVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiSW5hY3RpdmU6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9iai0+bmFtZSkgeworCQkJRFJNX1BST0NfUFJJTlQoIiAgICAlcCglZCk6ICUwOHggJTA4eCAlZFxuIiwKKwkJCQkgICAgICAgb2JqLCBvYmotPm5hbWUsCisJCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgICAgJXA6ICUwOHggJTA4eCAlZFxuIiwgb2JqLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0KKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpnZW1fcmVxdWVzdDsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCJSZXF1ZXN0OlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShnZW1fcmVxdWVzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkgICAgbGlzdCkKKwl7CisJCURSTV9QUk9DX1BSSU5UKCIgICAgJWQgQCAlZCAlMDh4XG4iLAorCQkJICAgICAgIGdlbV9yZXF1ZXN0LT5zZXFubywKKwkJCSAgICAgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpLAorCQkJICAgICAgIGdlbV9yZXF1ZXN0LT5mbHVzaF9kb21haW5zKTsKKwl9CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogJWRcbiIsIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKwlEUk1fUFJPQ19QUklOVCgiV2FpdGVyIHNlcXVlbmNlOiAgJWRcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8pOworCURSTV9QUk9DX1BSSU5UKCJJUlEgc2VxdWVuY2U6ICAgICAlZFxuIiwgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCisKK3N0YXRpYyBpbnQgaTkxNV9pbnRlcnJ1cHRfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IGVuYWJsZTogICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChJRVIpKTsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IGlkZW50aXR5OiAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChJSVIpKTsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IG1hc2s6ICAgICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChJTVIpKTsKKwlEUk1fUFJPQ19QUklOVCgiUGlwZSBBIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChQSVBFQVNUQVQpKTsKKwlEUk1fUFJPQ19QUklOVCgiUGlwZSBCIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKKwkJICAgICAgIEk5MTVfUkVBRChQSVBFQlNUQVQpKTsKKwlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0cyByZWNlaXZlZDogJWRcbiIsCisJCSAgICAgICBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCkpOworCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiAgICAlZFxuIiwKKwkJICAgICAgIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKwlEUk1fUFJPQ19QUklOVCgiV2FpdGVyIHNlcXVlbmNlOiAgICAgJWRcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8pOworCURSTV9QUk9DX1BSSU5UKCJJUlEgc2VxdWVuY2U6ICAgICAgICAlZFxuIiwKKwkJICAgICAgIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbiAtIG9mZnNldDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcHJvY19saXN0IHsKKwkvKiogZmlsZSBuYW1lICovCisJY29uc3QgY2hhciAqbmFtZTsKKwkvKiogcHJvYyBjYWxsYmFjayovCisJaW50ICgqZikgKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKik7Cit9IGk5MTVfZ2VtX3Byb2NfbGlzdFtdID0geworCXsiaTkxNV9nZW1fYWN0aXZlIiwgaTkxNV9nZW1fYWN0aXZlX2luZm99LAorCXsiaTkxNV9nZW1fZmx1c2hpbmciLCBpOTE1X2dlbV9mbHVzaGluZ19pbmZvfSwKKwl7Imk5MTVfZ2VtX2luYWN0aXZlIiwgaTkxNV9nZW1faW5hY3RpdmVfaW5mb30sCisJeyJpOTE1X2dlbV9yZXF1ZXN0IiwgaTkxNV9nZW1fcmVxdWVzdF9pbmZvfSwKKwl7Imk5MTVfZ2VtX3NlcW5vIiwgaTkxNV9nZW1fc2Vxbm9faW5mb30sCisJeyJpOTE1X2dlbV9pbnRlcnJ1cHQiLCBpOTE1X2ludGVycnVwdF9pbmZvfSwKK307CisKKyNkZWZpbmUgSTkxNV9HRU1fUFJPQ19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fcHJvY19saXN0KQorCitpbnQgaTkxNV9nZW1fcHJvY19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVfR0VNX1BST0NfRU5UUklFUzsgaSsrKSB7CisJCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLAorCQkJCQlTX0lGUkVHIHwgU19JUlVHTywgbWlub3ItPmRldl9yb290KTsKKwkJaWYgKCFlbnQpIHsKKwkJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvLi4uLyVzXG4iLAorCQkJCSAgaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUpOworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQlyZW1vdmVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKKwkJCQkJCSAgbWlub3ItPmRldl9yb290KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQllbnQtPnJlYWRfcHJvYyA9IGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5mOworCQllbnQtPmRhdGEgPSBtaW5vcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9nZW1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWludCBpOworCisJaWYgKCFtaW5vci0+ZGV2X3Jvb3QpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5kZXZfcm9vdCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Yjg1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworLyoqIEBmaWxlIGk5MTVfZ2VtX3RpbGluZy5jCisgKgorICogU3VwcG9ydCBmb3IgbWFuYWdpbmcgdGlsaW5nIHN0YXRlIG9mIGJ1ZmZlciBvYmplY3RzLgorICoKKyAqIFRoZSBpZGVhIGJlaGluZCB0aWxpbmcgaXMgdG8gaW5jcmVhc2UgY2FjaGUgaGl0IHJhdGVzIGJ5IHJlYXJyYW5naW5nCisgKiBwaXhlbCBkYXRhIHNvIHRoYXQgYSBncm91cCBvZiBwaXhlbCBhY2Nlc3NlcyBhcmUgaW4gdGhlIHNhbWUgY2FjaGVsaW5lLgorICogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZnJvbSBkb2luZyB0aGlzIG9uIHRoZSBiYWNrL2RlcHRoIGJ1ZmZlciBhcmUgb24KKyAqIHRoZSBvcmRlciBvZiAzMCUuCisgKgorICogSW50ZWwgYXJjaGl0ZWN0dXJlcyBtYWtlIHRoaXMgc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZCwgdGhvdWdoLCBieQorICogYWRqdXN0bWVudHMgbWFkZSB0byBhZGRyZXNzaW5nIG9mIGRhdGEgd2hlbiB0aGUgbWVtb3J5IGlzIGluIGludGVybGVhdmVkCisgKiBtb2RlIChtYXRjaGVkIHBhaXJzIG9mIERJTU1TKSB0byBpbXByb3ZlIG1lbW9yeSBiYW5kd2lkdGguCisgKiBGb3IgaW50ZXJsZWF2ZWQgbWVtb3J5LCB0aGUgQ1BVIHNlbmRzIGV2ZXJ5IHNlcXVlbnRpYWwgNjQgYnl0ZXMKKyAqIHRvIGFuIGFsdGVybmF0ZSBtZW1vcnkgY2hhbm5lbCBzbyBpdCBjYW4gZ2V0IHRoZSBiYW5kd2lkdGggZnJvbSBib3RoLgorICoKKyAqIFRoZSBHUFUgYWxzbyByZWFycmFuZ2VzIGl0cyBhY2Nlc3NlcyBmb3IgaW5jcmVhc2VkIGJhbmR3aWR0aCB0byBpbnRlcmxlYXZlZAorICogbWVtb3J5LCBhbmQgaXQgbWF0Y2hlcyB3aGF0IHRoZSBDUFUgZG9lcyBmb3Igbm9uLXRpbGVkLiAgSG93ZXZlciwgd2hlbiB0aWxlZAorICogaXQgZG9lcyBpdCBhIGxpdHRsZSBkaWZmZXJlbnRseSwgc2luY2Ugb25lIHdhbGtzIGFkZHJlc3NlcyBub3QganVzdCBpbiB0aGUKKyAqIFggZGlyZWN0aW9uIGJ1dCBhbHNvIFkuICBTbywgYWxvbmcgd2l0aCBhbHRlcm5hdGluZyBjaGFubmVscyB3aGVuIGJpdAorICogNiBvZiB0aGUgYWRkcmVzcyBmbGlwcywgaXQgYWxzbyBhbHRlcm5hdGVzIHdoZW4gb3RoZXIgYml0cyBmbGlwIC0tICBCaXRzIDkKKyAqIChldmVyeSA1MTIgYnl0ZXMsIGFuIFggdGlsZSBzY2FubGluZSkgYW5kIDEwIChldmVyeSB0d28gWCB0aWxlIHNjYW5saW5lcykKKyAqIGFyZSBjb21tb24gdG8gYm90aCB0aGUgOTE1IGFuZCA5NjUtY2xhc3MgaGFyZHdhcmUuCisgKgorICogVGhlIENQVSBhbHNvIHNvbWV0aW1lcyBYT1JzIGluIGhpZ2hlciBiaXRzIGFzIHdlbGwsIHRvIGltcHJvdmUKKyAqIGJhbmR3aWR0aCBkb2luZyBzdHJpZGVkIGFjY2VzcyBsaWtlIHdlIGRvIHNvIGZyZXF1ZW50bHkgaW4gZ3JhcGhpY3MuICBUaGlzCisgKiBpcyBjYWxsZWQgIkNoYW5uZWwgWE9SIFJhbmRvbWl6YXRpb24iIGluIHRoZSBNQ0ggZG9jdW1lbnRhdGlvbi4gIFRoZSByZXN1bHQKKyAqIGlzIHRoYXQgdGhlIENQVSBpcyBYT1JpbmcgaW4gZWl0aGVyIGJpdCAxMSBvciBiaXQgMTcgdG8gYml0IDYgb2YgaXRzIGFkZHJlc3MKKyAqIGRlY29kZS4KKyAqCisgKiBBbGwgb2YgdGhpcyBiaXQgNiBYT1JpbmcgaGFzIGFuIGVmZmVjdCBvbiBvdXIgbWVtb3J5IG1hbmFnZW1lbnQsCisgKiBhcyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAzZCBkcml2ZXIgY2FuIGNvcnJlY3RseSBhZGRyZXNzIG9iamVjdAorICogY29udGVudHMuCisgKgorICogSWYgd2UgZG9uJ3QgaGF2ZSBpbnRlcmxlYXZlZCBtZW1vcnksIGFsbCB0aWxpbmcgaXMgc2FmZSBhbmQgbm8gc3dpenpsaW5nIGlzCisgKiByZXF1aXJlZC4KKyAqCisgKiBXaGVuIGJpdCAxNyBpcyBYT1JlZCBpbiwgd2Ugc2ltcGx5IHJlZnVzZSB0byB0aWxlIGF0IGFsbC4gIEJpdAorICogMTcgaXMgbm90IGp1c3QgYSBwYWdlIG9mZnNldCwgc28gYXMgd2UgcGFnZSBhbiBvYmpldCBvdXQgYW5kIGJhY2sgaW4sCisgKiBpbmRpdmlkdWFsIHBhZ2VzIGluIGl0IHdpbGwgaGF2ZSBkaWZmZXJlbnQgYml0IDE3IGFkZHJlc3NlcywgcmVzdWx0aW5nIGluCisgKiBlYWNoIDY0IGJ5dGVzIGJlaW5nIHN3YXBwZWQgd2l0aCBpdHMgbmVpZ2hib3IhCisgKgorICogT3RoZXJ3aXNlLCBpZiBpbnRlcmxlYXZlZCwgd2UgaGF2ZSB0byB0ZWxsIHRoZSAzZCBkcml2ZXIgd2hhdCB0aGUgYWRkcmVzcworICogc3dpenpsaW5nIGl0IG5lZWRzIHRvIGRvIGlzLCBzaW5jZSBpdCdzIHdyaXRpbmcgd2l0aCB0aGUgQ1BVIHRvIHRoZSBwYWdlcworICogKGJpdCA2IGFuZCBwb3RlbnRpYWxseSBiaXQgMTEgWE9SZWQgaW4pLCBhbmQgdGhlIEdQVSBpcyByZWFkaW5nIGZyb20gdGhlCisgKiBwYWdlcyAoYml0IDYsIDksIGFuZCAxMCBYT1JlZCBpbiksIHJlc3VsdGluZyBpbiBhIGN1bXVsYXRpdmUgYml0IHN3aXp6bGluZworICogcmVxdWlyZWQgYnkgdGhlIENQVSBvZiBYT1JpbmcgaW4gYml0IDYsIDksIDEwLCBhbmQgcG90ZW50aWFsbHkgMTEsIGluIG9yZGVyCisgKiB0byBtYXRjaCB3aGF0IHRoZSBHUFUgZXhwZWN0cy4KKyAqLworCisvKioKKyAqIERldGVjdHMgYml0IDYgc3dpenpsaW5nIG9mIGFkZHJlc3MgbG9va3VwIGJldHdlZW4gSUdEIGFjY2VzcyBhbmQgQ1BVCisgKiBhY2Nlc3MgdGhyb3VnaCBtYWluIG1lbW9yeS4KKyAqLwordm9pZAoraTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwl1aW50MzJfdCBzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKworCWlmICghSVNfSTlYWChkZXYpKSB7CisJCS8qIEFzIGZhciBhcyB3ZSBrbm93LCB0aGUgODY1IGRvZXNuJ3QgaGF2ZSB0aGVzZSBiaXQgNgorCQkgKiBzd2l6emxpbmcgaXNzdWVzLgorCQkgKi8KKwkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCX0gZWxzZSBpZiAoKCFJU19JOTY1RyhkZXYpICYmICFJU19HMzMoZGV2KSkgfHwgSVNfSTk2NUdNKGRldikgfHwKKwkJICAgSVNfR000NShkZXYpKSB7CisJCXVpbnQzMl90IGRjYzsKKworCQkvKiBPbiA5MTUtOTQ1IGFuZCBHTTk2NSwgY2hhbm5lbCBpbnRlcmxlYXZlIGJ5IHRoZSBDUFUgaXMKKwkJICogZGV0ZXJtaW5lZCBieSBEQ0MuICBUaGUgQ1BVIHdpbGwgYWx0ZXJuYXRlIGJhc2VkIG9uIGJpdCA2CisJCSAqIGluIGludGVybGVhdmVkIG1vZGUsIGFuZCB0aGUgR1BVIHdpbGwgdGhlbiBhbHNvIGFsdGVybmF0ZQorCQkgKiBvbiBiaXQgNiwgOSwgYW5kIDEwIGZvciBYLCBidXQgdGhlIENQVSBtYXkgYWxzbyBvcHRpb25hbGx5CisJCSAqIGFsdGVybmF0ZSBiYXNlZCBvbiBiaXQgMTcgKFhPUiBub3QgZGlzYWJsZWQgYW5kIFhPUgorCQkgKiBiaXQgPT0gMTcpLgorCQkgKi8KKwkJZGNjID0gSTkxNV9SRUFEKERDQyk7CisJCXN3aXRjaCAoZGNjICYgRENDX0FERFJFU1NJTkdfTU9ERV9NQVNLKSB7CisJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9TSU5HTEVfQ0hBTk5FTDoKKwkJY2FzZSBEQ0NfQUREUkVTU0lOR19NT0RFX0RVQUxfQ0hBTk5FTF9BU1lNTUVUUklDOgorCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIERDQ19BRERSRVNTSU5HX01PREVfRFVBTF9DSEFOTkVMX0lOVEVSTEVBVkVEOgorCQkJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwKKwkJCSAgICBkY2MgJiBEQ0NfQ0hBTk5FTF9YT1JfRElTQUJMRSkgeworCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOworCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85OworCQkJfSBlbHNlIGlmIChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpIHsKKwkJCQkvKiBHTTk2NSBvbmx5IGRvZXMgYml0IDExLWJhc2VkIGNoYW5uZWwKKwkJCQkgKiByYW5kb21pemF0aW9uCisJCQkJICovCisJCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTBfMTE7CisJCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTE7CisJCQl9IGVsc2UgeworCQkJCS8qIEJpdCAxNyBvciBwZXJoYXBzIG90aGVyIHN3aXp6bGluZyAqLworCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRjYyA9PSAweGZmZmZmZmZmKSB7CisJCQlEUk1fRVJST1IoIkNvdWxkbid0IHJlYWQgZnJvbSBNQ0hCQVIuICAiCisJCQkJICAiRGlzYWJsaW5nIHRpbGluZy5cbiIpOworCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRoZSA5NjUsIEczMywgYW5kIG5ld2VyLCBoYXZlIGEgdmVyeSBmbGV4aWJsZSBtZW1vcnkKKwkJICogY29uZmlndXJhdGlvbi4gIEl0IHdpbGwgZW5hYmxlIGR1YWwtY2hhbm5lbCBtb2RlCisJCSAqIChpbnRlcmxlYXZpbmcpIG9uIGFzIG11Y2ggbWVtb3J5IGFzIGl0IGNhbiwgYW5kIHRoZSBHUFUKKwkJICogd2lsbCBhZGRpdGlvbmFsbHkgc29tZXRpbWVzIGVuYWJsZSBkaWZmZXJlbnQgYml0IDYKKwkJICogc3dpenpsaW5nIGZvciB0aWxlZCBvYmplY3RzIGZyb20gdGhlIENQVS4KKwkJICoKKwkJICogSGVyZSdzIHdoYXQgSSBmb3VuZCBvbiB0aGUgRzk2NToKKwkJICogICAgc2xvdCBmaWxsICAgICAgICAgbWVtb3J5IHNpemUgIHN3aXp6bGluZworCQkgKiAwQSAgIDBCICAgMUEgICAxQiAgICAxLWNoICAgMi1jaAorCQkgKiA1MTIgIDAgICAgMCAgICAwICAgICA1MTIgICAgMCAgICAgTworCQkgKiA1MTIgIDAgICAgNTEyICAwICAgICAxNiAgICAgMTAwOCAgWAorCQkgKiA1MTIgIDAgICAgMCAgICA1MTIgICAxNiAgICAgMTAwOCAgWAorCQkgKiAwICAgIDUxMiAgMCAgICA1MTIgICAxNiAgICAgMTAwOCAgWAorCQkgKiAxMDI0IDEwMjQgMTAyNCAwICAgICAyMDQ4ICAgMTAyNCAgTworCQkgKgorCQkgKiBXZSBjb3VsZCBwcm9iYWJseSBkZXRlY3QgdGhpcyBiYXNlZCBvbiBlaXRoZXIgdGhlIERSQgorCQkgKiBtYXRjaGluZywgd2hpY2ggd2FzIHRoZSBjYXNlIGZvciB0aGUgc3dpenpsaW5nIHJlcXVpcmVkIGluCisJCSAqIHRoZSB0YWJsZSBhYm92ZSwgb3IgZnJvbSB0aGUgMS1jaCB2YWx1ZSBiZWluZyBsZXNzIHRoYW4KKwkJICogdGhlIG1pbmltdW0gc2l6ZSBvZiBhIHJhbmsuCisJCSAqLworCQlpZiAoSTkxNV9SRUFEMTYoQzBEUkIzKSAhPSBJOTE1X1JFQUQxNihDMURSQjMpKSB7CisJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQl9IGVsc2UgeworCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7CisJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOTsKKwkJfQorCX0KKworCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3ggPSBzd2l6emxlX3g7CisJZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeSA9IHN3aXp6bGVfeTsKK30KKworLyoqCisgKiBTZXRzIHRoZSB0aWxpbmcgbW9kZSBvZiBhbiBvYmplY3QsIHJldHVybmluZyB0aGUgcmVxdWlyZWQgc3dpenpsaW5nIG9mCisgKiBiaXQgNiBvZiBhZGRyZXNzZXMgaW4gdGhlIG9iamVjdC4KKyAqLworaW50CitpOTE1X2dlbV9zZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyAqYXJncyA9IGRhdGE7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKGFyZ3MtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUpIHsKKwkJb2JqX3ByaXYtPnRpbGluZ19tb2RlID0gSTkxNV9USUxJTkdfTk9ORTsKKwkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJfSBlbHNlIHsKKwkJaWYgKGFyZ3MtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1gpCisJCQlhcmdzLT5zd2l6emxlX21vZGUgPSBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94OworCQllbHNlCisJCQlhcmdzLT5zd2l6emxlX21vZGUgPSBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV95OworCQkvKiBJZiB3ZSBjYW4ndCBoYW5kbGUgdGhlIHN3aXp6bGluZywgbWFrZSBpdCB1bnRpbGVkLiAqLworCQlpZiAoYXJncy0+c3dpenpsZV9tb2RlID09IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOKSB7CisJCQlhcmdzLT50aWxpbmdfbW9kZSA9IEk5MTVfVElMSU5HX05PTkU7CisJCQlhcmdzLT5zd2l6emxlX21vZGUgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJfQorCX0KKwlvYmpfcHJpdi0+dGlsaW5nX21vZGUgPSBhcmdzLT50aWxpbmdfbW9kZTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGlsaW5nIG1vZGUgYW5kIHJlcXVpcmVkIGJpdCA2IHN3aXp6bGluZyBmb3IgdGhlIG9iamVjdC4KKyAqLworaW50CitpOTE1X2dlbV9nZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyAqYXJncyA9IGRhdGE7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJYXJncy0+dGlsaW5nX21vZGUgPSBvYmpfcHJpdi0+dGlsaW5nX21vZGU7CisJc3dpdGNoIChvYmpfcHJpdi0+dGlsaW5nX21vZGUpIHsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3g7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWToKKwkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19OT05FOgorCQlhcmdzLT5zd2l6emxlX21vZGUgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJ1bmtub3duIHRpbGluZyBtb2RlXG4iKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGRmMDM2MTEuLmJhYWU1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMzEsMTIgKzMxLDkyIEBACiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogCi0jZGVmaW5lIFVTRVJfSU5UX0ZMQUcgKDE8PDEpCi0jZGVmaW5lIFZTWU5DX1BJUEVCX0ZMQUcgKDE8PDUpCi0jZGVmaW5lIFZTWU5DX1BJUEVBX0ZMQUcgKDE8PDcpCi0KICNkZWZpbmUgTUFYX05PUElEICgodTMyKX4wKQogCisvKiogVGhlc2UgYXJlIHRoZSBpbnRlcnJ1cHRzIHVzZWQgYnkgdGhlIGRyaXZlciAqLworI2RlZmluZSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfTUFTSyAoSTkxNV9VU0VSX0lOVEVSUlVQVCB8CQlcCisJCQkJICAgIEk5MTVfQVNMRV9JTlRFUlJVUFQgfAkJXAorCQkJCSAgICBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVCB8IFwKKwkJCQkgICAgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpCisKK3ZvaWQKK2k5MTVfZW5hYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKK3sKKwlpZiAoKGRldl9wcml2LT5pcnFfbWFza19yZWcgJiBtYXNrKSAhPSAwKSB7CisJCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gfm1hc2s7CisJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwkJKHZvaWQpIEk5MTVfUkVBRChJTVIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitpOTE1X2Rpc2FibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKQoreworCWlmICgoZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmIG1hc2spICE9IG1hc2spIHsKKwkJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyB8PSBtYXNrOworCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJCSh2b2lkKSBJOTE1X1JFQUQoSU1SKTsKKwl9Cit9CisKKy8qKgorICogaTkxNV9nZXRfcGlwZSAtIHJldHVybiB0aGUgdGhlIHBpcGUgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcGxhbmUKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBwbGFuZTogcGxhbmUgdG8gbG9vayBmb3IKKyAqCisgKiBUaGUgSW50ZWwgTWVzYSAmIDJEIGRyaXZlcnMgY2FsbCB0aGUgdmJsYW5rIHJvdXRpbmVzIHdpdGggYSBwbGFuZSBudW1iZXIKKyAqIHJhdGhlciB0aGFuIGEgcGlwZSBudW1iZXIsIHNpbmNlIHRoZXkgbWF5IG5vdCBhbHdheXMgYmUgZXF1YWwuICBUaGlzIHJvdXRpbmUKKyAqIG1hcHMgdGhlIGdpdmVuIEBwbGFuZSBiYWNrIHRvIGEgcGlwZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2V0X3BpcGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBsYW5lKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGRzcGNudHI7CisKKwlkc3BjbnRyID0gcGxhbmUgPyBJOTE1X1JFQUQoRFNQQkNOVFIpIDogSTkxNV9SRUFEKERTUEFDTlRSKTsKKworCXJldHVybiBkc3BjbnRyICYgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sgPyAxIDogMDsKK30KKworLyoqCisgKiBpOTE1X2dldF9wbGFuZSAtIHJldHVybiB0aGUgdGhlIHBsYW5lIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHBpcGUKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBwaXBlOiBwaXBlIHRvIGxvb2sgZm9yCisgKgorICogVGhlIEludGVsIE1lc2EgJiAyRCBkcml2ZXJzIGNhbGwgdGhlIHZibGFuayByb3V0aW5lcyB3aXRoIGEgcGxhbmUgbnVtYmVyCisgKiByYXRoZXIgdGhhbiBhIHBsYW5lIG51bWJlciwgc2luY2UgdGhleSBtYXkgbm90IGFsd2F5cyBiZSBlcXVhbC4gIFRoaXMgcm91dGluZQorICogbWFwcyB0aGUgZ2l2ZW4gQHBpcGUgYmFjayB0byBhIHBsYW5lIG51bWJlci4KKyAqLworc3RhdGljIGludAoraTkxNV9nZXRfcGxhbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCit7CisJaWYgKGk5MTVfZ2V0X3BpcGUoZGV2LCAwKSA9PSBwaXBlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBpOTE1X3BpcGVfZW5hYmxlZCAtIGNoZWNrIGlmIGEgcGlwZSBpcyBlbmFibGVkCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGlwZTogcGlwZSB0byBjaGVjaworICoKKyAqIFJlYWRpbmcgY2VydGFpbiByZWdpc3RlcnMgd2hlbiB0aGUgcGlwZSBpcyBkaXNhYmxlZCBjYW4gaGFuZyB0aGUgY2hpcC4KKyAqIFVzZSB0aGlzIHJvdXRpbmUgdG8gbWFrZSBzdXJlIHRoZSBQTEwgaXMgcnVubmluZyBhbmQgdGhlIHBpcGUgaXMgYWN0aXZlCisgKiBiZWZvcmUgcmVhZGluZyBzdWNoIHJlZ2lzdGVycyBpZiB1bnN1cmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfcGlwZV9lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBwaXBlY29uZiA9IHBpcGUgPyBQSVBFQkNPTkYgOiBQSVBFQUNPTkY7CisKKwlpZiAoSTkxNV9SRUFEKHBpcGVjb25mKSAmIFBJUEVBQ09ORl9FTkFCTEUpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogRW1pdCBibGl0cyBmb3Igc2NoZWR1bGVkIGJ1ZmZlciBzd2Fwcy4KICAqCkBAIC00OCw4ICsxMjgsNyBAQAogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnRtcCwgaGl0cywgKmhpdDsKIAlpbnQgbmhpdHMsIG5yZWN0cywgc2xpY2VbMl0sIHVwcGVyWzJdLCBsb3dlclsyXSwgaTsKLQl1bnNpZ25lZCBjb3VudGVyWzJdID0geyBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpLAotCQkJCWF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZDIpIH07CisJdW5zaWduZWQgY291bnRlclsyXTsKIAlzdHJ1Y3QgZHJtX2RyYXdhYmxlX2luZm8gKmRydzsKIAlkcm1faTkxNV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJdTMyIGNwcCA9IGRldl9wcml2LT5jcHA7CkBAIC03MSw2ICsxNTAsOSBAQAogCQlzcmNfcGl0Y2ggPj49IDI7CiAJfQogCisJY291bnRlclswXSA9IGRybV92YmxhbmtfY291bnQoZGV2LCAwKTsKKwljb3VudGVyWzFdID0gZHJtX3ZibGFua19jb3VudChkZXYsIDEpOworCiAJRFJNX0RFQlVHKCJcbiIpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmhpdHMpOwpAQCAtODMsMTIgKzE2NSwxNCBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCB0bXAsICZkZXZfcHJpdi0+dmJsX3N3YXBzLmhlYWQpIHsKIAkJZHJtX2k5MTVfdmJsX3N3YXBfdCAqdmJsX3N3YXAgPQogCQkJbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKKwkJaW50IHBpcGUgPSBpOTE1X2dldF9waXBlKGRldiwgdmJsX3N3YXAtPnBsYW5lKTsKIAotCQlpZiAoKGNvdW50ZXJbdmJsX3N3YXAtPnBpcGVdIC0gdmJsX3N3YXAtPnNlcXVlbmNlKSA+ICgxPDwyMykpCisJCWlmICgoY291bnRlcltwaXBlXSAtIHZibF9zd2FwLT5zZXF1ZW5jZSkgPiAoMTw8MjMpKQogCQkJY29udGludWU7CiAKIAkJbGlzdF9kZWwobGlzdCk7CiAJCWRldl9wcml2LT5zd2Fwc19wZW5kaW5nLS07CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAKIAkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5zd2Fwc19sb2NrKTsKIAkJc3Bpbl9sb2NrKCZkZXYtPmRyd19sb2NrKTsKQEAgLTE4MSw3ICsyNjUsNyBAQAogCQkJZHJtX2k5MTVfdmJsX3N3YXBfdCAqc3dhcF9oaXQgPQogCQkJCWxpc3RfZW50cnkoaGl0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKIAkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyZWN0OwotCQkJaW50IG51bV9yZWN0cywgcGlwZTsKKwkJCWludCBudW1fcmVjdHMsIHBsYW5lOwogCQkJdW5zaWduZWQgc2hvcnQgdG9wLCBib3R0b207CiAKIAkJCWRydyA9IGRybV9nZXRfZHJhd2FibGVfaW5mbyhkZXYsIHN3YXBfaGl0LT5kcndfaWQpOwpAQCAtMTkwLDkgKzI3NCw5IEBACiAJCQkJY29udGludWU7CiAKIAkJCXJlY3QgPSBkcnctPnJlY3RzOwotCQkJcGlwZSA9IHN3YXBfaGl0LT5waXBlOwotCQkJdG9wID0gdXBwZXJbcGlwZV07Ci0JCQlib3R0b20gPSBsb3dlcltwaXBlXTsKKwkJCXBsYW5lID0gc3dhcF9oaXQtPnBsYW5lOworCQkJdG9wID0gdXBwZXJbcGxhbmVdOworCQkJYm90dG9tID0gbG93ZXJbcGxhbmVdOwogCiAJCQlmb3IgKG51bV9yZWN0cyA9IGRydy0+bnVtX3JlY3RzOyBudW1fcmVjdHMtLTsgcmVjdCsrKSB7CiAJCQkJaW50IHkxID0gbWF4KHJlY3QtPnkxLCB0b3ApOwpAQCAtMjI5LDYxICszMTMsMTM5IEBACiAJfQogfQogCit1MzIgaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBsYW5lKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBoaWdoX2ZyYW1lOworCXVuc2lnbmVkIGxvbmcgbG93X2ZyYW1lOworCXUzMiBoaWdoMSwgaGlnaDIsIGxvdywgY291bnQ7CisJaW50IHBpcGU7CisKKwlwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHBsYW5lKTsKKwloaWdoX2ZyYW1lID0gcGlwZSA/IFBJUEVCRlJBTUVISUdIIDogUElQRUFGUkFNRUhJR0g7CisJbG93X2ZyYW1lID0gcGlwZSA/IFBJUEVCRlJBTUVQSVhFTCA6IFBJUEVBRlJBTUVQSVhFTDsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkgeworCQlEUk1fRVJST1IoInRyeWluZyB0byBnZXQgdmJsYW5rIGNvdW50IGZvciBkaXNhYmxlZCBwaXBlICVkXG4iLCBwaXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBIaWdoICYgbG93IHJlZ2lzdGVyIGZpZWxkcyBhcmVuJ3Qgc3luY2hyb25pemVkLCBzbyBtYWtlIHN1cmUKKwkgKiB3ZSBnZXQgYSBsb3cgdmFsdWUgdGhhdCdzIHN0YWJsZSBhY3Jvc3MgdHdvIHJlYWRzIG9mIHRoZSBoaWdoCisJICogcmVnaXN0ZXIuCisJICovCisJZG8geworCQloaWdoMSA9ICgoSTkxNV9SRUFEKGhpZ2hfZnJhbWUpICYgUElQRV9GUkFNRV9ISUdIX01BU0spID4+CisJCQkgUElQRV9GUkFNRV9ISUdIX1NISUZUKTsKKwkJbG93ID0gICgoSTkxNV9SRUFEKGxvd19mcmFtZSkgJiBQSVBFX0ZSQU1FX0xPV19NQVNLKSA+PgorCQkJUElQRV9GUkFNRV9MT1dfU0hJRlQpOworCQloaWdoMiA9ICgoSTkxNV9SRUFEKGhpZ2hfZnJhbWUpICYgUElQRV9GUkFNRV9ISUdIX01BU0spID4+CisJCQkgUElQRV9GUkFNRV9ISUdIX1NISUZUKTsKKwl9IHdoaWxlIChoaWdoMSAhPSBoaWdoMik7CisKKwljb3VudCA9IChoaWdoMSA8PCA4KSB8IGxvdzsKKworCXJldHVybiBjb3VudDsKK30KKwordm9pZAoraTkxNV9nZW1fdmJsYW5rX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJZGV2X3ByaXYgPSBjb250YWluZXJfb2Yod29yaywgZHJtX2k5MTVfcHJpdmF0ZV90LAorCQkJCW1tLnZibGFua193b3JrKTsKKwlkZXYgPSBkZXZfcHJpdi0+ZGV2OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWk5MTVfdmJsYW5rX3Rhc2tsZXQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30KKwogaXJxcmV0dXJuX3QgaTkxNV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKikgYXJnOwogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTE2IHRlbXA7CisJdTMyIGlpcjsKIAl1MzIgcGlwZWFfc3RhdHMsIHBpcGViX3N0YXRzOworCWludCB2YmxhbmsgPSAwOwogCi0JcGlwZWFfc3RhdHMgPSBJOTE1X1JFQUQoSTkxNVJFR19QSVBFQVNUQVQpOwotCXBpcGViX3N0YXRzID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUJTVEFUKTsKKwlhdG9taWNfaW5jKCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkKTsKIAotCXRlbXAgPSBJOTE1X1JFQUQxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SKTsKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJSTkxNV9XUklURShJTVIsIH4wKTsKKwlpaXIgPSBJOTE1X1JFQUQoSUlSKTsKIAotCXRlbXAgJj0gKFVTRVJfSU5UX0ZMQUcgfCBWU1lOQ19QSVBFQV9GTEFHIHwgVlNZTkNfUElQRUJfRkxBRyk7Ci0KLQlEUk1fREVCVUcoIiVzIGZsYWc9JTA4eFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wKTsKLQotCWlmICh0ZW1wID09IDApCisJaWYgKGlpciA9PSAwKSB7CisJCWlmIChkZXYtPnBkZXYtPm1zaV9lbmFibGVkKSB7CisJCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJCQkodm9pZCkgSTkxNV9SRUFEKElNUik7CisJCX0KIAkJcmV0dXJuIElSUV9OT05FOworCX0KIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SLCB0ZW1wKTsKLQkodm9pZCkgSTkxNV9SRUFEMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7Ci0JRFJNX1JFQURNRU1PUllCQVJSSUVSKCk7CisJLyoKKwkgKiBDbGVhciB0aGUgUElQRShBfEIpU1RBVCByZWdzIGJlZm9yZSB0aGUgSUlSIG90aGVyd2lzZQorCSAqIHdlIG1heSBnZXQgZXh0cmEgaW50ZXJydXB0cy4KKwkgKi8KKwlpZiAoaWlyICYgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQpIHsKKwkJcGlwZWFfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKwkJaWYgKCEoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSkpCisJCQlwaXBlYV9zdGF0cyAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCWVsc2UgaWYgKHBpcGVhX3N0YXRzICYgKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVN8CisJCQkJCVBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpKSB7CisJCQl2YmxhbmsrKzsKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgaTkxNV9nZXRfcGxhbmUoZGV2LCAwKSk7CisJCX0KIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKwkJSTkxNV9XUklURShQSVBFQVNUQVQsIHBpcGVhX3N0YXRzKTsKKwl9CisJaWYgKGlpciAmIEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUKSB7CisJCXBpcGViX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisJCS8qIEFjayB0aGUgZXZlbnQgKi8KKwkJSTkxNV9XUklURShQSVBFQlNUQVQsIHBpcGViX3N0YXRzKTsKIAotCWlmICh0ZW1wICYgVVNFUl9JTlRfRkxBRykKKwkJLyogVGhlIHZibGFuayBpbnRlcnJ1cHQgZ2V0cyBlbmFibGVkIGV2ZW4gaWYgd2UgZGlkbid0IGFzayBmb3IKKwkJICAgaXQsIHNvIG1ha2Ugc3VyZSBpdCdzIHNodXQgZG93biBhZ2FpbiAqLworCQlpZiAoIShkZXZfcHJpdi0+dmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkKKwkJCXBpcGViX3N0YXRzICY9IH4oUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSB8CisJCQkJCSBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKKwkJZWxzZSBpZiAocGlwZWJfc3RhdHMgJiAoUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVU3wKKwkJCQkJUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUykpIHsKKwkJCXZibGFuaysrOworCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCBpOTE1X2dldF9wbGFuZShkZXYsIDEpKTsKKwkJfQorCisJCWlmIChwaXBlYl9zdGF0cyAmIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9TVEFUVVMpCisJCQlvcHJlZ2lvbl9hc2xlX2ludHIoZGV2KTsKKwkJSTkxNV9XUklURShQSVBFQlNUQVQsIHBpcGViX3N0YXRzKTsKKwl9CisKKwlJOTE1X1dSSVRFKElJUiwgaWlyKTsKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCSh2b2lkKSBJOTE1X1JFQUQoSUlSKTsgLyogRmx1c2ggcG9zdGVkIHdyaXRlcyAqLworCisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9CisJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCisJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpIHsKKwkJZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8gPSBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KTsKIAkJRFJNX1dBS0VVUCgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CisJfQogCi0JaWYgKHRlbXAgJiAoVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpKSB7Ci0JCWludCB2YmxhbmtfcGlwZSA9IGRldl9wcml2LT52YmxhbmtfcGlwZTsKKwlpZiAoaWlyICYgSTkxNV9BU0xFX0lOVEVSUlVQVCkKKwkJb3ByZWdpb25fYXNsZV9pbnRyKGRldik7CiAKLQkJaWYgKCh2YmxhbmtfcGlwZSAmCi0JCSAgICAgKERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkKLQkJICAgID09IChEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpIHsKLQkJCWlmICh0ZW1wICYgVlNZTkNfUElQRUFfRkxBRykKLQkJCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0JCQlpZiAodGVtcCAmIFZTWU5DX1BJUEVCX0ZMQUcpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQyKTsKLQkJfSBlbHNlIGlmICgoKHRlbXAgJiBWU1lOQ19QSVBFQV9GTEFHKSAmJgotCQkJICAgICh2YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpKSB8fAotCQkJICAgKCh0ZW1wICYgVlNZTkNfUElQRUJfRkxBRykgJiYKLQkJCSAgICAodmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkpCi0JCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0KLQkJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWUpOwotCQlkcm1fdmJsX3NlbmRfc2lnbmFscyhkZXYpOwotCi0JCWlmIChkZXZfcHJpdi0+c3dhcHNfcGVuZGluZyA+IDApCisJaWYgKHZibGFuayAmJiBkZXZfcHJpdi0+c3dhcHNfcGVuZGluZyA+IDApIHsKKwkJaWYgKGRldl9wcml2LT5yaW5nLnJpbmdfb2JqID09IE5VTEwpCiAJCQlkcm1fbG9ja2VkX3Rhc2tsZXQoZGV2LCBpOTE1X3ZibGFua190YXNrbGV0KTsKLQkJSTkxNV9XUklURShJOTE1UkVHX1BJUEVBU1RBVCwKLQkJCXBpcGVhX3N0YXRzfEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEV8Ci0JCQlJOTE1X1ZCTEFOS19DTEVBUik7Ci0JCUk5MTVfV1JJVEUoSTkxNVJFR19QSVBFQlNUQVQsCi0JCQlwaXBlYl9zdGF0c3xJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFfAotCQkJSTkxNV9WQkxBTktfQ0xFQVIpOworCQllbHNlCisJCQlzY2hlZHVsZV93b3JrKCZkZXZfcHJpdi0+bW0udmJsYW5rX3dvcmspOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTI5OCwyMyArNDYwLDQ1IEBACiAKIAlEUk1fREVCVUcoIlxuIik7CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gKytkZXZfcHJpdi0+Y291bnRlcjsKLQorCWRldl9wcml2LT5jb3VudGVyKys7CiAJaWYgKGRldl9wcml2LT5jb3VudGVyID4gMHg3RkZGRkZGRlVMKQotCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIgPSAxOworCQlkZXZfcHJpdi0+Y291bnRlciA9IDE7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXI7CiAKIAlCRUdJTl9MUF9SSU5HKDYpOwotCU9VVF9SSU5HKENNRF9TVE9SRV9EV09SRF9JRFgpOwotCU9VVF9SSU5HKDIwKTsKKwlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJT1VUX1JJTkcoNSA8PCBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCk7CiAJT1VUX1JJTkcoZGV2X3ByaXYtPmNvdW50ZXIpOwogCU9VVF9SSU5HKDApOwogCU9VVF9SSU5HKDApOwotCU9VVF9SSU5HKEdGWF9PUF9VU0VSX0lOVEVSUlVQVCk7CisJT1VUX1JJTkcoTUlfVVNFUl9JTlRFUlJVUFQpOwogCUFEVkFOQ0VfTFBfUklORygpOwogCiAJcmV0dXJuIGRldl9wcml2LT5jb3VudGVyOwogfQogCit2b2lkIGk5MTVfdXNlcl9pcnFfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworCWlmIChkZXYtPmlycV9lbmFibGVkICYmICgrK2Rldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA9PSAxKSkKKwkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworfQorCit2b2lkIGk5MTVfdXNlcl9pcnFfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworCUJVR19PTihkZXYtPmlycV9lbmFibGVkICYmIGRldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA8PSAwKTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCAmJiAoLS1kZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPT0gMCkpCisJCWk5MTVfZGlzYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfVVNFUl9JTlRFUlJVUFQpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jayk7Cit9CisKIHN0YXRpYyBpbnQgaTkxNV93YWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGlycV9ucikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzIzLDU1ICs1MDcsMzQgQEAKIAlEUk1fREVCVUcoImlycV9ucj0lZCBicmVhZGNydW1iPSVkXG4iLCBpcnFfbnIsCiAJCSAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSk7CiAKLQlpZiAoUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSA+PSBpcnFfbnIpCisJaWYgKFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKSB7CisJCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikgeworCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CisJCX0KIAkJcmV0dXJuIDA7CisJfQogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfV0FJVDsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CiAKKwlpOTE1X3VzZXJfaXJxX2dldChkZXYpOwogCURSTV9XQUlUX09OKHJldCwgZGV2X3ByaXYtPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKIAkJICAgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKTsKKwlpOTE1X3VzZXJfaXJxX3B1dChkZXYpOwogCiAJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJRFJNX0VSUk9SKCJFQlVTWSAtLSByZWM6ICVkIGVtaXR0ZWQ6ICVkXG4iLAogCQkJICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpLCAoaW50KWRldl9wcml2LT5jb3VudGVyKTsKIAl9CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpOTE1X2RyaXZlcl92YmxhbmtfZG9fd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlLAotCQkJCSAgICAgIGF0b21pY190ICpjb3VudGVyKQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOwotCi0JaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZChjb3VudGVyKSkKLQkJCS0gKnNlcXVlbmNlKSA8PSAoMTw8MjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKIAogCXJldHVybiByZXQ7CiB9CiAKLQotaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCi17Ci0JcmV0dXJuIGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsICZkZXYtPnZibF9yZWNlaXZlZCk7Ci19Ci0KLWludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdDIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKLXsKLQlyZXR1cm4gaTkxNV9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoZGV2LCBzZXF1ZW5jZSwgJmRldi0+dmJsX3JlY2VpdmVkMik7Ci19Ci0KIC8qIE5lZWRzIHRoZSBsb2NrIGFzIGl0IHRvdWNoZXMgdGhlIHJpbmcuCiAgKi8KIGludCBpOTE1X2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0zODEsMTQgKzU0NCwxNSBAQAogCWRybV9pOTE1X2lycV9lbWl0X3QgKmVtaXQgPSBkYXRhOwogCWludCByZXN1bHQ7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAogCWlmICghZGV2X3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlyZXN1bHQgPSBpOTE1X2VtaXRfaXJxKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpZiAoRFJNX0NPUFlfVE9fVVNFUihlbWl0LT5pcnFfc2VxLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpIHsKIAkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXJcbiIpOwpAQCAtNDE0LDE4ICs1NzgsNzQgQEAKIAlyZXR1cm4gaTkxNV93YWl0X2lycShkZXYsIGlycXdhaXQtPmlycV9zZXEpOwogfQogCi1zdGF0aWMgdm9pZCBpOTE1X2VuYWJsZV9pbnRlcnJ1cHQgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitpbnQgaTkxNV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUxNiBmbGFnOworCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHBsYW5lKTsKKwl1MzIJcGlwZXN0YXRfcmVnID0gMDsKKwl1MzIJcGlwZXN0YXQ7CiAKLQlmbGFnID0gMDsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSkKLQkJZmxhZyB8PSBWU1lOQ19QSVBFQV9GTEFHOwotCWlmIChkZXZfcHJpdi0+dmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9CKQotCQlmbGFnIHw9IFZTWU5DX1BJUEVCX0ZMQUc7CisJc3dpdGNoIChwaXBlKSB7CisJY2FzZSAwOgorCQlwaXBlc3RhdF9yZWcgPSBQSVBFQVNUQVQ7CisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwljYXNlIDE6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVCU1RBVDsKKwkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidHJpZWQgdG8gZW5hYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgcGlwZSAlZFxuIiwKKwkJCSAgcGlwZSk7CisJCWJyZWFrOworCX0KIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9FTkFCTEVfUiwgVVNFUl9JTlRfRkxBRyB8IGZsYWcpOworCWlmIChwaXBlc3RhdF9yZWcpIHsKKwkJcGlwZXN0YXQgPSBJOTE1X1JFQUQocGlwZXN0YXRfcmVnKTsKKwkJaWYgKElTX0k5NjVHKGRldikpCisJCQlwaXBlc3RhdCB8PSBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFOworCQllbHNlCisJCQlwaXBlc3RhdCB8PSBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFOworCQkvKiBDbGVhciBhbnkgc3RhbGUgaW50ZXJydXB0IHN0YXR1cyAqLworCQlwaXBlc3RhdCB8PSAoUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyB8CisJCQkgICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpOworCQlJOTE1X1dSSVRFKHBpcGVzdGF0X3JlZywgcGlwZXN0YXQpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBsYW5lKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHBpcGUgPSBpOTE1X2dldF9waXBlKGRldiwgcGxhbmUpOworCXUzMglwaXBlc3RhdF9yZWcgPSAwOworCXUzMglwaXBlc3RhdDsKKworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJcGlwZXN0YXRfcmVnID0gUElQRUFTVEFUOworCQlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcGlwZXN0YXRfcmVnID0gUElQRUJTVEFUOworCQlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidHJpZWQgdG8gZGlzYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IHBpcGUgJWRcbiIsCisJCQkgIHBpcGUpOworCQlicmVhazsKKwl9CisKKwlpZiAocGlwZXN0YXRfcmVnKSB7CisJCXBpcGVzdGF0ID0gSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CisJCXBpcGVzdGF0ICY9IH4oUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSB8CisJCQkgICAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKKwkJLyogQ2xlYXIgYW55IHN0YWxlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJcGlwZXN0YXQgfD0gKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfAorCQkJICAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKTsKKwkJSTkxNV9XUklURShwaXBlc3RhdF9yZWcsIHBpcGVzdGF0KTsKKwl9CiB9CiAKIC8qIFNldCB0aGUgdmJsYW5rIG1vbml0b3IgcGlwZQpAQCAtNDM0LDIyICs2NTQsMTIgQEAKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlkcm1faTkxNV92YmxhbmtfcGlwZV90ICpwaXBlID0gZGF0YTsKIAogCWlmICghZGV2X3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwaXBlLT5waXBlICYgfihEUk1fSTkxNV9WQkxBTktfUElQRV9BfERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggaW52YWxpZCBwaXBlIDB4JXhcbiIsIHBpcGUtPnBpcGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBwaXBlLT5waXBlOwotCi0JaTkxNV9lbmFibGVfaW50ZXJydXB0IChkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1OCwxOSArNjY4LDEzIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCAqcGlwZSA9IGRhdGE7Ci0JdTE2IGZsYWc7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmbGFnID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX0VOQUJMRV9SKTsKLQlwaXBlLT5waXBlID0gMDsKLQlpZiAoZmxhZyAmIFZTWU5DX1BJUEVBX0ZMQUcpCi0JCXBpcGUtPnBpcGUgfD0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQTsKLQlpZiAoZmxhZyAmIFZTWU5DX1BJUEVCX0ZMQUcpCi0JCXBpcGUtPnBpcGUgfD0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKKwlwaXBlLT5waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4NCwxMSArNjg4LDEyIEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfdmJsYW5rX3N3YXBfdCAqc3dhcCA9IGRhdGE7CiAJZHJtX2k5MTVfdmJsX3N3YXBfdCAqdmJsX3N3YXA7Ci0JdW5zaWduZWQgaW50IHBpcGUsIHNlcXR5cGUsIGN1cnNlcTsKKwl1bnNpZ25lZCBpbnQgcGlwZSwgc2VxdHlwZSwgY3Vyc2VxLCBwbGFuZTsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJaW50IHJldDsKIAotCWlmICghZGV2X3ByaXYpIHsKKwlpZiAoIWRldl9wcml2IHx8ICFkZXZfcHJpdi0+c2FyZWFfcHJpdikgewogCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTUwNCw3ICs3MDksOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwaXBlID0gKHN3YXAtPnNlcXR5cGUgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8gMSA6IDA7CisJcGxhbmUgPSAoc3dhcC0+c2VxdHlwZSAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgPyAxIDogMDsKKwlwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHBsYW5lKTsKIAogCXNlcXR5cGUgPSBzd2FwLT5zZXF0eXBlICYgKF9EUk1fVkJMQU5LX1JFTEFUSVZFIHwgX0RSTV9WQkxBTktfQUJTT0xVVEUpOwogCkBAIC01MjMsNyArNzI5LDE0IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmRyd19sb2NrLCBpcnFmbGFncyk7CiAKLQljdXJzZXEgPSBhdG9taWNfcmVhZChwaXBlID8gJmRldi0+dmJsX3JlY2VpdmVkMiA6ICZkZXYtPnZibF9yZWNlaXZlZCk7CisJLyoKKwkgKiBXZSB0YWtlIHRoZSByZWYgaGVyZSBhbmQgcHV0IGl0IHdoZW4gdGhlIHN3YXAgYWN0dWFsbHkgY29tcGxldGVzCisJICogaW4gdGhlIHRhc2tsZXQuCisJICovCisJcmV0ID0gZHJtX3ZibGFua19nZXQoZGV2LCBwaXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWN1cnNlcSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBwaXBlKTsKIAogCWlmIChzZXF0eXBlID09IF9EUk1fVkJMQU5LX1JFTEFUSVZFKQogCQlzd2FwLT5zZXF1ZW5jZSArPSBjdXJzZXE7CkBAIC01MzMsNiArNzQ2LDcgQEAKIAkJCXN3YXAtPnNlcXVlbmNlID0gY3Vyc2VxICsgMTsKIAkJfSBlbHNlIHsKIAkJCURSTV9ERUJVRygiTWlzc2VkIHRhcmdldCBzZXF1ZW5jZVxuIik7CisJCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC01NDMsNyArNzU3LDcgQEAKIAkJdmJsX3N3YXAgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV9pOTE1X3ZibF9zd2FwX3QsIGhlYWQpOwogCiAJCWlmICh2Ymxfc3dhcC0+ZHJ3X2lkID09IHN3YXAtPmRyYXdhYmxlICYmCi0JCSAgICB2Ymxfc3dhcC0+cGlwZSA9PSBwaXBlICYmCisJCSAgICB2Ymxfc3dhcC0+cGxhbmUgPT0gcGxhbmUgJiYKIAkJICAgIHZibF9zd2FwLT5zZXF1ZW5jZSA9PSBzd2FwLT5zZXF1ZW5jZSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKIAkJCURSTV9ERUJVRygiQWxyZWFkeSBzY2hlZHVsZWRcbiIpOwpAQCAtNTU1LDYgKzc2OSw3IEBACiAKIAlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPj0gMTAwKSB7CiAJCURSTV9ERUJVRygiVG9vIG1hbnkgc3dhcHMgcXVldWVkXG4iKTsKKwkJZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTU2MiwxMyArNzc3LDE0IEBACiAKIAlpZiAoIXZibF9zd2FwKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSB0byBxdWV1ZSBzd2FwXG4iKTsKKwkJZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJRFJNX0RFQlVHKCJcbiIpOwogCiAJdmJsX3N3YXAtPmRyd19pZCA9IHN3YXAtPmRyYXdhYmxlOwotCXZibF9zd2FwLT5waXBlID0gcGlwZTsKKwl2Ymxfc3dhcC0+cGxhbmUgPSBwbGFuZTsKIAl2Ymxfc3dhcC0+c2VxdWVuY2UgPSBzd2FwLT5zZXF1ZW5jZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOwpAQCAtNTg3LDM3ICs4MDMsNjMgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JSTkxNV9XUklURTE2KEk5MTVSRUdfSFdTVEFNLCAweGZmZmUpOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9NQVNLX1IsIDB4MCk7Ci0JSTkxNV9XUklURTE2KEk5MTVSRUdfSU5UX0VOQUJMRV9SLCAweDApOworCUk5MTVfV1JJVEUoSFdTVEFNLCAweGVmZmUpOworCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKKwlJOTE1X1dSSVRFKElFUiwgMHgwKTsKIH0KIAotdm9pZCBpOTE1X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0LCBudW1fcGlwZXMgPSAyOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5zd2Fwc19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKTsKIAlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZyA9IDA7CiAKLQlpZiAoIWRldl9wcml2LT52YmxhbmtfcGlwZSkKLQkJZGV2X3ByaXYtPnZibGFua19waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQTsKLQlpOTE1X2VuYWJsZV9pbnRlcnJ1cHQoZGV2KTsKKwkvKiBTZXQgaW5pdGlhbCB1bm1hc2tlZCBJUlFzIHRvIGp1c3QgdGhlIHNlbGVjdGVkIHZibGFuayBwaXBlcy4gKi8KKwlkZXZfcHJpdi0+aXJxX21hc2tfcmVnID0gfjA7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBudW1fcGlwZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKKwlkZXZfcHJpdi0+aXJxX21hc2tfcmVnICY9IH5JOTE1X0RJU1BMQVlfUElQRV9BX1ZCTEFOS19JTlRFUlJVUFQ7CisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+STkxNV9ESVNQTEFZX1BJUEVfQl9WQkxBTktfSU5URVJSVVBUOworCisJZGV2LT5tYXhfdmJsYW5rX2NvdW50ID0gMHhmZmZmZmY7IC8qIG9ubHkgMjQgYml0cyBvZiBmcmFtZSBjb3VudCAqLworCisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfTUFTSzsKKworCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwlJOTE1X1dSSVRFKElFUiwgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0spOworCSh2b2lkKSBJOTE1X1JFQUQoSUVSKTsKKworCW9wcmVnaW9uX2VuYWJsZV9hc2xlKGRldik7CiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+aXJxX3F1ZXVlKTsKKworCXJldHVybiAwOwogfQogCiB2b2lkIGk5MTVfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MTYgdGVtcDsKKwl1MzIgdGVtcDsKIAogCWlmICghZGV2X3ByaXYpCiAJCXJldHVybjsKIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0hXU1RBTSwgMHhmZmZmKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfTUFTS19SLCAweGZmZmYpOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9FTkFCTEVfUiwgMHgwKTsKKwlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSAwOwogCi0JdGVtcCA9IEk5MTVfUkVBRDE2KEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SLCB0ZW1wKTsKKwlJOTE1X1dSSVRFKEhXU1RBTSwgMHhmZmZmZmZmZik7CisJSTkxNV9XUklURShJTVIsIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoSUVSLCAweDApOworCisJdGVtcCA9IEk5MTVfUkVBRChQSVBFQVNUQVQpOworCUk5MTVfV1JJVEUoUElQRUFTVEFULCB0ZW1wKTsKKwl0ZW1wID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisJSTkxNV9XUklURShQSVBFQlNUQVQsIHRlbXApOworCXRlbXAgPSBJOTE1X1JFQUQoSUlSKTsKKwlJOTE1X1dSSVRFKElJUiwgdGVtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4N2EwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYwpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uIDxob25nLmxpdUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IDxtamdAcmVkaGF0LmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT04tSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgSU5URUwgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2RlZmluZSBQQ0lfQVNMRSAweGU0CisjZGVmaW5lIFBDSV9MQlBDIDB4ZjQKKyNkZWZpbmUgUENJX0FTTFMgMHhmYworCisjZGVmaW5lIE9QUkVHSU9OX1NaICAgICAgICAgICAgKDgqMTAyNCkKKyNkZWZpbmUgT1BSRUdJT05fSEVBREVSX09GRlNFVCAwCisjZGVmaW5lIE9QUkVHSU9OX0FDUElfT0ZGU0VUICAgMHgxMDAKKyNkZWZpbmUgT1BSRUdJT05fU1dTQ0lfT0ZGU0VUICAweDIwMAorI2RlZmluZSBPUFJFR0lPTl9BU0xFX09GRlNFVCAgIDB4MzAwCisjZGVmaW5lIE9QUkVHSU9OX1ZCVF9PRkZTRVQgICAgMHgxMDAwCisKKyNkZWZpbmUgT1BSRUdJT05fU0lHTkFUVVJFICJJbnRlbEdyYXBoaWNzTWVtIgorI2RlZmluZSBNQk9YX0FDUEkgICAgICAoMTw8MCkKKyNkZWZpbmUgTUJPWF9TV1NDSSAgICAgKDE8PDEpCisjZGVmaW5lIE1CT1hfQVNMRSAgICAgICgxPDwyKQorCitzdHJ1Y3Qgb3ByZWdpb25faGVhZGVyIHsKKyAgICAgICB1OCBzaWduYXR1cmVbMTZdOworICAgICAgIHUzMiBzaXplOworICAgICAgIHUzMiBvcHJlZ2lvbl92ZXI7CisgICAgICAgdTggYmlvc192ZXJbMzJdOworICAgICAgIHU4IHZiaW9zX3ZlclsxNl07CisgICAgICAgdTggZHJpdmVyX3ZlclsxNl07CisgICAgICAgdTMyIG1ib3hlczsKKyAgICAgICB1OCByZXNlcnZlZFsxNjRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogT3BSZWdpb24gbWFpbGJveCAjMTogcHVibGljIEFDUEkgbWV0aG9kcyAqLworc3RydWN0IG9wcmVnaW9uX2FjcGkgeworICAgICAgIHUzMiBkcmR5OyAgICAgICAvKiBkcml2ZXIgcmVhZGluZXNzICovCisgICAgICAgdTMyIGNzdHM7ICAgICAgIC8qIG5vdGlmaWNhdGlvbiBzdGF0dXMgKi8KKyAgICAgICB1MzIgY2V2dDsgICAgICAgLyogY3VycmVudCBldmVudCAqLworICAgICAgIHU4IHJzdmQxWzIwXTsKKyAgICAgICB1MzIgZGlkbFs4XTsgICAgLyogc3VwcG9ydGVkIGRpc3BsYXkgZGV2aWNlcyBJRCBsaXN0ICovCisgICAgICAgdTMyIGNwZGxbOF07ICAgIC8qIGN1cnJlbnRseSBwcmVzZW50ZWQgZGlzcGxheSBsaXN0ICovCisgICAgICAgdTMyIGNhZGxbOF07ICAgIC8qIGN1cnJlbnRseSBhY3RpdmUgZGlzcGxheSBsaXN0ICovCisgICAgICAgdTMyIG5hZGxbOF07ICAgIC8qIG5leHQgYWN0aXZlIGRldmljZXMgbGlzdCAqLworICAgICAgIHUzMiBhc2xwOyAgICAgICAvKiBBU0wgc2xlZXAgdGltZS1vdXQgKi8KKyAgICAgICB1MzIgdGlkeDsgICAgICAgLyogdG9nZ2xlIHRhYmxlIGluZGV4ICovCisgICAgICAgdTMyIGNocGQ7ICAgICAgIC8qIGN1cnJlbnQgaG90cGx1ZyBlbmFibGUgaW5kaWNhdG9yICovCisgICAgICAgdTMyIGNsaWQ7ICAgICAgIC8qIGN1cnJlbnQgbGlkIHN0YXRlKi8KKyAgICAgICB1MzIgY2RjazsgICAgICAgLyogY3VycmVudCBkb2NraW5nIHN0YXRlICovCisgICAgICAgdTMyIHN4c3c7ICAgICAgIC8qIFN4IHN0YXRlIHJlc3VtZSAqLworICAgICAgIHUzMiBldnRzOyAgICAgICAvKiBBU0wgc3VwcG9ydGVkIGV2ZW50cyAqLworICAgICAgIHUzMiBjbm90OyAgICAgICAvKiBjdXJyZW50IE9TIG5vdGlmaWNhdGlvbiAqLworICAgICAgIHUzMiBucmR5OyAgICAgICAvKiBkcml2ZXIgc3RhdHVzICovCisgICAgICAgdTggcnN2ZDJbNjBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogT3BSZWdpb24gbWFpbGJveCAjMjogU1dTQ0kgKi8KK3N0cnVjdCBvcHJlZ2lvbl9zd3NjaSB7CisgICAgICAgdTMyIHNjaWM7ICAgICAgIC8qIFNXU0NJIGNvbW1hbmR8c3RhdHVzfGRhdGEgKi8KKyAgICAgICB1MzIgcGFybTsgICAgICAgLyogY29tbWFuZCBwYXJhbWV0ZXJzICovCisgICAgICAgdTMyIGRzbHA7ICAgICAgIC8qIGRyaXZlciBzbGVlcCB0aW1lLW91dCAqLworICAgICAgIHU4IHJzdmRbMjQ0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzM6IEFTTEUgKi8KK3N0cnVjdCBvcHJlZ2lvbl9hc2xlIHsKKyAgICAgICB1MzIgYXJkeTsgICAgICAgLyogZHJpdmVyIHJlYWRpbmVzcyAqLworICAgICAgIHUzMiBhc2xjOyAgICAgICAvKiBBU0xFIGludGVycnVwdCBjb21tYW5kICovCisgICAgICAgdTMyIHRjaGU7ICAgICAgIC8qIHRlY2hub2xvZ3kgZW5hYmxlZCBpbmRpY2F0b3IgKi8KKyAgICAgICB1MzIgYWxzaTsgICAgICAgLyogY3VycmVudCBBTFMgaWxsdW1pbmFuY2UgcmVhZGluZyAqLworICAgICAgIHUzMiBiY2xwOyAgICAgICAvKiBiYWNrbGlnaHQgYnJpZ2h0bmVzcyB0byBzZXQgKi8KKyAgICAgICB1MzIgcGZpdDsgICAgICAgLyogcGFuZWwgZml0dGluZyBzdGF0ZSAqLworICAgICAgIHUzMiBjYmx2OyAgICAgICAvKiBjdXJyZW50IGJyaWdodG5lc3MgbGV2ZWwgKi8KKyAgICAgICB1MTYgYmNsbVsyMF07ICAgLyogYmFja2xpZ2h0IGxldmVsIGR1dHkgY3ljbGUgbWFwcGluZyB0YWJsZSAqLworICAgICAgIHUzMiBjcGZtOyAgICAgICAvKiBjdXJyZW50IHBhbmVsIGZpdHRpbmcgbW9kZSAqLworICAgICAgIHUzMiBlcGZtOyAgICAgICAvKiBlbmFibGVkIHBhbmVsIGZpdHRpbmcgbW9kZXMgKi8KKyAgICAgICB1OCBwbHV0Wzc0XTsgICAgLyogcGFuZWwgTFVUIGFuZCBpZGVudGlmaWVyICovCisgICAgICAgdTMyIHBmbWI7ICAgICAgIC8qIFBXTSBmcmVxIGFuZCBtaW4gYnJpZ2h0bmVzcyAqLworICAgICAgIHU4IHJzdmRbMTAyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEFTTEUgaXJxIHJlcXVlc3QgYml0cyAqLworI2RlZmluZSBBU0xFX1NFVF9BTFNfSUxMVU0gICAgICgxIDw8IDApCisjZGVmaW5lIEFTTEVfU0VUX0JBQ0tMSUdIVCAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQVNMRV9TRVRfUEZJVCAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBBU0xFX1NFVF9QV01fRlJFUSAgICAgICgxIDw8IDMpCisjZGVmaW5lIEFTTEVfUkVRX01TSyAgICAgICAgICAgMHhmCisKKy8qIHJlc3BvbnNlIGJpdHMgb2YgQVNMRSBpcnEgcmVxdWVzdCAqLworI2RlZmluZSBBU0xFX0FMU19JTExVTV9GQUlMICAgICgyPDwxMCkKKyNkZWZpbmUgQVNMRV9CQUNLTElHSFRfRkFJTCAgICAoMjw8MTIpCisjZGVmaW5lIEFTTEVfUEZJVF9GQUlMICAgICAgICAgKDI8PDE0KQorI2RlZmluZSBBU0xFX1BXTV9GUkVRX0ZBSUwgICAgICgyPDwxNikKKworLyogQVNMRSBiYWNrbGlnaHQgYnJpZ2h0bmVzcyB0byBzZXQgKi8KKyNkZWZpbmUgQVNMRV9CQ0xQX1ZBTElEICAgICAgICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgQVNMRV9CQ0xQX01TSyAgICAgICAgICAofigxPDwzMSkpCisKKy8qIEFTTEUgcGFuZWwgZml0dGluZyByZXF1ZXN0ICovCisjZGVmaW5lIEFTTEVfUEZJVF9WQUxJRCAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgQVNMRV9QRklUX0NFTlRFUiAoMTw8MCkKKyNkZWZpbmUgQVNMRV9QRklUX1NUUkVUQ0hfVEVYVCAoMTw8MSkKKyNkZWZpbmUgQVNMRV9QRklUX1NUUkVUQ0hfR0ZYICgxPDwyKQorCisvKiBQV00gZnJlcXVlbmN5IGFuZCBtaW5pbXVtIGJyaWdodG5lc3MgKi8KKyNkZWZpbmUgQVNMRV9QRk1CX0JSSUdIVE5FU1NfTUFTSyAoMHhmZikKKyNkZWZpbmUgQVNMRV9QRk1CX0JSSUdIVE5FU1NfVkFMSUQgKDE8PDgpCisjZGVmaW5lIEFTTEVfUEZNQl9QV01fTUFTSyAoMHg3ZmZmZmUwMCkKKyNkZWZpbmUgQVNMRV9QRk1CX1BXTV9WQUxJRCAoMTw8MzEpCisKKyNkZWZpbmUgQVNMRV9DQkxWX1ZBTElEICAgICAgICAgKDE8PDMxKQorCitzdGF0aWMgdTMyIGFzbGVfc2V0X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgYmNscCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlID0gZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGU7CisJdTMyIGJsY19wd21fY3RsLCBibGNfcHdtX2N0bDI7CisKKwlpZiAoIShiY2xwICYgQVNMRV9CQ0xQX1ZBTElEKSkKKwkJcmV0dXJuIEFTTEVfQkFDS0xJR0hUX0ZBSUw7CisKKwliY2xwICY9IEFTTEVfQkNMUF9NU0s7CisJaWYgKGJjbHAgPCAwIHx8IGJjbHAgPiAyNTUpCisJCXJldHVybiBBU0xFX0JBQ0tMSUdIVF9GQUlMOworCisJYmxjX3B3bV9jdGwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOworCWJsY19wd21fY3RsICY9IH5CQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCWJsY19wd21fY3RsMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOworCisJaWYgKGJsY19wd21fY3RsMiAmIEJMTV9DT01CSU5BVElPTl9NT0RFKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX0xCUEMsIGJjbHApOworCWVsc2UKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgYmxjX3B3bV9jdGwgfCAoKGJjbHAgKiAweDEwMSktMSkpOworCisJYXNsZS0+Y2JsdiA9IChiY2xwKjB4NjQpLzB4ZmYgfCBBU0xFX0NCTFZfVkFMSUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBhc2xlX3NldF9hbHNfaWxsdW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGFsc2kpCit7CisJLyogYWxzaSBpcyB0aGUgY3VycmVudCBBTFMgcmVhZGluZyBpbiBsdXguIDAgaW5kaWNhdGVzIGJlbG93IHNlbnNvcgorCSAgIHJhbmdlLCAweGZmZmYgaW5kaWNhdGVzIGFib3ZlIHNlbnNvciByYW5nZS4gMS0weGZmZmUgYXJlIHZhbGlkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfcHdtX2ZyZXEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHBmbWIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAocGZtYiAmIEFTTEVfUEZNQl9QV01fVkFMSUQpIHsKKwkJdTMyIGJsY19wd21fY3RsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwkJdTMyIHB3bSA9IHBmbWIgJiBBU0xFX1BGTUJfUFdNX01BU0s7CisJCWJsY19wd21fY3RsICY9IEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0s7CisJCXB3bSA9IHB3bSA+PiA5OworCQkvKiBGSVhNRSAtIHdoYXQgZG8gd2UgZG8gd2l0aCB0aGUgUFdNPyAqLworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBhc2xlX3NldF9wZml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBwZml0KQoreworCS8qIFBhbmVsIGZpdHRpbmcgaXMgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhlIFggY29kZSwgc28gdGhpcyBpcyBhCisJICAgbm9vcCB1bnRpbCBtb2Rlc2V0dGluZyBzdXBwb3J0IHdvcmtzIGZ1bGx5ICovCisJaWYgKCEocGZpdCAmIEFTTEVfUEZJVF9WQUxJRCkpCisJCXJldHVybiBBU0xFX1BGSVRfRkFJTDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcHJlZ2lvbl9hc2xlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlID0gZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGU7CisJdTMyIGFzbGVfc3RhdCA9IDA7CisJdTMyIGFzbGVfcmVxOworCisJaWYgKCFhc2xlKQorCQlyZXR1cm47CisKKwlhc2xlX3JlcSA9IGFzbGUtPmFzbGMgJiBBU0xFX1JFUV9NU0s7CisKKwlpZiAoIWFzbGVfcmVxKSB7CisJCURSTV9ERUJVRygibm9uIGFzbGUgc2V0IHJlcXVlc3Q/P1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9BTFNfSUxMVU0pCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9hbHNfaWxsdW0oZGV2LCBhc2xlLT5hbHNpKTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX0JBQ0tMSUdIVCkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X2JhY2tsaWdodChkZXYsIGFzbGUtPmJjbHApOworCisJaWYgKGFzbGVfcmVxICYgQVNMRV9TRVRfUEZJVCkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X3BmaXQoZGV2LCBhc2xlLT5wZml0KTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX1BXTV9GUkVRKQorCQlhc2xlX3N0YXQgfD0gYXNsZV9zZXRfcHdtX2ZyZXEoZGV2LCBhc2xlLT5wZm1iKTsKKworCWFzbGUtPmFzbGMgPSBhc2xlX3N0YXQ7Cit9CisKKyNkZWZpbmUgQVNMRV9BTFNfRU4gICAgKDE8PDApCisjZGVmaW5lIEFTTEVfQkxDX0VOICAgICgxPDwxKQorI2RlZmluZSBBU0xFX1BGSVRfRU4gICAoMTw8MikKKyNkZWZpbmUgQVNMRV9QRk1CX0VOICAgKDE8PDMpCisKK3ZvaWQgb3ByZWdpb25fZW5hYmxlX2FzbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBvcHJlZ2lvbl9hc2xlICphc2xlID0gZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGU7CisKKwlpZiAoYXNsZSkgeworCQl1MzIgcGlwZWJfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKwkJaWYgKElTX01PQklMRShkZXYpKSB7CisJCQkvKiBNYW55IGRldmljZXMgdHJpZ2dlciBldmVudHMgd2l0aCBhIHdyaXRlIHRvIHRoZQorCQkJICAgbGVnYWN5IGJhY2tsaWdodCBjb250cm9sbGVyLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZQorCQkJICAgdGhhdCBpdCdzIGFibGUgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cyAqLworCQkJSTkxNV9XUklURShQSVBFQlNUQVQsIHBpcGViX3N0YXRzIHw9CisJCQkJICAgSTkxNV9MRUdBQ1lfQkxDX0VWRU5UX0VOQUJMRSk7CisJCQlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfQVNMRV9JTlRFUlJVUFQgfAorCQkJCQlJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCk7CisJCX0gZWxzZQorCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0FTTEVfSU5URVJSVVBUKTsKKworCQlhc2xlLT50Y2hlID0gQVNMRV9BTFNfRU4gfCBBU0xFX0JMQ19FTiB8IEFTTEVfUEZJVF9FTiB8CisJCQlBU0xFX1BGTUJfRU47CisJCWFzbGUtPmFyZHkgPSAxOworCX0KK30KKworI2RlZmluZSBBQ1BJX0VWX0RJU1BMQVlfU1dJVENIICgxPDwwKQorI2RlZmluZSBBQ1BJX0VWX0xJRCAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBBQ1BJX0VWX0RPQ0sgICAgICAgICAgICgxPDwyKQorCitzdGF0aWMgc3RydWN0IGludGVsX29wcmVnaW9uICpzeXN0ZW1fb3ByZWdpb247CisKK2ludCBpbnRlbF9vcHJlZ2lvbl92aWRlb19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCS8qIFRoZSBvbmx5IHZpZGVvIGV2ZW50cyByZWxldmFudCB0byBvcHJlZ2lvbiBhcmUgMHg4MC4gVGhlc2UgaW5kaWNhdGUKKwkgICBlaXRoZXIgYSBkb2NraW5nIGV2ZW50LCBsaWQgc3dpdGNoIG9yIGRpc3BsYXkgc3dpdGNoIHJlcXVlc3QuIEluCisJICAgTGludXgsIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBkb2NrLCBidXR0b24gYW5kIHZpZGVvIGRyaXZlcnMuCisJICAgV2UgbWlnaHQgd2FudCB0byBmaXggdGhlIHZpZGVvIGRyaXZlciB0byBiZSBvcHJlZ2lvbi1hd2FyZSBpbgorCSAgIGZ1dHVyZSwgYnV0IHJpZ2h0IG5vdyB3ZSBqdXN0IGluZGljYXRlIHRvIHRoZSBmaXJtd2FyZSB0aGF0IHRoZQorCSAgIHJlcXVlc3QgaGFzIGJlZW4gaGFuZGxlZCAqLworCisJc3RydWN0IG9wcmVnaW9uX2FjcGkgKmFjcGk7CisKKwlpZiAoIXN5c3RlbV9vcHJlZ2lvbikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJYWNwaSA9IHN5c3RlbV9vcHJlZ2lvbi0+YWNwaTsKKwlhY3BpLT5jc3RzID0gMDsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaW50ZWxfb3ByZWdpb25fbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpbnRlbF9vcHJlZ2lvbl92aWRlb19ldmVudCwKK307CisKK2ludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJmRldl9wcml2LT5vcHJlZ2lvbjsKKwl2b2lkICpiYXNlOworCXUzMiBhc2xzLCBtYm94ZXM7CisJaW50IGVyciA9IDA7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBQQ0lfQVNMUywgJmFzbHMpOworCURSTV9ERUJVRygiZ3JhcGhpYyBvcHJlZ2lvbiBwaHlzaWNhbCBhZGRyOiAweCV4XG4iLCBhc2xzKTsKKwlpZiAoYXNscyA9PSAwKSB7CisJCURSTV9ERUJVRygiQUNQSSBPcFJlZ2lvbiBub3Qgc3VwcG9ydGVkIVxuIik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJYmFzZSA9IGlvcmVtYXAoYXNscywgT1BSRUdJT05fU1opOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvcHJlZ2lvbi0+aGVhZGVyID0gYmFzZTsKKwlpZiAobWVtY21wKG9wcmVnaW9uLT5oZWFkZXItPnNpZ25hdHVyZSwgT1BSRUdJT05fU0lHTkFUVVJFLCAxNikpIHsKKwkJRFJNX0RFQlVHKCJvcHJlZ2lvbiBzaWduYXR1cmUgbWlzbWF0Y2hcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJbWJveGVzID0gb3ByZWdpb24tPmhlYWRlci0+bWJveGVzOworCWlmIChtYm94ZXMgJiBNQk9YX0FDUEkpIHsKKwkJRFJNX0RFQlVHKCJQdWJsaWMgQUNQSSBtZXRob2RzIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5hY3BpID0gYmFzZSArIE9QUkVHSU9OX0FDUElfT0ZGU0VUOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiUHVibGljIEFDUEkgbWV0aG9kcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJZXJyID0gLUVOT1RTVVBQOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW9wcmVnaW9uLT5lbmFibGVkID0gMTsKKworCWlmIChtYm94ZXMgJiBNQk9YX1NXU0NJKSB7CisJCURSTV9ERUJVRygiU1dTQ0kgc3VwcG9ydGVkXG4iKTsKKwkJb3ByZWdpb24tPnN3c2NpID0gYmFzZSArIE9QUkVHSU9OX1NXU0NJX09GRlNFVDsKKwl9CisJaWYgKG1ib3hlcyAmIE1CT1hfQVNMRSkgeworCQlEUk1fREVCVUcoIkFTTEUgc3VwcG9ydGVkXG4iKTsKKwkJb3ByZWdpb24tPmFzbGUgPSBiYXNlICsgT1BSRUdJT05fQVNMRV9PRkZTRVQ7CisJfQorCisJLyogTm90aWZ5IEJJT1Mgd2UgYXJlIHJlYWR5IHRvIGhhbmRsZSBBQ1BJIHZpZGVvIGV4dCBub3RpZnMuCisJICogUmlnaHQgbm93LCBhbGwgdGhlIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgQUNQSSB2aWRlbyBtb2R1bGUuCisJICogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZW0uICovCisJb3ByZWdpb24tPmFjcGktPmNzdHMgPSAwOworCW9wcmVnaW9uLT5hY3BpLT5kcmR5ID0gMTsKKworCXN5c3RlbV9vcHJlZ2lvbiA9IG9wcmVnaW9uOworCXJlZ2lzdGVyX2FjcGlfbm90aWZpZXIoJmludGVsX29wcmVnaW9uX25vdGlmaWVyKTsKKworCXJldHVybiAwOworCitlcnJfb3V0OgorCWlvdW5tYXAob3ByZWdpb24tPmhlYWRlcik7CisJb3ByZWdpb24tPmhlYWRlciA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBpbnRlbF9vcHJlZ2lvbl9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uID0gJmRldl9wcml2LT5vcHJlZ2lvbjsKKworCWlmICghb3ByZWdpb24tPmVuYWJsZWQpCisJCXJldHVybjsKKworCW9wcmVnaW9uLT5hY3BpLT5kcmR5ID0gMDsKKworCXN5c3RlbV9vcHJlZ2lvbiA9IE5VTEw7CisJdW5yZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZpbnRlbF9vcHJlZ2lvbl9ub3RpZmllcik7CisKKwkvKiBqdXN0IGNsZWFyIGFsbCBvcHJlZ2lvbiBtZW1vcnkgcG9pbnRlcnMgbm93ICovCisJaW91bm1hcChvcHJlZ2lvbi0+aGVhZGVyKTsKKwlvcHJlZ2lvbi0+aGVhZGVyID0gTlVMTDsKKwlvcHJlZ2lvbi0+YWNwaSA9IE5VTEw7CisJb3ByZWdpb24tPnN3c2NpID0gTlVMTDsKKwlvcHJlZ2lvbi0+YXNsZSA9IE5VTEw7CisKKwlvcHJlZ2lvbi0+ZW5hYmxlZCA9IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJkOWYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMCwwICsxLDE0MTcgQEAKKy8qIENvcHlyaWdodCAyMDAzIFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVFVOR1NURU4gR1JBUEhJQ1MgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfSTkxNV9SRUdfSF8KKyNkZWZpbmUgX0k5MTVfUkVHX0hfCisKKy8qCisgKiBUaGUgQnJpZGdlIGRldmljZSdzIFBDSSBjb25maWcgc3BhY2UgaGFzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogZmIgYXBlcnR1cmUgc2l6ZSBhbmQgdGhlIGFtb3VudCBvZiBwcmUtcmVzZXJ2ZWQgbWVtb3J5LgorICovCisjZGVmaW5lIElOVEVMX0dNQ0hfQ1RSTAkJMHg1MgorI2RlZmluZSBJTlRFTF9HTUNIX0VOQUJMRUQJMHg0CisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNX01BU0sJMHgxCisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNXzY0TQkweDEKKyNkZWZpbmUgSU5URUxfR01DSF9NRU1fMTI4TQkwCisKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX01BU0sJCSgweDcgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVECSgweDAgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xTQkoMHgxIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fNE0JKDB4MiA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzhNCSgweDMgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xNk0JKDB4NCA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzMyTQkoMHg1IDw8IDQpCisKKyNkZWZpbmUgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNDhNCSgweDYgPDwgNCkKKyNkZWZpbmUgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNjRNCSgweDcgPDwgNCkKKworLyogUENJIGNvbmZpZyBzcGFjZSAqLworCisjZGVmaW5lIEhQTExDQwkweGMwIC8qIDg1NSBvbmx5ICovCisjZGVmaW5lICAgR0NfQ0xPQ0tfQ09OVFJPTF9NQVNLCQkoMyA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzEzM18yMDAJCSgwIDw8IDApCisjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzIwMAkJKDEgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xMDBfMTMzCQkoMiA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzE2Nl8yNTAJCSgzIDw8IDApCisjZGVmaW5lIEdDRkdDCTB4ZjAgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lICAgR0NfTE9XX0ZSRVFVRU5DWV9FTkFCTEUJKDEgPDwgNykKKyNkZWZpbmUgICBHQ19ESVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaCSgwIDw8IDQpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18zMzNfTUhaCSg0IDw8IDQpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS19NQVNLCQkoNyA8PCA0KQorI2RlZmluZSBMQkIJMHhmNAorCisvKiBWR0Egc3R1ZmYgKi8KKworI2RlZmluZSBWR0FfU1QwMV9NREEgMHgzYmEKKyNkZWZpbmUgVkdBX1NUMDFfQ0dBIDB4M2RhCisKKyNkZWZpbmUgVkdBX01TUl9XUklURSAweDNjMgorI2RlZmluZSBWR0FfTVNSX1JFQUQgMHgzY2MKKyNkZWZpbmUgICBWR0FfTVNSX01FTV9FTiAoMTw8MSkKKyNkZWZpbmUgICBWR0FfTVNSX0NHQV9NT0RFICgxPDwwKQorCisjZGVmaW5lIFZHQV9TUl9JTkRFWCAweDNjNAorI2RlZmluZSBWR0FfU1JfREFUQSAweDNjNQorCisjZGVmaW5lIFZHQV9BUl9JTkRFWCAweDNjMAorI2RlZmluZSAgIFZHQV9BUl9WSURfRU4gKDE8PDUpCisjZGVmaW5lIFZHQV9BUl9EQVRBX1dSSVRFIDB4M2MwCisjZGVmaW5lIFZHQV9BUl9EQVRBX1JFQUQgMHgzYzEKKworI2RlZmluZSBWR0FfR1JfSU5ERVggMHgzY2UKKyNkZWZpbmUgVkdBX0dSX0RBVEEgMHgzY2YKKy8qIEdSMDUgKi8KKyNkZWZpbmUgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9TSElGVCAzCisjZGVmaW5lICAgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9QTEFORSAxCisvKiBHUjA2ICovCisjZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX01BU0sgMHhjCisjZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX1NISUZUIDIKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0FGRkZGIDAKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0JGRkZGIDEKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0I3RkZGIDIKKyNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0JGRkZGIDMKKworI2RlZmluZSBWR0FfREFDTUFTSyAweDNjNgorI2RlZmluZSBWR0FfREFDUlggMHgzYzcKKyNkZWZpbmUgVkdBX0RBQ1dYIDB4M2M4CisjZGVmaW5lIFZHQV9EQUNEQVRBIDB4M2M5CisKKyNkZWZpbmUgVkdBX0NSX0lOREVYX01EQSAweDNiNAorI2RlZmluZSBWR0FfQ1JfREFUQV9NREEgMHgzYjUKKyNkZWZpbmUgVkdBX0NSX0lOREVYX0NHQSAweDNkNAorI2RlZmluZSBWR0FfQ1JfREFUQV9DR0EgMHgzZDUKKworLyoKKyAqIE1lbW9yeSBpbnRlcmZhY2UgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdGhlIGtlcm5lbAorICovCisjZGVmaW5lIE1JX0lOU1RSKG9wY29kZSwgZmxhZ3MpICgoKG9wY29kZSkgPDwgMjMpIHwgKGZsYWdzKSkKKworI2RlZmluZSBNSV9OT09QCQkJTUlfSU5TVFIoMCwgMCkKKyNkZWZpbmUgTUlfVVNFUl9JTlRFUlJVUFQJTUlfSU5TVFIoMHgwMiwgMCkKKyNkZWZpbmUgTUlfV0FJVF9GT1JfRVZFTlQgICAgICAgTUlfSU5TVFIoMHgwMywgMCkKKyNkZWZpbmUgICBNSV9XQUlUX0ZPUl9QTEFORV9CX0ZMSVAgICAgICAoMTw8NikKKyNkZWZpbmUgICBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikKKyNkZWZpbmUgICBNSV9XQUlUX0ZPUl9QTEFORV9BX1NDQU5MSU5FUyAoMTw8MSkKKyNkZWZpbmUgTUlfRkxVU0gJCU1JX0lOU1RSKDB4MDQsIDApCisjZGVmaW5lICAgTUlfUkVBRF9GTFVTSAkJKDEgPDwgMCkKKyNkZWZpbmUgICBNSV9FWEVfRkxVU0gJCSgxIDw8IDEpCisjZGVmaW5lICAgTUlfTk9fV1JJVEVfRkxVU0gJKDEgPDwgMikKKyNkZWZpbmUgICBNSV9TQ0VORV9DT1VOVAkoMSA8PCAzKSAvKiBqdXN0IGluY3JlbWVudCBzY2VuZSBjb3VudCAqLworI2RlZmluZSAgIE1JX0VORF9TQ0VORQkJKDEgPDwgNCkgLyogZmx1c2ggYmlubmVyIGFuZCBpbmNyIHNjZW5lIGNvdW50ICovCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9FTkQJTUlfSU5TVFIoMHgwYSwgMCkKKyNkZWZpbmUgTUlfUkVQT1JUX0hFQUQJCU1JX0lOU1RSKDB4MDcsIDApCisjZGVmaW5lIE1JX0xPQURfU0NBTl9MSU5FU19JTkNMIE1JX0lOU1RSKDB4MTIsIDApCisjZGVmaW5lIE1JX1NUT1JFX0RXT1JEX0lNTQlNSV9JTlNUUigweDIwLCAxKQorI2RlZmluZSAgIE1JX01FTV9WSVJUVUFMCSgxIDw8IDIyKSAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgTUlfU1RPUkVfRFdPUkRfSU5ERVgJTUlfSU5TVFIoMHgyMSwgMSkKKyNkZWZpbmUgICBNSV9TVE9SRV9EV09SRF9JTkRFWF9TSElGVCAyCisjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfSU1NCU1JX0lOU1RSKDB4MjIsIDEpCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJTUlfSU5TVFIoMHgzMCwgMSkKKyNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFCSgxKQorI2RlZmluZSAgIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSAoMTw8OCkKKyNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUCU1JX0lOU1RSKDB4MzEsIDApCisKKy8qCisgKiAzRCBpbnN0cnVjdGlvbnMgdXNlZCBieSB0aGUga2VybmVsCisgKi8KKyNkZWZpbmUgR0ZYX0lOU1RSKG9wY29kZSwgZmxhZ3MpICgoMHgzIDw8IDI5KSB8ICgob3Bjb2RlKSA8PCAyNCkgfCAoZmxhZ3MpKQorCisjZGVmaW5lIEdGWF9PUF9SQVNURVJfUlVMRVMgICAgKCgweDM8PDI5KXwoMHg3PDwyNCkpCisjZGVmaW5lIEdGWF9PUF9TQ0lTU09SICAgICAgICAgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCisjZGVmaW5lICAgU0NfVVBEQVRFX1NDSVNTT1IgICAgICAgKDB4MTw8MSkKKyNkZWZpbmUgICBTQ19FTkFCTEVfTUFTSyAgICAgICAgICAoMHgxPDwwKQorI2RlZmluZSAgIFNDX0VOQUJMRSAgICAgICAgICAgICAgICgweDE8PDApCisjZGVmaW5lIEdGWF9PUF9MT0FEX0lORElSRUNUICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDc8PDE2KSkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfSU5GTyAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODE8PDE2KXwoMHgxKSkKKyNkZWZpbmUgICBTQ0lfWU1JTl9NQVNLICAgICAgKDB4ZmZmZjw8MTYpCisjZGVmaW5lICAgU0NJX1hNSU5fTUFTSyAgICAgICgweGZmZmY8PDApCisjZGVmaW5lICAgU0NJX1lNQVhfTUFTSyAgICAgICgweGZmZmY8PDE2KQorI2RlZmluZSAgIFNDSV9YTUFYX01BU0sgICAgICAoMHhmZmZmPDwwKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9FTkFCTEUJICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9SRUNUCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODE8PDE2KXwxKQorI2RlZmluZSBHRlhfT1BfQ09MT1JfRkFDVE9SICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDE8PDE2KXwweDApCisjZGVmaW5lIEdGWF9PUF9TVElQUExFICAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODM8PDE2KSkKKyNkZWZpbmUgR0ZYX09QX01BUF9JTkZPICAgICAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwweDQpCisjZGVmaW5lIEdGWF9PUF9ERVNUQlVGRkVSX1ZBUlMgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODU8PDE2KXwweDApCisjZGVmaW5lIEdGWF9PUF9ERVNUQlVGRkVSX0lORk8JICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4ZTw8MTYpfDEpCisjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODA8PDE2KXwoMHgzKSkKKyNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk9fSTk2NSAgKCgweDc5MDA8PDE2KXwweDIpCisjZGVmaW5lIFNSQ19DT1BZX0JMVF9DTUQgICAgICAgICAgICAgICAgKCgyPDwyOSl8KDB4NDM8PDIyKXw0KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfQ01ECQkoKDI8PDI5KXwoMHg1Mzw8MjIpfDYpCisjZGVmaW5lIFhZX01PTk9fU1JDX0NPUFlfSU1NX0JMVAkoKDI8PDI5KXwoMHg3MTw8MjIpfDUpCisjZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9XUklURV9BTFBIQQkoMTw8MjEpCisjZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9XUklURV9SR0IJKDE8PDIwKQorI2RlZmluZSAgIEJMVF9ERVBUSF84CQkJKDA8PDI0KQorI2RlZmluZSAgIEJMVF9ERVBUSF8xNl81NjUJCSgxPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMTZfMTU1NQkJKDI8PDI0KQorI2RlZmluZSAgIEJMVF9ERVBUSF8zMgkJCSgzPDwyNCkKKyNkZWZpbmUgICBCTFRfUk9QX0dYQ09QWQkJKDB4Y2M8PDE2KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfU1JDX1RJTEVECSgxPDwxNSkgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQJKDE8PDExKSAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgQ01EX09QX0RJU1BMQVlCVUZGRVJfSU5GTyAoKDB4MDw8MjkpfCgweDE0PDwyMyl8MikKKyNkZWZpbmUgICBBU1lOQ19GTElQICAgICAgICAgICAgICAgICgxPDwyMikKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0EgICAgICAgICAgICgwPDwyMCkKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0IgICAgICAgICAgICgxPDwyMCkKKworLyoKKyAqIEluc3RydWN0aW9uIGFuZCBpbnRlcnJ1cHQgY29udHJvbCByZWdzCisgKi8KKworI2RlZmluZSBQUkIwX1RBSUwJMHgwMjAzMAorI2RlZmluZSBQUkIwX0hFQUQJMHgwMjAzNAorI2RlZmluZSBQUkIwX1NUQVJUCTB4MDIwMzgKKyNkZWZpbmUgUFJCMF9DVEwJMHgwMjAzYworI2RlZmluZSAgIFRBSUxfQUREUgkJMHgwMDFGRkZGOAorI2RlZmluZSAgIEhFQURfV1JBUF9DT1VOVAkweEZGRTAwMDAwCisjZGVmaW5lICAgSEVBRF9XUkFQX09ORQkJMHgwMDIwMDAwMAorI2RlZmluZSAgIEhFQURfQUREUgkJMHgwMDFGRkZGQworI2RlZmluZSAgIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF9NQVNLCTB4MDAwMDAwMDYKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF82NEsJMHgwMDAwMDAwMgorI2RlZmluZSAgIFJJTkdfUkVQT1JUXzEyOEsJMHgwMDAwMDAwNAorI2RlZmluZSAgIFJJTkdfTk9fUkVQT1JUCTB4MDAwMDAwMDAKKyNkZWZpbmUgICBSSU5HX1ZBTElEX01BU0sJMHgwMDAwMDAwMQorI2RlZmluZSAgIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBSSU5HX0lOVkFMSUQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUFJCMV9UQUlMCTB4MDIwNDAgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIFBSQjFfSEVBRAkweDAyMDQ0IC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX1NUQVJUCTB4MDIwNDggLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIFBSQjFfQ1RMCTB4MDIwNGMgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIEFDVEhEX0k5NjUJMHgwMjA3NAorI2RlZmluZSBIV1NfUEdBCQkweDAyMDgwCisjZGVmaW5lIEhXU19BRERSRVNTX01BU0sJMHhmZmZmZjAwMAorI2RlZmluZSBIV1NfU1RBUlRfQUREUkVTU19TSElGVAk0CisjZGVmaW5lIElQRUlSCQkweDAyMDg4CisjZGVmaW5lIE5PUElECQkweDAyMDk0CisjZGVmaW5lIEhXU1RBTQkJMHgwMjA5OAorI2RlZmluZSBTQ1BEMAkJMHgwMjA5YyAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgSUVSCQkweDAyMGEwCisjZGVmaW5lIElJUgkJMHgwMjBhNAorI2RlZmluZSBJTVIJCTB4MDIwYTgKKyNkZWZpbmUgSVNSCQkweDAyMGFjCisjZGVmaW5lICAgSTkxNV9QSVBFX0NPTlRST0xfTk9USUZZX0lOVEVSUlVQVAkJKDE8PDE4KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVAkJCSgxPDwxNykKKyNkZWZpbmUgICBJOTE1X1JFTkRFUl9DT01NQU5EX1BBUlNFUl9FUlJPUl9JTlRFUlJVUFQJKDE8PDE1KQorI2RlZmluZSAgIEk5MTVfR01DSF9USEVSTUFMX1NFTlNPUl9FVkVOVF9JTlRFUlJVUFQJKDE8PDE0KQorI2RlZmluZSAgIEk5MTVfSFdCX09PTV9JTlRFUlJVUFQJCQkoMTw8MTMpCisjZGVmaW5lICAgSTkxNV9TWU5DX1NUQVRVU19JTlRFUlJVUFQJCQkoMTw8MTIpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0FfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8MTEpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0JfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8MTApCisjZGVmaW5lICAgSTkxNV9PVkVSTEFZX1BMQU5FX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDkpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BMQU5FX0NfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVAkoMTw8OCkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9BX1ZCTEFOS19JTlRFUlJVUFQJCSgxPDw3KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUCQkoMTw8NikKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9CX1ZCTEFOS19JTlRFUlJVUFQJCSgxPDw1KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUCQkoMTw8NCkKKyNkZWZpbmUgICBJOTE1X0RFQlVHX0lOVEVSUlVQVAkJCQkoMTw8MikKKyNkZWZpbmUgICBJOTE1X1VTRVJfSU5URVJSVVBUCQkJCSgxPDwxKQorI2RlZmluZSAgIEk5MTVfQVNMRV9JTlRFUlJVUFQJCQkJKDE8PDApCisjZGVmaW5lIEVJUgkJMHgwMjBiMAorI2RlZmluZSBFTVIJCTB4MDIwYjQKKyNkZWZpbmUgRVNSCQkweDAyMGI4CisjZGVmaW5lIElOU1RQTQkgICAgICAgIDB4MDIwYzAKKyNkZWZpbmUgQUNUSEQJICAgICAgICAweDAyMGM4CisjZGVmaW5lIEZXX0JMQwkJMHgwMjBkOAorI2RlZmluZSBGV19CTENfU0VMRgkweDAyMGUwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBNSV9BUkJfU1RBVEUJMHgwMjBlNCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgQ0FDSEVfTU9ERV8wCTB4MDIxMjAgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lICAgQ00wX01BU0tfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgICBDTTBfSVpfT1BUX0RJU0FCTEUgICAgICAoMTw8NikKKyNkZWZpbmUgICBDTTBfWlJfT1BUX0RJU0FCTEUgICAgICAoMTw8NSkKKyNkZWZpbmUgICBDTTBfREVQVEhfRVZJQ1RfRElTQUJMRSAoMTw8NCkKKyNkZWZpbmUgICBDTTBfQ09MT1JfRVZJQ1RfRElTQUJMRSAoMTw8MykKKyNkZWZpbmUgICBDTTBfREVQVEhfV1JJVEVfRElTQUJMRSAoMTw8MSkKKyNkZWZpbmUgICBDTTBfUkNfT1BfRkxVU0hfRElTQUJMRSAoMTw8MCkKKyNkZWZpbmUgR0ZYX0ZMU0hfQ05UTAkweDAyMTcwIC8qIDkxNSsgb25seSAqLworCisvKgorICogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gKDkxNSsgb25seSkKKyAqLworCisjZGVmaW5lIEZCQ19DRkJfQkFTRQkJMHgwMzIwMCAvKiA0ayBwYWdlIGFsaWduZWQgKi8KKyNkZWZpbmUgRkJDX0xMX0JBU0UJCTB4MDMyMDQgLyogNGsgcGFnZSBhbGlnbmVkICovCisjZGVmaW5lIEZCQ19DT05UUk9MCQkweDAzMjA4CisjZGVmaW5lICAgRkJDX0NUTF9FTgkJKDE8PDMxKQorI2RlZmluZSAgIEZCQ19DVExfUEVSSU9ESUMJKDE8PDMwKQorI2RlZmluZSAgIEZCQ19DVExfSU5URVJWQUxfU0hJRlQgKDE2KQorI2RlZmluZSAgIEZCQ19DVExfVU5DT01QUkVTU0lCTEUgKDE8PDE0KQorI2RlZmluZSAgIEZCQ19DVExfU1RSSURFX1NISUZUCSg1KQorI2RlZmluZSAgIEZCQ19DVExfRkVOQ0VOTwkoMTw8MCkKKyNkZWZpbmUgRkJDX0NPTU1BTkQJCTB4MDMyMGMKKyNkZWZpbmUgICBGQkNfQ01EX0NPTVBSRVNTCSgxPDwwKQorI2RlZmluZSBGQkNfU1RBVFVTCQkweDAzMjEwCisjZGVmaW5lICAgRkJDX1NUQVRfQ09NUFJFU1NJTkcJKDE8PDMxKQorI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTRUQJKDE8PDMwKQorI2RlZmluZSAgIEZCQ19TVEFUX01PRElGSUVECSgxPDwyOSkKKyNkZWZpbmUgICBGQkNfU1RBVF9DVVJSRU5UX0xJTkUJKDE8PDApCisjZGVmaW5lIEZCQ19DT05UUk9MMgkJMHgwMzIxNAorI2RlZmluZSAgIEZCQ19DVExfRkVOQ0VfREJMCSgwPDw0KQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9JTU0JKDA8PDIpCisjZGVmaW5lICAgRkJDX0NUTF9JRExFX0ZVTEwJKDE8PDIpCisjZGVmaW5lICAgRkJDX0NUTF9JRExFX0xJTkUJKDI8PDIpCisjZGVmaW5lICAgRkJDX0NUTF9JRExFX0RFQlVHCSgzPDwyKQorI2RlZmluZSAgIEZCQ19DVExfQ1BVX0ZFTkNFCSgxPDwxKQorI2RlZmluZSAgIEZCQ19DVExfUExBTkVBCSgwPDwwKQorI2RlZmluZSAgIEZCQ19DVExfUExBTkVCCSgxPDwwKQorI2RlZmluZSBGQkNfRkVOQ0VfT0ZGCQkweDAzMjFiCisKKyNkZWZpbmUgRkJDX0xMX1NJWkUJCSgxNTM2KQorCisvKgorICogR1BJTyByZWdzCisgKi8KKyNkZWZpbmUgR1BJT0EJCQkweDUwMTAKKyNkZWZpbmUgR1BJT0IJCQkweDUwMTQKKyNkZWZpbmUgR1BJT0MJCQkweDUwMTgKKyNkZWZpbmUgR1BJT0QJCQkweDUwMWMKKyNkZWZpbmUgR1BJT0UJCQkweDUwMjAKKyNkZWZpbmUgR1BJT0YJCQkweDUwMjQKKyNkZWZpbmUgR1BJT0cJCQkweDUwMjgKKyNkZWZpbmUgR1BJT0gJCQkweDUwMmMKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfRElSX01BU0sJCSgxIDw8IDApCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9JTgkJKDAgPDwgMSkKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfRElSX09VVAkJKDEgPDwgMSkKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfVkFMX01BU0sJCSgxIDw8IDIpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9PVVQJCSgxIDw8IDMpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9JTgkJKDEgPDwgNCkKKyMgZGVmaW5lIEdQSU9fQ0xPQ0tfUFVMTFVQX0RJU0FCTEUJKDEgPDwgNSkKKyMgZGVmaW5lIEdQSU9fREFUQV9ESVJfTUFTSwkJKDEgPDwgOCkKKyMgZGVmaW5lIEdQSU9fREFUQV9ESVJfSU4JCSgwIDw8IDkpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX09VVAkJKDEgPDwgOSkKKyMgZGVmaW5lIEdQSU9fREFUQV9WQUxfTUFTSwkJKDEgPDwgMTApCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX09VVAkJKDEgPDwgMTEpCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX0lOCQkoMSA8PCAxMikKKyMgZGVmaW5lIEdQSU9fREFUQV9QVUxMVVBfRElTQUJMRQkoMSA8PCAxMykKKworLyoKKyAqIENsb2NrIGNvbnRyb2wgJiBwb3dlciBtYW5hZ2VtZW50CisgKi8KKworI2RlZmluZSBWR0EwCTB4NjAwMAorI2RlZmluZSBWR0ExCTB4NjAwNAorI2RlZmluZSBWR0FfUEQJMHg2MDEwCisjZGVmaW5lICAgVkdBMF9QRF9QMl9ESVZfNAkoMSA8PCA3KQorI2RlZmluZSAgIFZHQTBfUERfUDFfRElWXzIJKDEgPDwgNSkKKyNkZWZpbmUgICBWR0EwX1BEX1AxX1NISUZUCTAKKyNkZWZpbmUgICBWR0EwX1BEX1AxX01BU0sJKDB4MWYgPDwgMCkKKyNkZWZpbmUgICBWR0ExX1BEX1AyX0RJVl80CSgxIDw8IDE1KQorI2RlZmluZSAgIFZHQTFfUERfUDFfRElWXzIJKDEgPDwgMTMpCisjZGVmaW5lICAgVkdBMV9QRF9QMV9TSElGVAk4CisjZGVmaW5lICAgVkdBMV9QRF9QMV9NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIERQTExfQQkweDA2MDE0CisjZGVmaW5lIERQTExfQgkweDA2MDE4CisjZGVmaW5lICAgRFBMTF9WQ09fRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBEUExMX0RWT19ISUdIX1NQRUVECQkoMSA8PCAzMCkKKyNkZWZpbmUgICBEUExMX1NZTkNMT0NLX0VOQUJMRQkJKDEgPDwgMjkpCisjZGVmaW5lICAgRFBMTF9WR0FfTU9ERV9ESVMJCSgxIDw8IDI4KQorI2RlZmluZSAgIERQTExCX01PREVfREFDX1NFUklBTAkJKDEgPDwgMjYpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9NT0RFX0xWRFMJCSgyIDw8IDI2KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9NT0RFX01BU0sJCSgzIDw8IDI2KQorI2RlZmluZSAgIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTAgKDAgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzUgKDEgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl8xNAkoMCA8PCAyNCkgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcJKDEgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCTB4MDMwMDAwMDAgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkweDAwZmYwMDAwIC8qIGk5MTUgKi8KKworI2RlZmluZSBJOTE1X0ZJRk9fVU5ERVJSVU5fU1RBVFVTCQkoMVVMPDwzMSkKKyNkZWZpbmUgSTkxNV9DUkNfRVJST1JfRU5BQkxFCQkJKDFVTDw8MjkpCisjZGVmaW5lIEk5MTVfQ1JDX0RPTkVfRU5BQkxFCQkJKDFVTDw8MjgpCisjZGVmaW5lIEk5MTVfR01CVVNfRVZFTlRfRU5BQkxFCQkJKDFVTDw8MjcpCisjZGVmaW5lIEk5MTVfVlNZTkNfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjUpCisjZGVmaW5lIEk5MTVfRElTUExBWV9MSU5FX0NPTVBBUkVfRU5BQkxFCSgxVUw8PDI0KQorI2RlZmluZSBJOTE1X0RQU1RfRVZFTlRfRU5BQkxFCQkJKDFVTDw8MjMpCisjZGVmaW5lIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUJCSgxVUw8PDIyKQorI2RlZmluZSBJOTE1X09ERF9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCQkoMVVMPDwyMSkKKyNkZWZpbmUgSTkxNV9FVkVOX0ZJRUxEX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MjApCisjZGVmaW5lIEk5MTVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTgpCS8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCQkoMVVMPDwxNykKKyNkZWZpbmUgSTkxNV9PVkVSTEFZX1VQREFURURfRU5BQkxFCQkoMVVMPDwxNikKKyNkZWZpbmUgSTkxNV9DUkNfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTMpCisjZGVmaW5lIEk5MTVfQ1JDX0RPTkVfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTIpCisjZGVmaW5lIEk5MTVfR01CVVNfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTEpCisjZGVmaW5lIEk5MTVfVlNZTkNfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8OSkKKyNkZWZpbmUgSTkxNV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9TVEFUVVMJKDFVTDw8OCkKKyNkZWZpbmUgSTkxNV9EUFNUX0VWRU5UX1NUQVRVUwkJCSgxVUw8PDcpCisjZGVmaW5lIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9TVEFUVVMJCSgxVUw8PDYpCisjZGVmaW5lIEk5MTVfT0REX0ZJRUxEX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDUpCisjZGVmaW5lIEk5MTVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDQpCisjZGVmaW5lIEk5MTVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikJLyogOTY1IG9yIGxhdGVyICovCisjZGVmaW5lIEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVEX1NUQVRVUwkJKDFVTDw8MCkKKworI2RlZmluZSBTUlhfSU5ERVgJCTB4M2M0CisjZGVmaW5lIFNSWF9EQVRBCQkweDNjNQorI2RlZmluZSBTUjAxCQkJMQorI2RlZmluZSBTUjAxX1NDUkVFTl9PRkYJCSgxPDw1KQorCisjZGVmaW5lIFBQQ1IJCQkweDYxMjA0CisjZGVmaW5lIFBQQ1JfT04JCQkoMTw8MCkKKworI2RlZmluZSBEVk9CCQkJMHg2MTE0MAorI2RlZmluZSBEVk9CX09OCQkJKDE8PDMxKQorI2RlZmluZSBEVk9DCQkJMHg2MTE2MAorI2RlZmluZSBEVk9DX09OCQkJKDE8PDMxKQorI2RlZmluZSBMVkRTCQkJMHg2MTE4MAorI2RlZmluZSBMVkRTX09OCQkJKDE8PDMxKQorCisjZGVmaW5lIEFEUEEJCQkweDYxMTAwCisjZGVmaW5lIEFEUEFfRFBNU19NQVNLCQkofigzPDwxMCkpCisjZGVmaW5lIEFEUEFfRFBNU19PTgkJKDA8PDEwKQorI2RlZmluZSBBRFBBX0RQTVNfU1VTUEVORAkoMTw8MTApCisjZGVmaW5lIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKKyNkZWZpbmUgQURQQV9EUE1TX09GRgkJKDM8PDEwKQorCisjZGVmaW5lIFJJTkdfVEFJTAkJMHgwMAorI2RlZmluZSBUQUlMX0FERFIJCTB4MDAxRkZGRjgKKyNkZWZpbmUgUklOR19IRUFECQkweDA0CisjZGVmaW5lIEhFQURfV1JBUF9DT1VOVAkJMHhGRkUwMDAwMAorI2RlZmluZSBIRUFEX1dSQVBfT05FCQkweDAwMjAwMDAwCisjZGVmaW5lIEhFQURfQUREUgkJMHgwMDFGRkZGQworI2RlZmluZSBSSU5HX1NUQVJUCQkweDA4CisjZGVmaW5lIFNUQVJUX0FERFIJCTB4RkZGRkYwMDAKKyNkZWZpbmUgUklOR19MRU4JCTB4MEMKKyNkZWZpbmUgUklOR19OUl9QQUdFUwkJMHgwMDFGRjAwMAorI2RlZmluZSBSSU5HX1JFUE9SVF9NQVNLCTB4MDAwMDAwMDYKKyNkZWZpbmUgUklOR19SRVBPUlRfNjRLCQkweDAwMDAwMDAyCisjZGVmaW5lIFJJTkdfUkVQT1JUXzEyOEsJMHgwMDAwMDAwNAorI2RlZmluZSBSSU5HX05PX1JFUE9SVAkJMHgwMDAwMDAwMAorI2RlZmluZSBSSU5HX1ZBTElEX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUklOR19WQUxJRAkJMHgwMDAwMDAwMQorI2RlZmluZSBSSU5HX0lOVkFMSUQJCTB4MDAwMDAwMDAKKworLyogU2NyYXRjaCBwYWQgZGVidWcgMCByZWc6CisgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMAkweDAwMWYwMDAwCisvKgorICogVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gTFZEUyBtb2RlLCBkZWZpbmVzIFAxIGFzIHRoZSBiaXQgbnVtYmVyIHNldCB3aXRoaW4KKyAqIHRoaXMgZmllbGQgKG9ubHkgb25lIGJpdCBtYXkgYmUgc2V0KS4KKyAqLworI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwX0xWRFMJMHgwMDNmMDAwMAorI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQJMTYKKy8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLworI2RlZmluZSAgIFBMTF9QMl9ESVZJREVfQllfNAkJKDEgPDwgMjMpCisjZGVmaW5lICAgUExMX1AxX0RJVklERV9CWV9UV08JCSgxIDw8IDIxKSAvKiBpODMwICovCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9EUkVGQ0xLCQkoMCA8PCAxMykKKyNkZWZpbmUgICBQTExfUkVGX0lOUFVUX1RWQ0xLSU5BCSgxIDw8IDEzKSAvKiBpODMwICovCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9UVkNMS0lOQkMJKDIgPDwgMTMpIC8qIFNEVk8gVFZDTEtJTiAqLworI2RlZmluZSAgIFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU4gKDMgPDwgMTMpCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9NQVNLCQkoMyA8PCAxMykKKyNkZWZpbmUgICBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVAkJOQorLyoKKyAqIFBhcmFsbGVsIHRvIFNlcmlhbCBMb2FkIFB1bHNlIHBoYXNlIHNlbGVjdGlvbi4KKyAqIFNlbGVjdHMgdGhlIHBoYXNlIGZvciB0aGUgMTBYIERQTEwgY2xvY2sgZm9yIHRoZSBQQ0llCisgKiBkaWdpdGFsIGRpc3BsYXkgcG9ydC4gVGhlIHJhbmdlIGlzIDQgdG8gMTM7IDEwIG9yIG1vcmUKKyAqIGlzIGp1c3QgYSBmbGlwIGRlbGF5LiBUaGUgZGVmYXVsdCBpcyA2CisgKi8KKyNkZWZpbmUgICBQTExfTE9BRF9QVUxTRV9QSEFTRV9NQVNLCQkoMHhmIDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKQorI2RlZmluZSAgIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMQkJKDEgPDwgOCkKKy8qCisgKiBTRFZPIG11bHRpcGxpZXIgZm9yIDk0NUcvR00uIE5vdCB1c2VkIG9uIDk2NS4KKyAqLworI2RlZmluZSAgIFNEVk9fTVVMVElQTElFUl9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSAgIFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUwkJNAorI2RlZmluZSAgIFNEVk9fTVVMVElQTElFUl9TSElGVF9WR0EJCTAKKyNkZWZpbmUgRFBMTF9BX01EIDB4MDYwMWMgLyogOTY1KyBvbmx5ICovCisvKgorICogVURJIHBpeGVsIGRpdmlkZXIsIGNvbnRyb2xsaW5nIGhvdyBtYW55IHBpeGVscyBhcmUgc3R1ZmZlZCBpbnRvIGEgcGFja2V0LgorICoKKyAqIFZhbHVlIGlzIHBpeGVscyBtaW51cyAxLiAgTXVzdCBiZSBzZXQgdG8gMSBwaXhlbCBmb3IgU0RWTy4KKyAqLworI2RlZmluZSAgIERQTExfTURfVURJX0RJVklERVJfTUFTSwkJMHgzZjAwMDAwMAorI2RlZmluZSAgIERQTExfTURfVURJX0RJVklERVJfU0hJRlQJCTI0CisvKiBVREkgcGl4ZWwgZGl2aWRlciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX0RJVklERVJfTUFTSy4gKi8KKyNkZWZpbmUgICBEUExMX01EX1ZHQV9VRElfRElWSURFUl9NQVNLCQkweDAwM2YwMDAwCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfU0hJRlQJCTE2CisvKgorICogU0RWTy9VREkgcGl4ZWwgbXVsdGlwbGllci4KKyAqCisgKiBTRFZPIHJlcXVpcmVzIHRoYXQgdGhlIGJ1cyBjbG9jayByYXRlIGJlIGJldHdlZW4gMSBhbmQgMiBHaHosIGFuZCB0aGUgYnVzCisgKiBjbG9jayByYXRlIGlzIDEwIHRpbWVzIHRoZSBEUExMIGNsb2NrLiAgQXQgbG93IHJlc29sdXRpb24vcmVmcmVzaCByYXRlCisgKiBtb2RlcywgdGhlIGJ1cyByYXRlIHdvdWxkIGJlIGJlbG93IHRoZSBsaW1pdHMsIHNvIFNEVk8gYWxsb3dzIGZvciBzdHVmZmluZworICogZHVtbXkgYnl0ZXMgaW4gdGhlIGRhdGFzdHJlYW0gYXQgYW4gaW5jcmVhc2VkIGNsb2NrIHJhdGUsIHdpdGggYm90aCBzaWRlcyBvZgorICogdGhlIGxpbmsga25vd2luZyBob3cgbWFueSBieXRlcyBhcmUgZmlsbC4KKyAqCisgKiBTbywgZm9yIGEgbW9kZSB3aXRoIGEgZG90Y2xvY2sgb2YgNjVNaHosIHdlIHdvdWxkIHdhbnQgdG8gZG91YmxlIHRoZSBjbG9jaworICogcmF0ZSB0byAxMzBNaHogdG8gZ2V0IGEgYnVzIHJhdGUgb2YgMS4zMEdoei4gIFRoZSBEUExMIGNsb2NrIHJhdGUgd291bGQgYmUKKyAqIHNldCB0byAxMzBNaHosIGFuZCB0aGUgU0RWTyBtdWx0aXBsaWVyIHNldCB0byAyeCBpbiB0aGlzIHJlZ2lzdGVyIGFuZAorICogdGhyb3VnaCBhbiBTRFZPIGNvbW1hbmQuCisgKgorICogVGhpcyByZWdpc3RlciBmaWVsZCBoYXMgdmFsdWVzIG9mIG11bHRpcGxpY2F0aW9uIGZhY3RvciBtaW51cyAxLCB3aXRoCisgKiBhIG1heGltdW0gbXVsdGlwbGllciBvZiA1IGZvciBTRFZPLgorICovCisjZGVmaW5lICAgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLCQkweDAwMDAzZjAwCisjZGVmaW5lICAgRFBMTF9NRF9VRElfTVVMVElQTElFUl9TSElGVAkJOAorLyoKKyAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0suCisgKiBUaGlzIGJlc3QgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlICgzKSBvciB0aGUgQ1JUIHdvbid0IHdvcmsuIE5vLAorICogSSBkb24ndCBlbnRpcmVseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkb2VzLi4uCisgKi8KKyNkZWZpbmUgICBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9NQVNLCTB4MDAwMDAwM2YKKyNkZWZpbmUgICBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9TSElGVAkwCisjZGVmaW5lIERQTExfQl9NRCAweDA2MDIwIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBGUEEwCTB4MDYwNDAKKyNkZWZpbmUgRlBBMQkweDA2MDQ0CisjZGVmaW5lIEZQQjAJMHgwNjA0OAorI2RlZmluZSBGUEIxCTB4MDYwNGMKKyNkZWZpbmUgICBGUF9OX0RJVl9NQVNLCQkweDAwM2YwMDAwCisjZGVmaW5lICAgRlBfTl9ESVZfU0hJRlQJCTE2CisjZGVmaW5lICAgRlBfTTFfRElWX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIEZQX00xX0RJVl9TSElGVAkJIDgKKyNkZWZpbmUgICBGUF9NMl9ESVZfTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lICAgRlBfTTJfRElWX1NISUZUCQkgMAorI2RlZmluZSBEUExMX1RFU1QJMHg2MDZjCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl8xCQkoMCA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX1NEVk9fRElWXzIJCSgxIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfNAkJKDIgPDwgMjIpCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl9NQVNLCSgzIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfTl9CWVBBU1MJCSgxIDw8IDE5KQorI2RlZmluZSAgIERQTExCX1RFU1RfTV9CWVBBU1MJCSgxIDw8IDE4KQorI2RlZmluZSAgIERQTExCX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMTYpCisjZGVmaW5lICAgRFBMTEFfVEVTVF9OX0JZUEFTUwkJKDEgPDwgMykKKyNkZWZpbmUgICBEUExMQV9URVNUX01fQllQQVNTCQkoMSA8PCAyKQorI2RlZmluZSAgIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMCkKKyNkZWZpbmUgRF9TVEFURQkJMHg2MTA0CisjZGVmaW5lIENHXzJEX0RJUwkweDYyMDAKKyNkZWZpbmUgQ0dfM0RfRElTCTB4NjIwNAorCisvKgorICogUGFsZXR0ZSByZWdzCisgKi8KKworI2RlZmluZSBQQUxFVFRFX0EJCTB4MGEwMDAKKyNkZWZpbmUgUEFMRVRURV9CCQkweDBhODAwCisKKy8qIE1DSCBNTUlPIHNwYWNlICovCisKKy8qCisgKiBNQ0hCQVIgbWlycm9yLgorICoKKyAqIFRoaXMgbWlycm9ycyB0aGUgTUNIQkFSIE1NSU8gc3BhY2Ugd2hvc2UgbG9jYXRpb24gaXMgZGV0ZXJtaW5lZCBieQorICogZGV2aWNlIDAgZnVuY3Rpb24gMCdzIHBjaSBjb25maWcgcmVnaXN0ZXIgMHg0NCBvciAweDQ4IGFuZCBtYXRjaGVzIGl0IGluCisgKiBldmVyeSB3YXkuICBJdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBDUCByZWdpc3RlciByZWFkIGluc3RydWN0aW9ucy4KKyAqCisgKi8KKyNkZWZpbmUgTUNIQkFSX01JUlJPUl9CQVNFCTB4MTAwMDAKKworLyoqIDkxNS05NDUgYW5kIEdNOTY1IE1DSCByZWdpc3RlciBjb250cm9sbGluZyBEUkFNIGNoYW5uZWwgYWNjZXNzICovCisjZGVmaW5lIERDQwkJCTB4MTAyMDAKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9TSU5HTEVfQ0hBTk5FTAkJKDAgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfQVNZTU1FVFJJQwkoMSA8PCAwKQorI2RlZmluZSBEQ0NfQUREUkVTU0lOR19NT0RFX0RVQUxfQ0hBTk5FTF9JTlRFUkxFQVZFRAkoMiA8PCAwKQorI2RlZmluZSBEQ0NfQUREUkVTU0lOR19NT0RFX01BU0sJCQkoMyA8PCAwKQorI2RlZmluZSBEQ0NfQ0hBTk5FTF9YT1JfRElTQUJMRQkJCQkoMSA8PCAxMCkKKworLyoqIDk2NSBNQ0ggcmVnaXN0ZXIgY29udHJvbGxpbmcgRFJBTSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQzBEUkIzCQkJMHgxMDIwNgorI2RlZmluZSBDMURSQjMJCQkweDEwNjA2CisKKy8qCisgKiBPdmVybGF5IHJlZ3MKKyAqLworCisjZGVmaW5lIE9WQURECQkJMHgzMDAwMAorI2RlZmluZSBET1ZTVEEJCQkweDMwMDA4CisjZGVmaW5lIE9DX0JVRgkJCSgweDM8PDIwKQorI2RlZmluZSBPR0FNQzUJCQkweDMwMDEwCisjZGVmaW5lIE9HQU1DNAkJCTB4MzAwMTQKKyNkZWZpbmUgT0dBTUMzCQkJMHgzMDAxOAorI2RlZmluZSBPR0FNQzIJCQkweDMwMDFjCisjZGVmaW5lIE9HQU1DMQkJCTB4MzAwMjAKKyNkZWZpbmUgT0dBTUMwCQkJMHgzMDAyNAorCisvKgorICogRGlzcGxheSBlbmdpbmUgcmVncworICovCisKKy8qIFBpcGUgQSB0aW1pbmcgcmVncyAqLworI2RlZmluZSBIVE9UQUxfQQkweDYwMDAwCisjZGVmaW5lIEhCTEFOS19BCTB4NjAwMDQKKyNkZWZpbmUgSFNZTkNfQQkJMHg2MDAwOAorI2RlZmluZSBWVE9UQUxfQQkweDYwMDBjCisjZGVmaW5lIFZCTEFOS19BCTB4NjAwMTAKKyNkZWZpbmUgVlNZTkNfQQkJMHg2MDAxNAorI2RlZmluZSBQSVBFQVNSQwkweDYwMDFjCisjZGVmaW5lIEJDTFJQQVRfQQkweDYwMDIwCisKKy8qIFBpcGUgQiB0aW1pbmcgcmVncyAqLworI2RlZmluZSBIVE9UQUxfQgkweDYxMDAwCisjZGVmaW5lIEhCTEFOS19CCTB4NjEwMDQKKyNkZWZpbmUgSFNZTkNfQgkJMHg2MTAwOAorI2RlZmluZSBWVE9UQUxfQgkweDYxMDBjCisjZGVmaW5lIFZCTEFOS19CCTB4NjEwMTAKKyNkZWZpbmUgVlNZTkNfQgkJMHg2MTAxNAorI2RlZmluZSBQSVBFQlNSQwkweDYxMDFjCisjZGVmaW5lIEJDTFJQQVRfQgkweDYxMDIwCisKKy8qIFZHQSBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQURQQQkJCTB4NjExMDAKKyNkZWZpbmUgICBBRFBBX0RBQ19FTkFCTEUJKDE8PDMxKQorI2RlZmluZSAgIEFEUEFfREFDX0RJU0FCTEUJMAorI2RlZmluZSAgIEFEUEFfUElQRV9TRUxFQ1RfTUFTSwkoMTw8MzApCisjZGVmaW5lICAgQURQQV9QSVBFX0FfU0VMRUNUCTAKKyNkZWZpbmUgICBBRFBBX1BJUEVfQl9TRUxFQ1QJKDE8PDMwKQorI2RlZmluZSAgIEFEUEFfVVNFX1ZHQV9IVlBPTEFSSVRZICgxPDwxNSkKKyNkZWZpbmUgICBBRFBBX1NFVFNfSFZQT0xBUklUWQkwCisjZGVmaW5lICAgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDExKQorI2RlZmluZSAgIEFEUEFfVlNZTkNfQ05UTF9FTkFCTEUgMAorI2RlZmluZSAgIEFEUEFfSFNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMCkKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0NOVExfRU5BQkxFIDAKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0FDVElWRV9ISUdIICgxPDw0KQorI2RlZmluZSAgIEFEUEFfVlNZTkNfQUNUSVZFX0xPVwkwCisjZGVmaW5lICAgQURQQV9IU1lOQ19BQ1RJVkVfSElHSCAoMTw8MykKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0FDVElWRV9MT1cJMAorI2RlZmluZSAgIEFEUEFfRFBNU19NQVNLCSh+KDM8PDEwKSkKKyNkZWZpbmUgICBBRFBBX0RQTVNfT04JCSgwPDwxMCkKKyNkZWZpbmUgICBBRFBBX0RQTVNfU1VTUEVORAkoMTw8MTApCisjZGVmaW5lICAgQURQQV9EUE1TX1NUQU5EQlkJKDI8PDEwKQorI2RlZmluZSAgIEFEUEFfRFBNU19PRkYJCSgzPDwxMCkKKworLyogSG90cGx1ZyBjb250cm9sICg5NDUrIG9ubHkpICovCisjZGVmaW5lIFBPUlRfSE9UUExVR19FTgkJMHg2MTExMAorI2RlZmluZSAgIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjYpCisjZGVmaW5lICAgU0RWT0NfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAyNSkKKyNkZWZpbmUgICBUVl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDE4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDkpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUCQkoMSA8PCAzKQorCisjZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKKyNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBUVl9IT1RQTFVHX0lOVF9TVEFUVVMJCQkoMSA8PCAxMCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19NT05JVE9SX01BU0sJCSgzIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9DT0xPUgkJKDMgPDwgOCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19NT05JVE9SX01PTk8JCSgyIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9OT05FCQkoMCA8PCA4KQorI2RlZmluZSAgIFNEVk9DX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgNykKKyNkZWZpbmUgICBTRFZPQl9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDYpCisKKy8qIFNEVk8gcG9ydCBjb250cm9sICovCisjZGVmaW5lIFNEVk9CCQkJMHg2MTE0MAorI2RlZmluZSBTRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgICBTRFZPX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgU0RWT19QSVBFX0JfU0VMRUNUCSgxIDw8IDMwKQorI2RlZmluZSAgIFNEVk9fU1RBTExfU0VMRUNUCSgxIDw8IDI5KQorI2RlZmluZSAgIFNEVk9fSU5URVJSVVBUX0VOQUJMRQkoMSA8PCAyNikKKy8qKgorICogOTE1Ry9HTSBTRFZPIHBpeGVsIG11bHRpcGxpZXIuCisgKgorICogUHJvZ3JhbW1lZCB2YWx1ZSBpcyBtdWx0aXBsaWVyIC0gMSwgdXAgdG8gNXguCisgKgorICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSworICovCisjZGVmaW5lICAgU0RWT19QT1JUX01VTFRJUExZX01BU0sJKDcgPDwgMjMpCisjZGVmaW5lICAgU0RWT19QT1JUX01VTFRJUExZX1NISUZUCQkyMworI2RlZmluZSAgIFNEVk9fUEhBU0VfU0VMRUNUX01BU0sJKDE1IDw8IDE5KQorI2RlZmluZSAgIFNEVk9fUEhBU0VfU0VMRUNUX0RFRkFVTFQJKDYgPDwgMTkpCisjZGVmaW5lICAgU0RWT19DTE9DS19PVVRQVVRfSU5WRVJUCSgxIDw8IDE4KQorI2RlZmluZSAgIFNEVk9DX0dBTkdfTU9ERQkJKDEgPDwgMTYpCisjZGVmaW5lICAgU0RWT19CT1JERVJfRU5BQkxFCQkoMSA8PCA3KQorI2RlZmluZSAgIFNEVk9CX1BDSUVfQ09OQ1VSUkVOQ1kJKDEgPDwgMykKKyNkZWZpbmUgICBTRFZPX0RFVEVDVEVECQkJKDEgPDwgMikKKy8qIEJpdHMgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZyAqLworI2RlZmluZSAgIFNEVk9CX1BSRVNFUlZFX01BU0sgKCgxIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgxIDw8IDE0KSB8ICgxIDw8IDI2KSkKKyNkZWZpbmUgICBTRFZPQ19QUkVTRVJWRV9NQVNLICgoMSA8PCAxNykgfCAoMSA8PCAyNikpCisKKy8qIERWTyBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgRFZPQQkJCTB4NjExMjAKKyNkZWZpbmUgRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgICBEVk9fRU5BQkxFCQkJKDEgPDwgMzEpCisjZGVmaW5lICAgRFZPX1BJUEVfQl9TRUxFQ1QJCSgxIDw8IDMwKQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMX1VOVVNFRAkJKDAgPDwgMjgpCisjZGVmaW5lICAgRFZPX1BJUEVfU1RBTEwJCSgxIDw8IDI4KQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMX1RWCQkoMiA8PCAyOCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9NQVNLCQkoMyA8PCAyOCkKKyNkZWZpbmUgICBEVk9fVVNFX1ZHQV9TWU5DCQkoMSA8PCAxNSkKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9JNzQwCQkoMCA8PCAxNCkKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9GUAkJKDEgPDwgMTQpCisjZGVmaW5lICAgRFZPX1ZTWU5DX0RJU0FCTEUJCSgxIDw8IDExKQorI2RlZmluZSAgIERWT19IU1lOQ19ESVNBQkxFCQkoMSA8PCAxMCkKKyNkZWZpbmUgICBEVk9fVlNZTkNfVFJJU1RBVEUJCSgxIDw8IDkpCisjZGVmaW5lICAgRFZPX0hTWU5DX1RSSVNUQVRFCQkoMSA8PCA4KQorI2RlZmluZSAgIERWT19CT1JERVJfRU5BQkxFCQkoMSA8PCA3KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX0dCUkcJCSgxIDw8IDYpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfUkdHQgkJKDAgPDwgNikKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9HQlJHX0VSUkFUQQkoMCA8PCA2KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX1JHR0JfRVJSQVRBCSgxIDw8IDYpCisjZGVmaW5lICAgRFZPX1ZTWU5DX0FDVElWRV9ISUdICQkoMSA8PCA0KQorI2RlZmluZSAgIERWT19IU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgMykKKyNkZWZpbmUgICBEVk9fQkxBTktfQUNUSVZFX0hJR0gJCSgxIDw8IDIpCisjZGVmaW5lICAgRFZPX09VVFBVVF9DU1RBVEVfUElYRUxTCSgxIDw8IDEpCS8qIFNERyBvbmx5ICovCisjZGVmaW5lICAgRFZPX09VVFBVVF9TT1VSQ0VfU0laRV9QSVhFTFMJKDEgPDwgMCkJLyogU0RHIG9ubHkgKi8KKyNkZWZpbmUgICBEVk9fUFJFU0VSVkVfTUFTSwkJKDB4Nzw8MjQpCisjZGVmaW5lIERWT0FfU1JDRElNCQkweDYxMTI0CisjZGVmaW5lIERWT0JfU1JDRElNCQkweDYxMTQ0CisjZGVmaW5lIERWT0NfU1JDRElNCQkweDYxMTY0CisjZGVmaW5lICAgRFZPX1NSQ0RJTV9IT1JJWk9OVEFMX1NISUZUCTEyCisjZGVmaW5lICAgRFZPX1NSQ0RJTV9WRVJUSUNBTF9TSElGVAkwCisKKy8qIExWRFMgcG9ydCBjb250cm9sICovCisjZGVmaW5lIExWRFMJCQkweDYxMTgwCisvKgorICogRW5hYmxlcyB0aGUgTFZEUyBwb3J0LiAgVGhpcyBiaXQgbXVzdCBiZSBzZXQgYmVmb3JlIERQTExzIGFyZSBlbmFibGVkLCBhcworICogdGhlIERQTEwgc2VtYW50aWNzIGNoYW5nZSB3aGVuIHRoZSBMVkRTIGlzIGFzc2lnbmVkIHRvIHRoYXQgcGlwZS4KKyAqLworI2RlZmluZSAgIExWRFNfUE9SVF9FTgkJCSgxIDw8IDMxKQorLyogU2VsZWN0cyBwaXBlIEIgZm9yIExWRFMgZGF0YS4gIE11c3QgYmUgc2V0IG9uIHByZS05NjUuICovCisjZGVmaW5lICAgTFZEU19QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorLyoKKyAqIEVuYWJsZXMgdGhlIEEwLUEyIGRhdGEgcGFpcnMgYW5kIENMS0EsIGNvbnRhaW5pbmcgMTggYml0cyBvZiBjb2xvciBkYXRhIHBlcgorICogcGl4ZWwuCisgKi8KKyNkZWZpbmUgICBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9NQVNLCSgzIDw8IDgpCisjZGVmaW5lICAgTFZEU19BMEEyX0NMS0FfUE9XRVJfRE9XTgkoMCA8PCA4KQorI2RlZmluZSAgIExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQCSgzIDw8IDgpCisvKgorICogQ29udHJvbHMgdGhlIEEzIGRhdGEgcGFpciwgd2hpY2ggY29udGFpbnMgdGhlIGFkZGl0aW9uYWwgTFNCcyBmb3IgMjQgYml0CisgKiBtb2RlLiAgT25seSBlbmFibGVkIGlmIExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIGFsc28gaW5kaWNhdGVzIGl0IHNob3VsZCBiZQorICogb24uCisgKi8KKyNkZWZpbmUgICBMVkRTX0EzX1BPV0VSX01BU0sJCSgzIDw8IDYpCisjZGVmaW5lICAgTFZEU19BM19QT1dFUl9ET1dOCQkoMCA8PCA2KQorI2RlZmluZSAgIExWRFNfQTNfUE9XRVJfVVAJCSgzIDw8IDYpCisvKgorICogQ29udHJvbHMgdGhlIENMS0IgcGFpci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHdoZW4gTFZEU19CMEIzX1BPV0VSX1VQCisgKiBpcyBzZXQuCisgKi8KKyNkZWZpbmUgICBMVkRTX0NMS0JfUE9XRVJfTUFTSwkJKDMgPDwgNCkKKyNkZWZpbmUgICBMVkRTX0NMS0JfUE9XRVJfRE9XTgkJKDAgPDwgNCkKKyNkZWZpbmUgICBMVkRTX0NMS0JfUE9XRVJfVVAJCSgzIDw8IDQpCisvKgorICogQ29udHJvbHMgdGhlIEIwLUIzIGRhdGEgcGFpcnMuICBUaGlzIG11c3QgYmUgc2V0IHRvIG1hdGNoIHRoZSBEUExMIHAyCisgKiBzZXR0aW5nIGZvciB3aGV0aGVyIHdlIGFyZSBpbiBkdWFsLWNoYW5uZWwgbW9kZS4gIFRoZSBCMyBwYWlyIHdpbGwKKyAqIGFkZGl0aW9uYWxseSBvbmx5IGJlIHBvd2VyZWQgdXAgd2hlbiBMVkRTX0EzX1BPV0VSX1VQIGlzIHNldC4KKyAqLworI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9NQVNLCQkoMyA8PCAyKQorI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9ET1dOCQkoMCA8PCAyKQorI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9VUAkJKDMgPDwgMikKKworLyogUGFuZWwgcG93ZXIgc2VxdWVuY2luZyAqLworI2RlZmluZSBQUF9TVEFUVVMJMHg2MTIwMAorI2RlZmluZSAgIFBQX09OCQkoMSA8PCAzMSkKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYW5lbCBhcmUgb246CisgKgorICogLSBQTEwgZW5hYmxlZAorICogLSBwaXBlIGVuYWJsZWQKKyAqIC0gTFZEUy9EVk9CL0RWT0Mgb24KKyAqLworI2RlZmluZSAgIFBQX1JFQURZCQkoMSA8PCAzMCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9OT05FCSgwIDw8IDI4KQorI2RlZmluZSAgIFBQX1NFUVVFTkNFX09OCSgxIDw8IDI4KQorI2RlZmluZSAgIFBQX1NFUVVFTkNFX09GRgkoMiA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9NQVNLCTB4MzAwMDAwMDAKKyNkZWZpbmUgUFBfQ09OVFJPTAkweDYxMjA0CisjZGVmaW5lICAgUE9XRVJfVEFSR0VUX09OCSgxIDw8IDApCisjZGVmaW5lIFBQX09OX0RFTEFZUwkweDYxMjA4CisjZGVmaW5lIFBQX09GRl9ERUxBWVMJMHg2MTIwYworI2RlZmluZSBQUF9ESVZJU09SCTB4NjEyMTAKKworLyogUGFuZWwgZml0dGluZyAqLworI2RlZmluZSBQRklUX0NPTlRST0wJMHg2MTIzMAorI2RlZmluZSAgIFBGSVRfRU5BQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgICBQRklUX1BJUEVfTUFTSwkoMyA8PCAyOSkKKyNkZWZpbmUgICBQRklUX1BJUEVfU0hJRlQJMjkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9ESVNBQkxFCSgwIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfSU5URVJQX0JJTElORUFSCSgxIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfSU5URVJQX01BU0sJKDMgPDwgMTApCisjZGVmaW5lICAgVkVSVF9BVVRPX1NDQUxFCSgxIDw8IDkpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX0RJU0FCTEUJKDAgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9JTlRFUlBfQklMSU5FQVIJKDEgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9JTlRFUlBfTUFTSwkoMyA8PCA2KQorI2RlZmluZSAgIEhPUklaX0FVVE9fU0NBTEUJKDEgPDwgNSkKKyNkZWZpbmUgICBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEUgKDEgPDwgMykKKyNkZWZpbmUgUEZJVF9QR01fUkFUSU9TCTB4NjEyMzQKKyNkZWZpbmUgICBQRklUX1ZFUlRfU0NBTEVfTUFTSwkJCTB4ZmZmMDAwMDAKKyNkZWZpbmUgICBQRklUX0hPUklaX1NDQUxFX01BU0sJCQkweDAwMDBmZmYwCisjZGVmaW5lIFBGSVRfQVVUT19SQVRJT1MgMHg2MTIzOAorCisvKiBCYWNrbGlnaHQgY29udHJvbCAqLworI2RlZmluZSBCTENfUFdNX0NUTAkJMHg2MTI1NAorI2RlZmluZSAgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQJCSgxNykKKyNkZWZpbmUgQkxDX1BXTV9DVEwyCQkweDYxMjUwIC8qIDk2NSsgb25seSAqLworI2RlZmluZSAgIEJMTV9DT01CSU5BVElPTl9NT0RFICgxIDw8IDMwKQorLyoKKyAqIFRoaXMgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMTUgYml0cyBvZiB0aGUgbnVtYmVyIG9mIGJhY2tsaWdodCBjeWNsZXMgaW4gYQorICogY29tcGxldGUgY3ljbGUgb2YgdGhlIG1vZHVsYXRlZCBiYWNrbGlnaHQgY29udHJvbC4KKyAqCisgKiBUaGUgYWN0dWFsIHZhbHVlIGlzIHRoaXMgZmllbGQgbXVsdGlwbGllZCBieSB0d28uCisgKi8KKyNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0sJCSgweDdmZmYgPDwgMTcpCisjZGVmaW5lICAgQkxNX0xFR0FDWV9NT0RFCQkJCSgxIDw8IDE2KQorLyoKKyAqIFRoaXMgaXMgdGhlIG51bWJlciBvZiBjeWNsZXMgb3V0IG9mIHRoZSBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZSBmb3Igd2hpY2gKKyAqIHRoZSBiYWNrbGlnaHQgaXMgb24uCisgKgorICogVGhpcyBmaWVsZCBtdXN0IGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBpbiB0aGUgY29tcGxldGUKKyAqIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlLgorICovCisjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfU0hJRlQJCSgwKQorI2RlZmluZSAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sJCSgweGZmZmYpCisKKy8qIFRWIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBUVl9DVEwJCQkweDY4MDAwCisvKiogRW5hYmxlcyB0aGUgVFYgZW5jb2RlciAqLworIyBkZWZpbmUgVFZfRU5DX0VOQUJMRQkJCSgxIDw8IDMxKQorLyoqIFNvdXJjZXMgdGhlIFRWIGVuY29kZXIgaW5wdXQgZnJvbSBwaXBlIEIgaW5zdGVhZCBvZiBBLiAqLworIyBkZWZpbmUgVFZfRU5DX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCisvKiogT3V0cHV0cyBjb21wb3NpdGUgdmlkZW8gKERBQyBBIG9ubHkpICovCisjIGRlZmluZSBUVl9FTkNfT1VUUFVUX0NPTVBPU0lURQkoMCA8PCAyOCkKKy8qKiBPdXRwdXRzIFNWaWRlbyB2aWRlbyAoREFDIEIvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfU1ZJREVPCQkoMSA8PCAyOCkKKy8qKiBPdXRwdXRzIENvbXBvbmVudCB2aWRlbyAoREFDIEEvQi9DKSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9DT01QT05FTlQJKDIgPDwgMjgpCisvKiogT3V0cHV0cyBDb21wb3NpdGUgYW5kIFNWaWRlbyAoREFDIEEvQi9DKSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9TVklERU9fQ09NUE9TSVRFCSgzIDw8IDI4KQorIyBkZWZpbmUgVFZfVFJJTEVWRUxfU1lOQwkJKDEgPDwgMjEpCisvKiogRW5hYmxlcyBzbG93IHN5bmMgZ2VuZXJhdGlvbiAoOTQ1R00gb25seSkgKi8KKyMgZGVmaW5lIFRWX1NMT1dfU1lOQwkJCSgxIDw8IDIwKQorLyoqIFNlbGVjdHMgNHggb3ZlcnNhbXBsaW5nIGZvciA0ODBpIGFuZCA1NzZwICovCisjIGRlZmluZSBUVl9PVkVSU0FNUExFXzRYCQkoMCA8PCAxOCkKKy8qKiBTZWxlY3RzIDJ4IG92ZXJzYW1wbGluZyBmb3IgNzIwcCBhbmQgMTA4MGkgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfMlgJCSgxIDw8IDE4KQorLyoqIFNlbGVjdHMgbm8gb3ZlcnNhbXBsaW5nIGZvciAxMDgwcCAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV9OT05FCQkoMiA8PCAxOCkKKy8qKiBTZWxlY3RzIDh4IG92ZXJzYW1wbGluZyAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV84WAkJKDMgPDwgMTgpCisvKiogU2VsZWN0cyBwcm9ncmVzc2l2ZSBtb2RlIHJhdGhlciB0aGFuIGludGVybGFjZWQgKi8KKyMgZGVmaW5lIFRWX1BST0dSRVNTSVZFCQkJKDEgPDwgMTcpCisvKiogU2V0cyB0aGUgY29sb3JidXJzdCB0byBQQUwgbW9kZS4gIFJlcXVpcmVkIGZvciBub24tTSBQQUwgbW9kZXMuICovCisjIGRlZmluZSBUVl9QQUxfQlVSU1QJCQkoMSA8PCAxNikKKy8qKiBGaWVsZCBmb3Igc2V0dGluZyBkZWxheSBvZiBZIGNvbXBhcmVkIHRvIEMgKi8KKyMgZGVmaW5lIFRWX1lDX1NLRVdfTUFTSwkJKDcgPDwgMTIpCisvKiogRW5hYmxlcyBhIGZpeCBmb3IgNDgwcC81NzZwIHN0YW5kYXJkIGRlZmluaXRpb24gbW9kZXMgb24gdGhlIDkxNUdNIG9ubHkgKi8KKyMgZGVmaW5lIFRWX0VOQ19TRFBfRklYCQkJKDEgPDwgMTEpCisvKioKKyAqIEVuYWJsZXMgYSBmaXggZm9yIHRoZSA5MTVHTSBvbmx5LgorICoKKyAqIE5vdCBzdXJlIHdoYXQgaXQgZG9lcy4KKyAqLworIyBkZWZpbmUgVFZfRU5DX0MwX0ZJWAkJCSgxIDw8IDEwKQorLyoqIEJpdHMgdGhhdCBtdXN0IGJlIHByZXNlcnZlZCBieSBzb2Z0d2FyZSAqLworIyBkZWZpbmUgVFZfQ1RMX1NBVkUJCQkoKDMgPDwgOCkgfCAoMyA8PCA2KSkKKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfTUFTSwkJKDMgPDwgNCkKKy8qKiBSZWFkLW9ubHkgc3RhdGUgdGhhdCByZXBvcnRzIGFsbCBmZWF0dXJlcyBlbmFibGVkICovCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX0VOQUJMRUQJCSgwIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyB0aGF0IE1hY3JvdmlzaW9uIGlzIGRpc2FibGVkIGluIGhhcmR3YXJlKi8KKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfTk9fTUFDUk9WSVNJT04JKDEgPDwgNCkKKy8qKiBSZWFkLW9ubHkgc3RhdGUgdGhhdCByZXBvcnRzIHRoYXQgVFYtb3V0IGlzIGRpc2FibGVkIGluIGhhcmR3YXJlLiAqLworIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9ESVNBQkxFRAkJKDIgPDwgNCkKKy8qKiBOb3JtYWwgb3BlcmF0aW9uICovCisjIGRlZmluZSBUVl9URVNUX01PREVfTk9STUFMCQkoMCA8PCAwKQorLyoqIEVuY29kZXIgdGVzdCBwYXR0ZXJuIDEgLSBjb21ibyBwYXR0ZXJuICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl8xCQkoMSA8PCAwKQorLyoqIEVuY29kZXIgdGVzdCBwYXR0ZXJuIDIgLSBmdWxsIHNjcmVlbiB2ZXJ0aWNhbCA3NSUgY29sb3IgYmFycyAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMgkJKDIgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAzIC0gZnVsbCBzY3JlZW4gaG9yaXpvbnRhbCA3NSUgY29sb3IgYmFycyAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMwkJKDMgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiA0IC0gcmFuZG9tIG5vaXNlICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl80CQkoNCA8PCAwKQorLyoqIEVuY29kZXIgdGVzdCBwYXR0ZXJuIDUgLSBsaW5lYXIgY29sb3IgcmFtcHMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzUJCSg1IDw8IDApCisvKioKKyAqIFRoaXMgdGVzdCBtb2RlIGZvcmNlcyB0aGUgREFDcyB0byA1MCUgb2YgZnVsbCBvdXRwdXQuCisgKgorICogVGhpcyBpcyB1c2VkIGZvciBsb2FkIGRldGVjdGlvbiBpbiBjb21iaW5hdGlvbiB3aXRoIFRWREFDX1NFTlNFX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX01PTklUT1JfREVURUNUCSg3IDw8IDApCisjIGRlZmluZSBUVl9URVNUX01PREVfTUFTSwkJKDcgPDwgMCkKKworI2RlZmluZSBUVl9EQUMJCQkweDY4MDA0CisvKioKKyAqIFJlcG9ydHMgdGhhdCBEQUMgc3RhdGUgY2hhbmdlIGxvZ2ljIGhhcyByZXBvcnRlZCBjaGFuZ2UgKFJPKS4KKyAqCisgKiBUaGlzIGdldHMgY2xlYXJlZCB3aGVuIFRWX0RBQ19TVEFURV9FTiBpcyBjbGVhcmVkCisqLworIyBkZWZpbmUgVFZEQUNfU1RBVEVfQ0hHCQkoMSA8PCAzMSkKKyMgZGVmaW5lIFRWREFDX1NFTlNFX01BU0sJCSg3IDw8IDI4KQorLyoqIFJlcG9ydHMgdGhhdCBEQUMgQSB2b2x0YWdlIGlzIGFib3ZlIHRoZSBkZXRlY3QgdGhyZXNob2xkICovCisjIGRlZmluZSBUVkRBQ19BX1NFTlNFCQkJKDEgPDwgMzApCisvKiogUmVwb3J0cyB0aGF0IERBQyBCIHZvbHRhZ2UgaXMgYWJvdmUgdGhlIGRldGVjdCB0aHJlc2hvbGQgKi8KKyMgZGVmaW5lIFRWREFDX0JfU0VOU0UJCQkoMSA8PCAyOSkKKy8qKiBSZXBvcnRzIHRoYXQgREFDIEMgdm9sdGFnZSBpcyBhYm92ZSB0aGUgZGV0ZWN0IHRocmVzaG9sZCAqLworIyBkZWZpbmUgVFZEQUNfQ19TRU5TRQkJCSgxIDw8IDI4KQorLyoqCisgKiBFbmFibGVzIERBQyBzdGF0ZSBkZXRlY3Rpb24gbG9naWMsIGZvciBsb2FkLWJhc2VkIFRWIGRldGVjdGlvbi4KKyAqCisgKiBUaGUgUExMIG9mIHRoZSBjaG9zZW4gcGlwZSAoaW4gVFZfQ1RMKSBtdXN0IGJlIHJ1bm5pbmcsIGFuZCB0aGUgZW5jb2RlciBzZXQKKyAqIHRvIG9mZiwgZm9yIGxvYWQgZGV0ZWN0aW9uIHRvIHdvcmsuCisgKi8KKyMgZGVmaW5lIFRWREFDX1NUQVRFX0NIR19FTgkJKDEgPDwgMjcpCisvKiogU2V0cyB0aGUgREFDIEEgc2Vuc2UgdmFsdWUgdG8gaGlnaCAqLworIyBkZWZpbmUgVFZEQUNfQV9TRU5TRV9DVEwJCSgxIDw8IDI2KQorLyoqIFNldHMgdGhlIERBQyBCIHNlbnNlIHZhbHVlIHRvIGhpZ2ggKi8KKyMgZGVmaW5lIFRWREFDX0JfU0VOU0VfQ1RMCQkoMSA8PCAyNSkKKy8qKiBTZXRzIHRoZSBEQUMgQyBzZW5zZSB2YWx1ZSB0byBoaWdoICovCisjIGRlZmluZSBUVkRBQ19DX1NFTlNFX0NUTAkJKDEgPDwgMjQpCisvKiogT3ZlcnJpZGVzIHRoZSBFTkNfRU5BQkxFIGFuZCBEQUMgdm9sdGFnZSBsZXZlbHMgKi8KKyMgZGVmaW5lIERBQ19DVExfT1ZFUlJJREUJCSgxIDw8IDcpCisvKiogU2V0cyB0aGUgc2xldyByYXRlLiAgTXVzdCBiZSBwcmVzZXJ2ZWQgaW4gc29mdHdhcmUgKi8KKyMgZGVmaW5lIEVOQ19UVkRBQ19TTEVXX0ZBU1QJCSgxIDw8IDYpCisjIGRlZmluZSBEQUNfQV8xXzNfVgkJCSgwIDw8IDQpCisjIGRlZmluZSBEQUNfQV8xXzFfVgkJCSgxIDw8IDQpCisjIGRlZmluZSBEQUNfQV8wXzdfVgkJCSgyIDw8IDQpCisjIGRlZmluZSBEQUNfQV9PRkYJCQkoMyA8PCA0KQorIyBkZWZpbmUgREFDX0JfMV8zX1YJCQkoMCA8PCAyKQorIyBkZWZpbmUgREFDX0JfMV8xX1YJCQkoMSA8PCAyKQorIyBkZWZpbmUgREFDX0JfMF83X1YJCQkoMiA8PCAyKQorIyBkZWZpbmUgREFDX0JfT0ZGCQkJKDMgPDwgMikKKyMgZGVmaW5lIERBQ19DXzFfM19WCQkJKDAgPDwgMCkKKyMgZGVmaW5lIERBQ19DXzFfMV9WCQkJKDEgPDwgMCkKKyMgZGVmaW5lIERBQ19DXzBfN19WCQkJKDIgPDwgMCkKKyMgZGVmaW5lIERBQ19DX09GRgkJCSgzIDw8IDApCisKKy8qKgorICogQ1NDIGNvZWZmaWNpZW50cyBhcmUgc3RvcmVkIGluIGEgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IHdpdGggOSBiaXRzIG9mCisgKiBtYW50aXNzYSBhbmQgMiBvciAzIGJpdHMgb2YgZXhwb25lbnQuICBUaGUgZXhwb25lbnQgaXMgcmVwcmVzZW50ZWQgYXMgMioqLW4sCisgKiB3aGVyZSAyLWJpdCBleHBvbmVudHMgYXJlIHVuc2lnbmVkIG4sIGFuZCAzLWJpdCBleHBvbmVudHMgYXJlIHNpZ25lZCBuIHdpdGgKKyAqIC0xICgweDMpIGJlaW5nIHRoZSBvbmx5IGxlZ2FsIG5lZ2F0aXZlIHZhbHVlLgorICovCisjZGVmaW5lIFRWX0NTQ19ZCQkweDY4MDEwCisjIGRlZmluZSBUVl9SWV9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfUllfU0hJRlQJCQkxNgorIyBkZWZpbmUgVFZfR1lfTUFTSwkJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX0dZX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19ZMgkJMHg2ODAxNAorIyBkZWZpbmUgVFZfQllfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX0JZX1NISUZUCQkJMTYKKy8qKgorICogWSBhdHRlbnVhdGlvbiBmb3IgY29tcG9uZW50IHZpZGVvLgorICoKKyAqIFN0b3JlZCBpbiAxLjkgZml4ZWQgcG9pbnQuCisgKi8KKyMgZGVmaW5lIFRWX0FZX01BU0sJCQkweDAwMDAwM2ZmCisjIGRlZmluZSBUVl9BWV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfVQkJMHg2ODAxOAorIyBkZWZpbmUgVFZfUlVfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX1JVX1NISUZUCQkJMTYKKyMgZGVmaW5lIFRWX0dVX01BU0sJCQkweDAwMDAwN2ZmCisjIGRlZmluZSBUVl9HVV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfVTIJCTB4NjgwMWMKKyMgZGVmaW5lIFRWX0JVX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9CVV9TSElGVAkJCTE2CisvKioKKyAqIFUgYXR0ZW51YXRpb24gZm9yIGNvbXBvbmVudCB2aWRlby4KKyAqCisgKiBTdG9yZWQgaW4gMS45IGZpeGVkIHBvaW50LgorICovCisjIGRlZmluZSBUVl9BVV9NQVNLCQkJMHgwMDAwMDNmZgorIyBkZWZpbmUgVFZfQVVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1YJCTB4NjgwMjAKKyMgZGVmaW5lIFRWX1JWX01BU0sJCQkweDBmZmYwMDAwCisjIGRlZmluZSBUVl9SVl9TSElGVAkJCTE2CisjIGRlZmluZSBUVl9HVl9NQVNLCQkJMHgwMDAwMDdmZgorIyBkZWZpbmUgVFZfR1ZfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1YyCQkweDY4MDI0CisjIGRlZmluZSBUVl9CVl9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfQlZfU0hJRlQJCQkxNgorLyoqCisgKiBWIGF0dGVudWF0aW9uIGZvciBjb21wb25lbnQgdmlkZW8uCisgKgorICogU3RvcmVkIGluIDEuOSBmaXhlZCBwb2ludC4KKyAqLworIyBkZWZpbmUgVFZfQVZfTUFTSwkJCTB4MDAwMDA3ZmYKKyMgZGVmaW5lIFRWX0FWX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NMUl9LTk9CUwkJMHg2ODAyOAorLyoqIDJzLWNvbXBsZW1lbnQgYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCisjIGRlZmluZSBUVl9CUklHSFRORVNTX01BU0sJCTB4ZmYwMDAwMDAKKyMgZGVmaW5lIFRWX0JSSUdIVE5FU1NfU0hJRlQJCTI0CisvKiogQ29udHJhc3QgYWRqdXN0bWVudCwgYXMgYSAyLjYgdW5zaWduZWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyICovCisjIGRlZmluZSBUVl9DT05UUkFTVF9NQVNLCQkweDAwZmYwMDAwCisjIGRlZmluZSBUVl9DT05UUkFTVF9TSElGVAkJMTYKKy8qKiBTYXR1cmF0aW9uIGFkanVzdG1lbnQsIGFzIGEgMi42IHVuc2lnbmVkIGZsb2F0aW5nIHBvaW50IG51bWJlciAqLworIyBkZWZpbmUgVFZfU0FUVVJBVElPTl9NQVNLCQkweDAwMDBmZjAwCisjIGRlZmluZSBUVl9TQVRVUkFUSU9OX1NISUZUCQk4CisvKiogSHVlIGFkanVzdG1lbnQsIGFzIGFuIGludGVnZXIgcGhhc2UgYW5nbGUgaW4gZGVncmVlcyAqLworIyBkZWZpbmUgVFZfSFVFX01BU0sJCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9IVUVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ0xSX0xFVkVMCQkweDY4MDJjCisvKiogQ29udHJvbHMgdGhlIERBQyBsZXZlbCBmb3IgYmxhY2sgKi8KKyMgZGVmaW5lIFRWX0JMQUNLX0xFVkVMX01BU0sJCTB4MDFmZjAwMDAKKyMgZGVmaW5lIFRWX0JMQUNLX0xFVkVMX1NISUZUCQkxNgorLyoqIENvbnRyb2xzIHRoZSBEQUMgbGV2ZWwgZm9yIGJsYW5raW5nICovCisjIGRlZmluZSBUVl9CTEFOS19MRVZFTF9NQVNLCQkweDAwMDAwMWZmCisjIGRlZmluZSBUVl9CTEFOS19MRVZFTF9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfQ1RMXzEJCTB4NjgwMzAKKy8qKiBOdW1iZXIgb2YgcGl4ZWxzIGluIHRoZSBoc3luYy4gKi8KKyMgZGVmaW5lIFRWX0hTWU5DX0VORF9NQVNLCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9IU1lOQ19FTkRfU0hJRlQJCTE2CisvKiogVG90YWwgbnVtYmVyIG9mIHBpeGVscyBtaW51cyBvbmUgaW4gdGhlIGxpbmUgKGRpc3BsYXkgYW5kIGJsYW5raW5nKS4gKi8KKyMgZGVmaW5lIFRWX0hUT1RBTF9NQVNLCQkJMHgwMDAwMWZmZgorIyBkZWZpbmUgVFZfSFRPVEFMX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfSF9DVExfMgkJMHg2ODAzNAorLyoqIEVuYWJsZXMgdGhlIGNvbG9yYnVyc3QgKG5lZWRlZCBmb3Igbm9uLWNvbXBvbmVudCBjb2xvcikgKi8KKyMgZGVmaW5lIFRWX0JVUlNUX0VOQQkJCSgxIDw8IDMxKQorLyoqIE9mZnNldCBvZiB0aGUgY29sb3JidXJzdCBmcm9tIHRoZSBzdGFydCBvZiBoc3luYywgaW4gcGl4ZWxzIG1pbnVzIG9uZS4gKi8KKyMgZGVmaW5lIFRWX0hCVVJTVF9TVEFSVF9TSElGVAkJMTYKKyMgZGVmaW5lIFRWX0hCVVJTVF9TVEFSVF9NQVNLCQkweDFmZmYwMDAwCisvKiogTGVuZ3RoIG9mIHRoZSBjb2xvcmJ1cnN0ICovCisjIGRlZmluZSBUVl9IQlVSU1RfTEVOX1NISUZUCQkwCisjIGRlZmluZSBUVl9IQlVSU1RfTEVOX01BU0sJCTB4MDAwMWZmZgorCisjZGVmaW5lIFRWX0hfQ1RMXzMJCTB4NjgwMzgKKy8qKiBFbmQgb2YgaGJsYW5rLCBtZWFzdXJlZCBpbiBwaXhlbHMgbWludXMgb25lIGZyb20gc3RhcnQgb2YgaHN5bmMgKi8KKyMgZGVmaW5lIFRWX0hCTEFOS19FTkRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9IQkxBTktfRU5EX01BU0sJCTB4MWZmZjAwMDAKKy8qKiBTdGFydCBvZiBoYmxhbmssIG1lYXN1cmVkIGluIHBpeGVscyBtaW51cyBvbmUgZnJvbSBzdGFydCBvZiBoc3luYyAqLworIyBkZWZpbmUgVFZfSEJMQU5LX1NUQVJUX1NISUZUCQkwCisjIGRlZmluZSBUVl9IQkxBTktfU1RBUlRfTUFTSwkJMHgwMDAxZmZmCisKKyNkZWZpbmUgVFZfVl9DVExfMQkJMHg2ODAzYworLyoqIFhYWCAqLworIyBkZWZpbmUgVFZfTkJSX0VORF9TSElGVAkJMTYKKyMgZGVmaW5lIFRWX05CUl9FTkRfTUFTSwkJMHgwN2ZmMDAwMAorLyoqIFhYWCAqLworIyBkZWZpbmUgVFZfVklfRU5EX0YxX1NISUZUCQk4CisjIGRlZmluZSBUVl9WSV9FTkRfRjFfTUFTSwkJMHgwMDAwM2YwMAorLyoqIFhYWCAqLworIyBkZWZpbmUgVFZfVklfRU5EX0YyX1NISUZUCQkwCisjIGRlZmluZSBUVl9WSV9FTkRfRjJfTUFTSwkJMHgwMDAwMDAzZgorCisjZGVmaW5lIFRWX1ZfQ1RMXzIJCTB4NjgwNDAKKy8qKiBMZW5ndGggb2YgdnN5bmMsIGluIGhhbGYgbGluZXMgKi8KKyMgZGVmaW5lIFRWX1ZTWU5DX0xFTl9NQVNLCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9WU1lOQ19MRU5fU0hJRlQJCTE2CisvKiogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB2c3luYyBpbiBmaWVsZCAxLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YxX01BU0sJCTB4MDAwMDdmMDAKKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YxX1NISUZUCTgKKy8qKgorICogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB2c3luYyBpbiBmaWVsZCAyLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YyX01BU0sJCTB4MDAwMDAwN2YKKyMgZGVmaW5lIFRWX1ZTWU5DX1NUQVJUX0YyX1NISUZUCTAKKworI2RlZmluZSBUVl9WX0NUTF8zCQkweDY4MDQ0CisvKiogRW5hYmxlcyBnZW5lcmF0aW9uIG9mIHRoZSBlcXVhbGl6YXRpb24gc2lnbmFsICovCisjIGRlZmluZSBUVl9FUVVBTF9FTkEJCQkoMSA8PCAzMSkKKy8qKiBMZW5ndGggb2YgdnN5bmMsIGluIGhhbGYgbGluZXMgKi8KKyMgZGVmaW5lIFRWX1ZFUV9MRU5fTUFTSwkJMHgwMDdmMDAwMAorIyBkZWZpbmUgVFZfVkVRX0xFTl9TSElGVAkJMTYKKy8qKiBPZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIGVxdWFsaXphdGlvbiBpbiBmaWVsZCAxLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuCisgKiB0aGUgbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMV9NQVNLCQkweDAwMDdmMDAKKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMV9TSElGVAkJOAorLyoqCisgKiBPZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIGVxdWFsaXphdGlvbiBpbiBmaWVsZCAyLCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuCisgKiB0aGUgbnVtYmVyIG9mIGhhbGYgbGluZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMl9NQVNLCQkweDAwMDAwN2YKKyMgZGVmaW5lIFRWX1ZFUV9TVEFSVF9GMl9TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzQJCTB4NjgwNDgKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YxX01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YxX1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YxX01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjFfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF81CQkweDY4MDRjCisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMl9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMl9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMl9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YyX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfVl9DVExfNgkJMHg2ODA1MAorLyoqCisgKiBPZmZzZXQgdG8gc3RhcnQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHZlcnRpY2FsIHN0YXJ0LgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjNfTUFTSwkweDAwM2YwMDAwCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjNfU0hJRlQJMTYKKy8qKgorICogT2Zmc2V0IHRvIHRoZSBlbmQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSBzdGFydCBvZiBOQlIuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjNfTUFTSwkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GM19TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzcJCTB4NjgwNTQKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0Y0X01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0Y0X1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0Y0X01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjRfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMQkJMHg2ODA2MAorLyoqIFR1cm5zIG9uIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ19EREExX0VOCQkJKDEgPDwgMzEpCisvKiogVHVybnMgb24gdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDX0REQTJfRU4JCQkoMSA8PCAzMCkKKy8qKiBUdXJucyBvbiB0aGUgZmlyc3Qgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NfRERBM19FTgkJCSgxIDw8IDI5KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBvdGhlciBmaWVsZCAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfRVZFUllfMgkJKDAgPDwgMjQpCisvKiogU2V0cyB0aGUgc3ViY2FycmllciBEREEgdG8gcmVzZXQgZnJlcXVlbmN5IGV2ZXJ5IGZvdXJ0aCBmaWVsZCAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfRVZFUllfNAkJKDEgPDwgMjQpCisvKiogU2V0cyB0aGUgc3ViY2FycmllciBEREEgdG8gcmVzZXQgZnJlcXVlbmN5IGV2ZXJ5IGVpZ2h0aCBmaWVsZCAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfRVZFUllfOAkJKDIgPDwgMjQpCisvKiogU2V0cyB0aGUgc3ViY2FycmllciBEREEgdG8gbmV2ZXIgcmVzZXQgdGhlIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgVFZfU0NfUkVTRVRfTkVWRVIJCSgzIDw8IDI0KQorLyoqIFNldHMgdGhlIHBlYWsgYW1wbGl0dWRlIG9mIHRoZSBjb2xvcmJ1cnN0LiovCisjIGRlZmluZSBUVl9CVVJTVF9MRVZFTF9NQVNLCQkweDAwZmYwMDAwCisjIGRlZmluZSBUVl9CVVJTVF9MRVZFTF9TSElGVAkJMTYKKy8qKiBTZXRzIHRoZSBpbmNyZW1lbnQgb2YgdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBMV9JTkNfTUFTSwkJMHgwMDAwMGZmZgorIyBkZWZpbmUgVFZfU0NEREExX0lOQ19TSElGVAkJMAorCisjZGVmaW5lIFRWX1NDX0NUTF8yCQkweDY4MDY0CisvKiogU2V0cyB0aGUgcm9sbG92ZXIgZm9yIHRoZSBzZWNvbmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEyX1NJWkVfTUFTSwkJMHg3ZmZmMDAwMAorIyBkZWZpbmUgVFZfU0NEREEyX1NJWkVfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVlbnQgb2YgdGhlIHNlY29uZCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTJfSU5DX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1NDRERBMl9JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMwkJMHg2ODA2OAorLyoqIFNldHMgdGhlIHJvbGxvdmVyIGZvciB0aGUgdGhpcmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEzX1NJWkVfTUFTSwkJMHg3ZmZmMDAwMAorIyBkZWZpbmUgVFZfU0NEREEzX1NJWkVfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVlbnQgb2YgdGhlIHRoaXJkIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBM19JTkNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfU0NEREEzX0lOQ19TSElGVAkJMAorCisjZGVmaW5lIFRWX1dJTl9QT1MJCTB4NjgwNzAKKy8qKiBYIGNvb3JkaW5hdGUgb2YgdGhlIGRpc3BsYXkgZnJvbSB0aGUgc3RhcnQgb2YgaG9yaXpvbnRhbCBhY3RpdmUgKi8KKyMgZGVmaW5lIFRWX1hQT1NfTUFTSwkJCTB4MWZmZjAwMDAKKyMgZGVmaW5lIFRWX1hQT1NfU0hJRlQJCQkxNgorLyoqIFkgY29vcmRpbmF0ZSBvZiB0aGUgZGlzcGxheSBmcm9tIHRoZSBzdGFydCBvZiB2ZXJ0aWNhbCBhY3RpdmUgKE5CUikgKi8KKyMgZGVmaW5lIFRWX1lQT1NfTUFTSwkJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX1lQT1NfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfV0lOX1NJWkUJCTB4NjgwNzQKKy8qKiBIb3Jpem9udGFsIHNpemUgb2YgdGhlIGRpc3BsYXkgd2luZG93LCBtZWFzdXJlZCBpbiBwaXhlbHMqLworIyBkZWZpbmUgVFZfWFNJWkVfTUFTSwkJCTB4MWZmZjAwMDAKKyMgZGVmaW5lIFRWX1hTSVpFX1NISUZUCQkJMTYKKy8qKgorICogVmVydGljYWwgc2l6ZSBvZiB0aGUgZGlzcGxheSB3aW5kb3csIG1lYXN1cmVkIGluIHBpeGVscy4KKyAqCisgKiBNdXN0IGJlIGV2ZW4gZm9yIGludGVybGFjZWQgbW9kZXMuCisgKi8KKyMgZGVmaW5lIFRWX1lTSVpFX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9ZU0laRV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzEJCTB4NjgwODAKKy8qKgorICogRW5hYmxlcyBhdXRvbWF0aWMgc2NhbGluZyBjYWxjdWxhdGlvbi4KKyAqCisgKiBJZiBzZXQsIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlcnMgYXJlIGlnbm9yZWQsIGFuZCB0aGUgY2FsY3VsYXRlZCB2YWx1ZXMgY2FuCisgKiBiZSByZWFkIGJhY2sgZnJvbSB0aGUgcmVnaXN0ZXIuCisgKi8KKyMgZGVmaW5lIFRWX0FVVE9fU0NBTEUJCQkoMSA8PCAzMSkKKy8qKgorICogRGlzYWJsZXMgdGhlIHZlcnRpY2FsIGZpbHRlci4KKyAqCisgKiBUaGlzIGlzIHJlcXVpcmVkIG9uIG1vZGVzIG1vcmUgdGhhbiAxMDI0IHBpeGVscyB3aWRlICovCisjIGRlZmluZSBUVl9WX0ZJTFRFUl9CWVBBU1MJCSgxIDw8IDI5KQorLyoqIEVuYWJsZXMgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nICovCisjIGRlZmluZSBUVl9WQURBUFQJCQkoMSA8PCAyOCkKKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01BU0sJCSgzIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIGxlYXN0IGFkYXB0aXZlIHZlcnRpY2FsIGZpbHRlcmluZyBtb2RlICovCisjIGRlZmluZSBUVl9WQURBUFRfTU9ERV9MRUFTVAkJKDAgPDwgMjYpCisvKiogU2VsZWN0cyB0aGUgbW9kZXJhdGVseSBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTU9ERVJBVEUJKDEgPDwgMjYpCisvKiogU2VsZWN0cyB0aGUgbW9zdCBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTU9TVAkJKDMgPDwgMjYpCisvKioKKyAqIFNldHMgdGhlIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogVGhpcyBzaG91bGQgYmUgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgaG9yaXpvbnRhbCBzY2FsaW5nIGZhY3RvciBkaXZpZGVkCisgKiBieSB0aGUgb3ZlcnNhbXBsaW5nIHJhdGUuICBUVl9IU0NBTEUgc2hvdWxkIGJlIGxlc3MgdGhhbiAxLCBhbmQgc2V0IHRvOgorICoKKyAqIChzcmMgd2lkdGggLSAxKSAvICgob3ZlcnNhbXBsZSAqIGRlc3Qgd2lkdGgpIC0gMSkKKyAqLworIyBkZWZpbmUgVFZfSFNDQUxFX0ZSQUNfTUFTSwkJMHgwMDAwM2ZmZgorIyBkZWZpbmUgVFZfSFNDQUxFX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzIJCTB4NjgwODQKKy8qKgorICogU2V0cyB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRWX1ZTQ0FMRSBzaG91bGQgYmUgKHNyYyBoZWlnaHQgLSAxKSAvICgoaW50ZXJsYWNlICogZGVzdCBoZWlnaHQpIC0gMSkKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0lOVF9NQVNLCQkweDAwMDM4MDAwCisjIGRlZmluZSBUVl9WU0NBTEVfSU5UX1NISUZUCQkxNQorLyoqCisgKiBTZXRzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIDMuMTUgZml4ZWQtcG9pbnQgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogXHNhIFRWX1ZTQ0FMRV9JTlRfTUFTSworICovCisjIGRlZmluZSBUVl9WU0NBTEVfRlJBQ19NQVNLCQkweDAwMDA3ZmZmCisjIGRlZmluZSBUVl9WU0NBTEVfRlJBQ19TSElGVAkJMAorCisjZGVmaW5lIFRWX0ZJTFRFUl9DVExfMwkJMHg2ODA4OAorLyoqCisgKiBTZXRzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIDMuMTUgZml4ZWQtcG9pbnQgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogVFZfVlNDQUxFIHNob3VsZCBiZSAoc3JjIGhlaWdodCAtIDEpIC8gKDEvNCAqIChkZXN0IGhlaWdodCAtIDEpKQorICoKKyAqIEZvciBwcm9ncmVzc2l2ZSBtb2RlcywgVFZfVlNDQUxFX0lQX0lOVCBzaG91bGQgYmUgc2V0IHRvIHplcm9lcy4KKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0lOVF9NQVNLCQkweDAwMDM4MDAwCisjIGRlZmluZSBUVl9WU0NBTEVfSVBfSU5UX1NISUZUCQkxNQorLyoqCisgKiBTZXRzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIDMuMTUgZml4ZWQtcG9pbnQgdmVydGljYWwgc2NhbGluZyBmYWN0b3IuCisgKgorICogRm9yIHByb2dyZXNzaXZlIG1vZGVzLCBUVl9WU0NBTEVfSVBfSU5UIHNob3VsZCBiZSBzZXQgdG8gemVyb2VzLgorICoKKyAqIFxzYSBUVl9WU0NBTEVfSVBfSU5UX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0ZSQUNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9DQ19DT05UUk9MCQkweDY4MDkwCisjIGRlZmluZSBUVl9DQ19FTkFCTEUJCQkoMSA8PCAzMSkKKy8qKgorICogU3BlY2lmaWVzIHdoaWNoIGZpZWxkIHRvIHNlbmQgdGhlIENDIGRhdGEgaW4uCisgKgorICogQ0MgZGF0YSBpcyB1c3VhbGx5IHNlbnQgaW4gZmllbGQgMC4KKyAqLworIyBkZWZpbmUgVFZfQ0NfRklEX01BU0sJCQkoMSA8PCAyNykKKyMgZGVmaW5lIFRWX0NDX0ZJRF9TSElGVAkJMjcKKy8qKiBTZXRzIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBDQyBkYXRhLiAgVXN1YWxseSAxMzUuICovCisjIGRlZmluZSBUVl9DQ19IT0ZGX01BU0sJCTB4MDNmZjAwMDAKKyMgZGVmaW5lIFRWX0NDX0hPRkZfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIENDIGRhdGEuICBVc3VhbGx5IDIxICovCisjIGRlZmluZSBUVl9DQ19MSU5FX01BU0sJCTB4MDAwMDAwM2YKKyMgZGVmaW5lIFRWX0NDX0xJTkVfU0hJRlQJCTAKKworI2RlZmluZSBUVl9DQ19EQVRBCQkweDY4MDk0CisjIGRlZmluZSBUVl9DQ19SRFkJCQkoMSA8PCAzMSkKKy8qKiBTZWNvbmQgd29yZCBvZiBDQyBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkLiAqLworIyBkZWZpbmUgVFZfQ0NfREFUQV8yX01BU0sJCTB4MDA3ZjAwMDAKKyMgZGVmaW5lIFRWX0NDX0RBVEFfMl9TSElGVAkJMTYKKy8qKiBGaXJzdCB3b3JkIG9mIENDIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQuICovCisjIGRlZmluZSBUVl9DQ19EQVRBXzFfTUFTSwkJMHgwMDAwMDA3ZgorIyBkZWZpbmUgVFZfQ0NfREFUQV8xX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfSF9MVU1BXzAJCTB4NjgxMDAKKyNkZWZpbmUgVFZfSF9MVU1BXzU5CQkweDY4MWVjCisjZGVmaW5lIFRWX0hfQ0hST01BXzAJCTB4NjgyMDAKKyNkZWZpbmUgVFZfSF9DSFJPTUFfNTkJCTB4NjgyZWMKKyNkZWZpbmUgVFZfVl9MVU1BXzAJCTB4NjgzMDAKKyNkZWZpbmUgVFZfVl9MVU1BXzQyCQkweDY4M2E4CisjZGVmaW5lIFRWX1ZfQ0hST01BXzAJCTB4Njg0MDAKKyNkZWZpbmUgVFZfVl9DSFJPTUFfNDIJCTB4Njg0YTgKKworLyogRGlzcGxheSAmIGN1cnNvciBjb250cm9sICovCisKKy8qIFBpcGUgQSAqLworI2RlZmluZSBQSVBFQURTTAkJMHg3MDAwMAorI2RlZmluZSBQSVBFQUNPTkYJCTB4NzAwMDgKKyNkZWZpbmUgICBQSVBFQUNPTkZfRU5BQkxFCSgxPDwzMSkKKyNkZWZpbmUgICBQSVBFQUNPTkZfRElTQUJMRQkwCisjZGVmaW5lICAgUElQRUFDT05GX0RPVUJMRV9XSURFCSgxPDwzMCkKKyNkZWZpbmUgICBJOTY1X1BJUEVDT05GX0FDVElWRQkoMTw8MzApCisjZGVmaW5lICAgUElQRUFDT05GX1NJTkdMRV9XSURFCTAKKyNkZWZpbmUgICBQSVBFQUNPTkZfUElQRV9VTkxPQ0tFRCAwCisjZGVmaW5lICAgUElQRUFDT05GX1BJUEVfTE9DS0VECSgxPDwyNSkKKyNkZWZpbmUgICBQSVBFQUNPTkZfUEFMRVRURQkwCisjZGVmaW5lICAgUElQRUFDT05GX0dBTU1BCQkoMTw8MjQpCisjZGVmaW5lICAgUElQRUNPTkZfRk9SQ0VfQk9SREVSCSgxPDwyNSkKKyNkZWZpbmUgICBQSVBFQ09ORl9QUk9HUkVTU0lWRQkoMCA8PCAyMSkKKyNkZWZpbmUgICBQSVBFQ09ORl9JTlRFUkxBQ0VfV19GSUVMRF9JTkRJQ0FUSU9OCSg2IDw8IDIxKQorI2RlZmluZSAgIFBJUEVDT05GX0lOVEVSTEFDRV9GSUVMRF8wX09OTFkJCSg3IDw8IDIxKQorI2RlZmluZSBQSVBFQVNUQVQJCTB4NzAwMjQKKyNkZWZpbmUgICBQSVBFX0ZJRk9fVU5ERVJSVU5fU1RBVFVTCQkoMVVMPDwzMSkKKyNkZWZpbmUgICBQSVBFX0NSQ19FUlJPUl9FTkFCTEUJCQkoMVVMPDwyOSkKKyNkZWZpbmUgICBQSVBFX0NSQ19ET05FX0VOQUJMRQkJCSgxVUw8PDI4KQorI2RlZmluZSAgIFBJUEVfR01CVVNfRVZFTlRfRU5BQkxFCQkoMVVMPDwyNykKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjYpCisjZGVmaW5lICAgUElQRV9WU1lOQ19JTlRFUlJVUFRfRU5BQkxFCQkoMVVMPDwyNSkKKyNkZWZpbmUgICBQSVBFX0RJU1BMQVlfTElORV9DT01QQVJFX0VOQUJMRQkoMVVMPDwyNCkKKyNkZWZpbmUgICBQSVBFX0RQU1RfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMykKKyNkZWZpbmUgICBQSVBFX0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMikKKyNkZWZpbmUgICBQSVBFX09ERF9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIxKQorI2RlZmluZSAgIFBJUEVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIwKQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE4KSAvKiBwcmUtOTY1ICovCisjZGVmaW5lICAgUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwxOCkgLyogOTY1IG9yIGxhdGVyICovCisjZGVmaW5lICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MTcpCisjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfRU5BQkxFCQkoMVVMPDwxNikKKyNkZWZpbmUgICBQSVBFX0NSQ19FUlJPUl9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDEzKQorI2RlZmluZSAgIFBJUEVfQ1JDX0RPTkVfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDwxMikKKyNkZWZpbmUgICBQSVBFX0dNQlVTX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDExKQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxMCkKKyNkZWZpbmUgICBQSVBFX1ZTWU5DX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDkpCisjZGVmaW5lICAgUElQRV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9TVEFUVVMJKDFVTDw8OCkKKyNkZWZpbmUgICBQSVBFX0RQU1RfRVZFTlRfU1RBVFVTCQkoMVVMPDw3KQorI2RlZmluZSAgIFBJUEVfTEVHQUNZX0JMQ19FVkVOVF9TVEFUVVMJCSgxVUw8PDYpCisjZGVmaW5lICAgUElQRV9PRERfRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw1KQorI2RlZmluZSAgIFBJUEVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDQpCisjZGVmaW5lICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikgLyogcHJlLTk2NSAqLworI2RlZmluZSAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MikgLyogOTY1IG9yIGxhdGVyICovCisjZGVmaW5lICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MSkKKyNkZWZpbmUgICBQSVBFX09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCisKKyNkZWZpbmUgRFNQQVJCCQkJMHg3MDAzMAorI2RlZmluZSAgIERTUEFSQl9DU1RBUlRfTUFTSwkoMHg3ZiA8PCA3KQorI2RlZmluZSAgIERTUEFSQl9DU1RBUlRfU0hJRlQJNworI2RlZmluZSAgIERTUEFSQl9CU1RBUlRfTUFTSwkoMHg3ZikKKyNkZWZpbmUgICBEU1BBUkJfQlNUQVJUX1NISUZUCTAKKy8qCisgKiBUaGUgdHdvIHBpcGUgZnJhbWUgY291bnRlciByZWdpc3RlcnMgYXJlIG5vdCBzeW5jaHJvbml6ZWQsIHNvCisgKiByZWFkaW5nIGEgc3RhYmxlIHZhbHVlIGlzIHNvbWV3aGF0IHRyaWNreS4gVGhlIGZvbGxvd2luZyBjb2RlCisgKiBzaG91bGQgd29yazoKKyAqCisgKiAgZG8geworICogICAgaGlnaDEgPSAoKElOUkVHKFBJUEVBRlJBTUVISUdIKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorICogICAgICAgICAgICAgUElQRV9GUkFNRV9ISUdIX1NISUZUOworICogICAgbG93MSA9ICAoKElOUkVHKFBJUEVBRlJBTUVQSVhFTCkgJiBQSVBFX0ZSQU1FX0xPV19NQVNLKSA+PgorICogICAgICAgICAgICAgUElQRV9GUkFNRV9MT1dfU0hJRlQpOworICogICAgaGlnaDIgPSAoKElOUkVHKFBJUEVBRlJBTUVISUdIKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorICogICAgICAgICAgICAgUElQRV9GUkFNRV9ISUdIX1NISUZUKTsKKyAqICB9IHdoaWxlIChoaWdoMSAhPSBoaWdoMik7CisgKiAgZnJhbWUgPSAoaGlnaDEgPDwgOCkgfCBsb3cxOworICovCisjZGVmaW5lIFBJUEVBRlJBTUVISUdIICAgICAgICAgIDB4NzAwNDAKKyNkZWZpbmUgICBQSVBFX0ZSQU1FX0hJR0hfTUFTSyAgICAweDAwMDBmZmZmCisjZGVmaW5lICAgUElQRV9GUkFNRV9ISUdIX1NISUZUICAgMAorI2RlZmluZSBQSVBFQUZSQU1FUElYRUwgICAgICAgICAweDcwMDQ0CisjZGVmaW5lICAgUElQRV9GUkFNRV9MT1dfTUFTSyAgICAgMHhmZjAwMDAwMAorI2RlZmluZSAgIFBJUEVfRlJBTUVfTE9XX1NISUZUICAgIDI0CisjZGVmaW5lICAgUElQRV9QSVhFTF9NQVNLICAgICAgICAgMHgwMGZmZmZmZgorI2RlZmluZSAgIFBJUEVfUElYRUxfU0hJRlQgICAgICAgIDAKKworLyogQ3Vyc29yIEEgJiBCIHJlZ3MgKi8KKyNkZWZpbmUgQ1VSQUNOVFIJCTB4NzAwODAKKyNkZWZpbmUgICBDVVJTT1JfTU9ERV9ESVNBQkxFICAgMHgwMAorI2RlZmluZSAgIENVUlNPUl9NT0RFXzY0XzMyQl9BWCAweDA3CisjZGVmaW5lICAgQ1VSU09SX01PREVfNjRfQVJHQl9BWCAoKDEgPDwgNSkgfCBDVVJTT1JfTU9ERV82NF8zMkJfQVgpCisjZGVmaW5lICAgTUNVUlNPUl9HQU1NQV9FTkFCTEUgICgxIDw8IDI2KQorI2RlZmluZSBDVVJBQkFTRQkJMHg3MDA4NAorI2RlZmluZSBDVVJBUE9TCQkJMHg3MDA4OAorI2RlZmluZSAgIENVUlNPUl9QT1NfTUFTSyAgICAgICAweDAwN0ZGCisjZGVmaW5lICAgQ1VSU09SX1BPU19TSUdOICAgICAgIDB4ODAwMAorI2RlZmluZSAgIENVUlNPUl9YX1NISUZUICAgICAgICAwCisjZGVmaW5lICAgQ1VSU09SX1lfU0hJRlQgICAgICAgIDE2CisjZGVmaW5lIENVUkJDTlRSCQkweDcwMGMwCisjZGVmaW5lIENVUkJCQVNFCQkweDcwMGM0CisjZGVmaW5lIENVUkJQT1MJCQkweDcwMGM4CisKKy8qIERpc3BsYXkgQSBjb250cm9sICovCisjZGVmaW5lIERTUEFDTlRSICAgICAgICAgICAgICAgIDB4NzAxODAKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0VOQUJMRQkJCSgxPDwzMSkKKyNkZWZpbmUgICBESVNQTEFZX1BMQU5FX0RJU0FCTEUJCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX0dBTU1BX0VOQUJMRQkJKDE8PDMwKQorI2RlZmluZSAgIERJU1BQTEFORV9HQU1NQV9ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1BJWEZPUk1BVF9NQVNLCQkoMHhmPDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfOEJQUAkJCSgweDI8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8xNV8xNkJQUAkJCSgweDQ8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8xNkJQUAkJCSgweDU8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8zMkJQUF9OT19BTFBIQQkJKDB4Njw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FXzMyQlBQCQkJKDB4Nzw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19FTkFCTEUJCSgxPDwyNSkKKyNkZWZpbmUgICBESVNQUExBTkVfU1RFUkVPX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfTUFTSwkJKDE8PDI0KQorI2RlZmluZSAgIERJU1BQTEFORV9TRUxfUElQRV9BCQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TRUxfUElQRV9CCQkJKDE8PDI0KQorI2RlZmluZSAgIERJU1BQTEFORV9TUkNfS0VZX0VOQUJMRQkJKDE8PDIyKQorI2RlZmluZSAgIERJU1BQTEFORV9TUkNfS0VZX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfTElORV9ET1VCTEUJCQkoMTw8MjApCisjZGVmaW5lICAgRElTUFBMQU5FX05PX0xJTkVfRE9VQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9GSVJTVAkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9TRUNPTkQJKDE8PDE4KQorI2RlZmluZSBEU1BBQUREUgkJMHg3MDE4NAorI2RlZmluZSBEU1BBU1RSSURFCQkweDcwMTg4CisjZGVmaW5lIERTUEFQT1MJCQkweDcwMThDIC8qIHJlc2VydmVkICovCisjZGVmaW5lIERTUEFTSVpFCQkweDcwMTkwCisjZGVmaW5lIERTUEFTVVJGCQkweDcwMTlDIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBEU1BBVElMRU9GRgkJMHg3MDFBNCAvKiA5NjUrIG9ubHkgKi8KKworLyogVkJJT1MgZmxhZ3MgKi8KKyNkZWZpbmUgU1dGMDAJCQkweDcxNDEwCisjZGVmaW5lIFNXRjAxCQkJMHg3MTQxNAorI2RlZmluZSBTV0YwMgkJCTB4NzE0MTgKKyNkZWZpbmUgU1dGMDMJCQkweDcxNDFjCisjZGVmaW5lIFNXRjA0CQkJMHg3MTQyMAorI2RlZmluZSBTV0YwNQkJCTB4NzE0MjQKKyNkZWZpbmUgU1dGMDYJCQkweDcxNDI4CisjZGVmaW5lIFNXRjEwCQkJMHg3MDQxMAorI2RlZmluZSBTV0YxMQkJCTB4NzA0MTQKKyNkZWZpbmUgU1dGMTQJCQkweDcxNDIwCisjZGVmaW5lIFNXRjMwCQkJMHg3MjQxNAorI2RlZmluZSBTV0YzMQkJCTB4NzI0MTgKKyNkZWZpbmUgU1dGMzIJCQkweDcyNDFjCisKKy8qIFBpcGUgQiAqLworI2RlZmluZSBQSVBFQkRTTAkJMHg3MTAwMAorI2RlZmluZSBQSVBFQkNPTkYJCTB4NzEwMDgKKyNkZWZpbmUgUElQRUJTVEFUCQkweDcxMDI0CisjZGVmaW5lIFBJUEVCRlJBTUVISUdICQkweDcxMDQwCisjZGVmaW5lIFBJUEVCRlJBTUVQSVhFTAkJMHg3MTA0NAorCisvKiBEaXNwbGF5IEIgY29udHJvbCAqLworI2RlZmluZSBEU1BCQ05UUgkJMHg3MTE4MAorI2RlZmluZSAgIERJU1BQTEFORV9BTFBIQV9UUkFOU19FTkFCTEUJCSgxPDwxNSkKKyNkZWZpbmUgICBESVNQUExBTkVfQUxQSEFfVFJBTlNfRElTQUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfRElTUExBWQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NQUklURV9BQk9WRV9PVkVSTEFZCSgxKQorI2RlZmluZSBEU1BCQUREUgkJMHg3MTE4NAorI2RlZmluZSBEU1BCU1RSSURFCQkweDcxMTg4CisjZGVmaW5lIERTUEJQT1MJCQkweDcxMThDCisjZGVmaW5lIERTUEJTSVpFCQkweDcxMTkwCisjZGVmaW5lIERTUEJTVVJGCQkweDcxMTlDCisjZGVmaW5lIERTUEJUSUxFT0ZGCQkweDcxMUE0CisKKy8qIFZCSU9TIHJlZ3MgKi8KKyNkZWZpbmUgVkdBQ05UUkwJCTB4NzE0MDAKKyMgZGVmaW5lIFZHQV9ESVNQX0RJU0FCTEUJCQkoMSA8PCAzMSkKKyMgZGVmaW5lIFZHQV8yWF9NT0RFCQkJCSgxIDw8IDMwKQorIyBkZWZpbmUgVkdBX1BJUEVfQl9TRUxFQ1QJCQkoMSA8PCAyOSkKKworI2VuZGlmIC8qIF9JOTE1X1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNmZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTAsMCArMSw1MDkgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IDIwMDggKGMpIEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8amJhcm5lc0B2aXJ0dW91c2dlZWsub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRVTkdTVEVOIEdSQVBISUNTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitzdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0EpICYgRFBMTF9WQ09fRU5BQkxFKTsKKwllbHNlCisJCXJldHVybiAoSTkxNV9SRUFEKERQTExfQikgJiBEUExMX1ZDT19FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKKwl1MzIgKmFycmF5OworCWludCBpOworCisJaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQorCQlyZXR1cm47CisKKwlpZiAocGlwZSA9PSBQSVBFX0EpCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOworCWVsc2UKKwkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7CisKKwlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJYXJyYXlbaV0gPSBJOTE1X1JFQUQocmVnICsgKGkgPDwgMikpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKKwl1MzIgKmFycmF5OworCWludCBpOworCisJaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQorCQlyZXR1cm47CisKKwlpZiAocGlwZSA9PSBQSVBFX0EpCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOworCWVsc2UKKwkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7CisKKwlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJSTkxNV9XUklURShyZWcgKyAoaSA8PCAyKSwgYXJyYXlbaV0pOworfQorCitzdGF0aWMgdTggaTkxNV9yZWFkX2luZGV4ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTE2IGluZGV4X3BvcnQsIHUxNiBkYXRhX3BvcnQsIHU4IHJlZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9XUklURTgoaW5kZXhfcG9ydCwgcmVnKTsKKwlyZXR1cm4gSTkxNV9SRUFEOChkYXRhX3BvcnQpOworfQorCitzdGF0aWMgdTggaTkxNV9yZWFkX2FyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBzdDAxLCB1OCByZWcsIHUxNiBwYWxldHRlX2VuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9SRUFEOChzdDAxKTsKKwlJOTE1X1dSSVRFOChWR0FfQVJfSU5ERVgsIHBhbGV0dGVfZW5hYmxlIHwgcmVnKTsKKwlyZXR1cm4gSTkxNV9SRUFEOChWR0FfQVJfREFUQV9SRUFEKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV93cml0ZV9hcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgc3QwMSwgdTggcmVnLCB1OCB2YWwsIHUxNiBwYWxldHRlX2VuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9SRUFEOChzdDAxKTsKKwlJOTE1X1dSSVRFOChWR0FfQVJfSU5ERVgsIHBhbGV0dGVfZW5hYmxlIHwgcmVnKTsKKwlJOTE1X1dSSVRFOChWR0FfQVJfREFUQV9XUklURSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV93cml0ZV9pbmRleGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSTkxNV9XUklURTgoaW5kZXhfcG9ydCwgcmVnKTsKKwlJOTE1X1dSSVRFOChkYXRhX3BvcnQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfc2F2ZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKKworCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLworCWRldl9wcml2LT5zYXZlREFDTUFTSyA9IEk5MTVfUkVBRDgoVkdBX0RBQ01BU0spOworCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KKwlJOTE1X1dSSVRFOChWR0FfREFDUlgsIDApOworCS8qIFJlYWQgMyBieXRlcyBvZiBjb2xvciBkYXRhIGZyb20gZWFjaCBpbmRleCAqLworCWZvciAoaSA9IDA7IGkgPCAyNTYgKiAzOyBpKyspCisJCWRldl9wcml2LT5zYXZlREFDREFUQVtpXSA9IEk5MTVfUkVBRDgoVkdBX0RBQ0RBVEEpOworCisJLyogTVNSIGJpdHMgKi8KKwlkZXZfcHJpdi0+c2F2ZU1TUiA9IEk5MTVfUkVBRDgoVkdBX01TUl9SRUFEKTsKKwlpZiAoZGV2X3ByaXYtPnNhdmVNU1IgJiBWR0FfTVNSX0NHQV9NT0RFKSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX0NHQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX0NHQTsKKwkJc3QwMSA9IFZHQV9TVDAxX0NHQTsKKwl9IGVsc2UgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9NREE7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9NREE7CisJCXN0MDEgPSBWR0FfU1QwMV9NREE7CisJfQorCisJLyogQ1JUIGNvbnRyb2xsZXIgcmVncyAqLworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIGNyX2luZGV4LCBjcl9kYXRhLCAweDExLAorCQkJICAgaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSkgJgorCQkJICAgKH4weDgwKSk7CisJZm9yIChpID0gMDsgaSA8PSAweDI0OyBpKyspCisJCWRldl9wcml2LT5zYXZlQ1JbaV0gPQorCQkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgaSk7CisJLyogTWFrZSBzdXJlIHdlIGRvbid0IHR1cm4gb2ZmIENSIGdyb3VwIDAgd3JpdGVzICovCisJZGV2X3ByaXYtPnNhdmVDUlsweDExXSAmPSB+MHg4MDsKKworCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCUk5MTVfUkVBRDgoc3QwMSk7CisJZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCA9IEk5MTVfUkVBRDgoVkdBX0FSX0lOREVYKTsKKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVBUltpXSA9IGk5MTVfcmVhZF9hcihkZXYsIHN0MDEsIGksIDApOworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBkZXZfcHJpdi0+c2F2ZUFSX0lOREVYKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCisJLyogR3JhcGhpY3MgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZUdSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgaSk7CisKKwlkZXZfcHJpdi0+c2F2ZUdSWzB4MTBdID0KKwkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwKTsKKwlkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdID0KKwkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDExKTsKKwlkZXZfcHJpdi0+c2F2ZUdSWzB4MThdID0KKwkJaTkxNV9yZWFkX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4KTsKKworCS8qIFNlcXVlbmNlciByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZVNSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcmVzdG9yZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKKworCS8qIE1TUiBiaXRzICovCisJSTkxNV9XUklURTgoVkdBX01TUl9XUklURSwgZGV2X3ByaXYtPnNhdmVNU1IpOworCWlmIChkZXZfcHJpdi0+c2F2ZU1TUiAmIFZHQV9NU1JfQ0dBX01PREUpIHsKKwkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfQ0dBOworCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfQ0dBOworCQlzdDAxID0gVkdBX1NUMDFfQ0dBOworCX0gZWxzZSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX01EQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX01EQTsKKwkJc3QwMSA9IFZHQV9TVDAxX01EQTsKKwl9CisKKwkvKiBTZXF1ZW5jZXIgcmVnaXN0ZXJzLCBkb24ndCB3cml0ZSBTUjA3ICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSwKKwkJCQkgICBkZXZfcHJpdi0+c2F2ZVNSW2ldKTsKKworCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KKwkvKiBFbmFibGUgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSwgZGV2X3ByaXYtPnNhdmVDUlsweDExXSk7CisJZm9yIChpID0gMDsgaSA8PSAweDI0OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIGNyX2luZGV4LCBjcl9kYXRhLCBpLCBkZXZfcHJpdi0+c2F2ZUNSW2ldKTsKKworCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVncyAqLworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGksCisJCQkJICAgZGV2X3ByaXYtPnNhdmVHUltpXSk7CisKKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwLAorCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDEwXSk7CisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSwKKwkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMV0pOworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgsCisJCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MThdKTsKKworCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCUk5MTVfUkVBRDgoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKKwkJaTkxNV93cml0ZV9hcihkZXYsIHN0MDEsIGksIGRldl9wcml2LT5zYXZlQVJbaV0sIDApOworCUk5MTVfUkVBRDgoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KKwlJOTE1X1dSSVRFOChWR0FfQVJfSU5ERVgsIGRldl9wcml2LT5zYXZlQVJfSU5ERVggfCAweDIwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCisJLyogVkdBIGNvbG9yIHBhbGV0dGUgcmVnaXN0ZXJzICovCisJSTkxNV9XUklURTgoVkdBX0RBQ01BU0ssIGRldl9wcml2LT5zYXZlREFDTUFTSyk7CisJLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLworCUk5MTVfV1JJVEU4KFZHQV9EQUNXWCwgMCk7CisJLyogUmVhZCAzIGJ5dGVzIG9mIGNvbG9yIGRhdGEgZnJvbSBlYWNoIGluZGV4ICovCisJZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkrKykKKwkJSTkxNV9XUklURTgoVkdBX0RBQ0RBVEEsIGRldl9wcml2LT5zYXZlREFDREFUQVtpXSk7CisKK30KKworaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgJmRldl9wcml2LT5zYXZlTEJCKTsKKworCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCAqLworCWRldl9wcml2LT5zYXZlRFNQQVJCID0gSTkxNV9SRUFEKERTUEFSQik7CisKKwkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCisJZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKKwlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7CisJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOworCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7CisJaWYgKElTX0k5NjVHKGRldikpCisJCWRldl9wcml2LT5zYXZlRFBMTF9BX01EID0gSTkxNV9SRUFEKERQTExfQV9NRCk7CisJZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSA9IEk5MTVfUkVBRChIVE9UQUxfQSk7CisJZGV2X3ByaXYtPnNhdmVIQkxBTktfQSA9IEk5MTVfUkVBRChIQkxBTktfQSk7CisJZGV2X3ByaXYtPnNhdmVIU1lOQ19BID0gSTkxNV9SRUFEKEhTWU5DX0EpOworCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOworCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOworCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKKwlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCisJZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7CisJZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOworCWRldl9wcml2LT5zYXZlRFNQQVNJWkUgPSBJOTE1X1JFQUQoRFNQQVNJWkUpOworCWRldl9wcml2LT5zYXZlRFNQQVBPUyA9IEk5MTVfUkVBRChEU1BBUE9TKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFBRERSID0gSTkxNV9SRUFEKERTUEFBRERSKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZURTUEFTVVJGID0gSTkxNV9SRUFEKERTUEFTVVJGKTsKKwkJZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiA9IEk5MTVfUkVBRChEU1BBVElMRU9GRik7CisJfQorCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9BKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVBU1RBVCA9IEk5MTVfUkVBRChQSVBFQVNUQVQpOworCisJLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLworCWRldl9wcml2LT5zYXZlUElQRUJDT05GID0gSTkxNV9SRUFEKFBJUEVCQ09ORik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyA9IEk5MTVfUkVBRChQSVBFQlNSQyk7CisJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKEZQQjApOworCWRldl9wcml2LT5zYXZlRlBCMSA9IEk5MTVfUkVBRChGUEIxKTsKKwlkZXZfcHJpdi0+c2F2ZURQTExfQiA9IEk5MTVfUkVBRChEUExMX0IpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCA9IEk5MTVfUkVBRChEUExMX0JfTUQpOworCWRldl9wcml2LT5zYXZlSFRPVEFMX0IgPSBJOTE1X1JFQUQoSFRPVEFMX0IpOworCWRldl9wcml2LT5zYXZlSEJMQU5LX0IgPSBJOTE1X1JFQUQoSEJMQU5LX0IpOworCWRldl9wcml2LT5zYXZlSFNZTkNfQiA9IEk5MTVfUkVBRChIU1lOQ19CKTsKKwlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CID0gSTkxNV9SRUFEKFZUT1RBTF9CKTsKKwlkZXZfcHJpdi0+c2F2ZVZCTEFOS19CID0gSTkxNV9SRUFEKFZCTEFOS19CKTsKKwlkZXZfcHJpdi0+c2F2ZVZTWU5DX0IgPSBJOTE1X1JFQUQoVlNZTkNfQik7CisJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWRldl9wcml2LT5zYXZlRFNQQkNOVFIgPSBJOTE1X1JFQUQoRFNQQkNOVFIpOworCWRldl9wcml2LT5zYXZlRFNQQlNUUklERSA9IEk5MTVfUkVBRChEU1BCU1RSSURFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJTSVpFID0gSTkxNV9SRUFEKERTUEJTSVpFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJQT1MgPSBJOTE1X1JFQUQoRFNQQlBPUyk7CisJZGV2X3ByaXYtPnNhdmVEU1BCQUREUiA9IEk5MTVfUkVBRChEU1BCQUREUik7CisJaWYgKElTX0k5NjVHTShkZXYpIHx8IElTX0dNNDUoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZURTUEJTVVJGID0gSTkxNV9SRUFEKERTUEJTVVJGKTsKKwkJZGV2X3ByaXYtPnNhdmVEU1BCVElMRU9GRiA9IEk5MTVfUkVBRChEU1BCVElMRU9GRik7CisJfQorCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9CKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVCU1RBVCA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCisJLyogQ1JUIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKEFEUEEpOworCisJLyogTFZEUyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKKwlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOworCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOworCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7CisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOworCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUFBfRElWSVNPUik7CisKKwkvKiBGSVhNRTogc2F2ZSBUViAmIFNEVk8gc3RhdGUgKi8KKworCS8qIEZCQyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFID0gSTkxNV9SRUFEKEZCQ19DRkJfQkFTRSk7CisJZGV2X3ByaXYtPnNhdmVGQkNfTExfQkFTRSA9IEk5MTVfUkVBRChGQkNfTExfQkFTRSk7CisJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKKwlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MKTsKKworCS8qIEludGVycnVwdCBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlSUlSID0gSTkxNV9SRUFEKElJUik7CisJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKKwlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCisJLyogVkdBIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVWR0EwID0gSTkxNV9SRUFEKFZHQTApOworCWRldl9wcml2LT5zYXZlVkdBMSA9IEk5MTVfUkVBRChWR0ExKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQV9QRCA9IEk5MTVfUkVBRChWR0FfUEQpOworCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOworCisJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVEX1NUQVRFID0gSTkxNV9SRUFEKERfU1RBVEUpOworCWRldl9wcml2LT5zYXZlQ0dfMkRfRElTID0gSTkxNV9SRUFEKENHXzJEX0RJUyk7CisKKwkvKiBDYWNoZSBtb2RlIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgPSBJOTE1X1JFQUQoQ0FDSEVfTU9ERV8wKTsKKworCS8qIE1lbW9yeSBBcmJpdHJhdGlvbiBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFID0gSTkxNV9SRUFEKE1JX0FSQl9TVEFURSk7CisKKwkvKiBTY3JhdGNoIHNwYWNlICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJZGV2X3ByaXYtPnNhdmVTV0YwW2ldID0gSTkxNV9SRUFEKFNXRjAwICsgKGkgPDwgMikpOworCQlkZXZfcHJpdi0+c2F2ZVNXRjFbaV0gPSBJOTE1X1JFQUQoU1dGMTAgKyAoaSA8PCAyKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWRldl9wcml2LT5zYXZlU1dGMltpXSA9IEk5MTVfUkVBRChTV0YzMCArIChpIDw8IDIpKTsKKworCWk5MTVfc2F2ZV92Z2EoZGV2KTsKKworCXJldHVybiAwOworfQorCitpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgZGV2X3ByaXYtPnNhdmVMQkIpOworCisJSTkxNV9XUklURShEU1BBUkIsIGRldl9wcml2LT5zYXZlRFNQQVJCKTsKKworCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KKwkvKiBQcmltZSB0aGUgY2xvY2sgKi8KKwlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0EgJiBEUExMX1ZDT19FTkFCTEUpIHsKKwkJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BICYKKwkJCSAgIH5EUExMX1ZDT19FTkFCTEUpOworCQlEUk1fVURFTEFZKDE1MCk7CisJfQorCUk5MTVfV1JJVEUoRlBBMCwgZGV2X3ByaXYtPnNhdmVGUEEwKTsKKwlJOTE1X1dSSVRFKEZQQTEsIGRldl9wcml2LT5zYXZlRlBBMSk7CisJLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCisJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKKwlEUk1fVURFTEFZKDE1MCk7CisJaWYgKElTX0k5NjVHKGRldikpCisJCUk5MTVfV1JJVEUoRFBMTF9BX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCk7CisJRFJNX1VERUxBWSgxNTApOworCisJLyogUmVzdG9yZSBtb2RlICovCisJSTkxNV9XUklURShIVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSk7CisJSTkxNV9XUklURShIQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVIQkxBTktfQSk7CisJSTkxNV9XUklURShIU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZUhTWU5DX0EpOworCUk5MTVfV1JJVEUoVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVlRPVEFMX0EpOworCUk5MTVfV1JJVEUoVkJMQU5LX0EsIGRldl9wcml2LT5zYXZlVkJMQU5LX0EpOworCUk5MTVfV1JJVEUoVlNZTkNfQSwgZGV2X3ByaXYtPnNhdmVWU1lOQ19BKTsKKwlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOworCisJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCisJSTkxNV9XUklURShEU1BBU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BBU0laRSk7CisJSTkxNV9XUklURShEU1BBUE9TLCBkZXZfcHJpdi0+c2F2ZURTUEFQT1MpOworCUk5MTVfV1JJVEUoUElQRUFTUkMsIGRldl9wcml2LT5zYXZlUElQRUFTUkMpOworCUk5MTVfV1JJVEUoRFNQQUFERFIsIGRldl9wcml2LT5zYXZlRFNQQUFERFIpOworCUk5MTVfV1JJVEUoRFNQQVNUUklERSwgZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlJOTE1X1dSSVRFKERTUEFTVVJGLCBkZXZfcHJpdi0+c2F2ZURTUEFTVVJGKTsKKwkJSTkxNV9XUklURShEU1BBVElMRU9GRiwgZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRik7CisJfQorCisJSTkxNV9XUklURShQSVBFQUNPTkYsIGRldl9wcml2LT5zYXZlUElQRUFDT05GKTsKKworCWk5MTVfcmVzdG9yZV9wYWxldHRlKGRldiwgUElQRV9BKTsKKwkvKiBFbmFibGUgdGhlIHBsYW5lICovCisJSTkxNV9XUklURShEU1BBQ05UUiwgZGV2X3ByaXYtPnNhdmVEU1BBQ05UUik7CisJSTkxNV9XUklURShEU1BBQUREUiwgSTkxNV9SRUFEKERTUEFBRERSKSk7CisKKwkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCisJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9CICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCisJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKKwkJRFJNX1VERUxBWSgxNTApOworCX0KKwlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7CisJSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOworCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLworCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQik7CisJRFJNX1VERUxBWSgxNTApOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKERQTExfQl9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0JfTUQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIFJlc3RvcmUgbW9kZSAqLworCUk5MTVfV1JJVEUoSFRPVEFMX0IsIGRldl9wcml2LT5zYXZlSFRPVEFMX0IpOworCUk5MTVfV1JJVEUoSEJMQU5LX0IsIGRldl9wcml2LT5zYXZlSEJMQU5LX0IpOworCUk5MTVfV1JJVEUoSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVIU1lOQ19CKTsKKwlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKKwlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKKwlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7CisJSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKworCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLworCUk5MTVfV1JJVEUoRFNQQlNJWkUsIGRldl9wcml2LT5zYXZlRFNQQlNJWkUpOworCUk5MTVfV1JJVEUoRFNQQlBPUywgZGV2X3ByaXYtPnNhdmVEU1BCUE9TKTsKKwlJOTE1X1dSSVRFKFBJUEVCU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDKTsKKwlJOTE1X1dSSVRFKERTUEJBRERSLCBkZXZfcHJpdi0+c2F2ZURTUEJBRERSKTsKKwlJOTE1X1dSSVRFKERTUEJTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQlNUUklERSk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShEU1BCU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BCU1VSRik7CisJCUk5MTVfV1JJVEUoRFNQQlRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYpOworCX0KKworCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7CisKKwlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7CisJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCUk5MTVfV1JJVEUoRFNQQkNOVFIsIGRldl9wcml2LT5zYXZlRFNQQkNOVFIpOworCUk5MTVfV1JJVEUoRFNQQkFERFIsIEk5MTVfUkVBRChEU1BCQUREUikpOworCisJLyogQ1JUIHN0YXRlICovCisJSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOworCisJLyogTFZEUyBzdGF0ZSAqLworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIpOworCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQorCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7CisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MKTsKKworCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7CisJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJSTkxNV9XUklURShQUF9PTl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT05fREVMQVlTKTsKKwlJOTE1X1dSSVRFKFBQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7CisJSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOworCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MKTsKKworCS8qIEZJWE1FOiByZXN0b3JlIFRWICYgU0RWTyBzdGF0ZSAqLworCisJLyogRkJDIGluZm8gKi8KKwlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOworCUk5MTVfV1JJVEUoRkJDX0xMX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UpOworCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wyLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMik7CisJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisKKwkvKiBWR0Egc3RhdGUgKi8KKwlJOTE1X1dSSVRFKFZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwlJOTE1X1dSSVRFKFZHQTAsIGRldl9wcml2LT5zYXZlVkdBMCk7CisJSTkxNV9XUklURShWR0ExLCBkZXZfcHJpdi0+c2F2ZVZHQTEpOworCUk5MTVfV1JJVEUoVkdBX1BELCBkZXZfcHJpdi0+c2F2ZVZHQV9QRCk7CisJRFJNX1VERUxBWSgxNTApOworCisJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCisJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKKwlJOTE1X1dSSVRFIChDR18yRF9ESVMsIGRldl9wcml2LT5zYXZlQ0dfMkRfRElTKTsKKworCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KKwlJOTE1X1dSSVRFIChDQUNIRV9NT0RFXzAsIGRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wIHwgMHhmZmZmMDAwMCk7CisKKwkvKiBNZW1vcnkgYXJiaXRyYXRpb24gc3RhdGUgKi8KKwlJOTE1X1dSSVRFIChNSV9BUkJfU1RBVEUsIGRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFIHwgMHhmZmZmMDAwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlJOTE1X1dSSVRFKFNXRjAwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMFtpXSk7CisJCUk5MTVfV1JJVEUoU1dGMTAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YxW2krN10pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlJOTE1X1dSSVRFKFNXRjMwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMltpXSk7CisKKwlpOTE1X3Jlc3RvcmVfdmdhKGRldik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYwppbmRleCA1NTcyOTM5Li45N2VlNTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYwpAQCAtNDUsMTUgKzQ1LDE2IEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9QQ0lfRE1BIHwKLQkgICAgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQgfAotCSAgICBEUklWRVJfSVJRX1ZCTCwKKwkgICAgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQsCiAJLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX21nYV9idWZfcHJpdl90KSwKIAkubG9hZCA9IG1nYV9kcml2ZXJfbG9hZCwKIAkudW5sb2FkID0gbWdhX2RyaXZlcl91bmxvYWQsCiAJLmxhc3RjbG9zZSA9IG1nYV9kcml2ZXJfbGFzdGNsb3NlLAogCS5kbWFfcXVpZXNjZW50ID0gbWdhX2RyaXZlcl9kbWFfcXVpZXNjZW50LAogCS5kZXZpY2VfaXNfYWdwID0gbWdhX2RyaXZlcl9kZXZpY2VfaXNfYWdwLAotCS52Ymxhbmtfd2FpdCA9IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQsCisJLmdldF92YmxhbmtfY291bnRlciA9IG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBtZ2FfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtZ2FfZGlzYWJsZV92YmxhbmssCiAJLmlycV9wcmVpbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKIAkuaXJxX3Bvc3RpbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwsCkBAIC02NCwyMCArNjUsMjAgQEAKIAkuaW9jdGxzID0gbWdhX2lvY3RscywKIAkuZG1hX2lvY3RsID0gbWdhX2RtYV9idWZmZXJzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub3BlbiA9IGRybV9vcGVuLAorCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS5tbWFwID0gZHJtX21tYXAsCisJCS5wb2xsID0gZHJtX3BvbGwsCisJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJIC5jb21wYXRfaW9jdGwgPSBtZ2FfY29tcGF0X2lvY3RsLAorCQkuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCQkgfSwKKwl9LAogCS5wY2lfZHJpdmVyID0gewotCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLmlkX3RhYmxlID0gcGNpaWRsaXN0LAogCX0sCiAKIAkubmFtZSA9IERSSVZFUl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAppbmRleCBmNmViZDI0Li44ODI1N2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTIwLDYgKzEyMCw3IEBACiAJdTMyIGNsZWFyX2NtZDsKIAl1MzIgbWFjY2VzczsKIAorCWF0b21pY190IHZibF9yZWNlaXZlZDsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgdmJsYW5rcyByZWNlaXZlZC4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBmZW5jZV9xdWV1ZTsKIAlhdG9taWNfdCBsYXN0X2ZlbmNlX3JldGlyZWQ7CiAJdTMyIG5leHRfZmVuY2VfdG9fcG9zdDsKQEAgLTE4MSwxMSArMTgyLDE0IEBACiBleHRlcm4gaW50IG1nYV93YXJwX2luaXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKIAkJCQkvKiBtZ2FfaXJxLmMgKi8KK2V4dGVybiBpbnQgbWdhX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHZvaWQgbWdhX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgbWdhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IG1nYV9kcml2ZXJfZmVuY2Vfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CiBleHRlcm4gaW50IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwogZXh0ZXJuIGlycXJldHVybl90IG1nYV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gbG9uZyBtZ2FfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jCmluZGV4IDkzMDJjYjguLmJhYjQyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jCkBAIC0xLDUgKzEsNiBAQAogLyogbWdhX2lycS5jIC0tIElSUSBoYW5kbGluZyBmb3IgcmFkZW9uIC0qLSBsaW51eC1jIC0qLQotICoKKyAqLworLyoKICAqIENvcHlyaWdodCAoQykgVGhlIFdlYXRoZXIgQ2hhbm5lbCwgSW5jLiAgMjAwMi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhlIFdlYXRoZXIgQ2hhbm5lbCAoVE0pIGZ1bmRlZCBUdW5nc3RlbiBHcmFwaGljcyB0byBkZXZlbG9wIHRoZQpAQCAtMzUsNiArMzYsMTggQEAKICNpbmNsdWRlICJtZ2FfZHJtLmgiCiAjaW5jbHVkZSAibWdhX2Rydi5oIgogCit1MzIgbWdhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwljb25zdCBkcm1fbWdhX3ByaXZhdGVfdCAqY29uc3QgZGV2X3ByaXYgPQorCQkoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKK30KKworCiBpcnFyZXR1cm5fdCBtZ2FfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKQEAgLTQ3LDkgKzYwLDggQEAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCiAJaWYgKHN0YXR1cyAmIE1HQV9WTElORVBFTikgewogCQlNR0FfV1JJVEUoTUdBX0lDTEVBUiwgTUdBX1ZMSU5FSUNMUik7Ci0JCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWUpOwotCQlkcm1fdmJsX3NlbmRfc2lnbmFscyhkZXYpOworCQlhdG9taWNfaW5jKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKKwkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaGFuZGxlZCA9IDE7CiAJfQogCkBAIC01OCw2ICs3MCw3IEBACiAJCWNvbnN0IHUzMiBwcmltX3N0YXJ0ID0gTUdBX1JFQUQoTUdBX1BSSU1BRERSRVNTKTsKIAkJY29uc3QgdTMyIHByaW1fZW5kID0gTUdBX1JFQUQoTUdBX1BSSU1FTkQpOwogCisKIAkJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIE1HQV9TT0ZUUkFQSUNMUik7CiAKIAkJLyogSW4gYWRkaXRpb24gdG8gY2xlYXJpbmcgdGhlIGludGVycnVwdC1wZW5kaW5nIGJpdCwgd2UKQEAgLTcyLDI4ICs4NSwzOSBAQAogCQloYW5kbGVkID0gMTsKIAl9CiAKLQlpZiAoaGFuZGxlZCkgeworCWlmIChoYW5kbGVkKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotaW50IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCitpbnQgbWdhX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7Ci0JdW5zaWduZWQgaW50IGN1cl92Ymxhbms7Ci0JaW50IHJldCA9IDA7CisJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLQkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgotCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycwotCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLgorCWlmIChjcnRjICE9IDApIHsKKwkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJICBjcnRjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOworCXJldHVybiAwOworfQorCisKK3ZvaWQgbWdhX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWlmIChjcnRjICE9IDApIHsKKwkJRFJNX0VSUk9SKCJ0cmllZCB0byBkaXNhYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCSAgY3J0Yyk7CisJfQorCisJLyogRG8gKk5PVCogZGlzYWJsZSB0aGUgdmVydGljYWwgcmVmcmVzaCBpbnRlcnJ1cHQuICBNR0EgZG9lc24ndCBoYXZlCisJICogYSBuaWNlIGhhcmR3YXJlIGNvdW50ZXIgdGhhdCB0cmFja3MgdGhlIG51bWJlciBvZiByZWZyZXNoZXMgd2hlbgorCSAqIHRoZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQsIGFuZCB0aGUga2VybmVsIGRvZXNuJ3Qga25vdyB0aGUgcmVmcmVzaAorCSAqIHJhdGUgdG8gY2FsY3VsYXRlIGFuIGVzdGltYXRlLgogCSAqLwotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSkKLQkJICAgICAgLSAqc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkpOwotCi0JKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKLQotCXJldHVybiByZXQ7CisJLyogTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOyAqLwogfQogCiBpbnQgbWdhX2RyaXZlcl9mZW5jZV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQpAQCAtMTI1LDE0ICsxNDksMjIgQEAKIAlNR0FfV1JJVEUoTUdBX0lDTEVBUiwgfjApOwogfQogCi12b2lkIG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlEUk1fSU5JVF9XQUlUUVVFVUUoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSk7CiAKLQkvKiBUdXJuIG9uIHZlcnRpY2FsIGJsYW5rIGludGVycnVwdCBhbmQgc29mdCB0cmFwIGludGVycnVwdC4gKi8KLQlNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1ZMSU5FSUVOIHwgTUdBX1NPRlRSQVBFTik7CisJLyogVHVybiBvbiBzb2Z0IHRyYXAgaW50ZXJydXB0LiAgVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyBhcmUgZW5hYmxlZAorCSAqIGluIG1nYV9lbmFibGVfdmJsYW5rLgorCSAqLworCU1HQV9XUklURShNR0FfSUVOLCBNR0FfU09GVFJBUEVOKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYwppbmRleCBkM2Y4YWFkLi5iNzEwZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgTUdBX1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkZXYtPmlycTsKKwkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwogCQlicmVhazsKIAljYXNlIE1HQV9QQVJBTV9DQVJEX1RZUEU6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmNoaXBzZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwppbmRleCA2MTA4ZTc1Li4zMjY1ZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKQEAgLTQzLDEyICs0MywxMyBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8Ci0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9yMTI4X2J1Zl9wcml2X3QpLAogCS5wcmVjbG9zZSA9IHIxMjhfZHJpdmVyX3ByZWNsb3NlLAogCS5sYXN0Y2xvc2UgPSByMTI4X2RyaXZlcl9sYXN0Y2xvc2UsCi0JLnZibGFua193YWl0ID0gcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQsCisJLmdldF92YmxhbmtfY291bnRlciA9IHIxMjhfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gcjEyOF9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IHIxMjhfZGlzYWJsZV92YmxhbmssCiAJLmlycV9wcmVpbnN0YWxsID0gcjEyOF9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwsCkBAIC01OSwyMSArNjAsMjAgQEAKIAkuaW9jdGxzID0gcjEyOF9pb2N0bHMsCiAJLmRtYV9pb2N0bCA9IHIxMjhfY2NlX2J1ZmZlcnMsCiAJLmZvcHMgPSB7Ci0JCSAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJIC5vcGVuID0gZHJtX29wZW4sCi0JCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAotCQkgLm1tYXAgPSBkcm1fbW1hcCwKLQkJIC5wb2xsID0gZHJtX3BvbGwsCi0JCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gZHJtX29wZW4sCisJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLm1tYXAgPSBkcm1fbW1hcCwKKwkJLnBvbGwgPSBkcm1fcG9sbCwKKwkJLmZhc3luYyA9IGRybV9mYXN5bmMsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCQkgLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAorCQkuY29tcGF0X2lvY3RsID0gcjEyOF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIAl9LAotCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCSAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCiAJfSwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCkBAIC04Nyw2ICs4Nyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCByMTI4X2luaXQodm9pZCkKIHsKIAlkcml2ZXIubnVtX2lvY3RscyA9IHIxMjhfbWF4X2lvY3RsOworCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaAppbmRleCAwMTExMDVlLi41ODk4YjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKQEAgLTI5LDcgKzI5LDcgQEAKICAqICAgIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgogICogICAgS2V2aW4gRS4gTWFydGluIDxtYXJ0aW5AdmFsaW51eC5jb20+CiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+Ci0gKiAgICBNaWNoZWwgRMOkbnplciA8ZGFlbnplcm1Ac3R1ZGVudC5ldGh6LmNoPgorICogICAgTWljaGVsIETvv716ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4KICAqLwogCiAjaWZuZGVmIF9fUjEyOF9EUlZfSF9fCkBAIC05Nyw2ICs5Nyw4IEBACiAJdTMyIGNydGNfb2Zmc2V0OwogCXUzMiBjcnRjX29mZnNldF9jbnRsOwogCisJYXRvbWljX3QgdmJsX3JlY2VpdmVkOworCiAJdTMyIGNvbG9yX2ZtdDsKIAl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBmcm9udF9waXRjaDsKQEAgLTE0OSwxMSArMTUxLDEyIEBACiBleHRlcm4gaW50IHIxMjhfZG9fY2NlX2lkbGUoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogZXh0ZXJuIGludCByMTI4X2RvX2NsZWFudXBfY2NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIAotZXh0ZXJuIGludCByMTI4X2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7Ci0KK2V4dGVybiBpbnQgcjEyOF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIHIxMjhfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHUzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMKaW5kZXggYzc2ZmRjYS4uZDczNDkwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jCkBAIC0zNSw2ICszNSwxNiBAQAogI2luY2x1ZGUgInIxMjhfZHJtLmgiCiAjaW5jbHVkZSAicjEyOF9kcnYuaCIKIAordTMyIHIxMjhfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWNvbnN0IGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGNydGMgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworfQorCiBpcnFyZXR1cm5fdCByMTI4X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CkBAIC00NiwzMCArNTYsMzggQEAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCiAJaWYgKHN0YXR1cyAmIFIxMjhfQ1JUQ19WQkxBTktfSU5UKSB7CiAJCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX1NUQVRVUywgUjEyOF9DUlRDX1ZCTEFOS19JTlRfQUspOwotCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAJcmV0dXJuIElSUV9OT05FOwogfQogCi1pbnQgcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCitpbnQgcjEyOF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjEyOF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlpZiAoY3J0YyAhPSAwKQorCQlEUk1fRVJST1IoIiVzOiAgYmFkIGNydGMgJWRcbiIsIF9fZnVuY19fLCBjcnRjKTsKKworCS8qCisJICogRklYTUU6IGltcGxlbWVudCBwcm9wZXIgaW50ZXJydXB0IGRpc2FibGUgYnkgdXNpbmcgdGhlIHZibGFuaworCSAqIGNvdW50ZXIgcmVnaXN0ZXIgKGlmIGF2YWlsYWJsZSkKKwkgKgorCSAqIFIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsCisJICogICAgICAgICAgICBSMTI4X1JFQUQoUjEyOF9HRU5fSU5UX0NOVEwpICYgflIxMjhfQ1JUQ19WQkxBTktfSU5UX0VOKTsKIAkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpAQCAtODIsMTIgKzEwMCw5IEBACiAJUjEyOF9XUklURShSMTI4X0dFTl9JTlRfU1RBVFVTLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9BSyk7CiB9CiAKLXZvaWQgcjEyOF9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3IxMjhfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQkvKiBUdXJuIG9uIFZCTCBpbnRlcnJ1cHQgKi8KLQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CisJcmV0dXJuIGRybV92YmxhbmtfaW5pdChkZXYsIDEpOwogfQogCiB2b2lkIHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKaW5kZXggNTFhOWFmYy4uZjdhNWI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYwpAQCAtMTYyOSw3ICsxNjI5LDcgQEAKIAogCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CiAJY2FzZSBSMTI4X1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkZXYtPmlycTsKKwkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCmluZGV4IDI0OGFiNGEuLjU5YTIxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwpAQCAtNzEsNyArNzEsOCBAQAogCiBzdGF0aWMgdTMyIElHUF9SRUFEX01DSU5EKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCiB7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCXJldHVybiBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBhZGRyKTsKIAllbHNlCiAJCXJldHVybiBSUzQ4MF9SRUFEX01DSU5EKGRldl9wcml2LCBhZGRyKTsKQEAgLTgyLDcgKzgzLDggQEAKIAogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSVjUxNV9NQ19GQl9MT0NBVElPTik7Ci0JZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJcmV0dXJuIFJTNjkwX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjkwX01DX0ZCX0xPQ0FUSU9OKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCXJldHVybiBSNTAwX1JFQURfTUNJTkQoZGV2X3ByaXYsIFI1MjBfTUNfRkJfTE9DQVRJT04pOwpAQCAtOTQsNyArOTYsOCBAQAogewogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwotCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCVJTNjkwX1dSSVRFX01DSU5EKFJTNjkwX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID4gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwpAQCAtMTA2LDcgKzEwOSw4IEBACiB7CiAJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKLQllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID4gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7CkBAIC0xMjIsMTUgKzEyNiwxNyBAQAogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KSB7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgewogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOwogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CiAJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpIHsKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSB7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQwMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0ODApKSB7CiAJCVJBREVPTl9XUklURShSQURFT05fQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKLQkJUkFERU9OX1dSSVRFKFJTNDgwX0FHUF9CQVNFXzIsIDApOworCQlSQURFT05fV1JJVEUoUlM0ODBfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSB7CiAJCVJBREVPTl9XUklURShSQURFT05fQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjIwMCkKQEAgLTM0Nyw2ICszNTMsNyBAQAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SMzUwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjM1MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYzODApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjMwMCBNaWNyb2NvZGVcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTM1Niw2ICszNjMsNyBAQAogCQkJCSAgICAgUjMwMF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SNDIzKSB8fAogCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjQxMCkpIHsKIAkJRFJNX0lORk8oIkxvYWRpbmcgUjQwMCBNaWNyb2NvZGVcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTM2NCw4ICszNzIsOSBAQAogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCiAJCQkJICAgICBSNDIwX2NwX21pY3JvY29kZVtpXVswXSk7CiAJCX0KLQl9IGVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHsKLQkJRFJNX0lORk8oIkxvYWRpbmcgUlM2OTAgTWljcm9jb2RlXG4iKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM2OTAvUlM3NDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKIAkJCQkgICAgIFJTNjkwX2NwX21pY3JvY29kZVtpXVsxXSk7CkBAIC02MjYsOCArNjM1LDYgQEAKIAkJICAgICBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcpOwogI2VuZGlmCiAKLQkvKiBTdGFydCB3aXRoIGFzc3VtaW5nIHRoYXQgd3JpdGViYWNrIGRvZXNuJ3Qgd29yayAqLwotCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc2NyYXRjaCByZWdpc3RlciBwb2ludGVyLiAgVGhpcyB3aWxsIGNhdXNlCiAJICogdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgdmFsdWVzIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIG1lbW9yeQpAQCAtNjQ2LDggKzY1MywxOCBAQAogCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9VTVNLLCAweDcpOwogCiAJLyogVHVybiBvbiBidXMgbWFzdGVyaW5nICovCi0JdG1wID0gUkFERU9OX1JFQUQoUkFERU9OX0JVU19DTlRMKSAmIH5SQURFT05fQlVTX01BU1RFUl9ESVM7Ci0JUkFERU9OX1dSSVRFKFJBREVPTl9CVVNfQ05UTCwgdG1wKTsKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKKwkJLyogcnM0MDAsIHJzNjkwL3JzNzQwICovCisJCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM0MDBfQlVTX01BU1RFUl9ESVM7CisJCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJfSBlbHNlIGlmICghKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMzgwKSB8fAorCQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjQyMykpKSB7CisJCS8qIHIxeHgsIHIyeHgsIHIzMDAsIHIodikzNTAsIHI0MjAvcjQ4MSwgcnM0ODAgKi8KKwkJdG1wID0gUkFERU9OX1JFQUQoUkFERU9OX0JVU19DTlRMKSAmIH5SQURFT05fQlVTX01BU1RFUl9ESVM7CisJCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJfSAvKiBQQ0lFIGNhcmRzIGFwcGVhcnMgdG8gbm90IG5lZWQgdGhpcyAqLwogCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgPSBkZXZfcHJpdi0+c2NyYXRjaFswXSA9IDA7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwpAQCAtNjc0LDYgKzY5MSw5IEBACiB7CiAJdTMyIHRtcDsKIAorCS8qIFN0YXJ0IHdpdGggYXNzdW1pbmcgdGhhdCB3cml0ZWJhY2sgZG9lc24ndCB3b3JrICovCisJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisKIAkvKiBXcml0ZWJhY2sgZG9lc24ndCBzZWVtIHRvIHdvcmsgZXZlcnl3aGVyZSwgdGVzdCBpdCBoZXJlIGFuZCBwb3NzaWJseQogCSAqIGVuYWJsZSBpdCBpZiBpdCBhcHBlYXJzIHRvIHdvcmsKIAkgKi8KQEAgLTcxOSw3ICs3MzksOCBAQAogCQkJICBkZXZfcHJpdi0+Z2FydF9zaXplKTsKIAogCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNDgwX01DX01JU0NfQ05UTCk7Ci0JCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCQlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCQlJR1BfV1JJVEVfTUNJTkQoUlM0ODBfTUNfTUlTQ19DTlRMLCAoUlM0ODBfR0FSVF9JTkRFWF9SRUdfRU4gfAogCQkJCQkJCSAgICAgUlM2OTBfQkxPQ0tfR0ZYX0QzX0VOKSk7CiAJCWVsc2UKQEAgLTgxMiw2ICs4MzMsNyBAQAogCXUzMiB0bXA7CiAKIAlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSB8fAogCSAgICAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUEdBUlQpKSB7CiAJCXJhZGVvbl9zZXRfaWdwZ2FydChkZXZfcHJpdiwgb24pOwogCQlyZXR1cm47CkBAIC0xMjg2LDcgKzEzMDgsNyBAQAogCXJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYpOwogCiAJcmFkZW9uX2RvX2VuZ2luZV9yZXNldChkZXYpOwotCXJhZGVvbl9lbmFibGVfaW50ZXJydXB0KGRldik7CisJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CiAKIAlEUk1fREVCVUcoInJhZGVvbl9kb19yZXN1bWVfY3AoKSBjb21wbGV0ZVxuIik7CiAKQEAgLTE3MDgsNiArMTczMCw3IEBACiAJY2FzZSBDSElQX1IzMDA6CiAJY2FzZSBDSElQX1IzNTA6CiAJY2FzZSBDSElQX1I0MjA6CisJY2FzZSBDSElQX1I0MjM6CiAJY2FzZSBDSElQX1JWNDEwOgogCWNhc2UgQ0hJUF9SVjUxNToKIAljYXNlIENISVBfUjUyMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNjM3YmQ3Zi4uNzFhZjc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTUyLDYgKzUyLDI4IEBACiAJCSAgICAgICAgInIzMDAiKSk7CiB9CiAKK3N0YXRpYyBpbnQgcmFkZW9uX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBSZXN0b3JlIGludGVycnVwdCByZWdpc3RlcnMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCBkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcpOworCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJcmFkZW9uX1BDSV9JRFMKIH07CkBAIC01OSw4ICs4MSw3IEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9QQ0lfRE1BIHwgRFJJVkVSX1NHIHwKLQkgICAgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0lSUV9TSEFSRUQgfAotCSAgICBEUklWRVJfSVJRX1ZCTCB8IERSSVZFUl9JUlFfVkJMMiwKKwkgICAgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0lSUV9TSEFSRUQsCiAJLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX3JhZGVvbl9idWZfcHJpdl90KSwKIAkubG9hZCA9IHJhZGVvbl9kcml2ZXJfbG9hZCwKIAkuZmlyc3RvcGVuID0gcmFkZW9uX2RyaXZlcl9maXJzdG9wZW4sCkBAIC02OSw4ICs5MCwxMSBAQAogCS5wb3N0Y2xvc2UgPSByYWRlb25fZHJpdmVyX3Bvc3RjbG9zZSwKIAkubGFzdGNsb3NlID0gcmFkZW9uX2RyaXZlcl9sYXN0Y2xvc2UsCiAJLnVubG9hZCA9IHJhZGVvbl9kcml2ZXJfdW5sb2FkLAotCS52Ymxhbmtfd2FpdCA9IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQsCi0JLnZibGFua193YWl0MiA9IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQyLAorCS5zdXNwZW5kID0gcmFkZW9uX3N1c3BlbmQsCisJLnJlc3VtZSA9IHJhZGVvbl9yZXN1bWUsCisJLmdldF92YmxhbmtfY291bnRlciA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSByYWRlb25fZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSByYWRlb25fZGlzYWJsZV92YmxhbmssCiAJLmRyaV9saWJyYXJ5X25hbWUgPSBkcmlfbGlicmFyeV9uYW1lLAogCS5pcnFfcHJlaW5zdGFsbCA9IHJhZGVvbl9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCAwOTkzODE2Li40ZGJiODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMTIyLDkgKzEyMiwxMiBAQAogCUNISVBfUlYzNTAsCiAJQ0hJUF9SVjM4MCwKIAlDSElQX1I0MjAsCisJQ0hJUF9SNDIzLAogCUNISVBfUlY0MTAsCisJQ0hJUF9SUzQwMCwKIAlDSElQX1JTNDgwLAogCUNISVBfUlM2OTAsCisJQ0hJUF9SUzc0MCwKIAlDSElQX1JWNTE1LAogCUNISVBfUjUyMCwKIAlDSElQX1JWNTMwLApAQCAtMzc4LDE3ICszODEsMTcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKIAogCQkJCS8qIHJhZGVvbl9pcnEuYyAqLworZXh0ZXJuIHZvaWQgcmFkZW9uX2lycV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIG1hc2ssIGludCBzdGF0ZSk7CiBleHRlcm4gaW50IHJhZGVvbl9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IHJhZGVvbl9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKIGV4dGVybiB2b2lkIHJhZGVvbl9kb19yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB1MzIgcmFkZW9uX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IHJhZGVvbl9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgcmFkZW9uX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCByYWRlb25fdmJsYW5rX2NydGNfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMzk3LDE5ICs0MDAsMjIgQEAKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9maXJzdG9wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICogZmlscCk7CitleHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fZmlsZSAqIGZpbHBfcHJpdik7CitleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGxvbmcgcmFkZW9uX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIHIzMDBfY21kYnVmLmMgKi8KIGV4dGVybiB2b2lkIHIzMDBfaW5pdF9yZWdfZmxhZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgcjMwMF9kb19jcF9jbWRidWYoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCitleHRlcm4gaW50IHIzMDBfZG9fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJICAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKiBjbWRidWYpOworCQkJICAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1Zik7CiAKIC8qIEZsYWdzIGZvciBzdGF0cy5ib3hlcwogICovCkBAIC00MzQsOCArNDQwLDMxIEBACiAjCWRlZmluZSBSQURFT05fU0NJU1NPUl8xX0VOQUJMRQkJKDEgPDwgMjkpCiAjCWRlZmluZSBSQURFT05fU0NJU1NPUl8yX0VOQUJMRQkJKDEgPDwgMzApCiAKKy8qCisgKiBQQ0lFIHJhZGVvbnMgKHJ2MzcwL3J2MzgwLCBydjQxMCwgcjQyMy9yNDMwL3I0ODAsIHI1eHgpCisgKiBkb24ndCBoYXZlIGFuIGV4cGxpY2l0IGJ1cyBtYXN0ZXJpbmcgZGlzYWJsZSBiaXQuICBJdCdzIGhhbmRsZWQKKyAqIGJ5IHRoZSBQQ0kgRC1zdGF0ZXMuICBQTUlfQk1fRElTIGRpc2FibGVzIEQtc3RhdGUgYnVzIG1hc3RlcgorICogaGFuZGxpbmcsIG5vdCBidXMgbWFzdGVyaW5nIGl0c2VsZi4KKyAqLwogI2RlZmluZSBSQURFT05fQlVTX0NOVEwJCQkweDAwMzAKKy8qIHIxeHgsIHIyeHgsIHIzMDAsIHIodikzNTAsIHI0MjAvcjQ4MSwgcnM0ODAgKi8KICMJZGVmaW5lIFJBREVPTl9CVVNfTUFTVEVSX0RJUwkJKDEgPDwgNikKKy8qIHJzNDAwLCByczY5MC9yczc0MCAqLworIwlkZWZpbmUgUlM0MDBfQlVTX01BU1RFUl9ESVMJCSgxIDw8IDE0KQorIwlkZWZpbmUgUlM0MDBfTVNJX1JFQVJNCQkgICAgICAgICgxIDw8IDIwKQorLyogc2VlIFJTNDgwX01TSV9SRUFSTSBpbiBBSUNfQ05UTCBmb3IgcnM0ODAgKi8KKworI2RlZmluZSBSQURFT05fQlVTX0NOVEwxCQkweDAwMzQKKyMJZGVmaW5lIFJBREVPTl9QTUlfQk1fRElTCQkoMSA8PCAyKQorIwlkZWZpbmUgUkFERU9OX1BNSV9JTlRfRElTCQkoMSA8PCAzKQorCisjZGVmaW5lIFJWMzcwX0JVU19DTlRMCQkJMHgwMDRjCisjCWRlZmluZSBSVjM3MF9QTUlfQk1fRElTCQkgICAgICAgICgxIDw8IDUpCisjCWRlZmluZSBSVjM3MF9QTUlfSU5UX0RJUwkJKDEgPDwgNikKKworI2RlZmluZSBSQURFT05fTVNJX1JFQVJNX0VOCQkweDAxNjAKKy8qIHJ2MzcwL3J2MzgwLCBydjQxMCwgcjQyMy9yNDMwL3I0ODAsIHI1eHggKi8KKyMJZGVmaW5lIFJWMzcwX01TSV9SRUFSTV9FTgkJKDEgPDwgMCkKIAogI2RlZmluZSBSQURFT05fQ0xPQ0tfQ05UTF9EQVRBCQkweDAwMGMKICMJZGVmaW5lIFJBREVPTl9QTExfV1JfRU4JCQkoMSA8PCA3KQpAQCAtNjIzLDYgKzY1Miw3IEBACiAjCWRlZmluZSBSQURFT05fU1dfSU5UX1RFU1QJCSgxIDw8IDI1KQogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9URVNUX0FDSwkJKDEgPDwgMjUpCiAjCWRlZmluZSBSQURFT05fU1dfSU5UX0ZJUkUJCSgxIDw8IDI2KQorIyAgICAgICBkZWZpbmUgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMgICAgICAgICAgKDEgPDwgMCkKIAogI2RlZmluZSBSQURFT05fSE9TVF9QQVRIX0NOVEwJCTB4MDEzMAogIwlkZWZpbmUgUkFERU9OX0hEUF9TT0ZUX1JFU0VUCQkoMSA8PCAyNikKQEAgLTkwNyw2ICs5MzcsNyBAQAogCiAjZGVmaW5lIFJBREVPTl9BSUNfQ05UTAkJCTB4MDFkMAogIwlkZWZpbmUgUkFERU9OX1BDSUdBUlRfVFJBTlNMQVRFX0VOCSgxIDw8IDApCisjCWRlZmluZSBSUzQ4MF9NU0lfUkVBUk0JICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIFJBREVPTl9BSUNfU1RBVAkJCTB4MDFkNAogI2RlZmluZSBSQURFT05fQUlDX1BUX0JBU0UJCTB4MDFkOAogI2RlZmluZSBSQURFT05fQUlDX0xPX0FERFIJCTB4MDFkYwpAQCAtMTExNiw2ICsxMTQ3LDkgQEAKIAogI2RlZmluZSBSMjAwX1ZBUF9QVlNfQ05UTF8xICAgICAgICAgICAgICAgMHgyMkQwCiAKKyNkZWZpbmUgUkFERU9OX0NSVENfQ1JOVF9GUkFNRSAweDAyMTQKKyNkZWZpbmUgUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUgMHgwMzE0CisKICNkZWZpbmUgUjUwMF9EMUNSVENfU1RBVFVTIDB4NjA5YwogI2RlZmluZSBSNTAwX0QyQ1JUQ19TVEFUVVMgMHg2ODljCiAjZGVmaW5lIFI1MDBfQ1JUQ19WX0JMQU5LICgxPDwwKQpAQCAtMTIwMCw3ICsxMjM0LDggQEAKIAogI2RlZmluZSBJR1BfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSAgICAgICBcCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fCAgIFwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSAgICAgIFwKIAkJUlM2OTBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKTsJCQkJXAogCWVsc2UJCQkJCQkJCVwKIAkJUlM0ODBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKTsJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwppbmRleCBlZTQwZDE5Li41MDc5ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwpAQCAtMjcsNyArMjcsNyBAQAogICoKICAqIEF1dGhvcnM6CiAgKiAgICBLZWl0aCBXaGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+Ci0gKiAgICBNaWNoZWwgRMOkbnplciA8bWljaGVsQGRhZW56ZXIubmV0PgorICogICAgTWljaGVsIETvv716ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KICAqLwogCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtMzUsMTIgKzM1LDEyOCBAQAogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAKLXN0YXRpYyBfX2lubGluZV9fIHUzMiByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAotCQkJCQkgICAgICB1MzIgbWFzaykKK3ZvaWQgcmFkZW9uX2lycV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIG1hc2ssIGludCBzdGF0ZSkKIHsKLQl1MzIgaXJxcyA9IFJBREVPTl9SRUFEKFJBREVPTl9HRU5fSU5UX1NUQVRVUykgJiBtYXNrOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoc3RhdGUpCisJCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyB8PSBtYXNrOworCWVsc2UKKwkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnICY9IH5tYXNrOworCisJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIGRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHI1MDBfdmJsX2lycV9zZXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIG1hc2ssIGludCBzdGF0ZSkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHN0YXRlKQorCQlkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcgfD0gbWFzazsKKwllbHNlCisJCWRldl9wcml2LT5yNTAwX2Rpc3BfaXJxX3JlZyAmPSB+bWFzazsKKworCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnKTsKK30KKworaW50IHJhZGVvbl9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDFNT0RFX0lOVF9NQVNLLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMk1PREVfSU5UX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQ19WQkxBTktfTUFTSywgMSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQzJfVkJMQU5LX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByYWRlb25fZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJCXN3aXRjaCAoY3J0YykgeworCQljYXNlIDA6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMU1PREVfSU5UX01BU0ssIDApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QyTU9ERV9JTlRfTUFTSywgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigidHJpZWQgdG8gZW5hYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCQkgIGNydGMpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQ19WQkxBTktfTUFTSywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fQ1JUQzJfVkJMQU5LX01BU0ssIDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHUzMiByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKK3sKKwl1MzIgaXJxcyA9IFJBREVPTl9SRUFEKFJBREVPTl9HRU5fSU5UX1NUQVRVUyk7CisJdTMyIGlycV9tYXNrID0gUkFERU9OX1NXX0lOVF9URVNUOworCisJKnI1MDBfZGlzcF9pbnQgPSAwOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJCS8qIHZibCBpbnRlcnJ1cHRzIGluIGEgZGlmZmVyZW50IHBsYWNlICovCisKKwkJaWYgKGlycXMgJiBSNTAwX0RJU1BMQVlfSU5UX1NUQVRVUykgeworCQkJLyogaWYgYSBkaXNwbGF5IGludGVycnVwdCAqLworCQkJdTMyIGRpc3BfaXJxOworCisJCQlkaXNwX2lycSA9IFJBREVPTl9SRUFEKFI1MDBfRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKKworCQkJKnI1MDBfZGlzcF9pbnQgPSBkaXNwX2lycTsKKwkJCWlmIChkaXNwX2lycSAmIFI1MDBfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCQlSQURFT05fV1JJVEUoUjUwMF9EMU1PREVfVkJMQU5LX1NUQVRVUywgUjUwMF9WQkxBTktfQUNLKTsKKwkJCWlmIChkaXNwX2lycSAmIFI1MDBfRDJfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCQlSQURFT05fV1JJVEUoUjUwMF9EMk1PREVfVkJMQU5LX1NUQVRVUywgUjUwMF9WQkxBTktfQUNLKTsKKwkJfQorCQlpcnFfbWFzayB8PSBSNTAwX0RJU1BMQVlfSU5UX1NUQVRVUzsKKwl9IGVsc2UKKwkJaXJxX21hc2sgfD0gUkFERU9OX0NSVENfVkJMQU5LX1NUQVQgfCBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQ7CisKKwlpcnFzICY9CWlycV9tYXNrOworCiAJaWYgKGlycXMpCiAJCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9TVEFUVVMsIGlycXMpOworCiAJcmV0dXJuIGlycXM7CiB9CiAKQEAgLTY4LDQ0ICsxODQsMzMgQEAKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQogCSAgICAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdDsKKwl1MzIgcjUwMF9kaXNwX2ludDsKIAogCS8qIE9ubHkgY29uc2lkZXIgdGhlIGJpdHMgd2UncmUgaW50ZXJlc3RlZCBpbiAtIG90aGVycyBjb3VsZCBiZSB1c2VkCiAJICogb3V0c2lkZSB0aGUgRFJNCiAJICovCi0Jc3RhdCA9IHJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAoUkFERU9OX1NXX0lOVF9URVNUX0FDSyB8Ci0JCQkJCQkgIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUIHwKLQkJCQkJCSAgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKSk7CisJc3RhdCA9IHJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAmcjUwMF9kaXNwX2ludCk7CiAJaWYgKCFzdGF0KQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlzdGF0ICY9IGRldl9wcml2LT5pcnFfZW5hYmxlX3JlZzsKIAogCS8qIFNXIGludGVycnVwdCAqLwotCWlmIChzdGF0ICYgUkFERU9OX1NXX0lOVF9URVNUKSB7CisJaWYgKHN0YXQgJiBSQURFT05fU1dfSU5UX1RFU1QpCiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5zd2lfcXVldWUpOwotCX0KIAogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KLQlpZiAoc3RhdCAmIChSQURFT05fQ1JUQ19WQkxBTktfU1RBVHxSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpKSB7Ci0JCWludCB2YmxhbmtfY3J0YyA9IGRldl9wcml2LT52YmxhbmtfY3J0YzsKLQotCQlpZiAoKHZibGFua19jcnRjICYKLQkJICAgICAoRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEgfCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikpID09Ci0JCSAgICAoRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEgfCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikpIHsKLQkJCWlmIChzdGF0ICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQyKTsKLQkJfSBlbHNlIGlmICgoKHN0YXQgJiBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCkgJiYKLQkJCSAgICh2YmxhbmtfY3J0YyAmIERSTV9SQURFT05fVkJMQU5LX0NSVEMxKSkgfHwKLQkJCSAgICgoc3RhdCAmIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkgJiYKLQkJCSAgICAodmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikpKQotCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCi0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlpZiAocjUwMF9kaXNwX2ludCAmIFI1MDBfRDFfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CisJCWlmIChyNTAwX2Rpc3BfaW50ICYgUjUwMF9EMl9WQkxBTktfSU5URVJSVVBUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdCAmIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKKwkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpCisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpOwogCX0KLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTQ0LDU0ICsyNDksMzEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJCXVuc2lnbmVkIGludCAqc2VxdWVuY2UsIGludCBjcnRjKQordTMyIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgaW50IGN1cl92Ymxhbms7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGFjayA9IDA7Ci0JYXRvbWljX3QgKmNvdW50ZXI7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwogCWlmICghZGV2X3ByaXYpIHsKIAkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjcnRjID09IERSTV9SQURFT05fVkJMQU5LX0NSVEMxKSB7Ci0JCWNvdW50ZXIgPSAmZGV2LT52YmxfcmVjZWl2ZWQ7Ci0JCWFjayB8PSBSQURFT05fQ1JUQ19WQkxBTktfU1RBVDsKLQl9IGVsc2UgaWYgKGNydGMgPT0gRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpIHsKLQkJY291bnRlciA9ICZkZXYtPnZibF9yZWNlaXZlZDI7Ci0JCWFjayB8PSBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQ7Ci0JfSBlbHNlCisJaWYgKGNydGMgPCAwIHx8IGNydGMgPiAxKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBjcnRjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYsIGFjayk7Ci0KLQlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9XQUlUX0lETEU7Ci0KLQkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgotCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycwotCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLgotCSAqLwotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoY291bnRlcikpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsIERSTV9SQURFT05fVkJMQU5LX0NSVEMxKTsKLX0KLQotaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCi17Ci0JcmV0dXJuIHJhZGVvbl9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoZGV2LCBzZXF1ZW5jZSwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJCWlmIChjcnRjID09IDApCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUjUwMF9EMUNSVENfRlJBTUVfQ09VTlQpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUjUwMF9EMkNSVENfRlJBTUVfQ09VTlQpOworCX0gZWxzZSB7CisJCWlmIChjcnRjID09IDApCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX0NSVENfQ1JOVF9GUkFNRSk7CisJCWVsc2UKKwkJCXJldHVybiBSQURFT05fUkVBRChSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CisJfQogfQogCiAvKiBOZWVkcyB0aGUgbG9jayBhcyBpdCB0b3VjaGVzIHRoZSByaW5nLgpAQCAtMjM0LDQ2ICszMTYsNDEgQEAKIAlyZXR1cm4gcmFkZW9uX3dhaXRfaXJxKGRldiwgaXJxd2FpdC0+aXJxX3NlcSk7CiB9CiAKLXZvaWQgcmFkZW9uX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyA9IFJBREVPTl9TV19JTlRfRU5BQkxFOwotCWlmIChkZXZfcHJpdi0+dmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkKLQkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnIHw9IFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLOwotCi0JaWYgKGRldl9wcml2LT52YmxhbmtfY3J0YyAmIERSTV9SQURFT05fVkJMQU5LX0NSVEMyKQotCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgfD0gUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLOwotCi0JUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIGRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyk7Ci0JZGV2X3ByaXYtPmlycV9lbmFibGVkID0gMTsKLX0KLQogLyogZHJtX2RtYS5oIGhvb2tzCiAqLwogdm9pZCByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9CiAJICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBkdW1teTsKIAogCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKQorCQlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIDApOwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIAogCS8qIENsZWFyIGJpdHMgaWYgdGhleSdyZSBhbHJlYWR5IGhpZ2ggKi8KLQlyYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgKFJBREVPTl9TV19JTlRfVEVTVF9BQ0sgfAotCQkJCQkgICBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCB8Ci0JCQkJCSAgIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkpOworCXJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAmZHVtbXkpOwogfQogCi12b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKIAogCWF0b21pY19zZXQoJmRldl9wcml2LT5zd2lfZW1pdHRlZCwgMCk7CiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKIAotCXJhZGVvbl9lbmFibGVfaW50ZXJydXB0KGRldik7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgMik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4MDAxZmZmZmY7CisKKwlyYWRlb25faXJxX3NldF9zdGF0ZShkZXYsIFJBREVPTl9TV19JTlRfRU5BQkxFLCAxKTsKKworCXJldHVybiAwOwogfQogCiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTI4NSw2ICszNjIsOCBAQAogCiAJZGV2X3ByaXYtPmlycV9lbmFibGVkID0gMDsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKQorCQlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIDApOwogCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIH0KQEAgLTI5MywxOCArMzcyLDggQEAKIGludCByYWRlb25fdmJsYW5rX2NydGNfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGZsYWc7Ci0JdTMyIHZhbHVlOwogCi0JZmxhZyA9IFJBREVPTl9SRUFEKFJBREVPTl9HRU5fSU5UX0NOVEwpOwotCXZhbHVlID0gMDsKLQotCWlmIChmbGFnICYgUkFERU9OX0NSVENfVkJMQU5LX01BU0spCi0JCXZhbHVlIHw9IERSTV9SQURFT05fVkJMQU5LX0NSVEMxOwotCi0JaWYgKGZsYWcgJiBSQURFT05fQ1JUQzJfVkJMQU5LX01BU0spCi0JCXZhbHVlIHw9IERSTV9SQURFT05fVkJMQU5LX0NSVEMyOwotCXJldHVybiB2YWx1ZTsKKwlyZXR1cm4gZGV2X3ByaXYtPnZibGFua19jcnRjOwogfQogCiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQ2NF90IHZhbHVlKQpAQCAtMzE1LDYgKzM4NCw1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlkZXZfcHJpdi0+dmJsYW5rX2NydGMgPSAodW5zaWduZWQgaW50KXZhbHVlOwotCXJhZGVvbl9lbmFibGVfaW50ZXJydXB0KGRldik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCAxMWMxNDZiLi41ZDcxNTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTI5OTcsNyArMjk5Nyw3IEBACiAJCXZhbHVlID0gR0VUX1NDUkFUQ0goMik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0lSUV9OUjoKLQkJdmFsdWUgPSBkZXYtPmlycTsKKwkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9HQVJUX0JBU0U6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jIGIvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYwppbmRleCBiMzg3ODc3Li5hZjIyMTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgQUdQX1RZUEUgMQogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpCisjaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKSB8fCBkZWZpbmVkKENPTkZJR19GQl9TSVNfTU9EVUxFKQogLyogZmIgbWFuYWdlbWVudCB2aWEgZmIgZGV2aWNlICovCiAKICNkZWZpbmUgU0lTX01NX0FMSUdOX1NISUZUIDAKQEAgLTU3LDcgKzU3LDcgQEAKIAlpZiAocmVxLnNpemUgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAJZWxzZQotCQlyZXR1cm4gKHZvaWQgKil+cmVxLm9mZnNldDsKKwkJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpfnJlcS5vZmZzZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNpc19zbWFuX21tX2ZyZWUodm9pZCAqcHJpdmF0ZSwgdm9pZCAqcmVmKQpAQCAtNzUsMTIgKzc1LDEyIEBACiAJcmV0dXJuIH4oKHVuc2lnbmVkIGxvbmcpcmVmKTsKIH0KIAotI2Vsc2UgLyogQ09ORklHX0ZCX1NJUyAqLworI2Vsc2UgLyogQ09ORklHX0ZCX1NJU1tfTU9EVUxFXSAqLwogCiAjZGVmaW5lIFNJU19NTV9BTElHTl9TSElGVCA0CiAjZGVmaW5lIFNJU19NTV9BTElHTl9NQVNLICggKDEgPDwgU0lTX01NX0FMSUdOX1NISUZUKSAtIDEpCiAKLSNlbmRpZiAvKiBDT05GSUdfRkJfU0lTICovCisjZW5kaWYgLyogQ09ORklHX0ZCX1NJU1tfTU9EVUxFXSAqLwogCiBzdGF0aWMgaW50IHNpc19mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewpAQCAtODksNyArODksNyBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVMRSkKIAl7CiAJCXN0cnVjdCBkcm1fc21hbl9tbSBzbWFuX21tOwogCQlzbWFuX21tLnByaXZhdGUgPSAodm9pZCAqKTB4RkZGRkZGRkY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCmluZGV4IDgwYzAxY2QuLjA5OTNiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5jCkBAIC00MCwxMSArNDAsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX0hBVkVfSVJRIHwKLQkgICAgRFJJVkVSX0lSUV9TSEFSRUQgfCBEUklWRVJfSVJRX1ZCTCwKKwkgICAgRFJJVkVSX0lSUV9TSEFSRUQsCiAJLmxvYWQgPSB2aWFfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IHZpYV9kcml2ZXJfdW5sb2FkLAogCS5jb250ZXh0X2R0b3IgPSB2aWFfZmluYWxfY29udGV4dCwKLQkudmJsYW5rX3dhaXQgPSB2aWFfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSB2aWFfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gdmlhX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gdmlhX2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNTksMTcgKzYxLDE3IEBACiAJLmdldF9yZWdfb2ZzID0gZHJtX2NvcmVfZ2V0X3JlZ19vZnMsCiAJLmlvY3RscyA9IHZpYV9pb2N0bHMsCiAJLmZvcHMgPSB7Ci0JCSAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJIC5vcGVuID0gZHJtX29wZW4sCi0JCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAotCQkgLm1tYXAgPSBkcm1fbW1hcCwKLQkJIC5wb2xsID0gZHJtX3BvbGwsCi0JCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKLQl9LAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9wZW4gPSBkcm1fb3BlbiwKKwkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkubW1hcCA9IGRybV9tbWFwLAorCQkucG9sbCA9IGRybV9wb2xsLAorCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJfSwKIAkucGNpX2RyaXZlciA9IHsKLQkJIC5uYW1lID0gRFJJVkVSX05BTUUsCi0JCSAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmgKaW5kZXggMmRhYWU4MS4uY2FmY2I4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmgKQEAgLTc1LDYgKzc1LDcgQEAKIAlzdHJ1Y3QgdGltZXZhbCBsYXN0X3ZibGFuazsKIAlpbnQgbGFzdF92YmxhbmtfdmFsaWQ7CiAJdW5zaWduZWQgdXNlY19wZXJfdmJsYW5rOworCWF0b21pY190IHZibF9yZWNlaXZlZDsKIAlkcm1fdmlhX3N0YXRlX3QgaGNfc3RhdGU7CiAJY2hhciBwY2lfYnVmW1ZJQV9QQ0lfQlVGX1NJWkVdOwogCWNvbnN0IHVpbnQzMl90ICpmaXJlX29mZnNldHNbVklBX0ZJUkVfQlVGX1NJWkVdOwpAQCAtMTMwLDIxICsxMzEsMjQgQEAKIGV4dGVybiBpbnQgdmlhX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBjb250ZXh0KTsKIAogZXh0ZXJuIGludCB2aWFfZG9fY2xlYW51cF9tYXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIGludCB2aWFfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB1MzIgdmlhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IHZpYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIHZpYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiAKIGV4dGVybiBpcnFyZXR1cm5fdCB2aWFfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogCiBleHRlcm4gaW50IHZpYV9kbWFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCB2aWFfaW5pdF9jb21tYW5kX3ZlcmlmaWVyKHZvaWQpOwogZXh0ZXJuIGludCB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgdmlhX2luaXRfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1leHRlcm4gdm9pZCB2aWFfY2xlYW51cF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKLWV4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBjb250ZXh0KTsKK2V4dGVybiB2b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2aWFfY2xlYW51cF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX3JlbGVhc2VfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgY29udGV4dCk7CiAKLWV4dGVybiB2b2lkIHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiB2b2lkIHZpYV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIGV4dGVybiB2b2lkIHZpYV9kbWFibGl0X2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGVuZ2luZSwgaW50IGZyb21faXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKaW5kZXggYzZiYjk3OC4uNjY1ZDMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgVklBX1JFR19JTlRFUlJVUFQgICAgICAgMHgyMDAKIAogLyogVklBX1JFR19JTlRFUlJVUFQgKi8KLSNkZWZpbmUgVklBX0lSUV9HTE9CQUwgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFZJQV9JUlFfR0xPQkFMCSAgKDEgPDwgMzEpCiAjZGVmaW5lIFZJQV9JUlFfVkJMQU5LX0VOQUJMRSAgICgxIDw8IDE5KQogI2RlZmluZSBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HICAoMSA8PCAzKQogI2RlZmluZSBWSUFfSVJRX0hRVjBfRU5BQkxFICAgICAoMSA8PCAxMSkKQEAgLTY4LDE2ICs2OCwxNSBAQAogCiBzdGF0aWMgbWFza2FycmF5X3QgdmlhX3Byb19ncm91cF9hX2lycXNbXSA9IHsKIAl7VklBX0lSUV9IUVYwX0VOQUJMRSwgVklBX0lSUV9IUVYwX1BFTkRJTkcsIDB4MDAwMDAzRDAsIDB4MDAwMDgwMTAsCi0JIDB4MDAwMDAwMDB9LAorCSAweDAwMDAwMDAwIH0sCiAJe1ZJQV9JUlFfSFFWMV9FTkFCTEUsIFZJQV9JUlFfSFFWMV9QRU5ESU5HLCAweDAwMDAxM0QwLCAweDAwMDA4MDEwLAotCSAweDAwMDAwMDAwfSwKKwkgMHgwMDAwMDAwMCB9LAogCXtWSUFfSVJRX0RNQTBfVERfRU5BQkxFLCBWSUFfSVJRX0RNQTBfVERfUEVORElORywgVklBX1BDSV9ETUFfQ1NSMCwKIAkgVklBX0RNQV9DU1JfVEEgfCBWSUFfRE1BX0NTUl9URCwgMHgwMDAwMDAwOH0sCiAJe1ZJQV9JUlFfRE1BMV9URF9FTkFCTEUsIFZJQV9JUlFfRE1BMV9URF9QRU5ESU5HLCBWSUFfUENJX0RNQV9DU1IxLAogCSBWSUFfRE1BX0NTUl9UQSB8IFZJQV9ETUFfQ1NSX1RELCAweDAwMDAwMDA4fSwKIH07Ci1zdGF0aWMgaW50IHZpYV9udW1fcHJvX2dyb3VwX2EgPQotICAgIHNpemVvZih2aWFfcHJvX2dyb3VwX2FfaXJxcykgLyBzaXplb2YobWFza2FycmF5X3QpOworc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0gQVJSQVlfU0laRSh2aWFfcHJvX2dyb3VwX2FfaXJxcyk7CiBzdGF0aWMgaW50IHZpYV9pcnFtYXBfcHJvX2dyb3VwX2FbXSA9IHswLCAxLCAtMSwgMiwgLTEsIDN9OwogCiBzdGF0aWMgbWFza2FycmF5X3QgdmlhX3VuaWNocm9tZV9pcnFzW10gPSB7CkBAIC04NiwxNCArODUsMjQgQEAKIAl7VklBX0lSUV9ETUExX1REX0VOQUJMRSwgVklBX0lSUV9ETUExX1REX1BFTkRJTkcsIFZJQV9QQ0lfRE1BX0NTUjEsCiAJIFZJQV9ETUFfQ1NSX1RBIHwgVklBX0RNQV9DU1JfVEQsIDB4MDAwMDAwMDh9CiB9Owotc3RhdGljIGludCB2aWFfbnVtX3VuaWNocm9tZSA9IHNpemVvZih2aWFfdW5pY2hyb21lX2lycXMpIC8gc2l6ZW9mKG1hc2thcnJheV90KTsKK3N0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBBUlJBWV9TSVpFKHZpYV91bmljaHJvbWVfaXJxcyk7CiBzdGF0aWMgaW50IHZpYV9pcnFtYXBfdW5pY2hyb21lW10gPSB7LTEsIC0xLCAtMSwgMCwgLTEsIDF9OwogCisKIHN0YXRpYyB1bnNpZ25lZCB0aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdywgc3RydWN0IHRpbWV2YWwgKnRoZW4pCiB7CiAJcmV0dXJuIChub3ctPnR2X3VzZWMgPj0gdGhlbi0+dHZfdXNlYykgPwotCSAgICBub3ctPnR2X3VzZWMgLSB0aGVuLT50dl91c2VjIDoKLQkgICAgMTAwMDAwMCAtICh0aGVuLT50dl91c2VjIC0gbm93LT50dl91c2VjKTsKKwkJbm93LT50dl91c2VjIC0gdGhlbi0+dHZfdXNlYyA6CisJCTEwMDAwMDAgLSAodGhlbi0+dHZfdXNlYyAtIG5vdy0+dHZfdXNlYyk7Cit9CisKK3UzMiB2aWFfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGNydGMgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOwogfQogCiBpcnFyZXR1cm5fdCB2aWFfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKQEAgLTEwOCwyMyArMTE3LDIyIEBACiAKIAlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CiAJaWYgKHN0YXR1cyAmIFZJQV9JUlFfVkJMQU5LX1BFTkRJTkcpIHsKLQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpICYgMHgwRikpIHsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWlmICghKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CiAJCQlkb19nZXR0aW1lb2ZkYXkoJmN1cl92YmxhbmspOwogCQkJaWYgKGRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCkgewogCQkJCWRldl9wcml2LT51c2VjX3Blcl92YmxhbmsgPQotCQkJCSAgICB0aW1lX2RpZmYoJmN1cl92YmxhbmssCi0JCQkJCSAgICAgICZkZXZfcHJpdi0+bGFzdF92YmxhbmspID4+IDQ7CisJCQkJCXRpbWVfZGlmZigmY3VyX3ZibGFuaywKKwkJCQkJCSAgJmRldl9wcml2LT5sYXN0X3ZibGFuaykgPj4gNDsKIAkJCX0KIAkJCWRldl9wcml2LT5sYXN0X3ZibGFuayA9IGN1cl92Ymxhbms7CiAJCQlkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQgPSAxOwogCQl9Ci0JCWlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgeworCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgewogCQkJRFJNX0RFQlVHKCJVUyBwZXIgdmJsYW5rIGlzOiAldVxuIiwKIAkJCQkgIGRldl9wcml2LT51c2VjX3Blcl92YmxhbmspOwogCQl9Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaGFuZGxlZCA9IDE7CiAJfQogCkBAIC0xNDUsNiArMTUzLDcgQEAKIAkvKiBBY2tub3dsZWdlIGludGVycnVwdHMgKi8KIAlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyk7CiAKKwogCWlmIChoYW5kbGVkKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJZWxzZQpAQCAtMTYzLDMxICsxNzIsMzQgQEAKIAl9CiB9CiAKLWludCB2aWFfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IHZpYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHN0YXR1czsKIAotCURSTV9ERUJVRygiXG4iKTsKLQlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOworCWlmIChjcnRjICE9IDApIHsKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXZpYWRydl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2KTsKKwlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgJiBWSUFfSVJRX1ZCTEFOS19FTkFCTEUpOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KLQkgKi8KKwlWSUFfV1JJVEU4KDB4ODNkNCwgMHgxMSk7CisJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7CiAKLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpIC0KLQkJICAgICAgKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKKwlyZXR1cm4gMDsKK30KIAotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0JcmV0dXJuIHJldDsKK3ZvaWQgdmlhX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlWSUFfV1JJVEU4KDB4ODNkNCwgMHgxMSk7CisJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpICYgfjB4MzApOworCisJaWYgKGNydGMgIT0gMCkKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIzOSw2ICsyNTEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKwogLyoKICAqIGRybV9kbWEuaCBob29rcwogICovCkBAIC0yOTIsMjMgKzMwNSwyNSBAQAogCX0KIH0KIAotdm9pZCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBzdGF0dXM7CiAKLQlEUk1fREVCVUcoIlxuIik7Ci0JaWYgKGRldl9wcml2KSB7Ci0JCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKLQkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgfCBWSUFfSVJRX0dMT0JBTAotCQkJICB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spOworCURSTV9ERUJVRygidmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGxcbiIpOworCWlmICghZGV2X3ByaXYpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFNvbWUgbWFnaWMsIG9oIGZvciBzb21lIGRhdGEgc2hlZXRzICEgKi8KKwlkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7CisJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgfCBWSUFfSVJRX0dMT0JBTAorCQkgIHwgZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzayk7CiAKLQkJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOwotCQlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgfCAweDMwKTsKKwkvKiBTb21lIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSB8IDB4MzApOwogCi0JfQorCXJldHVybiAwOwogfQogCiB2b2lkIHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTMzOSw5ICszNTQsNiBAQAogCWRybV92aWFfaXJxX3QgKmN1cl9pcnEgPSBkZXZfcHJpdi0+dmlhX2lycXM7CiAJaW50IGZvcmNlX3NlcXVlbmNlOwogCi0JaWYgKCFkZXYtPmlycSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoaXJxd2FpdC0+cmVxdWVzdC5pcnEgPj0gZGV2X3ByaXYtPm51bV9pcnFzKSB7CiAJCURSTV9FUlJPUigiVHJ5aW5nIHRvIHdhaXQgb24gdW5rbm93biBpcnEgJWRcbiIsCiAJCQkgIGlycXdhaXQtPnJlcXVlc3QuaXJxKTsKQEAgLTM1Miw3ICszNjQsOCBAQAogCiAJc3dpdGNoIChpcnF3YWl0LT5yZXF1ZXN0LnR5cGUgJiB+VklBX0lSUV9GTEFHU19NQVNLKSB7CiAJY2FzZSBWSUFfSVJRX1JFTEFUSVZFOgotCQlpcnF3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlICs9IGF0b21pY19yZWFkKCZjdXJfaXJxLT5pcnFfcmVjZWl2ZWQpOworCQlpcnF3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlICs9CisJCQlhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKIAkJaXJxd2FpdC0+cmVxdWVzdC50eXBlICY9IH5fRFJNX1ZCTEFOS19SRUxBVElWRTsKIAljYXNlIFZJQV9JUlFfQUJTT0xVVEU6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMKaW5kZXggZTY0MDk0OS4uZjY5NGNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCkBAIC05Myw4ICs5Myw3IEBACiAJLyogTGFzdCBjb250ZXh0LCBwZXJmb3JtIGNsZWFudXAgKi8KIAlpZiAoZGV2LT5jdHhfY291bnQgPT0gMSAmJiBkZXYtPmRldl9wcml2YXRlKSB7CiAJCURSTV9ERUJVRygiTGFzdCBDb250ZXh0XG4iKTsKLQkJaWYgKGRldi0+aXJxKQotCQkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAkJdmlhX2NsZWFudXBfZnV0ZXgoZGV2X3ByaXYpOwogCQl2aWFfZG9fY2xlYW51cF9tYXAoZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IDFkM2I4YTMuLjcwNWE0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7Ci0JCQl3YXJuKCJvdXRwdXQgcXVldWVpbmcgZmFpbGVkIik7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCk7CkBAIC00NTUsNyArNDU1LDcgQEAKIAkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKLQkJCXdhcm4oImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkIik7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJjb250cm9sIHF1ZXVlaW5nIGZhaWxlZFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0ucmF3X3JlcG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZWJhY2MwYS4uNmRlMWUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTEwLDExICs1MTAsOSBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MCwKLQkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIE1heGltIE1BWDY2NTcsCi0JICBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxIHNlbnNvciBjaGlwcy4KLQotCSAgVGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEgc2Vuc29yIGNoaXAgaXMgYWxzbyBzdXBwb3J0ZWQsIGJ1dCBvbmx5Ci0JICBpZiBmb3VuZCBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIEFEVDc0NjEsIGFuZCBNYXhpbQorCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwgTUFYNjY4MCBhbmQKKwkgIE1BWDY2ODEgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI2LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwppbmRleCA3ZmUyNDQxLi5mZjdkZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwpAQCAtMjc5LDcgKzI3OSw2IEBACiAJdTggZmFuX21pbls4XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggZmFuX2Rpdls4XTsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAlzdHJ1Y3QgcHdtX2RhdGEgcHdtMTsJLyogUHdtIGNvbnRyb2wgdmFsdWVzICovCi0JaW50IHZpZDsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAl1OCB2cm07CQkJLyogVlJNIHZlcnNpb24gKi8KIAl1OCBhbmFsb2dfb3V0OwkJLyogUmVnaXN0ZXIgdmFsdWUgKERBQykgKi8KIAlsb25nIGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJHUElPIGNvbmZpZyBpczoiKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkdQSU8gY29uZmlnIGlzOlxuIik7CiAJZm9yIChpID0gMDtpIDw9IDc7KytpKSB7CiAJCWlmIChkYXRhLT5jb25maWcyICYgKDEgPDwgaSkpIHsKIAkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXHQlc0dQJXMlZFxuIiwKQEAgLTY5Nyw4ICs2OTYsNiBAQAogCQlkYXRhLT5sYXN0X2NvbmZpZyA9IGppZmZpZXM7CiAJfTsgLyogbGFzdF9jb25maWcgKi8KIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKLQlkYXRhLT52aWQgPSAoZGF0YS0+Z3BpbyA+PiAxMSkgJiAweDFmOwogCWRhdGEtPnZhbGlkID0gMTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gZGF0YTsKQEAgLTEyMTUsNyArMTIxMiwxMCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gYWRtMTAyNl91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQgJiAweDNmLCBkYXRhLT52cm0pKTsKKwlpbnQgdmlkID0gKGRhdGEtPmdwaW8gPj4gMTEpICYgMHgxZjsKKworCWRldl9kYmcoZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKHZpZCwgZGF0YS0+dnJtKSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkX3JlZywgTlVMTCk7CiAKQEAgLTE2ODEsMTcgKzE2ODEsMTYgQEAKIAkJCWtpbmQgPSBhZG0xMDI2OwogCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gQURNMTAyNl9DT01QQU5ZX0FOQUxPR19ERVYKIAkJCSYmICh2ZXJzdGVwICYgMHhmMCkgPT0gQURNMTAyNl9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIjogVW5yZWNvZ25pemVkIHN0ZXBwaW5nICIKKwkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCBzdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gRGVmYXVsdGluZyB0byBBRE0xMDI2LlxuIiwgdmVyc3RlcCk7CiAJCQlraW5kID0gYWRtMTAyNjsKIAkJfSBlbHNlIGlmICgodmVyc3RlcCAmIDB4ZjApID09IEFETTEwMjZfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICI6IEZvdW5kIHZlcnNpb24vc3RlcHBpbmcgIgorCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiRm91bmQgdmVyc2lvbi9zdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gQXNzdW1pbmcgZ2VuZXJpYyBBRE0xMDI2LlxuIiwKIAkJCQl2ZXJzdGVwKTsKIAkJCWtpbmQgPSBhbnlfY2hpcDsKIAkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIjogQXV0b2RldGVjdGlvbiAiCi0JCQkJImZhaWxlZFxuIik7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCQkvKiBOb3QgYW4gQURNMTAyNiAuLi4gKi8KIAkJCWlmIChraW5kID09IDApIHsgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwogCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgQURNMTAyNiBub3QgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwppbmRleCBiYTg0Y2E1Li4zNjcxODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpAQCAtMTc5LDcgKzE3OSw4IEBACiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAl1MTYgdmFsOwotCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAgfHwgZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gPT0gMAorCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAKKwkgICAgfHwgKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdICYgMHhDMCkgPT0gMAogCSAgICB8fCBkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDI1NSkgewogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGFkbTEwMjlfdXBkYXRlX2RldmljZShkZXYpOwotCWlmIChkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSA9PSAwKQorCWlmICgoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gJiAweEMwKSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCBmYmVmYTgyLi42YzlhY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTk5LDQwICs5OSwzMiBAQAogICovCiBzdGF0aWMgdm9pZCBhbXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGlycXNfdG9fY2xlYXI7CisKIAltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKIAotCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJaXJxc190b19jbGVhciA9IGFtc19pbmZvLndvcmtlcl9pcnFzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfRlJFRUZBTEwpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IGZyZWVmYWxsIGRldGVjdGVkIVxuIik7CiAKLQkJaWYgKGFtc19pbmZvLndvcmtlcl9pcnFzICYgQU1TX0lSUV9GUkVFRkFMTCkgewotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBmcmVlZmFsbCBkZXRlY3RlZCFcbiIpOwotCi0JCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKLQotCQkJLyogd2UgbXVzdCBjYWxsIHRoaXMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCQlhbXNfaW5mby5jbGVhcl9pcnEoQU1TX0lSUV9GUkVFRkFMTCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQkJfQotCi0JCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfU0hPQ0spIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50ayhLRVJOX0lORk8gImFtczogc2hvY2sgZGV0ZWN0ZWQhXG4iKTsKLQotCQkJYW1zX2luZm8ud29ya2VyX2lycXMgJj0gfkFNU19JUlFfU0hPQ0s7Ci0KLQkJCS8qIHdlIG11c3QgY2FsbCB0aGlzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCQkJYW1zX2luZm8uY2xlYXJfaXJxKEFNU19JUlFfU0hPQ0spOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKIAl9CiAKKwlpZiAoYW1zX2luZm8ud29ya2VyX2lycXMgJiBBTVNfSVJRX1NIT0NLKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBzaG9jayBkZXRlY3RlZCFcbiIpOworCisJCWFtc19pbmZvLndvcmtlcl9pcnFzICY9IH5BTVNfSVJRX1NIT0NLOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisKKwlhbXNfaW5mby5jbGVhcl9pcnEoaXJxc190b19jbGVhcik7CisKIAltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOwogfQogCkBAIC0yMjMsMzQgKzIxNSwyOCBAQAogCiB2b2lkIGFtc19leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLworCWFtc19pbnB1dF9leGl0KCk7CiAKLQlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewotCQkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCi0JCWFtc19pbnB1dF9leGl0KCk7CisJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JCWFtc19pbmZvLmV4aXQoKTsKKwkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KKwlhbXNfaW5mby5leGl0KCk7CiAKLQkJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgotCQkgKgotCQkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKLQkJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KLQkJICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgorCSAqCisJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CisJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jdXJyZW50KTsKKwkvKiBSZW1vdmUgZGV2aWNlICovCisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoYW1zX2luZm8ub2ZfZGV2KTsKIAotCQkvKiBSZW1vdmUgZGV2aWNlICovCi0JCW9mX2RldmljZV91bnJlZ2lzdGVyKGFtc19pbmZvLm9mX2Rldik7Ci0KLQkJLyogUmVtb3ZlIGhhbmRsZXIgKi8KLQkJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX3Nob2NrX2NsaWVudCk7Ci0JCXBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQoJmFtc19mcmVlZmFsbF9jbGllbnQpOwotCX0KLQotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGhhbmRsZXIgKi8KKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDk1Nzc2MDUzLi4yY2JmOGE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYwpAQCAtNjAsMjYgKzYwLDM0IEBACiAJQU1TX0NNRF9TVEFSVCwKIH07CiAKLXN0YXRpYyBpbnQgYW1zX2kyY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgYW1zX2kyY19kZXRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgYW1zX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGFtc19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYW1zX2lkW10gPSB7CisJeyAiYW1zIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhbXNfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW1zX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgICA9ICJhbXMiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2F0dGFjaCwKLQkuZGV0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2RldGFjaCwKKwkucHJvYmUgICAgICAgICAgPSBhbXNfaTJjX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IGFtc19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSAgICAgICA9IGFtc19pZCwKIH07CiAKIHN0YXRpYyBzMzIgYW1zX2kyY19yZWFkKHU4IHJlZykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZhbXNfaW5mby5pMmNfY2xpZW50LCByZWcpOworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBhbXNfaTJjX3dyaXRlKHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoJmFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGFtc19pMmNfY21kKGVudW0gYW1zX2kyY19jbWQgY21kKQpAQCAtMTUyLDkgKzE2MCw5IEBACiAJKnogPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEFaKTsKIH0KIAotc3RhdGljIGludCBhbXNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFtc19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBidXM7CiAJaW50IHZtYWosIHZtaW47CiAJaW50IHJlc3VsdDsKIApAQCAtMTYyLDE3ICsxNzAsNyBAQAogCWlmICh1bmxpa2VseShhbXNfaW5mby5oYXNfZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoc3RybmNtcChhZGFwdGVyLT5uYW1lLCAidW5pLW4iLCA1KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlidXMgPSBzaW1wbGVfc3RydG91bChhZGFwdGVyLT5uYW1lICsgNiwgTlVMTCwgMTApOwotCWlmIChidXMgIT0gYW1zX2luZm8uaTJjX2J1cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkZHIgPSBhbXNfaW5mby5pMmNfYWRkcmVzczsKLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkYXB0ZXIgPSBhZGFwdGVyOwotCWFtc19pbmZvLmkyY19jbGllbnQuZHJpdmVyID0gJmFtc19pMmNfZHJpdmVyOwotCXN0cmNweShhbXNfaW5mby5pMmNfY2xpZW50Lm5hbWUsICJBcHBsZSBNb3Rpb24gU2Vuc29yIik7CisJYW1zX2luZm8uaTJjX2NsaWVudCA9IGNsaWVudDsKIAogCWlmIChhbXNfaTJjX2NtZChBTVNfQ01EX1JFU0VUKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IEZhaWxlZCB0byByZXNldCB0aGUgZGV2aWNlXG4iKTsKQEAgLTIzNyw3ICsyMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFtc19pMmNfZGV0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTI2MSwxMSArMjU5LDcgQEAKIAogaW50IF9faW5pdCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQljaGFyICp0bXBfYnVzOwogCWludCByZXN1bHQ7Ci0JY29uc3QgdTMyICpwcm9wOwotCi0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CiAKIAkvKiBTZXQgaW1wbGVtZW50YXRpb24gc3R1ZmYgKi8KIAlhbXNfaW5mby5vZl9ub2RlID0gbnA7CkBAIC0yNzUsMjUgKzI2OSw3IEBACiAJYW1zX2luZm8uY2xlYXJfaXJxID0gYW1zX2kyY19jbGVhcl9pcnE7CiAJYW1zX2luZm8uYnVzdHlwZSA9IEJVU19JMkM7CiAKLQkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApIHsKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JdG1wX2J1cyA9IHN0cnN0cihhbXNfaW5mby5vZl9ub2RlLT5mdWxsX25hbWUsICIvaTJjLWJ1c0AiKTsKLQlpZiAodG1wX2J1cykKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOwotCWVsc2UKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKLQlhbXNfaW5mby5pMmNfYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKLQogCXJlc3VsdCA9IGkyY19hZGRfZHJpdmVyKCZhbXNfaTJjX2RyaXZlcik7CiAKLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCmluZGV4IDdiODFlMGMyLi44YTcxMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYwpAQCAtMjAsMTMgKzIwLDE1IEBACiAjaW5jbHVkZSAiYW1zLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgam95c3RpY2s7Ci1tb2R1bGVfcGFyYW0oam95c3RpY2ssIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGpveXN0aWNrLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moam95c3RpY2ssICJFbmFibGUgdGhlIGlucHV0IGNsYXNzIGRldmljZSBvbiBtb2R1bGUgbG9hZCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGludmVydDsKLW1vZHVsZV9wYXJhbShpbnZlcnQsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJJbnZlcnQgaW5wdXQgZGF0YSBvbiBYIGFuZCBZIGF4aXMiKTsKIAorc3RhdGljIERFRklORV9NVVRFWChhbXNfaW5wdXRfbXV0ZXgpOworCiBzdGF0aWMgdm9pZCBhbXNfaWRldl9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGRldi0+aW5wdXQ7CkBAIC01MCwxMyArNTIsMTEgQEAKIH0KIAogLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KLXN0YXRpYyB2b2lkIGFtc19pbnB1dF9lbmFibGUodm9pZCkKK3N0YXRpYyBpbnQgYW1zX2lucHV0X2VuYWJsZSh2b2lkKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXM4IHgsIHksIHo7Ci0KLQlpZiAoYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCWludCBlcnJvcjsKIAogCWFtc19zZW5zb3JzKCZ4LCAmeSwgJnopOwogCWFtc19pbmZvLnhjYWxpYiA9IHg7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlhbXNfaW5mby5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOwogCWlmICghYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWFtc19pbmZvLmlkZXYtPnBvbGwgPSBhbXNfaWRldl9wb2xsOwogCWFtc19pbmZvLmlkZXYtPnBvbGxfaW50ZXJ2YWwgPSAyNTsKQEAgLTg0LDE0ICs4NCwxOCBAQAogCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwogCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKIAotCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpKSB7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpOworCWlmIChlcnJvcikgewogCQlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UoYW1zX2luZm8uaWRldik7CiAJCWFtc19pbmZvLmlkZXYgPSBOVUxMOwotCQlyZXR1cm47CisJCXJldHVybiBlcnJvcjsKIAl9CisKKwlqb3lzdGljayA9IDE7CisKKwlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIGFtc19pbnB1dF9kaXNhYmxlKHZvaWQpCiB7CiAJaWYgKGFtc19pbmZvLmlkZXYpIHsKQEAgLTk5LDYgKzEwMyw4IEBACiAJCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShhbXNfaW5mby5pZGV2KTsKIAkJYW1zX2luZm8uaWRldiA9IE5VTEw7CiAJfQorCisJam95c3RpY2sgPSAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBhbXNfaW5wdXRfc2hvd19qb3lzdGljayhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTAsMzkgKzExNiw0MiBAQAogc3RhdGljIHNzaXplX3QgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJmpveXN0aWNrKSAhPSAxKQorCXVuc2lnbmVkIGxvbmcgZW5hYmxlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZW5hYmxlKSB8fCBlbmFibGUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlpZiAoam95c3RpY2spCi0JCWFtc19pbnB1dF9lbmFibGUoKTsKLQllbHNlCi0JCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJaWYgKGVuYWJsZSAhPSBqb3lzdGljaykgeworCQlpZiAoZW5hYmxlKQorCQkJZXJyb3IgPSBhbXNfaW5wdXRfZW5hYmxlKCk7CisJCWVsc2UKKwkJCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBjb3VudDsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGpveXN0aWNrLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlhbXNfaW5wdXRfc2hvd19qb3lzdGljaywgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKTsKIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIGludCBhbXNfaW5wdXRfaW5pdCh2b2lkKQogewotCWludCByZXN1bHQ7Ci0KLQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwotCi0JaWYgKCFyZXN1bHQgJiYgam95c3RpY2spCisJaWYgKGpveXN0aWNrKQogCQlhbXNfaW5wdXRfZW5hYmxlKCk7Ci0JcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwogfQogCi0vKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwogdm9pZCBhbXNfaW5wdXRfZXhpdCh2b2lkKQogewotCWFtc19pbnB1dF9kaXNhYmxlKCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2pveXN0aWNrKTsKKworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CisJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggOTQ2M2U5Ny4uZmIxOGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTQ5LDggKzE0OSw2IEBACiAJY29uc3QgdTMyICpwcm9wOwogCWludCByZXN1bHQ7CiAKLQltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCS8qIFNldCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAqLwogCWFtc19pbmZvLm9mX25vZGUgPSBucDsKIAlhbXNfaW5mby5leGl0ID0gYW1zX3BtdV9leGl0OwpAQCAtMTYxLDEwICsxNTksOSBAQAogCiAJLyogR2V0IFBNVSBjb21tYW5kLCBzaG91bGQgYmUgMHg0ZSwgYnV0IHdlIGNhbiBuZXZlciBrbm93ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKSB7Ci0JCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWFtc19wbXVfY21kID0gKCgqcHJvcCkgPj4gOCkgJiAweGZmOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCkBAIC0xNzUsNyArMTcyLDcgQEAKIAogCXJlc3VsdCA9IGFtc19zZW5zb3JfYXR0YWNoKCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLwogCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19GRl9MT1dfTElNSVQsIDB4MTUpOwpAQCAtMTk4LDEwICsxOTUsNSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBGb3VuZCBQTVUgYmFzZWQgbW90aW9uIHNlbnNvclxuIik7CiAKLQlyZXN1bHQgPSAwOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmggYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAppbmRleCAyMjFlZjY5Li41ZWQzODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaApAQCAtNDYsOSArNDYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NFTlNPUlNfQU1TX0kyQwogCS8qIEkyQyBwcm9wZXJ0aWVzICovCi0JaW50IGkyY19idXM7Ci0JaW50IGkyY19hZGRyZXNzOwotCXN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQ7CiAjZW5kaWYKIAogCS8qIEpveXN0aWNrIGVtdWxhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCmluZGV4IGIwNmI4ZTAuLmJjMDExZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKQEAgLTQ5LDYgKzQ5LDkgQEAKIAogI2RlZmluZSBBUFBMRVNNQ19NQVhfREFUQV9MRU5HVEggMzIKIAorI2RlZmluZSBBUFBMRVNNQ19NSU5fV0FJVAkweDAwNDAKKyNkZWZpbmUgQVBQTEVTTUNfTUFYX1dBSVQJMHg4MDAwCisKICNkZWZpbmUgQVBQTEVTTUNfU1RBVFVTX01BU0sJMHgwZgogI2RlZmluZSBBUFBMRVNNQ19SRUFEX0NNRAkweDEwCiAjZGVmaW5lIEFQUExFU01DX1dSSVRFX0NNRAkweDExCkBAIC01Nyw4ICs2MCw4IEBACiAKICNkZWZpbmUgS0VZX0NPVU5UX0tFWQkJIiNLRVkiIC8qIHItbyB1aTMyICovCiAKLSNkZWZpbmUgTElHSFRfU0VOU09SX0xFRlRfS0VZCSJBTFYwIiAvKiByLW8ge2FsdiAoNiBieXRlcykgKi8KLSNkZWZpbmUgTElHSFRfU0VOU09SX1JJR0hUX0tFWQkiQUxWMSIgLyogci1vIHthbHYgKDYgYnl0ZXMpICovCisjZGVmaW5lIExJR0hUX1NFTlNPUl9MRUZUX0tFWQkiQUxWMCIgLyogci1vIHthbHYgKDYtMTAgYnl0ZXMpICovCisjZGVmaW5lIExJR0hUX1NFTlNPUl9SSUdIVF9LRVkJIkFMVjEiIC8qIHItbyB7YWx2ICg2LTEwIGJ5dGVzKSAqLwogI2RlZmluZSBCQUNLTElHSFRfS0VZCQkiTEtTQiIgLyogdy1vIHtsa2IgKDIgYnl0ZXMpICovCiAKICNkZWZpbmUgQ0xBTVNIRUxMX0tFWQkJIk1TTEQiIC8qIHItbyB1aTggKHVudXNlZCkgKi8KQEAgLTEwNCw2ICsxMDcsMTUgQEAKIC8qIFNldCA2OiBNYWNib29rMyBzZXQgKi8KIAl7ICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJUTTBQIiwgIlROMFAiLCAiVFRGMCIsICJUVzBQIiwgIlRoMEgiLAogCSAgIlRoMFMiLCAiVGgxSCIsIE5VTEwgfSwKKy8qIFNldCA3OiBNYWNib29rIEFpciAqLworCXsgIlRCMFQiLCAiVEIxUyIsICJUQjFUIiwgIlRCMlMiLCAiVEIyVCIsICJUQzBEIiwgIlRDMFAiLCAiVENGUCIsCisJICAiVFRGMCIsICJUVzBQIiwgIlRoMEgiLCAiVHAwUCIsICJUcEZQIiwgIlRzMFAiLCAiVHMwUyIsIE5VTEwgfSwKKy8qIFNldCA4OiBNYWNib29rIFBybyA0LDEgKFBlbnJ5bikgKi8KKwl7ICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJURzBEIiwgIlRHMEgiLCAiVFRGMCIsICJUVzBQIiwgIlRoMEgiLAorCSAgIlRoMUgiLCAiVGgySCIsICJUbTBQIiwgIlRzMFAiLCBOVUxMIH0sCisvKiBTZXQgOTogTWFjYm9vayBQcm8gMywxIChTYW50YSBSb3NhKSAqLworCXsgIlRBTFAiLCAiVEIwVCIsICJUQzBEIiwgIlRDMFAiLCAiVEcwRCIsICJURzBIIiwgIlRURjAiLCAiVFcwUCIsCisJICAiVGgwSCIsICJUaDFIIiwgIlRoMkgiLCAiVG0wUCIsICJUczBQIiwgTlVMTCB9LAogfTsKIAogLyogTGlzdCBvZiBrZXlzIHVzZWQgdG8gcmVhZC93cml0ZSBmYW4gc3BlZWRzICovCkBAIC0xNjMsMjUgKzE3NSwyNSBAQAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphcHBsZXNtY19sZWRfd3E7CiAKIC8qCi0gKiBfX3dhaXRfc3RhdHVzIC0gV2FpdCB1cCB0byAybXMgZm9yIHRoZSBzdGF0dXMgcG9ydCB0byBnZXQgYSBjZXJ0YWluIHZhbHVlCisgKiBfX3dhaXRfc3RhdHVzIC0gV2FpdCB1cCB0byAzMm1zIGZvciB0aGUgc3RhdHVzIHBvcnQgdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZQogICogKG1hc2tlZCB3aXRoIDB4MGYpLCByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWUgaXMgb2J0YWluZWQuICBDYWxsZXJzIG11c3QKICAqIGhvbGQgYXBwbGVzbWNfbG9jay4KICAqLwogc3RhdGljIGludCBfX3dhaXRfc3RhdHVzKHU4IHZhbCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgdXM7CiAKIAl2YWwgPSB2YWwgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSzsKIAotCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgeworCWZvciAodXMgPSBBUFBMRVNNQ19NSU5fV0FJVDsgdXMgPCBBUFBMRVNNQ19NQVhfV0FJVDsgdXMgPDw9IDEpIHsKKwkJdWRlbGF5KHVzKTsKIAkJaWYgKChpbmIoQVBQTEVTTUNfQ01EX1BPUlQpICYgQVBQTEVTTUNfU1RBVFVTX01BU0spID09IHZhbCkgewogCQkJaWYgKGRlYnVnKQogCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJCQkiV2FpdGVkICVkIHVzIGZvciBzdGF0dXMgJXhcbiIsCi0JCQkJCQlpKjEwLCB2YWwpOworCQkJCQkiV2FpdGVkICVkIHVzIGZvciBzdGF0dXMgJXhcbiIsCisJCQkJCTIgKiB1cyAtIEFQUExFU01DX01JTl9XQUlULCB2YWwpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJdWRlbGF5KDEwKTsKIAl9CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogd2FpdCBzdGF0dXMgZmFpbGVkOiAleCAhPSAleFxuIiwKQEAgLTE5MSw2ICsyMDMsMjUgQEAKIH0KIAogLyoKKyAqIHNwZWNpYWwgdHJlYXRtZW50IG9mIGNvbW1hbmQgcG9ydCAtIG9uIG5ld2VyIG1hY2Jvb2tzLCBpdCBzZWVtcyBuZWNlc3NhcnkKKyAqIHRvIHJlc2VuZCB0aGUgY29tbWFuZCBieXRlIGJlZm9yZSBwb2xsaW5nIHRoZSBzdGF0dXMgYWdhaW4uIENhbGxlcnMgbXVzdAorICogaG9sZCBhcHBsZXNtY19sb2NrLgorICovCitzdGF0aWMgaW50IHNlbmRfY29tbWFuZCh1OCBjbWQpCit7CisJaW50IHVzOworCWZvciAodXMgPSBBUFBMRVNNQ19NSU5fV0FJVDsgdXMgPCBBUFBMRVNNQ19NQVhfV0FJVDsgdXMgPDw9IDEpIHsKKwkJb3V0YihjbWQsIEFQUExFU01DX0NNRF9QT1JUKTsKKwkJdWRlbGF5KHVzKTsKKwkJaWYgKChpbmIoQVBQTEVTTUNfQ01EX1BPUlQpICYgQVBQTEVTTUNfU1RBVFVTX01BU0spID09IDB4MGMpCisJCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRrKEtFUk5fV0FSTklORyAiYXBwbGVzbWM6IGNvbW1hbmQgZmFpbGVkOiAleCAtPiAleFxuIiwKKwkJY21kLCBpbmIoQVBQTEVTTUNfQ01EX1BPUlQpKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKICAqIGFwcGxlc21jX3JlYWRfa2V5IC0gcmVhZHMgbGVuIGJ5dGVzIGZyb20gYSBnaXZlbiBrZXksIGFuZCBwdXQgdGhlbSBpbiBidWZmZXIuCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuIENhbGxlcnMgbXVzdAogICogaG9sZCBhcHBsZXNtY19sb2NrLgpAQCAtMjA1LDggKzIzNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW91dGIoQVBQTEVTTUNfUkVBRF9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX1JFQURfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0yNDksOCArMjc5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb3V0YihBUFBMRVNNQ19XUklURV9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX1dSSVRFX0NNRCkpCiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMjg0LDggKzMxMyw3IEBACiAJcmVhZGtleVsyXSA9IGluZGV4ID4+IDg7CiAJcmVhZGtleVszXSA9IGluZGV4OwogCi0Jb3V0YihBUFBMRVNNQ19HRVRfS0VZX0JZX0lOREVYX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfR0VUX0tFWV9CWV9JTkRFWF9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTMxNSw4ICszNDMsNyBAQAogewogCWludCBpOwogCi0Jb3V0YihBUFBMRVNNQ19HRVRfS0VZX1RZUEVfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7Ci0JaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJaWYgKHNlbmRfY29tbWFuZChBUFBMRVNNQ19HRVRfS0VZX1RZUEVfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0zMjUsNyArMzUyLDcgQEAKIAkJCXJldHVybiAtRUlPOwogCX0KIAotCW91dGIoNSwgQVBQTEVTTUNfREFUQV9QT1JUKTsKKwlvdXRiKDYsIEFQUExFU01DX0RBVEFfUE9SVCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCWlmIChfX3dhaXRfc3RhdHVzKDB4MDUpKQpAQCAtNTI3LDE3ICs1NTQsMjcgQEAKIHN0YXRpYyBzc2l6ZV90IGFwcGxlc21jX2xpZ2h0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpzeXNmc2J1ZikKIHsKKwlzdGF0aWMgaW50IGRhdGFfbGVuZ3RoOwogCWludCByZXQ7CiAJdTggbGVmdCA9IDAsIHJpZ2h0ID0gMDsKLQl1OCBidWZmZXJbNl07CisJdTggYnVmZmVyWzEwXSwgcXVlcnlbNl07CiAKIAltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKIAotCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgYnVmZmVyLCA2KTsKKwlpZiAoIWRhdGFfbGVuZ3RoKSB7CisJCXJldCA9IGFwcGxlc21jX2dldF9rZXlfdHlwZShMSUdIVF9TRU5TT1JfTEVGVF9LRVksIHF1ZXJ5KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCQlkYXRhX2xlbmd0aCA9IGNsYW1wX3ZhbChxdWVyeVswXSwgMCwgMTApOworCQlwcmludGsoS0VSTl9JTkZPICJhcHBsZXNtYzogbGlnaHQgc2Vuc29yIGRhdGEgbGVuZ3RoIHNldCB0byAiCisJCQkiJWRcbiIsIGRhdGFfbGVuZ3RoKTsKKwl9CisKKwlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfTEVGVF9LRVksIGJ1ZmZlciwgZGF0YV9sZW5ndGgpOwogCWxlZnQgPSBidWZmZXJbMl07CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoTElHSFRfU0VOU09SX1JJR0hUX0tFWSwgYnVmZmVyLCA2KTsKKwlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfUklHSFRfS0VZLCBidWZmZXIsIGRhdGFfbGVuZ3RoKTsKIAlyaWdodCA9IGJ1ZmZlclsyXTsKIAogb3V0OgpAQCAtMTIzMywzOSArMTI3MCw1NyBAQAogCXsgLmFjY2VsZXJvbWV0ZXIgPSAwLCAubGlnaHQgPSAwLCAudGVtcGVyYXR1cmVfc2V0ID0gNSB9LAogLyogTWFjQm9vazM6IGFjY2VsZXJvbWV0ZXIgYW5kIHRlbXBlcmF0dXJlIHNldCA2ICovCiAJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDAsIC50ZW1wZXJhdHVyZV9zZXQgPSA2IH0sCisvKiBNYWNCb29rIEFpcjogYWNjZWxlcm9tZXRlciwgYmFja2xpZ2h0IGFuZCB0ZW1wZXJhdHVyZSBzZXQgNyAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAxLCAudGVtcGVyYXR1cmVfc2V0ID0gNyB9LAorLyogTWFjQm9vayBQcm8gNDogYWNjZWxlcm9tZXRlciwgYmFja2xpZ2h0IGFuZCB0ZW1wZXJhdHVyZSBzZXQgOCAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAxLCAudGVtcGVyYXR1cmVfc2V0ID0gOCB9LAorLyogTWFjQm9vayBQcm8gMzogYWNjZWxlcm9tZXRlciwgYmFja2xpZ2h0IGFuZCB0ZW1wZXJhdHVyZSBzZXQgOSAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAxLCAudGVtcGVyYXR1cmVfc2V0ID0gOSB9LAogfTsKIAogLyogTm90ZSB0aGF0IERNSV9NQVRDSCguLi4sIk1hY0Jvb2siKSB3aWxsIG1hdGNoICJNYWNCb29rUHJvMSwxIi4KICAqIFNvIHdlIG5lZWQgdG8gcHV0ICJBcHBsZSBNYWNCb29rIFBybyIgYmVmb3JlICJBcHBsZSBNYWNCb29rIi4gKi8KIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFwcGxlc21jX3doaXRlbGlzdFtdID0geworCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBBaXIiLCB7CisJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFwcGxlIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tBaXIiKSB9LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbN119LAorCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8gNCIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzQiKSB9LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbOF19LAorCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8gMyIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzMiKSB9LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbOV19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8iLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rUHJvIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVswXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVswXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rICh2MikiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rMiIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMV19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbMV19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayAodjMpIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vazMiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzZdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzZdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2siLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVsyXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVsyXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNtaW5pIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjbWluaSIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbM119LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbM119LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjUHJvMiIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY1BybzIiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzRdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzRdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIGlNYWMiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJpTWFjIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVs1XX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs1XX0sCiAJeyAuaWRlbnQgPSBOVUxMIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCmluZGV4IDBmNzBkYzIuLjdiMGVkNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1hZW0uYwpAQCAtMTExOCwzICsxMTE4LDEwIEBACiAKIG1vZHVsZV9pbml0KGFlbV9pbml0KTsKIG1vZHVsZV9leGl0KGFlbV9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzM1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNTUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM2NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1NS0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNzU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNMzg1ME0yL3gzOTUwTTItKiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1wZXguYyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKaW5kZXggNGU5YjE5Yy4uNTM3ZDlmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wZXguYworKysgYi9kcml2ZXJzL2h3bW9uL2libXBleC5jCkBAIC02MDgsMyArNjA4LDkgQEAKIAogbW9kdWxlX2luaXQoaWJtcGV4X2luaXQpOwogbW9kdWxlX2V4aXQoaWJtcGV4X2V4aXQpOworCitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzMzUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM1NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM3NTUtKiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBkNzkzY2MwLi5iNzRjOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJaWYgKHJlZyAmICgxIDw8IG5yKSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiM1xuIik7ICAvKiB0aGVybWFsIGRpb2RlICovCiAJaWYgKHJlZyAmICg4IDw8IG5yKSkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMlxuIik7ICAvKiB0aGVybWlzdG9yICovCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjRcbiIpOyAgLyogdGhlcm1pc3RvciAqLwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOyAgICAgIC8qIGRpc2FibGVkICovCiB9CiBzdGF0aWMgc3NpemVfdCBzZXRfc2Vuc29yKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC00OTMsMTAgKzQ5MywxNSBAQAogCiAJZGF0YS0+c2Vuc29yICY9IH4oMSA8PCBucik7CiAJZGF0YS0+c2Vuc29yICY9IH4oOCA8PCBucik7Ci0JLyogMyA9IHRoZXJtYWwgZGlvZGU7IDIgPSB0aGVybWlzdG9yOyAwID0gZGlzYWJsZWQgKi8KKwlpZiAodmFsID09IDIpIHsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJZGV2X3dhcm4oZGV2LCAiU2Vuc29yIHR5cGUgMiBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIDQgIgorCQkJICJpbnN0ZWFkXG4iKTsKKwkJdmFsID0gNDsKKwl9CisJLyogMyA9IHRoZXJtYWwgZGlvZGU7IDQgPSB0aGVybWlzdG9yOyAwID0gZGlzYWJsZWQgKi8KIAlpZiAodmFsID09IDMpCiAJICAgIGRhdGEtPnNlbnNvciB8PSAxIDw8IG5yOwotCWVsc2UgaWYgKHZhbCA9PSAyKQorCWVsc2UgaWYgKHZhbCA9PSA0KQogCSAgICBkYXRhLT5zZW5zb3IgfD0gOCA8PCBucjsKIAllbHNlIGlmICh2YWwgIT0gMCkgewogCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03OC5jIGIvZHJpdmVycy9od21vbi9sbTc4LmMKaW5kZXggZWQ3ODU5Zi4uYjVlM2IyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc4LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc4LmMKQEAgLTExNCwyNSArMTE0LDE2IEBACiAKICNkZWZpbmUgRElWX0ZST01fUkVHKHZhbCkgKDEgPDwgKHZhbCkpCiAKLS8qIFRoZXJlIGFyZSBzb21lIGNvbXBsaWNhdGlvbnMgaW4gYSBtb2R1bGUgbGlrZSB0aGlzLiBGaXJzdCBvZmYsIExNNzggY2hpcHMKLSAgIG1heSBiZSBib3RoIHByZXNlbnQgb24gdGhlIFNNQnVzIGFuZCB0aGUgSVNBIGJ1cywgYW5kIHdlIGhhdmUgdG8gaGFuZGxlCi0gICB0aG9zZSBjYXNlcyBzZXBhcmF0ZWx5IGF0IHNvbWUgcGxhY2VzLiBTZWNvbmQsIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwKLSAgIExNNzggY2hpcHMgYXZhaWxhYmxlICh3ZWxsLCBhY3R1YWxseSwgdGhhdCBpcyBwcm9iYWJseSBuZXZlciBkb25lOyBidXQKLSAgIGl0IGlzIGEgY2xlYW4gaWxsdXN0cmF0aW9uIG9mIGhvdyB0byBoYW5kbGUgYSBjYXNlIGxpa2UgdGhhdCkuIEZpbmFsbHksCi0gICBhIHNwZWNpZmljIGNoaXAgbWF5IGJlIGF0dGFjaGVkIHRvICpib3RoKiBJU0EgYW5kIFNNQnVzLCBhbmQgd2Ugd291bGQKLSAgIG5vdCBsaWtlIHRvIGRldGVjdCBpdCBkb3VibGUuIEZvcnR1bmF0ZWx5LCBpbiB0aGUgY2FzZSBvZiB0aGUgTE03OCBhdAotICAgbGVhc3QsIGEgcmVnaXN0ZXIgdGVsbHMgdXMgd2hhdCBTTUJ1cyBhZGRyZXNzIHdlIGFyZSBvbiwgc28gdGhhdCBoZWxwcwotICAgYSBiaXQgLSBleGNlcHQgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBTTUJ1cy4gR3JvYW4uIE5vIHNvbHV0aW9uCi0gICBmb3IgdGhpcyB5ZXQuICovCi0KLS8qIEZvciBJU0EgY2hpcHMsIHdlIGFidXNlIHRoZSBpMmNfY2xpZW50IGFkZHIgYW5kIG5hbWUgZmllbGRzLiBXZSBhbHNvIHVzZQotICAgdGhlIGRyaXZlciBmaWVsZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSTJDIGFuZCBJU0EgY2hpcHMuICovCiBzdHJ1Y3QgbG03OF9kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCisJLyogRm9yIElTQSBkZXZpY2Ugb25seSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlzYV9hZGRyOworCiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwpAQCAtMTUxLDkgKzE0MiwxMSBAQAogfTsKIAogCi1zdGF0aWMgaW50IGxtNzhfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgbG03OF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwotc3RhdGljIGludCBsbTc4X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGxtNzhfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJCSAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGxtNzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGxtNzhfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbG03OF9pc2FfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbTc4X2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CkBAIC0xNjQsMTIgKzE1NywyMyBAQAogc3RhdGljIHZvaWQgbG03OF9pbml0X2RldmljZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhKTsKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG03OF9pMmNfaWRbXSA9IHsKKwl7ICJsbTc4IiwgbG03OCB9LAorCXsgImxtNzkiLCBsbTc5IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNzhfaTJjX2lkKTsKKwogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtNzhfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAibG03OCIsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIJPSBsbTc4X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50CT0gbG03OF9kZXRhY2hfY2xpZW50LAorCS5wcm9iZQkJPSBsbTc4X2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGxtNzhfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsbTc4X2kyY19pZCwKKwkuZGV0ZWN0CQk9IGxtNzhfaTJjX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxtNzhfaXNhX2RyaXZlciA9IHsKQEAgLTQ1NCwxNyArNDU4LDYgQEAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW46Ci0gICAgICogbG03OF9kcml2ZXIgaXMgaW5zZXJ0ZWQgKHdoZW4gdGhpcyBtb2R1bGUgaXMgbG9hZGVkKSwgZm9yIGVhY2gKLSAgICAgICBhdmFpbGFibGUgYWRhcHRlcgotICAgICAqIHdoZW4gYSBuZXcgYWRhcHRlciBpcyBpbnNlcnRlZCAoYW5kIGxtNzhfZHJpdmVyIGlzIHN0aWxsIHByZXNlbnQpICovCi1zdGF0aWMgaW50IGxtNzhfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBsbTc4X2RldGVjdCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsbTc4X2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLApAQCAtNTI3LDU0ICs1MjAsNzcgQEAKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+Y2xpZW50Lm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOwogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KLXN0YXRpYyBpbnQgbG03OF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCisvKiBSZXR1cm5zIDEgaWYgdGhlIEkyQyBjaGlwIGFwcGVhcnMgdG8gYmUgYW4gYWxpYXMgb2YgdGhlIElTQSBjaGlwICovCitzdGF0aWMgaW50IGxtNzhfYWxpYXNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNoaXBpZCkKIHsKLQlpbnQgaSwgZXJyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OwotCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7Ci0JY29uc3QgY2hhciAqY2xpZW50X25hbWUgPSAiIjsKKwlzdHJ1Y3QgbG03OF9kYXRhICppc2E7CisJaW50IGk7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBFUlJPUjE7CisJaWYgKCFwZGV2KQkvKiBObyBJU0EgY2hpcCAqLworCQlyZXR1cm4gMDsKKwlpc2EgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChsbTc4X3JlYWRfdmFsdWUoaXNhLCBMTTc4X1JFR19JMkNfQUREUikgIT0gY2xpZW50LT5hZGRyKQorCQlyZXR1cm4gMDsJLyogQWRkcmVzcyBkb2Vzbid0IG1hdGNoICovCisJaWYgKChsbTc4X3JlYWRfdmFsdWUoaXNhLCBMTTc4X1JFR19DSElQSUQpICYgMHhmZSkgIT0gKGNoaXBpZCAmIDB4ZmUpKQorCQlyZXR1cm4gMDsJLyogQ2hpcCB0eXBlIGRvZXNuJ3QgbWF0Y2ggKi8KKworCS8qIFdlIGNvbXBhcmUgYWxsIHRoZSBsaW1pdCByZWdpc3RlcnMsIHRoZSBjb25maWcgcmVnaXN0ZXIgYW5kIHRoZQorCSAqIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDB4MmI7IGkgPD0gMHgzZDsgaSsrKSB7CisJCWlmIChsbTc4X3JlYWRfdmFsdWUoaXNhLCBpKSAhPQorCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIExNNzhfUkVHX0NPTkZJRykgIT0KKwkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE03OF9SRUdfQ09ORklHKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMHg0MzsgaSA8PSAweDQ2OyBpKyspIHsKKwkJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIGkpICE9CisJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpKSkKKwkJCXJldHVybiAwOwogCX0KIAotCS8qIE9LLiBGb3Igbm93LCB3ZSBwcmVzdW1lIHdlIGhhdmUgYSB2YWxpZCBjbGllbnQuIFdlIG5vdyBjcmVhdGUgdGhlCi0JICAgY2xpZW50IHN0cnVjdHVyZSwgZXZlbiB0aG91Z2ggd2UgY2Fubm90IGZpbGwgaXQgY29tcGxldGVseSB5ZXQuCi0JICAgQnV0IGl0IGFsbG93cyB1cyB0byBhY2Nlc3MgbG03OF97cmVhZCx3cml0ZX1fdmFsdWUuICovCisJcmV0dXJuIDE7Cit9CiAKLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtNzhfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIEVSUk9SMTsKLQl9CitzdGF0aWMgaW50IGxtNzhfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJCSAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbG03OF9kYXRhICppc2EgPSBwZGV2ID8gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikgOiBOVUxMOworCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKIAotCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQluZXdfY2xpZW50LT5kcml2ZXIgPSAmbG03OF9kcml2ZXI7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uICovCisJLyogV2UgYmxvY2sgdXBkYXRlcyBvZiB0aGUgSVNBIGRldmljZSB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZgorCSAgIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzYW1lIExNNzggY2hpcCB0aHJvdWdoIGRpZmZlcmVudAorCSAgIGludGVyZmFjZXMuICovCisJaWYgKGlzYSkKKwkJbXV0ZXhfbG9jaygmaXNhLT51cGRhdGVfbG9jayk7CisKIAlpZiAoa2luZCA8IDApIHsKLQkJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DT05GSUcpICYgMHg4MCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOwotCQl9Ci0JCWlmIChsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfSTJDX0FERFIpICE9Ci0JCSAgICBhZGRyZXNzKSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBFUlJPUjI7Ci0JCX0KKwkJaWYgKChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTc4X1JFR19DT05GSUcpICYgMHg4MCkKKwkJIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNNzhfUkVHX0kyQ19BRERSKQorCQkgICAgIT0gYWRkcmVzcykKKwkJCWdvdG8gZXJyX25vZGV2OworCisJCS8qIEV4cGxpY2l0bHkgcHJldmVudCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFdpbmJvbmQgY2hpcHMgKi8KKwkJaSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4NGYpOworCQlpZiAoaSA9PSAweGEzIHx8IGkgPT0gMHg1YykKKwkJCWdvdG8gZXJyX25vZGV2OwogCX0KIAogCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwogCWlmIChraW5kIDw9IDApIHsKLQkJaSA9IGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DSElQSUQpOworCQlpID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE03OF9SRUdfQ0hJUElEKTsKIAkJaWYgKGkgPT0gMHgwMCB8fCBpID09IDB4MjAJLyogTE03OCAqLwogCQkgfHwgaSA9PSAweDQwKQkJCS8qIExNNzgtSiAqLwogCQkJa2luZCA9IGxtNzg7CkBAIC01ODYsMzMgKzYwMiw1OSBAQAogCQkJCQkicGFyYW1ldGVyIGZvciB1bmtub3duIGNoaXAgYXQgIgogCQkJCQkiYWRhcHRlciAlZCwgYWRkcmVzcyAweCUwMnhcbiIsCiAJCQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKKwkJCWdvdG8gZXJyX25vZGV2OworCQl9CisKKwkJaWYgKGxtNzhfYWxpYXNfZGV0ZWN0KGNsaWVudCwgaSkpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldmljZSBhdCAweCUwMnggYXBwZWFycyB0byAiCisJCQkJImJlIHRoZSBzYW1lIGFzIElTQSBkZXZpY2VcbiIsIGFkZHJlc3MpOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAl9CiAKLQlpZiAoa2luZCA9PSBsbTc4KSB7Ci0JCWNsaWVudF9uYW1lID0gImxtNzgiOwotCX0gZWxzZSBpZiAoa2luZCA9PSBsbTc5KSB7CisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKworCXN3aXRjaCAoa2luZCkgeworCWNhc2UgbG03OToKIAkJY2xpZW50X25hbWUgPSAibG03OSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNsaWVudF9uYW1lID0gImxtNzgiOwogCX0KKwlzdHJsY3B5KGluZm8tPnR5cGUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAotCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KLQlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKLQlkYXRhLT50eXBlID0ga2luZDsKKwlyZXR1cm4gMDsKIAotCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KLQlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKLQkJZ290byBFUlJPUjI7CisgZXJyX25vZGV2OgorCWlmIChpc2EpCisJCW11dGV4X3VubG9jaygmaXNhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgbG03OF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG03OF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlkYXRhLT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgTE03OCBjaGlwICovCiAJbG03OF9pbml0X2RldmljZShkYXRhKTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCkpKQorCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOworCWlmIChlcnIpCiAJCWdvdG8gRVJST1IzOwogCi0JZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CiAJCWdvdG8gRVJST1I0OwpAQCAtNjIxLDI2ICs2NjMsMTggQEAKIAlyZXR1cm4gMDsKIAogRVJST1I0OgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKIEVSUk9SMzoKLQlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKLUVSUk9SMjoKIAlrZnJlZShkYXRhKTsKLUVSUk9SMToKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxtNzhfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBsbTc4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCk7Ci0KLQlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQotCQlyZXR1cm4gZXJyOwotCiAJa2ZyZWUoZGF0YSk7CiAKIAlyZXR1cm4gMDsKQEAgLTY1MSwxMSArNjg1LDEwIEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgTE03OF9FWFRFTlQsICJsbTc4IikpIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBMTTc4X0FERFJfUkVHX09GRlNFVCwgMiwgImxtNzgiKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC02NjUsMTggKzY5OCwxNiBAQAogCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CiAJfQogCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwotCWRhdGEtPmNsaWVudC5hZGRyID0gcmVzLT5zdGFydDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoJmRhdGEtPmNsaWVudCwgZGF0YSk7CisJZGF0YS0+aXNhX2FkZHIgPSByZXMtPnN0YXJ0OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCiAJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DSElQSUQpICYgMHg4MCkgewogCQlkYXRhLT50eXBlID0gbG03OTsKLQkJbmFtZSA9ICJsbTc5IjsKKwkJZGF0YS0+bmFtZSA9ICJsbTc5IjsKIAl9IGVsc2UgewogCQlkYXRhLT50eXBlID0gbG03ODsKLQkJbmFtZSA9ICJsbTc4IjsKKwkJZGF0YS0+bmFtZSA9ICJsbTc4IjsKIAl9Ci0Jc3RybGNweShkYXRhLT5jbGllbnQubmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBMTTc4IGNoaXAgKi8KIAlsbTc4X2luaXRfZGV2aWNlKGRhdGEpOwpAQCAtNjk5LDcgKzczMCw3IEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKIAlrZnJlZShkYXRhKTsKICBleGl0X3JlbGVhc2VfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIExNNzhfRVhURU5UKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgTE03OF9BRERSX1JFR19PRkZTRVQsIDIpOwogIGV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTcwNywxMyArNzM4LDE2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbTc4X2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwotCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmNsaWVudC5hZGRyLCBMTTc4X0VYVEVOVCk7CiAJa2ZyZWUoZGF0YSk7CiAKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCArIExNNzhfQUREUl9SRUdfT0ZGU0VULCAyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC03MjQsMTMgKzc1OCwxMyBAQAogICAgd291bGQgc2xvdyBkb3duIHRoZSBMTTc4IGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuICAqLwogc3RhdGljIGludCBsbTc4X3JlYWRfdmFsdWUoc3RydWN0IGxtNzhfZGF0YSAqZGF0YSwgdTggcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KKwlpZiAoIWNsaWVudCkgeyAvKiBJU0EgZGV2aWNlICovCiAJCWludCByZXM7CiAJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCQlvdXRiX3AocmVnLCBjbGllbnQtPmFkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7Ci0JCXJlcyA9IGluYl9wKGNsaWVudC0+YWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZywgZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CisJCXJlcyA9IGluYl9wKGRhdGEtPmlzYV9hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOwogCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCQlyZXR1cm4gcmVzOwogCX0gZWxzZQpAQCAtNzQ2LDEyICs3ODAsMTIgQEAKICAgIG5vd2hlcmUgZWxzZSBiZSBuZWNlc3NhcnkhICovCiBzdGF0aWMgaW50IGxtNzhfd3JpdGVfdmFsdWUoc3RydWN0IGxtNzhfZGF0YSAqZGF0YSwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OwogCi0JaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCisJaWYgKCFjbGllbnQpIHsgLyogSVNBIGRldmljZSAqLwogCQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQkJb3V0Yl9wKHJlZywgY2xpZW50LT5hZGRyICsgTE03OF9BRERSX1JFR19PRkZTRVQpOwotCQlvdXRiX3AodmFsdWUsIGNsaWVudC0+YWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZywgZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCh2YWx1ZSwgZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0RBVEFfUkVHX09GRlNFVCk7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiAwOwogCX0gZWxzZQpAQCAtODM3LDggKzg3MSwxNyBAQAogewogCWludCB2YWwsIHNhdmUsIGZvdW5kID0gMDsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgTE03OF9FWFRFTlQsICJsbTc4IikpCisJLyogV2UgaGF2ZSB0byByZXF1ZXN0IHRoZSByZWdpb24gaW4gdHdvIHBhcnRzIGJlY2F1c2Ugc29tZQorCSAgIGJvYXJkcyBkZWNsYXJlIGJhc2UrNCB0byBiYXNlKzcgYXMgYSBQTlAgZGV2aWNlICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLCA0LCAibG03OCIpKSB7CisJCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBsb3cgcGFydCBvZiByZWdpb25cbiIpOwogCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzICsgNCwgNCwgImxtNzgiKSkgeworCQlwcl9kZWJ1ZygibG03ODogRmFpbGVkIHRvIHJlcXVlc3QgaGlnaCBwYXJ0IG9mIHJlZ2lvblxuIik7CisJCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOworCQlyZXR1cm4gMDsKKwl9CiAKICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KIAkvKiBXZSBuZWVkIHRoZSB0aW1lb3V0cyBmb3IgYXQgbGVhc3Qgc29tZSBMTTc4LWxpa2UKQEAgLTkwMSw3ICs5NDQsOCBAQAogCQkJdmFsICYgMHg4MCA/ICJMTTc5IiA6ICJMTTc4IiwgKGludClhZGRyZXNzKTsKIAogIHJlbGVhc2U6Ci0JcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgTE03OF9FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MgKyA0LCA0KTsKKwlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCA0KTsKIAlyZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTk0OSwxNCArOTkzLDEyIEBACiB7CiAJaW50IHJlczsKIAotCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZsbTc4X2RyaXZlcik7Ci0JaWYgKHJlcykKLQkJZ290byBleGl0OwotCisJLyogV2UgcmVnaXN0ZXIgdGhlIElTQSBkZXZpY2UgZmlyc3QsIHNvIHRoYXQgd2UgY2FuIHNraXAgdGhlCisJICogcmVnaXN0cmF0aW9uIG9mIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIHNhbWUgZGV2aWNlLiAqLwogCWlmIChsbTc4X2lzYV9mb3VuZChpc2FfYWRkcmVzcykpIHsKIAkJcmVzID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZsbTc4X2lzYV9kcml2ZXIpOwogCQlpZiAocmVzKQotCQkJZ290byBleGl0X3VucmVnX2kyY19kcml2ZXI7CisJCQlnb3RvIGV4aXQ7CiAKIAkJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCiAJCXJlcyA9IGxtNzhfaXNhX2RldmljZV9hZGQoaXNhX2FkZHJlc3MpOwpAQCAtOTY0LDEyICsxMDA2LDE2IEBACiAJCQlnb3RvIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjsKIAl9CiAKKwlyZXMgPSBpMmNfYWRkX2RyaXZlcigmbG03OF9kcml2ZXIpOworCWlmIChyZXMpCisJCWdvdG8gZXhpdF91bnJlZ19pc2FfZGV2aWNlOworCiAJcmV0dXJuIDA7CiAKKyBleGl0X3VucmVnX2lzYV9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAgZXhpdF91bnJlZ19pc2FfZHJpdmVyOgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsbTc4X2lzYV9kcml2ZXIpOwotIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmbG03OF9kcml2ZXIpOwogIGV4aXQ6CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggMTJkNDQ2Zi4uM2ZmMDI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTUsNiArNSw3IEBACiAgICAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzICBQaGlsaXAgUG9rb3JueSA8cHBva29ybnlAcGVuZ3VpbmNvbXB1dGluZy5jb20+CiAgICAgQ29weXJpZ2h0IChjKSAyMDAzICAgICAgICBNYXJnaXQgU2NodWJlcnQtV2hpbGUgPG1hcmdpdHN3QHQtb25saW5lLmRlPgogICAgIENvcHlyaWdodCAoYykgMjAwNCAgICAgICAgSnVzdGluIFRoaWVzc2VuIDxqdGhpZXNzZW5AcGVuZ3VpbmNvbXB1dGluZy5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIAogICAgIENoaXAgZGV0YWlscyBhdAkgICAgICA8aHR0cDovL3d3dy5uYXRpb25hbC5jb20vZHMvTE0vTE04NS5wZGY+CiAKQEAgLTE3Myw0MCArMTc0LDM5IEBACiB7CiAJaW50IGk7CiAKLQlpZiAocmFuZ2UgPj0gbG04NV9yYW5nZV9tYXBbMTVdKQotCQlyZXR1cm4gMTU7Ci0KIAkvKiBGaW5kIHRoZSBjbG9zZXN0IG1hdGNoICovCi0JZm9yIChpID0gMTQ7IGkgPj0gMDsgLS1pKSB7Ci0JCWlmIChyYW5nZSA+PSBsbTg1X3JhbmdlX21hcFtpXSkgewotCQkJaWYgKChsbTg1X3JhbmdlX21hcFtpICsgMV0gLSByYW5nZSkgPAotCQkJCQkocmFuZ2UgLSBsbTg1X3JhbmdlX21hcFtpXSkpCi0JCQkJcmV0dXJuIGkgKyAxOwotCQkJcmV0dXJuIGk7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgMTU7ICsraSkgeworCQlpZiAocmFuZ2UgPD0gKGxtODVfcmFuZ2VfbWFwW2ldICsgbG04NV9yYW5nZV9tYXBbaSArIDFdKSAvIDIpCisJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaTsKIH0KICNkZWZpbmUgUkFOR0VfRlJPTV9SRUcodmFsKQlsbTg1X3JhbmdlX21hcFsodmFsKSAmIDB4MGZdCiAKIC8qIFRoZXNlIGFyZSB0aGUgUFdNIGZyZXF1ZW5jeSBlbmNvZGluZ3MgKi8KLXN0YXRpYyBjb25zdCBpbnQgbG04NV9mcmVxX21hcFtdID0geyAvKiAuMSBIeiAqLwotCTEwMCwgMTUwLCAyMzAsIDMwMCwgMzgwLCA0NzAsIDYyMCwgOTQwCitzdGF0aWMgY29uc3QgaW50IGxtODVfZnJlcV9tYXBbOF0gPSB7IC8qIDEgSHogKi8KKwkxMCwgMTUsIDIzLCAzMCwgMzgsIDQ3LCA2MSwgOTQKK307CitzdGF0aWMgY29uc3QgaW50IGFkbTEwMjdfZnJlcV9tYXBbOF0gPSB7IC8qIDEgSHogKi8KKwkxMSwgMTUsIDIyLCAyOSwgMzUsIDQ0LCA1OSwgODgKIH07CiAKLXN0YXRpYyBpbnQgRlJFUV9UT19SRUcoaW50IGZyZXEpCitzdGF0aWMgaW50IEZSRVFfVE9fUkVHKGNvbnN0IGludCAqbWFwLCBpbnQgZnJlcSkKIHsKIAlpbnQgaTsKIAotCWlmIChmcmVxID49IGxtODVfZnJlcV9tYXBbN10pCi0JCXJldHVybiA3OworCS8qIEZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQotCQlpZiAoZnJlcSA8PSBsbTg1X2ZyZXFfbWFwW2ldKQorCQlpZiAoZnJlcSA8PSAobWFwW2ldICsgbWFwW2kgKyAxXSkgLyAyKQogCQkJYnJlYWs7CiAJcmV0dXJuIGk7CiB9Ci0jZGVmaW5lIEZSRVFfRlJPTV9SRUcodmFsKQlsbTg1X2ZyZXFfbWFwWyh2YWwpICYgMHgwN10KKworc3RhdGljIGludCBGUkVRX0ZST01fUkVHKGNvbnN0IGludCAqbWFwLCB1OCByZWcpCit7CisJcmV0dXJuIG1hcFtyZWcgJiAweDA3XTsKK30KIAogLyogU2luY2Ugd2UgY2FuJ3QgdXNlIHN0cmluZ3MsIEknbSBhYnVzaW5nIHRoZXNlIG51bWJlcnMKICAqICAgdG8gc3RhbmQgaW4gZm9yIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CkBAIC0yNzUsNyArMjc1LDYgQEAKIAogc3RydWN0IGxtODVfYXV0b2ZhbiB7CiAJdTggY29uZmlnOwkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IGZyZXE7CS8qIFBXTSBmcmVxdWVuY3ksIGVuY29kZWQgKi8KIAl1OCBtaW5fcHdtOwkvKiBNaW5pbXVtIFBXTSB2YWx1ZSwgZW5jb2RlZCAqLwogCXU4IG1pbl9vZmY7CS8qIE1pbiBQV00gb3IgT0ZGIGJlbG93ICJsaW1pdCIsIGZsYWcgKi8KIH07CkBAIC0yODMsOCArMjgyLDggQEAKIC8qIEZvciBlYWNoIHJlZ2lzdGVyZWQgY2hpcCwgd2UgbmVlZCB0byBrZWVwIHNvbWUgZGF0YSBpbiBtZW1vcnkuCiAgICBUaGUgc3RydWN0dXJlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gKi8KIHN0cnVjdCBsbTg1X2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJY29uc3QgaW50ICpmcmVxX21hcDsKIAllbnVtIGNoaXBzIHR5cGU7CiAKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CkBAIC0zMDEsNiArMzAwLDcgQEAKIAl1MTYgZmFuWzRdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1MTYgZmFuX21pbls0XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggcHdtWzNdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBwd21fZnJlcVszXTsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nICovCiAJdTggdGVtcF9leHRbM107CQkvKiBEZWNvZGVkIHZhbHVlcyAqLwogCXU4IGluX2V4dFs4XTsJCS8qIERlY29kZWQgdmFsdWVzICovCiAJdTggdmlkOwkJCS8qIFJlZ2lzdGVyIHZhbHVlICovCkBAIC0zMTAsMjIgKzMxMCw0MCBAQAogCXN0cnVjdCBsbTg1X3pvbmUgem9uZVszXTsKIH07CiAKLXN0YXRpYyBpbnQgbG04NV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAotCQkJaW50IGtpbmQpOwotc3RhdGljIGludCBsbTg1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgbG04NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCBsbTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGludCBsbTg1X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKTsKIHN0YXRpYyB2b2lkIGxtODVfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCBpbnQgdmFsdWUpOwogc3RhdGljIHN0cnVjdCBsbTg1X2RhdGEgKmxtODVfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTg1X2lkW10gPSB7CisJeyAiYWRtMTAyNyIsIGFkbTEwMjcgfSwKKwl7ICJhZHQ3NDYzIiwgYWR0NzQ2MyB9LAorCXsgImxtODUiLCBhbnlfY2hpcCB9LAorCXsgImxtODViIiwgbG04NWIgfSwKKwl7ICJsbTg1YyIsIGxtODVjIH0sCisJeyAiZW1jNmQxMDAiLCBlbWM2ZDEwMCB9LAorCXsgImVtYzZkMTAxIiwgZW1jNmQxMDAgfSwKKwl7ICJlbWM2ZDEwMiIsIGVtYzZkMTAyIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtODVfaWQpOworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG04NV9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZSAgID0gImxtODUiLAogCX0sCi0JLmF0dGFjaF9hZGFwdGVyID0gbG04NV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCAgPSBsbTg1X2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IGxtODVfcHJvYmUsCisJLnJlbW92ZQkJPSBsbTg1X3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsbTg1X2lkLAorCS5kZXRlY3QJCT0gbG04NV9kZXRlY3QsCisJLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiAKQEAgLTUyOCwxMSArNTQ2LDM5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBsbTg1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRlJFUV9GUk9NX1JFRyhkYXRhLT5mcmVxX21hcCwKKwkJCQkJCSAgZGF0YS0+cHdtX2ZyZXFbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5wd21fZnJlcVtucl0gPSBGUkVRX1RPX1JFRyhkYXRhLT5mcmVxX21hcCwgdmFsKTsKKwlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShuciksCisJCShkYXRhLT56b25lW25yXS5yYW5nZSA8PCA0KQorCQl8IGRhdGEtPnB3bV9mcmVxW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCiAjZGVmaW5lIHNob3dfcHdtX3JlZyhvZmZzZXQpCQkJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCiAJCXNob3dfcHdtLCBzZXRfcHdtLCBvZmZzZXQgLSAxKTsJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCVwKLQkJc2hvd19wd21fZW5hYmxlLCBzZXRfcHdtX2VuYWJsZSwgb2Zmc2V0IC0gMSkKKwkJc2hvd19wd21fZW5hYmxlLCBzZXRfcHdtX2VuYWJsZSwgb2Zmc2V0IC0gMSk7CQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZnJlcSwgU19JUlVHTyB8IFNfSVdVU1IsCVwKKwkJc2hvd19wd21fZnJlcSwgc2V0X3B3bV9mcmVxLCBvZmZzZXQgLSAxKQogCiBzaG93X3B3bV9yZWcoMSk7CiBzaG93X3B3bV9yZWcoMik7CkBAIC03NjEsMzEgKzgwNyw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3B3bV9hdXRvX3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OwotCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBsbTg1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRlJFUV9GUk9NX1JFRyhkYXRhLT5hdXRvZmFuW25yXS5mcmVxKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9wd21fYXV0b19wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5hdXRvZmFuW25yXS5mcmVxID0gRlJFUV9UT19SRUcodmFsKTsKLQlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShuciksCi0JCShkYXRhLT56b25lW25yXS5yYW5nZSA8PCA0KQotCQl8IGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEpOwotCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQogI2RlZmluZSBwd21fYXV0byhvZmZzZXQpCQkJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2F1dG9fY2hhbm5lbHMsCQkJXAogCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21fYXV0b19jaGFubmVscywJCVwKQEAgLTc5NSwxMCArODE2LDcgQEAKIAkJc2V0X3B3bV9hdXRvX3B3bV9taW4sIG9mZnNldCAtIDEpOwkJCVwKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19hdXRvX3B3bV9taW5jdGwsCQlcCiAJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV9hdXRvX3B3bV9taW5jdGwsCQlcCi0JCXNldF9wd21fYXV0b19wd21fbWluY3RsLCBvZmZzZXQgLSAxKTsJCQlcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfYXV0b19wd21fZnJlcSwJCQlcCi0JCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV9hdXRvX3B3bV9mcmVxLAkJXAotCQlzZXRfcHdtX2F1dG9fcHdtX2ZyZXEsIG9mZnNldCAtIDEpOworCQlzZXRfcHdtX2F1dG9fcHdtX21pbmN0bCwgb2Zmc2V0IC0gMSkKIAogcHdtX2F1dG8oMSk7CiBwd21fYXV0bygyKTsKQEAgLTg2Nyw3ICs4ODUsNyBAQAogCQlURU1QX0ZST01fUkVHKGRhdGEtPnpvbmVbbnJdLmxpbWl0KSk7CiAJbG04NV93cml0ZV92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fUkFOR0UobnIpLAogCQkoKGRhdGEtPnpvbmVbbnJdLnJhbmdlICYgMHgwZikgPDwgNCkKLQkJfCAoZGF0YS0+YXV0b2Zhbltucl0uZnJlcSAmIDB4MDcpKTsKKwkJfCAoZGF0YS0+cHdtX2ZyZXFbbnJdICYgMHgwNykpOwogCiAvKiBVcGRhdGUgdGVtcF9hdXRvX2h5c3QgYW5kIHRlbXBfYXV0b19vZmYgKi8KIAlkYXRhLT56b25lW25yXS5oeXN0ID0gSFlTVF9UT19SRUcoVEVNUF9GUk9NX1JFRygKQEAgLTkxMCw3ICs5MjgsNyBAQAogCQl2YWwgLSBtaW4pOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKIAkJKChkYXRhLT56b25lW25yXS5yYW5nZSAmIDB4MGYpIDw8IDQpCi0JCXwgKGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEgJiAweDA3KSk7CisJCXwgKGRhdGEtPnB3bV9mcmVxW25yXSAmIDB4MDcpKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05NTcsMTMgKzk3NSw2IEBACiB0ZW1wX2F1dG8oMik7CiB0ZW1wX2F1dG8oMyk7CiAKLXN0YXRpYyBpbnQgbG04NV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtODVfZGV0ZWN0KTsKLX0KLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtODVfYXR0cmlidXRlc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLApAQCAtOTg0LDYgKzk5NSw5IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2ZyZXEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZnJlcS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19mcmVxLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCkBAIC0xMDI2LDkgKzEwNDAsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9mcmVxLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcHdtX2ZyZXEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fZnJlcS5kZXZfYXR0ci5hdHRyLAogCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCkBAIC0xMTAzLDEwOSArMTExNCw3NCBAQAogCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJEZXZpY2UgaXMgbm90IHJlYWR5XG4iKTsKIH0KIAotc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAotCQlpbnQga2luZCkKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLworc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKLQlpbnQgY29tcGFueSwgdmVyc3RlcDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGE7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCWludCBhZGRyZXNzID0gY2xpZW50LT5hZGRyOwogCWNvbnN0IGNoYXIgKnR5cGVfbmFtZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQkvKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZG8gYnl0ZSBJL08gKi8KLQkJZ290byBFUlJPUjA7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIE9LLiBGb3Igbm93LCB3ZSBwcmVzdW1lIHdlIGhhdmUgYSB2YWxpZCBjbGllbnQuIFdlIG5vdyBjcmVhdGUgdGhlCi0JICAgY2xpZW50IHN0cnVjdHVyZSwgZXZlbiB0aG91Z2ggd2UgY2Fubm90IGZpbGwgaXQgY29tcGxldGVseSB5ZXQuCi0JICAgQnV0IGl0IGFsbG93cyB1cyB0byBhY2Nlc3MgbG04NV97cmVhZCx3cml0ZX1fdmFsdWUuICovCisJLyogSWYgYXV0by1kZXRlY3RpbmcsIGRldGVybWluZSB0aGUgY2hpcCB0eXBlICovCisJaWYgKGtpbmQgPCAwKSB7CisJCWludCBjb21wYW55ID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQ09NUEFOWSk7CisJCWludCB2ZXJzdGVwID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfVkVSU1RFUCk7CiAKLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtODVfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIEVSUk9SMDsKLQl9CisJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGluZyBkZXZpY2UgYXQgMHglMDJ4IHdpdGggIgorCQkJIkNPTVBBTlk6IDB4JTAyeCBhbmQgVkVSU1RFUDogMHglMDJ4XG4iLAorCQkJYWRkcmVzcywgY29tcGFueSwgdmVyc3RlcCk7CiAKLQljbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZsbTg1X2RyaXZlcjsKKwkJLyogQWxsIHN1cHBvcnRlZCBjaGlwcyBoYXZlIHRoZSB2ZXJzaW9uIGluIGNvbW1vbiAqLworCQlpZiAoKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spICE9IExNODVfVkVSU1RFUF9HRU5FUklDKSB7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZDogIgorCQkJCSJ1bnN1cHBvcnRlZCB2ZXJzaW9uXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWtpbmQgPSBhbnlfY2hpcDsKIAotCS8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uICovCi0KLQljb21wYW55ID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQ09NUEFOWSk7Ci0JdmVyc3RlcCA9IGxtODVfcmVhZF92YWx1ZShjbGllbnQsIExNODVfUkVHX1ZFUlNURVApOwotCi0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW5nIGRldmljZSBhdCAlZCwweCUwMnggd2l0aCIKLQkJIiBDT01QQU5ZOiAweCUwMnggYW5kIFZFUlNURVA6IDB4JTAyeFxuIiwKLQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyLAotCQljb21wYW55LCB2ZXJzdGVwKTsKLQotCS8qIElmIGF1dG8tZGV0ZWN0aW5nLCBEZXRlcm1pbmUgdGhlIGNoaXAgdHlwZS4gKi8KLQlpZiAoa2luZCA8PSAwKSB7Ci0JCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3RpbmcgZGV2aWNlIGF0ICVkLDB4JTAyeCAuLi5cbiIsCi0JCQlpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSwgYWRkcmVzcyk7Ci0JCWlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTAotCQkgICAgJiYgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfTE04NUMpIHsKLQkJCWtpbmQgPSBsbTg1YzsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTAotCQkgICAgJiYgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfTE04NUIpIHsKLQkJCWtpbmQgPSBsbTg1YjsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTAotCQkgICAgJiYgKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spID09IExNODVfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJVbnJlY29nbml6ZWQgdmVyc2lvbi9zdGVwcGluZyAweCUwMngiCi0JCQkJIiBEZWZhdWx0aW5nIHRvIExNODUuXG4iLCB2ZXJzdGVwKTsKLQkJCWtpbmQgPSBhbnlfY2hpcDsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9BTkFMT0dfREVWCi0JCSAgICAmJiB2ZXJzdGVwID09IExNODVfVkVSU1RFUF9BRE0xMDI3KSB7Ci0JCQlraW5kID0gYWRtMTAyNzsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9BTkFMT0dfREVWCi0JCSAgICAmJiAodmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfQURUNzQ2MwotCQkJIHx8IHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0FEVDc0NjNDKSkgewotCQkJa2luZCA9IGFkdDc0NjM7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfQU5BTE9HX0RFVgotCQkgICAgJiYgKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spID09IExNODVfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJVbnJlY29nbml6ZWQgdmVyc2lvbi9zdGVwcGluZyAweCUwMngiCi0JCQkJIiBEZWZhdWx0aW5nIHRvIEdlbmVyaWMgTE04NS5cbiIsIHZlcnN0ZXApOwotCQkJa2luZCA9IGFueV9jaGlwOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX1NNU0MKLQkJICAgICYmICh2ZXJzdGVwID09IExNODVfVkVSU1RFUF9FTUM2RDEwMF9BMAotCQkJIHx8IHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0VNQzZEMTAwX0ExKSkgewotCQkJLyogVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgdGVsbCBhICcxMDAgZnJvbSBhICcxMDEKLQkJCSAqIGZyb20gdGhlIHJlZ2lzdGVycy4gIFNpbmNlIGEgJzEwMSBpcyBhICcxMDAKLQkJCSAqIGluIGEgcGFja2FnZSB3aXRoIGZld2VyIHBpbnMgYW5kIHRoZXJlZm9yZSBubwotCQkJICogMy4zViwgMS41ViBvciAxLjhWIGlucHV0cywgcGVyaGFwcyBpZiB0aG9zZQotCQkJICogaW5wdXRzIHJlYWQgMCwgdGhlbiBpdCdzIGEgJzEwMS4KLQkJCSAqLwotCQkJa2luZCA9IGVtYzZkMTAwOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX1NNU0MKLQkJICAgICYmIHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0VNQzZEMTAyKSB7Ci0JCQlraW5kID0gZW1jNmQxMDI7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfU01TQwotCQkgICAgJiYgKHZlcnN0ZXAgJiBMTTg1X1ZFUlNURVBfVk1BU0spID09IExNODVfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJsbTg1OiBEZXRlY3RlZCBTTVNDIGNoaXBcbiIpOwotCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAibG04NTogVW5yZWNvZ25pemVkIHZlcnNpb24vc3RlcHBpbmcgMHglMDJ4IgotCQkJICAgICIgRGVmYXVsdGluZyB0byBHZW5lcmljIExNODUuXG4iLCB2ZXJzdGVwKTsKLQkJCWtpbmQgPSBhbnlfY2hpcDsKLQkJfSBlbHNlIGlmIChraW5kID09IGFueV9jaGlwCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgTE04NSBWZXJzaW9uIDYgZGV0ZWN0ZWRcbiIpOwotCQkJLyogTGVhdmUga2luZCBhcyAiYW55X2NoaXAiICovCi0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7Ci0JCQkvKiBOb3QgYW4gTE04NS4uLiAqLwotCQkJaWYgKGtpbmQgPT0gYW55X2NoaXApIHsgIC8qIFVzZXIgdXNlZCBmb3JjZT14LHkgKi8KLQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJHZW5lcmljIExNODUgVmVyc2lvbiA2IG5vdCIKLQkJCQkJIiBmb3VuZCBhdCAlZCwweCUwMnguIFRyeSBmb3JjZV9sbTg1Yy5cbiIsCi0JCQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKKwkJLyogTm93LCByZWZpbmUgdGhlIGRldGVjdGlvbiAqLworCQlpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfTkFUSU9OQUwpIHsKKwkJCXN3aXRjaCAodmVyc3RlcCkgeworCQkJY2FzZSBMTTg1X1ZFUlNURVBfTE04NUM6CisJCQkJa2luZCA9IGxtODVjOworCQkJCWJyZWFrOworCQkJY2FzZSBMTTg1X1ZFUlNURVBfTE04NUI6CisJCQkJa2luZCA9IGxtODViOworCQkJCWJyZWFrOwogCQkJfQotCQkJZXJyID0gMDsKLQkJCWdvdG8gRVJST1IxOworCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX0FOQUxPR19ERVYpIHsKKwkJCXN3aXRjaCAodmVyc3RlcCkgeworCQkJY2FzZSBMTTg1X1ZFUlNURVBfQURNMTAyNzoKKwkJCQlraW5kID0gYWRtMTAyNzsKKwkJCQlicmVhazsKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0FEVDc0NjM6CisJCQljYXNlIExNODVfVkVSU1RFUF9BRFQ3NDYzQzoKKwkJCQlraW5kID0gYWR0NzQ2MzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9TTVNDKSB7CisJCQlzd2l0Y2ggKHZlcnN0ZXApIHsKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAwX0EwOgorCQkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTE6CisJCQkJLyogTm90ZTogd2UgY2FuJ3QgdGVsbCBhICcxMDAgZnJvbSBhICcxMDEgKi8KKwkJCQlraW5kID0gZW1jNmQxMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwMjoKKwkJCQlraW5kID0gZW1jNmQxMDI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZDogIgorCQkJCSJ1bmtub3duIHZlbmRvclxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIAotCS8qIEZpbGwgaW4gdGhlIGNoaXAgc3BlY2lmaWMgZHJpdmVyIHZhbHVlcyAqLwogCXN3aXRjaCAoa2luZCkgewogCWNhc2UgbG04NWI6CiAJCXR5cGVfbmFtZSA9ICJsbTg1YiI7CkBAIC0xMjI4LDE2ICsxMjA0LDM2IEBACiAJZGVmYXVsdDoKIAkJdHlwZV9uYW1lID0gImxtODUiOwogCX0KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgdHlwZV9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIHR5cGVfbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKLQkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLwotCWRhdGEtPnR5cGUgPSBraW5kOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxtODVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG04NV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikKLQkJZ290byBFUlJPUjE7CisJLyogRmlsbCBpbiB0aGUgY2hpcCBzcGVjaWZpYyBkcml2ZXIgdmFsdWVzICovCisJc3dpdGNoIChkYXRhLT50eXBlKSB7CisJY2FzZSBhZG0xMDI3OgorCWNhc2UgYWR0NzQ2MzoKKwljYXNlIGVtYzZkMTAwOgorCWNhc2UgZW1jNmQxMDI6CisJCWRhdGEtPmZyZXFfbWFwID0gYWRtMTAyN19mcmVxX21hcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YS0+ZnJlcV9tYXAgPSBsbTg1X2ZyZXFfbWFwOworCX0KIAogCS8qIFNldCB0aGUgVlJNIHZlcnNpb24gKi8KIAlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CkBAIC0xMjQ4LDQ1ICsxMjQ0LDQyIEBACiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwKTsKIAlpZiAoZXJyKQotCQlnb3RvIEVSUk9SMjsKKwkJZ290byBlcnJfa2ZyZWU7CiAKIAkvKiBUaGUgQURUNzQ2MyBoYXMgYW4gb3B0aW9uYWwgVlJNIDEwIG1vZGUgd2hlcmUgcGluIDIxIGlzIHVzZWQKIAkgICBhcyBhIHNpeHRoIGRpZ2l0YWwgVklEIGlucHV0IHJhdGhlciB0aGFuIGFuIGFuYWxvZyBpbnB1dC4gKi8KIAlkYXRhLT52aWQgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19WSUQpOwotCWlmICghKGtpbmQgPT0gYWR0NzQ2MyAmJiAoZGF0YS0+dmlkICYgMHg4MCkpKQorCWlmICghKGRhdGEtPnR5cGUgPT0gYWR0NzQ2MyAmJiAoZGF0YS0+dmlkICYgMHg4MCkpKQogCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwKIAkJCQkJJmxtODVfZ3JvdXBfaW40KSkpCi0JCQlnb3RvIEVSUk9SMzsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAogCS8qIFRoZSBFTUM2RDEwMCBoYXMgMyBhZGRpdGlvbmFsIHZvbHRhZ2UgaW5wdXRzICovCi0JaWYgKGtpbmQgPT0gZW1jNmQxMDApCisJaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDApCiAJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAogCQkJCQkmbG04NV9ncm91cF9pbjU2NykpKQotCQkJZ290byBFUlJPUjM7CisJCQlnb3RvIGVycl9yZW1vdmVfZmlsZXM7CiAKIAlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIEVSUk9SMzsKKwkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCX0KIAogCXJldHVybiAwOwogCiAJLyogRXJyb3Igb3V0IGFuZCBjbGVhbnVwIGNvZGUgKi8KLSBFUlJPUjM6CisgZXJyX3JlbW92ZV9maWxlczoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwX2luNCk7Ci0JaWYgKGtpbmQgPT0gZW1jNmQxMDApCisJaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDApCiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfaW41NjcpOwotIEVSUk9SMjoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotIEVSUk9SMToKKyBlcnJfa2ZyZWU6CiAJa2ZyZWUoZGF0YSk7Ci0gRVJST1IwOgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbG04NV9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGxtODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CkBAIC0xMjk0LDcgKzEyODcsNiBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfaW40KTsKIAlpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMCkKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9pbjU2Nyk7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0ODEsNyArMTQ3Myw3IEBACiAJCQlkYXRhLT5hdXRvZmFuW2ldLmNvbmZpZyA9CiAJCQkgICAgbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9DT05GSUcoaSkpOwogCQkJdmFsID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShpKSk7Ci0JCQlkYXRhLT5hdXRvZmFuW2ldLmZyZXEgPSB2YWwgJiAweDA3OworCQkJZGF0YS0+cHdtX2ZyZXFbaV0gPSB2YWwgJiAweDA3OwogCQkJZGF0YS0+em9uZVtpXS5yYW5nZSA9IHZhbCA+PiA0OwogCQkJZGF0YS0+YXV0b2ZhbltpXS5taW5fcHdtID0KIAkJCSAgICBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX01JTlBXTShpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODcuYyBiL2RyaXZlcnMvaHdtb24vbG04Ny5jCmluZGV4IDIxOTcwZjAuLjJlNGEzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04Ny5jCkBAIC0yMSwxMSArMjEsMTAgQEAKICAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE04Ny5odG1sCiAgKgogICogU29tZSBmdW5jdGlvbnMgc2hhcmUgcGlucywgc28gbm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgc2FtZQotICogdGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBhc3N1bWVzIHRoYXQKLSAqIHRoZSBCSU9TIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBJbiB0aGF0IHJlc3BlY3QsIGl0ICBkaWZmZXJzIGZyb20KLSAqIHRoZSBvcmlnaW5hbCBkcml2ZXIgKGZyb20gbG1fc2Vuc29ycyBmb3IgTGludXggMi40KSwgd2hpY2ggd291bGQgZm9yY2UgdGhlCi0gKiBMTTg3IHRvIGFuIGFyYml0cmFyeSwgY29tcGlsZS10aW1lIGNob3NlbiBtb2RlLCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwKLSAqIGNoaXBzZXQgd2lyaW5nLgorICogdGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBub3JtYWxseQorICogYXNzdW1lcyB0aGF0IGZpcm13YXJlIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBXaGVyZSB0aGlzIGlzIG5vdAorICogdGhlIGNhc2UsIHBsYXRmb3JtIGNvZGUgbXVzdCBzZXQgdGhlIEkyQyBjbGllbnQncyBwbGF0Zm9ybV9kYXRhIHRvIHBvaW50CisgKiB0byBhIHU4IHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNoYW5uZWwgcmVnaXN0ZXIuCiAgKiBGb3IgcmVmZXJlbmNlLCBoZXJlIGlzIHRoZSBsaXN0IG9mIGV4Y2x1c2l2ZSBmdW5jdGlvbnM6CiAgKiAgLSBpbjAraW41IChkZWZhdWx0KSBvciB0ZW1wMwogICogIC0gZmFuMSAoZGVmYXVsdCkgb3IgaW42CkBAIC0xOTksNiArMTk4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogSW4gamlmZmllcyAqLwogCiAJdTggY2hhbm5lbDsJCS8qIHJlZ2lzdGVyIHZhbHVlICovCisJdTggY29uZmlnOwkJLyogb3JpZ2luYWwgcmVnaXN0ZXIgdmFsdWUgKi8KIAogCXU4IGluWzhdOwkJLyogcmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBpbl9tYXhbOF07CQkvKiByZWdpc3RlciB2YWx1ZSAqLwpAQCAtODMyLDYgKzgzMiw3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwX29wdCk7CiBleGl0X2ZyZWU6CisJbG04N193cml0ZV92YWx1ZShuZXdfY2xpZW50LCBMTTg3X1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CiAJa2ZyZWUoZGF0YSk7CiBleGl0OgogCXJldHVybiBlcnI7CkBAIC04NDAsMTIgKzg0MSwxNyBAQAogc3RhdGljIHZvaWQgbG04N19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBsbTg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1OCBjb25maWc7CiAKLQlkYXRhLT5jaGFubmVsID0gbG04N19yZWFkX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ0hBTk5FTF9NT0RFKTsKKwlpZiAoY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkYXRhLT5jaGFubmVsID0gKih1OCAqKWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LAorCQkJCSBMTTg3X1JFR19DSEFOTkVMX01PREUsIGRhdGEtPmNoYW5uZWwpOworCX0gZWxzZSB7CisJCWRhdGEtPmNoYW5uZWwgPSBsbTg3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DSEFOTkVMX01PREUpOworCX0KKwlkYXRhLT5jb25maWcgPSBsbTg3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DT05GSUcpICYgMHg2RjsKIAotCWNvbmZpZyA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NPTkZJRyk7Ci0JaWYgKCEoY29uZmlnICYgMHgwMSkpIHsKKwlpZiAoIShkYXRhLT5jb25maWcgJiAweDAxKSkgewogCQlpbnQgaTsKIAogCQkvKiBMaW1pdHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhZnRlciBwb3dlci11cCAqLwpAQCAtODY3LDExICs4NzMsMTEgQEAKIAkJCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19JTl9NQVgoMCksIDB4RkYpOwogCQl9CiAJfQotCWlmICgoY29uZmlnICYgMHg4MSkgIT0gMHgwMSkgewotCQkvKiBTdGFydCBtb25pdG9yaW5nICovCisKKwkvKiBNYWtlIHN1cmUgU3RhcnQgaXMgc2V0IGFuZCBJTlQjX0NsZWFyIGlzIGNsZWFyICovCisJaWYgKChkYXRhLT5jb25maWcgJiAweDA5KSAhPSAweDAxKQogCQlsbTg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHLAotCQkJCSAoY29uZmlnICYgMHhGNykgfCAweDAxKTsKLQl9CisJCQkJIChkYXRhLT5jb25maWcgJiAweDc3KSB8IDB4MDEpOwogfQogCiBzdGF0aWMgaW50IGxtODdfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC04ODIsNiArODg4LDcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwX29wdCk7CiAKKwlsbTg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHLCBkYXRhLT5jb25maWcpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkwLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwppbmRleCBjMjRmZTM2Li4zZWRlZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtOTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwpAQCAtMSwxNCArMSwxMiBAQAogLyoKICAqIGxtOTAuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgKiAgICAgICAgICBtb25pdG9yaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgKgogICogQmFzZWQgb24gdGhlIGxtODMgZHJpdmVyLiBUaGUgTE05MCBpcyBhIHNlbnNvciBjaGlwIG1hZGUgYnkgTmF0aW9uYWwKICAqIFNlbWljb25kdWN0b3IuIEl0IHJlcG9ydHMgdXAgdG8gdHdvIHRlbXBlcmF0dXJlcyAoaXRzIG93biBwbHVzIHVwIHRvCiAgKiBvbmUgZXh0ZXJuYWwgb25lKSB3aXRoIGEgMC4xMjUgZGVnIHJlc29sdXRpb24gKDEgZGVnIGZvciBsb2NhbAotICogdGVtcGVyYXR1cmUpIGFuZCBhIDMtNCBkZWcgYWNjdXJhY3kuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUKLSAqIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTkwLmh0bWwKKyAqIHRlbXBlcmF0dXJlKSBhbmQgYSAzLTQgZGVnIGFjY3VyYWN5LgogICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIExNODkgYW5kIExNOTksIHR3byBvdGhlciBzZW5zb3IgY2hpcHMKICAqIG1hZGUgYnkgTmF0aW9uYWwgU2VtaWNvbmR1Y3Rvci4gQm90aCBoYXZlIGFuIGluY3JlYXNlZCByZW1vdGUKQEAgLTE2LDQ4ICsxNCwzOCBAQAogICogYWRkaXRpb25hbGx5IHNoaWZ0cyByZW1vdGUgdGVtcGVyYXR1cmVzIChtZWFzdXJlZCBhbmQgbGltaXRzKSBieSAxNgogICogZGVncmVlcywgd2hpY2ggYWxsb3dzIGZvciBoaWdoZXIgdGVtcGVyYXR1cmVzIG1lYXN1cmVtZW50LiBUaGUKICAqIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBpdCBzaW5jZSBpdCBjYW4gYmUgZG9uZSBlYXNpbHkgaW4gdXNlci1zcGFjZS4KLSAqIENvbXBsZXRlIGRhdGFzaGVldHMgY2FuIGJlIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg5Lmh0bWwKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE05OS5odG1sCiAgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBib3RoIGNoaXBzLgogICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIExNODYsIGFub3RoZXIgc2Vuc29yIGNoaXAgbWFkZSBieQogICogTmF0aW9uYWwgU2VtaWNvbmR1Y3Rvci4gSXQgaXMgZXhhY3RseSBzaW1pbGFyIHRvIHRoZSBMTTkwIGV4Y2VwdCBpdAogICogaGFzIGEgaGlnaGVyIGFjY3VyYWN5LgotICogQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIE5hdGlvbmFsJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE04Ni5odG1sCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURNMTAzMiwgYSBzZW5zb3IgY2hpcCBtYWRlIGJ5IEFuYWxvZwogICogRGV2aWNlcy4gVGhhdCBjaGlwIGlzIHNpbWlsYXIgdG8gdGhlIExNOTAsIHdpdGggYSBmZXcgZGlmZmVyZW5jZXMKLSAqIHRoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyLiBDb21wbGV0ZSBkYXRhc2hlZXQgY2FuIGJlCi0gKiBvYnRhaW5lZCBmcm9tIEFuYWxvZydzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9lbi9wcm9kLzAsMjg3NyxBRE0xMDMyLDAwLmh0bWwKLSAqIEFtb25nIG90aGVycywgaXQgaGFzIGEgaGlnaGVyIGFjY3VyYWN5IHRoYW4gdGhlIExNOTAsIG11Y2ggbGlrZSB0aGUKLSAqIExNODYgZG9lcy4KKyAqIHRoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyLiBBbW9uZyBvdGhlcnMsIGl0IGhhcyBhIGhpZ2hlcgorICogYWNjdXJhY3kgdGhhbiB0aGUgTE05MCwgbXVjaCBsaWtlIHRoZSBMTTg2IGRvZXMuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTUFYNjY1NywgTUFYNjY1OCBhbmQgTUFYNjY1OSBzZW5zb3IKLSAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGNoaXBzIGFyZSBzaW1pbGFyIHRvIHRoZSBMTTg2LiBDb21wbGV0ZQotICogZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBhdCBNYXhpbSdzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8yNTc4CisgKiBjaGlwcyBtYWRlIGJ5IE1heGltLiBUaGVzZSBjaGlwcyBhcmUgc2ltaWxhciB0byB0aGUgTE04Ni4KICAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHRocmVlCiAgKiB2YXJpYW50cy4gVGhlIGV4dHJhIGFkZHJlc3MgYW5kIGZlYXR1cmVzIG9mIHRoZSBNQVg2NjU5IGFyZSBub3QKICAqIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gVGhlc2UgY2hpcHMgbGFjayB0aGUgcmVtb3RlIHRlbXBlcmF0dXJlCiAgKiBvZmZzZXQgZmVhdHVyZS4KICAqCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBNQVg2NjQ2LCBNQVg2NjQ3IGFuZCBNQVg2NjQ5IGNoaXBzCisgKiBtYWRlIGJ5IE1heGltLiAgVGhlc2UgYXJlIGFnYWluIHNpbWlsYXIgdG8gdGhlIExNODYsIGJ1dCB0aGV5IHVzZQorICogdW5zaWduZWQgdGVtcGVyYXR1cmUgdmFsdWVzIGFuZCBjYW4gcmVwb3J0IHRlbXBlcmF0dXJlcyBmcm9tIDAgdG8KKyAqIDE0NSBkZWdyZWVzLgorICoKICAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEsIHR3byBvdGhlciBzZW5zb3IKICAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGFyZSBxdWl0ZSBzaW1pbGFyIHRvIHRoZSBvdGhlciBNYXhpbQotICogY2hpcHMuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUgb2J0YWluZWQgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zMzcwCi0gKiBUaGUgTUFYNjY4MCBhbmQgTUFYNjY4MSBvbmx5IGRpZmZlciBpbiB0aGUgcGlub3V0IHNvIHRoZXkgY2FuIGJlCi0gKiB0cmVhdGVkIGlkZW50aWNhbGx5LgorICogY2hpcHMuIFRoZSBNQVg2NjgwIGFuZCBNQVg2NjgxIG9ubHkgZGlmZmVyIGluIHRoZSBwaW5vdXQgc28gdGhleSBjYW4KKyAqIGJlIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCiAgKgotICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMgYnV0Ci0gKiBvbmx5IGluIGl0cyAiY29tcGF0YWJpbGl0eSBtb2RlIi4gSWYgYW4gQURUNzQ2MSBjaGlwIGlzIGZvdW5kIGJ1dAotICogaXMgY29uZmlndXJlZCBpbiBub24tY29tcGF0aWJsZSBtb2RlICh3aGVyZSBpdHMgdGVtcGVyYXR1cmUKLSAqIHJlZ2lzdGVyIHZhbHVlcyBhcmUgZGVjb2RlZCBkaWZmZXJlbnRseSkgaXQgaXMgaWdub3JlZCBieSB0aGlzCi0gKiBkcml2ZXIuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUgb2J0YWluZWQgZnJvbSBBbmFsb2cncyB3ZWJzaXRlCi0gKiBhdDoKLSAqICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFEVDc0NjEsMDAuaHRtbAorICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMuCisgKiBJdCdzIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVuZGVkIG1vZGUuIEl0IGlzIG1vc3RseQorICogY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEgZm9ybWF0IGRpZmZlcmVuY2UgZm9yIHRoZQorICogdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgogICoKICAqIFNpbmNlIHRoZSBMTTkwIHdhcyB0aGUgZmlyc3QgY2hpcHNldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG1vc3QKICAqIGNvbW1lbnRzIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGlwc2V0LCBidXQgYXJlIGFjdHVhbGx5IGdlbmVyYWwgYW5kCkBAIC05Myw5ICs4MSwxMCBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqIEFkZHJlc3MgaXMgZnVsbHkgZGVmaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYmUgY2hhbmdlZCBleGNlcHQgZm9yCiAgKiBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxLgotICogTE04NiwgTE04OSwgTE05MCwgTE05OSwgQURNMTAzMiwgQURNMTAzMi0xLCBBRFQ3NDYxLCBNQVg2NjU3IGFuZCBNQVg2NjU4Ci0gKiBoYXZlIGFkZHJlc3MgMHg0Yy4KLSAqIEFETTEwMzItMiwgQURUNzQ2MS0yLCBMTTg5LTEsIGFuZCBMTTk5LTEgaGF2ZSBhZGRyZXNzIDB4NGQuCisgKiBMTTg2LCBMTTg5LCBMTTkwLCBMTTk5LCBBRE0xMDMyLCBBRE0xMDMyLTEsIEFEVDc0NjEsIE1BWDY2NDksIE1BWDY2NTcKKyAqIGFuZCBNQVg2NjU4IGhhdmUgYWRkcmVzcyAweDRjLgorICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIExNODktMSwgTE05OS0xIGFuZCBNQVg2NjQ2IGhhdmUgYWRkcmVzcyAweDRkLgorICogTUFYNjY0NyBoYXMgYWRkcmVzcyAweDRlLgogICogTUFYNjY1OSBjYW4gaGF2ZSBhZGRyZXNzIDB4NGMsIDB4NGQgb3IgMHg0ZSAodW5zdXBwb3J0ZWQpLgogICogTUFYNjY4MCBhbmQgTUFYNjY4MSBjYW4gaGF2ZSBhZGRyZXNzIDB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsCiAgKiAweDRjLCAweDRkIG9yIDB4NGUuCkBAIC0xMDgsNyArOTcsOCBAQAogICogSW5zbW9kIHBhcmFtZXRlcnMKICAqLwogCi1JMkNfQ0xJRU5UX0lOU01PRF83KGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIGFkdDc0NjEsIG1heDY2ODApOworSTJDX0NMSUVOVF9JTlNNT0RfOChsbTkwLCBhZG0xMDMyLCBsbTk5LCBsbTg2LCBtYXg2NjU3LCBhZHQ3NDYxLCBtYXg2NjgwLAorCQkgICAgbWF4NjY0Nik7CiAKIC8qCiAgKiBUaGUgTE05MCByZWdpc3RlcnMKQEAgLTE0OSwzOSArMTM5LDE0IEBACiAjZGVmaW5lIExNOTBfUkVHX1JfVENSSVRfSFlTVAkJMHgyMQogI2RlZmluZSBMTTkwX1JFR19XX1RDUklUX0hZU1QJCTB4MjEKIAorLyogTUFYNjY0Ni82NjQ3LzY2NDkvNjY1Ny82NjU4LzY2NTkgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgTUFYNjY1N19SRUdfUl9MT0NBTF9URU1QTAkweDExCisKIC8qCi0gKiBDb252ZXJzaW9ucyBhbmQgdmFyaW91cyBtYWNyb3MKLSAqIEZvciBsb2NhbCB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cywgY3JpdGljYWwgbGltaXRzIGFuZCB0aGUgaHlzdGVyZXNpcwotICogdmFsdWUsIHRoZSBMTTkwIHVzZXMgc2lnbmVkIDgtYml0IHZhbHVlcyB3aXRoIExTQiA9IDEgZGVncmVlIENlbHNpdXMuCi0gKiBGb3IgcmVtb3RlIHRlbXBlcmF0dXJlcyBhbmQgbGltaXRzLCBpdCB1c2VzIHNpZ25lZCAxMS1iaXQgdmFsdWVzIHdpdGgKLSAqIExTQiA9IDAuMTI1IGRlZ3JlZSBDZWxzaXVzLCBsZWZ0LWp1c3RpZmllZCBpbiAxNi1iaXQgcmVnaXN0ZXJzLgorICogRGV2aWNlIGZsYWdzCiAgKi8KLQotI2RlZmluZSBURU1QMV9GUk9NX1JFRyh2YWwpCSgodmFsKSAqIDEwMDApCi0jZGVmaW5lIFRFTVAxX1RPX1JFRyh2YWwpCSgodmFsKSA8PSAtMTI4MDAwID8gLTEyOCA6IFwKLQkJCQkgKHZhbCkgPj0gMTI3MDAwID8gMTI3IDogXAotCQkJCSAodmFsKSA8IDAgPyAoKHZhbCkgLSA1MDApIC8gMTAwMCA6IFwKLQkJCQkgKCh2YWwpICsgNTAwKSAvIDEwMDApCi0jZGVmaW5lIFRFTVAyX0ZST01fUkVHKHZhbCkJKCh2YWwpIC8gMzIgKiAxMjUpCi0jZGVmaW5lIFRFTVAyX1RPX1JFRyh2YWwpCSgodmFsKSA8PSAtMTI4MDAwID8gMHg4MDAwIDogXAotCQkJCSAodmFsKSA+PSAxMjc4NzUgPyAweDdGRTAgOiBcCi0JCQkJICh2YWwpIDwgMCA/ICgodmFsKSAtIDYyKSAvIDEyNSAqIDMyIDogXAotCQkJCSAoKHZhbCkgKyA2MikgLyAxMjUgKiAzMikKLSNkZWZpbmUgSFlTVF9UT19SRUcodmFsKQkoKHZhbCkgPD0gMCA/IDAgOiAodmFsKSA+PSAzMDUwMCA/IDMxIDogXAotCQkJCSAoKHZhbCkgKyA1MDApIC8gMTAwMCkKLQotLyogCi0gKiBBRFQ3NDYxIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTE05MCBleGNlcHQgdGhhdCBhdHRlbXB0cyB0byB3cml0ZQotICogdmFsdWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHJhbmdlIDAgPCB0ZW1wIDwgMTI3IGFyZSB0cmVhdGVkIGFzCi0gKiB0aGUgYm91bmRhcnkgdmFsdWUuIAotICovCi0KLSNkZWZpbmUgVEVNUDFfVE9fUkVHX0FEVDc0NjEodmFsKSAoKHZhbCkgPD0gMCA/IDAgOiBcCi0JCQkJICh2YWwpID49IDEyNzAwMCA/IDEyNyA6IFwKLQkJCQkgKCh2YWwpICsgNTAwKSAvIDEwMDApCi0jZGVmaW5lIFRFTVAyX1RPX1JFR19BRFQ3NDYxKHZhbCkgKCh2YWwpIDw9IDAgPyAwIDogXAotCQkJCSAodmFsKSA+PSAxMjc3NTAgPyAweDdGQzAgOiBcCi0JCQkJICgodmFsKSArIDEyNSkgLyAyNTAgKiA2NCkKKyNkZWZpbmUgTE05MF9GTEFHX0FEVDc0NjFfRVhUCQkweDAxCS8qIEFEVDc0NjEgZXh0ZW5kZWQgbW9kZSAqLwogCiAvKgogICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCkBAIC0yMDYsNiArMTcxLDkgQEAKIAl7ICJsbTg2IiwgbG04NiB9LAogCXsgImxtODkiLCBsbTk5IH0sCiAJeyAibG05OSIsIGxtOTkgfSwJLyogTWlzc2luZyB0ZW1wZXJhdHVyZSBvZmZzZXQgKi8KKwl7ICJtYXg2NjQ2IiwgbWF4NjY0NiB9LAorCXsgIm1heDY2NDciLCBtYXg2NjQ2IH0sCisJeyAibWF4NjY0OSIsIG1heDY2NDYgfSwKIAl7ICJtYXg2NjU3IiwgbWF4NjY1NyB9LAogCXsgIm1heDY2NTgiLCBtYXg2NjU3IH0sCiAJeyAibWF4NjY1OSIsIG1heDY2NTcgfSwKQEAgLTIzNywyMiArMjA1LDE1MCBAQAogCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLwogCWludCBraW5kOworCWludCBmbGFnczsKIAogCS8qIHJlZ2lzdGVycyB2YWx1ZXMgKi8KLQlzOCB0ZW1wOFs1XTsJLyogMDogbG9jYWwgaW5wdXQKLQkJCSAgIDE6IGxvY2FsIGxvdyBsaW1pdAotCQkJICAgMjogbG9jYWwgaGlnaCBsaW1pdAotCQkJICAgMzogbG9jYWwgY3JpdGljYWwgbGltaXQKLQkJCSAgIDQ6IHJlbW90ZSBjcml0aWNhbCBsaW1pdCAqLwotCXMxNiB0ZW1wMTFbNF07CS8qIDA6IHJlbW90ZSBpbnB1dAorCXM4IHRlbXA4WzRdOwkvKiAwOiBsb2NhbCBsb3cgbGltaXQKKwkJCSAgIDE6IGxvY2FsIGhpZ2ggbGltaXQKKwkJCSAgIDI6IGxvY2FsIGNyaXRpY2FsIGxpbWl0CisJCQkgICAzOiByZW1vdGUgY3JpdGljYWwgbGltaXQgKi8KKwlzMTYgdGVtcDExWzVdOwkvKiAwOiByZW1vdGUgaW5wdXQKIAkJCSAgIDE6IHJlbW90ZSBsb3cgbGltaXQKIAkJCSAgIDI6IHJlbW90ZSBoaWdoIGxpbWl0Ci0JCQkgICAzOiByZW1vdGUgb2Zmc2V0IChleGNlcHQgbWF4NjY1NykgKi8KKwkJCSAgIDM6IHJlbW90ZSBvZmZzZXQgKGV4Y2VwdCBtYXg2NjQ2IGFuZCBtYXg2NjU3KQorCQkJICAgNDogbG9jYWwgaW5wdXQgKi8KIAl1OCB0ZW1wX2h5c3Q7CiAJdTggYWxhcm1zOyAvKiBiaXR2ZWN0b3IgKi8KIH07CiAKIC8qCisgKiBDb252ZXJzaW9ucworICogRm9yIGxvY2FsIHRlbXBlcmF0dXJlcyBhbmQgbGltaXRzLCBjcml0aWNhbCBsaW1pdHMgYW5kIHRoZSBoeXN0ZXJlc2lzCisgKiB2YWx1ZSwgdGhlIExNOTAgdXNlcyBzaWduZWQgOC1iaXQgdmFsdWVzIHdpdGggTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cy4KKyAqIEZvciByZW1vdGUgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMsIGl0IHVzZXMgc2lnbmVkIDExLWJpdCB2YWx1ZXMgd2l0aAorICogTFNCID0gMC4xMjUgZGVncmVlIENlbHNpdXMsIGxlZnQtanVzdGlmaWVkIGluIDE2LWJpdCByZWdpc3RlcnMuICBTb21lCisgKiBNYXhpbSBjaGlwcyB1c2UgdW5zaWduZWQgdmFsdWVzLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV9zOChzOCB2YWwpCit7CisJcmV0dXJuIHZhbCAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91OCh1OCB2YWwpCit7CisJcmV0dXJuIHZhbCAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV9zMTYoczE2IHZhbCkKK3sKKwlyZXR1cm4gdmFsIC8gMzIgKiAxMjU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91MTYodTE2IHZhbCkKK3sKKwlyZXR1cm4gdmFsIC8gMzIgKiAxMjU7Cit9CisKK3N0YXRpYyBzOCB0ZW1wX3RvX3M4KGxvbmcgdmFsKQoreworCWlmICh2YWwgPD0gLTEyODAwMCkKKwkJcmV0dXJuIC0xMjg7CisJaWYgKHZhbCA+PSAxMjcwMDApCisJCXJldHVybiAxMjc7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiAodmFsIC0gNTAwKSAvIDEwMDA7CisJcmV0dXJuICh2YWwgKyA1MDApIC8gMTAwMDsKK30KKworc3RhdGljIHU4IHRlbXBfdG9fdTgobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsID49IDI1NTAwMCkKKwkJcmV0dXJuIDI1NTsKKwlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworfQorCitzdGF0aWMgczE2IHRlbXBfdG9fczE2KGxvbmcgdmFsKQoreworCWlmICh2YWwgPD0gLTEyODAwMCkKKwkJcmV0dXJuIDB4ODAwMDsKKwlpZiAodmFsID49IDEyNzg3NSkKKwkJcmV0dXJuIDB4N0ZFMDsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuICh2YWwgLSA2MikgLyAxMjUgKiAzMjsKKwlyZXR1cm4gKHZhbCArIDYyKSAvIDEyNSAqIDMyOworfQorCitzdGF0aWMgdTggaHlzdF90b19yZWcobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsID49IDMwNTAwKQorCQlyZXR1cm4gMzE7CisJcmV0dXJuICh2YWwgKyA1MDApIC8gMTAwMDsKK30KKworLyoKKyAqIEFEVDc0NjEgaW4gY29tcGF0aWJpbGl0eSBtb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTE05MCBleGNlcHQgdGhhdAorICogYXR0ZW1wdHMgdG8gd3JpdGUgdmFsdWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHJhbmdlIDAgPCB0ZW1wIDwgMTI3IGFyZQorICogdHJlYXRlZCBhcyB0aGUgYm91bmRhcnkgdmFsdWUuCisgKgorICogQURUNzQ2MSBpbiAiZXh0ZW5kZWQgbW9kZSIgb3BlcmF0aW9uIHVzZXMgdW5zaWduZWQgaW50ZWdlcnMgb2Zmc2V0IGJ5CisgKiA2NCAoZS5nLiwgMCAtPiAtNjQgZGVnQykuICBUaGUgcmFuZ2UgaXMgcmVzdHJpY3RlZCB0byAtNjQuLjE5MSBkZWdDLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZW1wX2Zyb21fdThfYWR0NzQ2MShzdHJ1Y3QgbG05MF9kYXRhICpkYXRhLCB1OCB2YWwpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9GTEFHX0FEVDc0NjFfRVhUKQorCQlyZXR1cm4gKHZhbCAtIDY0KSAqIDEwMDA7CisJZWxzZQorCQlyZXR1cm4gdGVtcF9mcm9tX3M4KHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91MTZfYWR0NzQ2MShzdHJ1Y3QgbG05MF9kYXRhICpkYXRhLCB1MTYgdmFsKQoreworCWlmIChkYXRhLT5mbGFncyAmIExNOTBfRkxBR19BRFQ3NDYxX0VYVCkKKwkJcmV0dXJuICh2YWwgLSAweDQwMDApIC8gNjQgKiAyNTA7CisJZWxzZQorCQlyZXR1cm4gdGVtcF9mcm9tX3MxNih2YWwpOworfQorCitzdGF0aWMgdTggdGVtcF90b191OF9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIGxvbmcgdmFsKQoreworCWlmIChkYXRhLT5mbGFncyAmIExNOTBfRkxBR19BRFQ3NDYxX0VYVCkgeworCQlpZiAodmFsIDw9IC02NDAwMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsID49IDE5MTAwMCkKKwkJCXJldHVybiAweEZGOworCQlyZXR1cm4gKHZhbCArIDUwMCArIDY0MDAwKSAvIDEwMDA7CisJfSBlbHNlIHsKKwkJaWYgKHZhbCA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh2YWwgPj0gMTI3MDAwKQorCQkJcmV0dXJuIDEyNzsKKwkJcmV0dXJuICh2YWwgKyA1MDApIC8gMTAwMDsKKwl9Cit9CisKK3N0YXRpYyB1MTYgdGVtcF90b191MTZfYWR0NzQ2MShzdHJ1Y3QgbG05MF9kYXRhICpkYXRhLCBsb25nIHZhbCkKK3sKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQpIHsKKwkJaWYgKHZhbCA8PSAtNjQwMDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHZhbCA+PSAxOTE3NTApCisJCQlyZXR1cm4gMHhGRkMwOworCQlyZXR1cm4gKHZhbCArIDY0MDAwICsgMTI1KSAvIDI1MCAqIDY0OworCX0gZWxzZSB7CisJCWlmICh2YWwgPD0gMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsID49IDEyNzc1MCkKKwkJCXJldHVybiAweDdGQzA7CisJCXJldHVybiAodmFsICsgMTI1KSAvIDI1MCAqIDY0OworCX0KK30KKworLyoKICAqIFN5c2ZzIHN0dWZmCiAgKi8KIApAQCAtMjYxLDcgKzM1NywxNiBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxX0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkpOworCWludCB0ZW1wOworCisJaWYgKGRhdGEtPmtpbmQgPT0gYWR0NzQ2MSkKKwkJdGVtcCA9IHRlbXBfZnJvbV91OF9hZHQ3NDYxKGRhdGEsIGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSk7CisJZWxzZSBpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjQ2KQorCQl0ZW1wID0gdGVtcF9mcm9tX3U4KGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSk7CisJZWxzZQorCQl0ZW1wID0gdGVtcF9mcm9tX3M4KGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApAQCAtMjgyLDEwICszODcsMTIgQEAKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQotCQlkYXRhLT50ZW1wOFtucl0gPSBURU1QMV9UT19SRUdfQURUNzQ2MSh2YWwpOworCQlkYXRhLT50ZW1wOFtucl0gPSB0ZW1wX3RvX3U4X2FkdDc0NjEoZGF0YSwgdmFsKTsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NDYpCisJCWRhdGEtPnRlbXA4W25yXSA9IHRlbXBfdG9fdTgodmFsKTsKIAllbHNlCi0JCWRhdGEtPnRlbXA4W25yXSA9IFRFTVAxX1RPX1JFRyh2YWwpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbbnIgLSAxXSwgZGF0YS0+dGVtcDhbbnJdKTsKKwkJZGF0YS0+dGVtcDhbbnJdID0gdGVtcF90b19zOCh2YWwpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbbnJdLCBkYXRhLT50ZW1wOFtucl0pOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTI5NSw3ICs0MDIsMTYgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGxtOTBfZGF0YSAqZGF0YSA9IGxtOTBfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMl9GUk9NX1JFRyhkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKSk7CisJaW50IHRlbXA7CisKKwlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQl0ZW1wID0gdGVtcF9mcm9tX3UxNl9hZHQ3NDYxKGRhdGEsIGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pOworCWVsc2UgaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY0NikKKwkJdGVtcCA9IHRlbXBfZnJvbV91MTYoZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSk7CisJZWxzZQorCQl0ZW1wID0gdGVtcF9mcm9tX3MxNihkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAxMShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApAQCAtMzE4LDEzICs0MzQsMjAgQEAKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQotCQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDJfVE9fUkVHX0FEVDc0NjEodmFsKTsKKwkJZGF0YS0+dGVtcDExW25yXSA9IHRlbXBfdG9fdTE2X2FkdDc0NjEoZGF0YSwgdmFsKTsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NTcgfHwgZGF0YS0+a2luZCA9PSBtYXg2NjgwKQorCQlkYXRhLT50ZW1wMTFbbnJdID0gdGVtcF90b19zOCh2YWwpIDw8IDg7CisJZWxzZSBpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjQ2KQorCQlkYXRhLT50ZW1wMTFbbnJdID0gdGVtcF90b191OCh2YWwpIDw8IDg7CiAJZWxzZQotCQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDJfVE9fUkVHKHZhbCk7CisJCWRhdGEtPnRlbXAxMVtucl0gPSB0ZW1wX3RvX3MxNih2YWwpOworCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDJdLAogCQkJCSAgZGF0YS0+dGVtcDExW25yXSA+PiA4KTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMiArIDFdLAotCQkJCSAgZGF0YS0+dGVtcDExW25yXSAmIDB4ZmYpOworCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjgwCisJICAgICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDIgKyAxXSwKKwkJCQkJICBkYXRhLT50ZW1wMTFbbnJdICYgMHhmZik7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzM0LDggKzQ1NywxNCBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxX0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkKLQkJICAgICAgIC0gVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcF9oeXN0KSk7CisJaW50IHRlbXA7CisKKwlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQl0ZW1wID0gdGVtcF9mcm9tX3U4X2FkdDc0NjEoZGF0YSwgZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wIC0gdGVtcF9mcm9tX3M4KGRhdGEtPnRlbXBfaHlzdCkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcGh5c3Qoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZHVtbXksCkBAIC0zNDcsOSArNDc2LDkgQEAKIAlsb25nIGh5c3Q7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JaHlzdCA9IFRFTVAxX0ZST01fUkVHKGRhdGEtPnRlbXA4WzNdKSAtIHZhbDsKKwloeXN0ID0gdGVtcF9mcm9tX3M4KGRhdGEtPnRlbXA4WzJdKSAtIHZhbDsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05MF9SRUdfV19UQ1JJVF9IWVNULAotCQkJCSAgSFlTVF9UT19SRUcoaHlzdCkpOworCQkJCSAgaHlzdF90b19yZWcoaHlzdCkpOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTM3MSwyMyArNTAwLDIzIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7CiB9CiAKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMTEsIE5VTEwsIDQpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMTEsIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LAotCXNldF90ZW1wOCwgMSk7CisJc2V0X3RlbXA4LCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMTEsCiAJc2V0X3RlbXAxMSwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAyKTsKKwlzZXRfdGVtcDgsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAzKTsKKwlzZXRfdGVtcDgsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDQpOworCXNldF90ZW1wOCwgMyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcGh5c3QsCi0Jc2V0X3RlbXBoeXN0LCAzKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lSVUdPLCBzaG93X3RlbXBoeXN0LCBOVUxMLCA0KTsKKwlzZXRfdGVtcGh5c3QsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcGh5c3QsIE5VTEwsIDMpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9vZmZzZXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAzKTsKIApAQCAtNTY4LDcgKzY5Nyw3IEBACiAJCQkJa2luZCA9IGFkbTEwMzI7CiAJCQl9IGVsc2UKIAkJCWlmIChjaGlwX2lkID09IDB4NTEgLyogQURUNzQ2MSAqLwotCQkJICYmIChyZWdfY29uZmlnMSAmIDB4MUYpID09IDB4MDAgLyogY2hlY2sgY29tcGF0IG1vZGUgKi8KKwkJCSAmJiAocmVnX2NvbmZpZzEgJiAweDFCKSA9PSAweDAwCiAJCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MEEpIHsKIAkJCQlraW5kID0gYWR0NzQ2MTsKIAkJCX0KQEAgLTU5OSwxMyArNzI4LDIzIEBACiAJCQkgJiYgKHJlZ19jb25maWcxICYgMHgwMykgPT0gMHgwMAogCQkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA3KSB7CiAJCQkgCWtpbmQgPSBtYXg2NjgwOworCQkJfSBlbHNlCisJCQkvKiBUaGUgY2hpcF9pZCByZWdpc3RlciBvZiB0aGUgTUFYNjY0Ni82NjQ3LzY2NDkKKwkJCSAqIGhvbGRzIHRoZSByZXZpc2lvbiBvZiB0aGUgY2hpcC4KKwkJCSAqIFRoZSBsb3dlc3QgNiBiaXRzIG9mIHRoZSBjb25maWcxIHJlZ2lzdGVyIGFyZQorCQkJICogdW51c2VkIGFuZCBzaG91bGQgcmV0dXJuIHplcm8gd2hlbiByZWFkLgorCQkJICovCisJCQlpZiAoY2hpcF9pZCA9PSAweDU5CisJCQkgJiYgKHJlZ19jb25maWcxICYgMHgzZikgPT0gMHgwMAorCQkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA3KSB7CisJCQkJa2luZCA9IG1heDY2NDY7CiAJCQl9CiAJCX0KIAogCQlpZiAoa2luZCA8PSAwKSB7IC8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZCAqLwotCQkJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwKLQkJCSAgICAiVW5zdXBwb3J0ZWQgY2hpcCAobWFuX2lkPTB4JTAyWCwgIgotCQkJICAgICJjaGlwX2lkPTB4JTAyWCkuXG4iLCBtYW5faWQsIGNoaXBfaWQpOworCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LAorCQkJCSJVbnN1cHBvcnRlZCBjaGlwIGF0IDB4JTAyeCAobWFuX2lkPTB4JTAyWCwgIgorCQkJCSJjaGlwX2lkPTB4JTAyWClcbiIsIGFkZHJlc3MsIG1hbl9pZCwgY2hpcF9pZCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTYyOSw2ICs3NjgsOCBAQAogCQluYW1lID0gIm1heDY2ODAiOwogCX0gZWxzZSBpZiAoa2luZCA9PSBhZHQ3NDYxKSB7CiAJCW5hbWUgPSAiYWR0NzQ2MSI7CisJfSBlbHNlIGlmIChraW5kID09IG1heDY2NDYpIHsKKwkJbmFtZSA9ICJtYXg2NjQ2IjsKIAl9CiAJc3RybGNweShpbmZvLT50eXBlLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIApAQCAtNjY4LDcgKzgwOSw3IEBACiAJCQkJCSAgICAgICZkZXZfYXR0cl9wZWMpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQotCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcpIHsKKwlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3ICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikgewogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAogCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfb2Zmc2V0LmRldl9hdHRyKSkpCiAJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwpAQCAtNzA3LDYgKzg0OCwxMiBAQAogCX0KIAljb25maWdfb3JpZyA9IGNvbmZpZzsKIAorCS8qIENoZWNrIFRlbXBlcmF0dXJlIFJhbmdlIFNlbGVjdCAqLworCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpIHsKKwkJaWYgKGNvbmZpZyAmIDB4MDQpCisJCQlkYXRhLT5mbGFncyB8PSBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQ7CisJfQorCiAJLyoKIAkgKiBQdXQgTUFYNjY4MC9NQVg4ODgxIGludG8gZXh0ZW5kZWQgcmVzb2x1dGlvbiAoYml0IDB4MTAsCiAJICogMC4xMjUgZGVncmVlIHJlc29sdXRpb24pIGFuZCByYW5nZSAoMHgwOCwgZXh0ZW5kIHJhbmdlCkBAIC03MjgsNyArODc1LDcgQEAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtOTBfZ3JvdXApOwogCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wZWMpOwotCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcpCisJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsCiAJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9vZmZzZXQuZGV2X2F0dHIpOwogCkBAIC03MzYsNiArODgzLDM4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbG05MF9yZWFkMTYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaCwgdTggcmVnbCwgdTE2ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCXU4IG9sZGgsIG5ld2gsIGw7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgdHJpY2sgaGVyZS4gV2UgaGF2ZSB0byByZWFkIHR3byByZWdpc3RlcnMgdG8gaGF2ZSB0aGUKKwkgKiBzZW5zb3IgdGVtcGVyYXR1cmUsIGJ1dCB3ZSBoYXZlIHRvIGJld2FyZSBhIGNvbnZlcnNpb24gY291bGQgb2NjdXIKKwkgKiBpbmJldHdlZW4gdGhlIHJlYWRpbmdzLiBUaGUgZGF0YXNoZWV0IHNheXMgd2Ugc2hvdWxkIGVpdGhlciB1c2UKKwkgKiB0aGUgb25lLXNob3QgY29udmVyc2lvbiByZWdpc3Rlciwgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBkbworCSAqIChkaXNhYmxlcyBoYXJkd2FyZSBtb25pdG9yaW5nKSBvciBtb25pdG9yIHRoZSBidXN5IGJpdCwgd2hpY2ggaXMKKwkgKiBpbXBvc3NpYmxlICh3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZXMgYW5kIG1vbml0b3IgdGhhdCBiaXQgYXQgdGhlCisJICogZXhhY3Qgc2FtZSB0aW1lKS4gU28gdGhlIHNvbHV0aW9uIHVzZWQgaGVyZSBpcyB0byByZWFkIHRoZSBoaWdoCisJICogYnl0ZSBvbmNlLCB0aGVuIHRoZSBsb3cgYnl0ZSwgdGhlbiB0aGUgaGlnaCBieXRlIGFnYWluLiBJZiB0aGUgbmV3CisJICogaGlnaCBieXRlIG1hdGNoZXMgdGhlIG9sZCBvbmUsIHRoZW4gd2UgaGF2ZSBhIHZhbGlkIHJlYWRpbmcuIEVsc2UKKwkgKiB3ZSBoYXZlIHRvIHJlYWQgdGhlIGxvdyBieXRlIGFnYWluLCBhbmQgbm93IHdlIGJlbGlldmUgd2UgaGF2ZSBhCisJICogY29ycmVjdCByZWFkaW5nLgorCSAqLworCWlmICgoZXJyID0gbG05MF9yZWFkX3JlZyhjbGllbnQsIHJlZ2gsICZvbGRoKSkKKwkgfHwgKGVyciA9IGxtOTBfcmVhZF9yZWcoY2xpZW50LCByZWdsLCAmbCkpCisJIHx8IChlcnIgPSBsbTkwX3JlYWRfcmVnKGNsaWVudCwgcmVnaCwgJm5ld2gpKSkKKwkJcmV0dXJuIGVycjsKKwlpZiAob2xkaCAhPSBuZXdoKSB7CisJCWVyciA9IGxtOTBfcmVhZF9yZWcoY2xpZW50LCByZWdsLCAmbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwkqdmFsdWUgPSAobmV3aCA8PCA4KSB8IGw7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBsbTkwX2RhdGEgKmxtOTBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKQEAgLTc0NCw0OSArOTIzLDUwIEBACiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKiAyKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJdTggb2xkaCwgbmV3aCwgbDsKKwkJdTggaCwgbDsKIAogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVwZGF0aW5nIGxtOTAgZGF0YS5cbiIpOwotCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9URU1QLCAmZGF0YS0+dGVtcDhbMF0pOwotCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9MT1csICZkYXRhLT50ZW1wOFsxXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0hJR0gsICZkYXRhLT50ZW1wOFsyXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0NSSVQsICZkYXRhLT50ZW1wOFszXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9DUklULCAmZGF0YS0+dGVtcDhbNF0pOworCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9MT1csICZkYXRhLT50ZW1wOFswXSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0hJR0gsICZkYXRhLT50ZW1wOFsxXSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0NSSVQsICZkYXRhLT50ZW1wOFsyXSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9DUklULCAmZGF0YS0+dGVtcDhbM10pOwogCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9UQ1JJVF9IWVNULCAmZGF0YS0+dGVtcF9oeXN0KTsKIAotCQkvKgotCQkgKiBUaGVyZSBpcyBhIHRyaWNrIGhlcmUuIFdlIGhhdmUgdG8gcmVhZCB0d28gcmVnaXN0ZXJzIHRvCi0JCSAqIGhhdmUgdGhlIHJlbW90ZSBzZW5zb3IgdGVtcGVyYXR1cmUsIGJ1dCB3ZSBoYXZlIHRvIGJld2FyZQotCQkgKiBhIGNvbnZlcnNpb24gY291bGQgb2NjdXIgaW5iZXR3ZWVuIHRoZSByZWFkaW5ncy4gVGhlCi0JCSAqIGRhdGFzaGVldCBzYXlzIHdlIHNob3VsZCBlaXRoZXIgdXNlIHRoZSBvbmUtc2hvdAotCQkgKiBjb252ZXJzaW9uIHJlZ2lzdGVyLCB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGRvIChkaXNhYmxlcwotCQkgKiBoYXJkd2FyZSBtb25pdG9yaW5nKSBvciBtb25pdG9yIHRoZSBidXN5IGJpdCwgd2hpY2ggaXMKLQkJICogaW1wb3NzaWJsZSAod2UgY2FuJ3QgcmVhZCB0aGUgdmFsdWVzIGFuZCBtb25pdG9yIHRoYXQgYml0Ci0JCSAqIGF0IHRoZSBleGFjdCBzYW1lIHRpbWUpLiBTbyB0aGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvCi0JCSAqIHJlYWQgdGhlIGhpZ2ggYnl0ZSBvbmNlLCB0aGVuIHRoZSBsb3cgYnl0ZSwgdGhlbiB0aGUgaGlnaAotCQkgKiBieXRlIGFnYWluLiBJZiB0aGUgbmV3IGhpZ2ggYnl0ZSBtYXRjaGVzIHRoZSBvbGQgb25lLAotCQkgKiB0aGVuIHdlIGhhdmUgYSB2YWxpZCByZWFkaW5nLiBFbHNlIHdlIGhhdmUgdG8gcmVhZCB0aGUgbG93Ci0JCSAqIGJ5dGUgYWdhaW4sIGFuZCBub3cgd2UgYmVsaWV2ZSB3ZSBoYXZlIGEgY29ycmVjdCByZWFkaW5nLgotCQkgKi8KLQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QSCwgJm9sZGgpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QTCwgJmwpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QSCwgJm5ld2gpID09IDAKLQkJICYmIChuZXdoID09IG9sZGgKLQkJICB8fCBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfVEVNUEwsICZsKSA9PSAwKSkKLQkJCWRhdGEtPnRlbXAxMVswXSA9IChuZXdoIDw8IDgpIHwgbDsKKwkJaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY1NyB8fCBkYXRhLT5raW5kID09IG1heDY2NDYpIHsKKwkJCWxtOTBfcmVhZDE2KGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9URU1QLAorCQkJCSAgICBNQVg2NjU3X1JFR19SX0xPQ0FMX1RFTVBMLAorCQkJCSAgICAmZGF0YS0+dGVtcDExWzRdKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9MT0NBTF9URU1QLAorCQkJCQkgICZoKSA9PSAwKQorCQkJCWRhdGEtPnRlbXAxMVs0XSA9IGggPDwgODsKKwkJfQorCQlsbTkwX3JlYWQxNihjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBILAorCQkJICAgIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBMLCAmZGF0YS0+dGVtcDExWzBdKTsKIAotCQlpZiAobG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0xPV0gsICZuZXdoKSA9PSAwCi0JCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XTCwgJmwpID09IDApCi0JCQlkYXRhLT50ZW1wMTFbMV0gPSAobmV3aCA8PCA4KSB8IGw7Ci0JCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfSElHSEgsICZuZXdoKSA9PSAwCi0JCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfSElHSEwsICZsKSA9PSAwKQotCQkJZGF0YS0+dGVtcDExWzJdID0gKG5ld2ggPDwgOCkgfCBsOwotCQlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3KSB7CisJCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XSCwgJmgpID09IDApIHsKKwkJCWRhdGEtPnRlbXAxMVsxXSA9IGggPDwgODsKKwkJCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjgwCisJCQkgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2CisJCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0xPV0wsCisJCQkJCSAgJmwpID09IDApCisJCQkJZGF0YS0+dGVtcDExWzFdIHw9IGw7CisJCX0KKwkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9ISUdISCwgJmgpID09IDApIHsKKwkJCWRhdGEtPnRlbXAxMVsyXSA9IGggPDwgODsKKwkJCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjgwCisJCQkgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2CisJCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0hJR0hMLAorCQkJCQkgICZsKSA9PSAwKQorCQkJCWRhdGEtPnRlbXAxMVsyXSB8PSBsOworCQl9CisKKwkJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYpIHsKIAkJCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfT0ZGU0gsCi0JCQkJCSAgJm5ld2gpID09IDAKKwkJCQkJICAmaCkgPT0gMAogCQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9PRkZTTCwKIAkJCQkJICAmbCkgPT0gMCkKLQkJCQlkYXRhLT50ZW1wMTFbM10gPSAobmV3aCA8PCA4KSB8IGw7CisJCQkJZGF0YS0+dGVtcDExWzNdID0gKGggPDwgOCkgfCBsOwogCQl9CiAJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1NUQVRVUywgJmRhdGEtPmFsYXJtcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTYxOS5jIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKaW5kZXggMWFiMWNhYy4uNzg5Nzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKQEAgLTY5LDExICs2OSwxOCBAQAogI2RlZmluZSBNQVgxNjE5X1JFR19XX1RDUklUX0hZU1QJMHgxMwogCiAvKgotICogQ29udmVyc2lvbnMgYW5kIHZhcmlvdXMgbWFjcm9zCisgKiBDb252ZXJzaW9ucwogICovCiAKLSNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpCSgodmFsICYgMHg4MCA/IHZhbC0weDEwMCA6IHZhbCkgKiAxMDAwKQotI2RlZmluZSBURU1QX1RPX1JFRyh2YWwpCSgodmFsIDwgMCA/IHZhbCsweDEwMCoxMDAwIDogdmFsKSAvIDEwMDApCitzdGF0aWMgaW50IHRlbXBfZnJvbV9yZWcoaW50IHZhbCkKK3sKKwlyZXR1cm4gKHZhbCAmIDB4ODAgPyB2YWwtMHgxMDAgOiB2YWwpICogMTAwMDsKK30KKworc3RhdGljIGludCB0ZW1wX3RvX3JlZyhpbnQgdmFsKQoreworCXJldHVybiAodmFsIDwgMCA/IHZhbCsweDEwMCoxMDAwIDogdmFsKSAvIDEwMDA7Cit9CiAKIC8qCiAgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KQEAgLTEzNSw3ICsxNDIsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAogeyBcCiAJc3RydWN0IG1heDE2MTlfZGF0YSAqZGF0YSA9IG1heDE2MTlfdXBkYXRlX2RldmljZShkZXYpOyBcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dmFsdWUpKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wX2Zyb21fcmVnKGRhdGEtPnZhbHVlKSk7IFwKIH0KIHNob3dfdGVtcCh0ZW1wX2lucHV0MSk7CiBzaG93X3RlbXAodGVtcF9pbnB1dDIpOwpAQCAtMTUzLDcgKzE2MCw3IEBACiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOyBcCiAgXAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAotCWRhdGEtPnZhbHVlID0gVEVNUF9UT19SRUcodmFsKTsgXAorCWRhdGEtPnZhbHVlID0gdGVtcF90b19yZWcodmFsKTsgXAogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIGRhdGEtPnZhbHVlKTsgXAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BjODczNjAuYyBiL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCmluZGV4IDliNDYyYmIuLjVmYmZhMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCkBAIC03NSw3ICs3NSw4IEBACiAjZGVmaW5lIEZTQ00JMHgwOQkvKiBMb2dpY2FsIGRldmljZTogZmFucyAqLwogI2RlZmluZSBWTE0JMHgwZAkvKiBMb2dpY2FsIGRldmljZTogdm9sdGFnZXMgKi8KICNkZWZpbmUgVE1TCTB4MGUJLyogTG9naWNhbCBkZXZpY2U6IHRlbXBlcmF0dXJlcyAqLwotc3RhdGljIGNvbnN0IHU4IGxvZ2RldlszXSA9IHsgRlNDTSwgVkxNLCBUTVMgfTsKKyNkZWZpbmUgTEROSV9NQVggMworc3RhdGljIGNvbnN0IHU4IGxvZ2RldltMRE5JX01BWF0gPSB7IEZTQ00sIFZMTSwgVE1TIH07CiAKICNkZWZpbmUgTERfRkFOCQkwCiAjZGVmaW5lIExEX0lOCQkxCkBAIC00ODksMTEgKzQ5MCw2NiBAQAogCVNFTlNPUl9BVFRSKGluMTBfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEwKSwKIH07CiAKKy8qICh0ZW1wICYgdmluKSBjaGFubmVsIHN0YXR1cyByZWdpc3RlciBhbGFybSBiaXRzIChwZGYgc2VjLjExLjUuMTIpICovCisjZGVmaW5lIENIQU5fQUxNX01JTgkweDAyCS8qIG1pbiBsaW1pdCBjcm9zc2VkICovCisjZGVmaW5lIENIQU5fQUxNX01BWAkweDA0CS8qIG1heCBsaW1pdCBleGNlZWRlZCAqLworI2RlZmluZSBURU1QX0FMTV9DUklUCTB4MDgJLyogdGVtcCBjcml0IGV4Y2VlZGVkICh0ZW1wIG9ubHkpICovCisKKy8qIHNob3dfaW5fbWluL21heF9hbGFybSgpIHJlYWRzIGRhdGEgZnJvbSB0aGUgcGVyLWNoYW5uZWwgc3RhdHVzCisgICByZWdpc3RlciAoc2VjIDExLjUuMTIpLCBub3QgdGhlIHZpbiBldmVudCBzdGF0dXMgcmVnaXN0ZXJzIChzZWMKKyAgIDExLjUuMikgdGhhdCAobGVnYWN5KSBzaG93X2luX2FsYXJtKCkgcmVzZHMgKHZpYSBkYXRhLT5pbl9hbGFybXMpICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWluX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT5pbl9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUlOKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X2luX21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+aW5fc3RhdHVzW25yXSAmIENIQU5fQUxNX01BWCkpOworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGluX21pbl9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKGluMF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGluM19taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKGluNl9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKGluOV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUihpbjEwX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDEwKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGluX21heF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKGluMF9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGluM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKGluNl9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKGluOV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUihpbjEwX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDEwKSwKK307CisKICNkZWZpbmUgVklOX1VOSVRfQVRUUlMoWCkgXAogCSZpbl9pbnB1dFtYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJmluX3N0YXR1c1tYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJmluX21pbltYXS5kZXZfYXR0ci5hdHRyLAlcCi0JJmluX21heFtYXS5kZXZfYXR0ci5hdHRyCisJJmluX21heFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX21pbl9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX21heF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyCiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdmlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTY1OCwxMiArNzE0LDY4IEBACiAJCSAgICBzaG93X3RoZXJtX2NyaXQsIHNldF90aGVybV9jcml0LCAyKzExKSwKIH07CiAKKy8qIHNob3dfdGhlcm1fbWluL21heF9hbGFybSgpIHJlYWRzIGRhdGEgZnJvbSB0aGUgcGVyLWNoYW5uZWwgdm9sdGFnZQorICAgc3RhdHVzIHJlZ2lzdGVyIChzZWMgMTEuNS4xMikgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd190aGVybV9taW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT5pbl9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUlOKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X3RoZXJtX21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NQVgpKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGhlcm1fY3JpdF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBURU1QX0FMTV9DUklUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGhlcm1fbWluX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDRfbWluX2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9taW5fYWxhcm0sIE5VTEwsIDArMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA1X21pbl9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWluX2FsYXJtLCBOVUxMLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9taW5fYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21pbl9hbGFybSwgTlVMTCwgMisxMSksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0aGVybV9tYXhfYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9tYXhfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21heF9hbGFybSwgTlVMTCwgMCsxMSksCisJU0VOU09SX0FUVFIodGVtcDVfbWF4X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9tYXhfYWxhcm0sIE5VTEwsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21heF9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWF4X2FsYXJtLCBOVUxMLCAyKzExKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRoZXJtX2NyaXRfYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9jcml0X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9jcml0X2FsYXJtLCBOVUxMLCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9jcml0X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9jcml0X2FsYXJtLCBOVUxMLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9jcml0X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9jcml0X2FsYXJtLCBOVUxMLCAyKzExKSwKK307CisKICNkZWZpbmUgVEhFUk1fVU5JVF9BVFRSUyhYKSBcCiAJJnRoZXJtX2lucHV0W1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGhlcm1fc3RhdHVzW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGhlcm1fbWluW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGhlcm1fbWF4W1hdLmRldl9hdHRyLmF0dHIsCVwKLQkmdGhlcm1fY3JpdFtYXS5kZXZfYXR0ci5hdHRyCisJJnRoZXJtX2NyaXRbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0aGVybV9taW5fYWxhcm1bWF0uZGV2X2F0dHIuYXR0ciwgXAorCSZ0aGVybV9tYXhfYWxhcm1bWF0uZGV2X2F0dHIuYXR0ciwgXAorCSZ0aGVybV9jcml0X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBwYzg3MzZ4X3RoZXJtX2F0dHJfYXJyYXlbXSA9IHsKIAlUSEVSTV9VTklUX0FUVFJTKDApLApAQCAtNzkwLDEyICs5MDIsNzYgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXNfdGVtcCwgU19JUlVHTywgc2hvd190ZW1wX2FsYXJtcywgTlVMTCk7CiAKKy8qIHNob3dfdGVtcF9taW4vbWF4X2FsYXJtKCkgcmVhZHMgZGF0YSBmcm9tIHRoZSBwZXItY2hhbm5lbCBzdGF0dXMKKyAgIHJlZ2lzdGVyIChzZWMgMTIuMy43KSwgbm90IHRoZSB0ZW1wIGV2ZW50IHN0YXR1cyByZWdpc3RlcnMgKHNlYworICAgMTIuMy4yKSB0aGF0IHNob3dfdGVtcF9hbGFybSgpIHJlYWRzICh2aWEgZGF0YS0+dGVtcF9hbGFybXMpICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9taW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPnRlbXBfc3RhdHVzW25yXSAmIENIQU5fQUxNX01JTikpOworfQorc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUFYKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfY3JpdF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgVEVNUF9BTE1fQ1JJVCkpOworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRlbXBfbWluX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluX2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9taW5fYWxhcm0sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX21pbl9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21pbl9hbGFybSwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX21heF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21heF9hbGFybSwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4X2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9tYXhfYWxhcm0sIE5VTEwsIDIpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9jcml0X2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX2NyaXRfYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9jcml0X2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdF9hbGFybSwgTlVMTCwgMiksCit9OworCisjZGVmaW5lIFRFTVBfRkFVTFQJMHg0MAkvKiBvcGVuIGRpb2RlICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfZmF1bHQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPnRlbXBfc3RhdHVzW25yXSAmIFRFTVBfRkFVTFQpKTsKK30KK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9mYXVsdFtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX2ZhdWx0LCBTX0lSVUdPLCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDIpLAorfTsKKwogI2RlZmluZSBURU1QX1VOSVRfQVRUUlMoWCkgXAogCSZ0ZW1wX2lucHV0W1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGVtcF9zdGF0dXNbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0ZW1wX21pbltYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJnRlbXBfbWF4W1hdLmRldl9hdHRyLmF0dHIsCVwKLQkmdGVtcF9jcml0W1hdLmRldl9hdHRyLmF0dHIKKwkmdGVtcF9jcml0W1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmdGVtcF9taW5fYWxhcm1bWF0uZGV2X2F0dHIuYXR0ciwgXAorCSZ0ZW1wX21heF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRlbXBfY3JpdF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRlbXBfZmF1bHRbWF0uZGV2X2F0dHIuYXR0cgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBjODczNnhfdGVtcF9hdHRyX2FycmF5W10gPSB7CiAJVEVNUF9VTklUX0FUVFJTKDApLApAQCAtODA5LDggKzk4NSw4IEBACiAJLmF0dHJzID0gcGM4NzM2eF90ZW1wX2F0dHJfYXJyYXksCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwpAQCAtOTU1LDcgKzExMzEsNyBAQAogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTEROSV9NQVg7IGkrKykgewogCQlpZiAoKChkYXRhLT5hZGRyZXNzW2ldID0gZXh0cmFfaXNhW2ldKSkKIAkJICYmICFyZXF1ZXN0X3JlZ2lvbihleHRyYV9pc2FbaV0sIFBDODczNjBfRVhURU5ULAogCQkgCQkgICAgcGM4NzM2MF9kcml2ZXIuZHJpdmVyLm5hbWUpKSB7CkBAIC0xMDMxLDcgKzEyMDcsMTUgQEAKIAkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKIAkJCQkJJnRlbXBfY3JpdFtpXS5kZXZfYXR0cikpCiAJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJCSZ0ZW1wX3N0YXR1c1tpXS5kZXZfYXR0cikpKQorCQkJCQkmdGVtcF9zdGF0dXNbaV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9taW5fYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9tYXhfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9jcml0X2FsYXJtW2ldLmRldl9hdHRyKSkKKwkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJnRlbXBfZmF1bHRbaV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIEVSUk9SMzsKIAkJfQogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbGFybXNfdGVtcCkpKQpAQCAtMTEzMSw2ICsxMzE1LDE2IEBACiAJbXV0ZXhfdW5sb2NrKCYoZGF0YS0+bG9jaykpOwogfQogCisvKiAodGVtcCAmIHZpbikgY2hhbm5lbCBjb252ZXJzaW9uIHN0YXR1cyByZWdpc3RlciBmbGFncyAocGRmIHNlYy4xMS41LjEyKSAqLworI2RlZmluZSBDSEFOX0NOVlJURAkweDgwCS8qIG5ldyBkYXRhIHJlYWR5ICovCisjZGVmaW5lIENIQU5fRU5BCTB4MDEJLyogZW5hYmxlZCBjaGFubmVsICh0ZW1wIG9yIHZpbikgKi8KKyNkZWZpbmUgQ0hBTl9BTE1fRU5BCTB4MTAJLyogcHJvcGFnYXRlIHRvIGFsYXJtcy1yZWcgPz8gKGNoayB2YWwhKSAqLworI2RlZmluZSBDSEFOX1JFQURZCShDSEFOX0VOQXxDSEFOX0NOVlJURCkgLyogc2FtcGxlIHJlYWR5IG1hc2sgKi8KKworI2RlZmluZSBURU1QX09UU19PRQkweDIwCS8qIE9UUyBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lIFZJTl9SVzFDX01BU0sJKENIQU5fUkVBRFl8Q0hBTl9BTE1fTUFYfENIQU5fQUxNX01JTikgICAvKiAweDg3ICovCisjZGVmaW5lIFRFTVBfUlcxQ19NQVNLCShWSU5fUlcxQ19NQVNLfFRFTVBfQUxNX0NSSVR8VEVNUF9GQVVMVCkgLyogMHhDRiAqLworCiBzdGF0aWMgdm9pZCBwYzg3MzYwX2luaXRfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJaW50IHVzZV90aGVybWlzdG9ycykKIHsKQEAgLTExNTIsMTEgKzEzNDYsMTIgQEAKIAogCW5yID0gZGF0YS0+aW5uciA8IDExID8gZGF0YS0+aW5uciA6IDExOwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKKwkJCQkJIFBDODczNjVfUkVHX0lOX1NUQVRVUyk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgaW4lZCBzdGF0dXM6MHglMDJ4XG4iLCBpLCByZWcpOwogCQlpZiAoaW5pdCA+PSBpbml0X2luW2ldKSB7CiAJCQkvKiBGb3JjaWJseSBlbmFibGUgdm9sdGFnZSBjaGFubmVsICovCi0JCQlyZWcgPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfSU4sIGksCi0JCQkJCQkgUEM4NzM2NV9SRUdfSU5fU1RBVFVTKTsKLQkJCWlmICghKHJlZyAmIDB4MDEpKSB7CisJCQlpZiAoIShyZWcgJiBDSEFOX0VOQSkpIHsKIAkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSAiCiAJCQkJCSJlbmFibGluZyBpbiVkXG4iLCBpKTsKIAkJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBpLApAQCAtMTE2OCwxOSArMTM2MywyNCBAQAogCiAJLyogV2UgY2FuJ3QgYmxpbmRseSB0cnVzdCB0aGUgU3VwZXItSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24gYml0LAogCSAgIG1vc3QgQklPUyB3b24ndCBzZXQgaXQgcHJvcGVybHkgKi8KKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRoZXJtaXN0b3JzOiVkXG4iLCB1c2VfdGhlcm1pc3RvcnMpOwogCWZvciAoaSA9IDExOyBpIDwgZGF0YS0+aW5ucjsgaSsrKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJIFBDODczNjVfUkVHX1RFTVBfU1RBVFVTKTsKLQkJdXNlX3RoZXJtaXN0b3JzID0gdXNlX3RoZXJtaXN0b3JzIHx8IChyZWcgJiAweDAxKTsKKwkJdXNlX3RoZXJtaXN0b3JzID0gdXNlX3RoZXJtaXN0b3JzIHx8IChyZWcgJiBDSEFOX0VOQSk7CisJCS8qIHRoZXJtaXN0b3JzIGFyZSB0ZW1wWzQtNl0sIG1lYXN1cmVkIG9uIHZpblsxMS0xNF0gKi8KKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmlvcyB0ZW1wJWRfc3RhdHVzOjB4JTAyeFxuIiwgaS03LCByZWcpOwogCX0KKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ1c2luZyB0aGVybWlzdG9yczolZFxuIiwgdXNlX3RoZXJtaXN0b3JzKTsKIAogCWkgPSB1c2VfdGhlcm1pc3RvcnMgPyAyIDogMDsKIAlmb3IgKDsgaSA8IGRhdGEtPnRlbXBucjsgaSsrKSB7CisJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBpLAorCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRlbXAlZF9zdGF0dXM6MHglMDJ4XG4iLCBpKzEsIHJlZyk7CiAJCWlmIChpbml0ID49IGluaXRfdGVtcFtpXSkgewogCQkJLyogRm9yY2libHkgZW5hYmxlIHRlbXBlcmF0dXJlIGNoYW5uZWwgKi8KLQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBpLAotCQkJCQkJIFBDODczNjVfUkVHX1RFTVBfU1RBVFVTKTsKLQkJCWlmICghKHJlZyAmIDB4MDEpKSB7CisJCQlpZiAoIShyZWcgJiBDSEFOX0VOQSkpIHsKIAkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSAiCiAJCQkJCSJlbmFibGluZyB0ZW1wJWRcbiIsIGkrMSk7CiAJCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBpLApAQCAtMTE5Nyw3ICsxMzk3LDcgQEAKIAkJCQkgICBkaW9kZXMgKi8KIAkJCQlyZWcgPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfVEVNUCwKIAkJCQkgICAgICAoaS0xMSkvMiwgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOwotCQkJCWlmIChyZWcgJiAweDAxKSB7CisJCQkJaWYgKHJlZyAmIENIQU5fRU5BKSB7CiAJCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIlNraXBwaW5nICIKIAkJCQkJCSJ0ZW1wJWQsIHBpbiBhbHJlYWR5IGluIHVzZSAiCiAJCQkJCQkiYnkgdGVtcCVkXG4iLCBpLTcsIChpLTExKS8yKTsKQEAgLTEyMDcsNyArMTQwNyw3IEBACiAJCQkJLyogRm9yY2libHkgZW5hYmxlIHRoZXJtaXN0b3IgY2hhbm5lbCAqLwogCQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJCQkgUEM4NzM2NV9SRUdfSU5fU1RBVFVTKTsKLQkJCQlpZiAoIShyZWcgJiAweDAxKSkgeworCQkJCWlmICghKHJlZyAmIENIQU5fRU5BKSkgewogCQkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSAiCiAJCQkJCQkiZW5hYmxpbmcgdGVtcCVkXG4iLCBpLTcpOwogCQkJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBpLApAQCAtMTIyMSw3ICsxNDIxLDggQEAKIAlpZiAoZGF0YS0+aW5ucikgewogCQlyZWcgPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfSU4sIE5PX0JBTkssCiAJCQkJCSBQQzg3MzY1X1JFR19JTl9DT05GSUcpOwotCQlpZiAocmVnICYgMHgwMSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHZpbi1jZmc6MHglMDJ4XG4iLCByZWcpOworCQlpZiAocmVnICYgQ0hBTl9FTkEpIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkiZW5hYmxpbmcgbW9uaXRvcmluZyAoVkxNKVxuIik7CiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBOT19CQU5LLApAQCAtMTIzMyw3ICsxNDM0LDggQEAKIAlpZiAoZGF0YS0+dGVtcG5yKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBOT19CQU5LLAogCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9DT05GSUcpOwotCQlpZiAocmVnICYgMHgwMSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRlbXAtY2ZnOjB4JTAyeFxuIiwgcmVnKTsKKwkJaWYgKHJlZyAmIENIQU5fRU5BKSB7CiAJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJGb3JjaWJseSBlbmFibGluZyAiCiAJCQkJIm1vbml0b3JpbmcgKFRNUylcbiIpOwogCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBOT19CQU5LLApAQCAtMTMzNiwxMSArMTUzOCwxMSBAQAogCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJICAgIFBDODczNjVfUkVHX0lOX1NUQVRVUywKIAkJCQkJICAgIGRhdGEtPmluX3N0YXR1c1tpXSk7Ci0JCQlpZiAoKGRhdGEtPmluX3N0YXR1c1tpXSAmIDB4ODEpID09IDB4ODEpIHsKKwkJCWlmICgoZGF0YS0+aW5fc3RhdHVzW2ldICYgQ0hBTl9SRUFEWSkgPT0gQ0hBTl9SRUFEWSkgewogCQkJCWRhdGEtPmluW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLAogCQkJCQkgICAgICBpLCBQQzg3MzY1X1JFR19JTik7CiAJCQl9Ci0JCQlpZiAoZGF0YS0+aW5fc3RhdHVzW2ldICYgMHgwMSkgeworCQkJaWYgKGRhdGEtPmluX3N0YXR1c1tpXSAmIENIQU5fRU5BKSB7CiAJCQkJZGF0YS0+aW5fbWluW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQkgIExEX0lOLCBpLAogCQkJCQkJICBQQzg3MzY1X1JFR19JTl9NSU4pOwpAQCAtMTM3MywxMiArMTU3NSwxMiBAQAogCQkJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBpLAogCQkJCQkgICAgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMsCiAJCQkJCSAgICBkYXRhLT50ZW1wX3N0YXR1c1tpXSk7Ci0JCQlpZiAoKGRhdGEtPnRlbXBfc3RhdHVzW2ldICYgMHg4MSkgPT0gMHg4MSkgeworCQkJaWYgKChkYXRhLT50ZW1wX3N0YXR1c1tpXSAmIENIQU5fUkVBRFkpID09IENIQU5fUkVBRFkpIHsKIAkJCQlkYXRhLT50ZW1wW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQlMRF9URU1QLCBpLAogCQkJCQkJUEM4NzM2NV9SRUdfVEVNUCk7CiAJCQl9Ci0JCQlpZiAoZGF0YS0+dGVtcF9zdGF0dXNbaV0gJiAweDAxKSB7CisJCQlpZiAoZGF0YS0+dGVtcF9zdGF0dXNbaV0gJiBDSEFOX0VOQSkgewogCQkJCWRhdGEtPnRlbXBfbWluW2ldID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQkgICAgTERfVEVNUCwgaSwKIAkJCQkJCSAgICBQQzg3MzY1X1JFR19URU1QX01JTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCmluZGV4IGY5NDJlY2QuLmQ0ZDFiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCkBAIC00LDcgKzQsNyBAQAogICAgIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDEgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgotICAgIENvcHlyaWdodCAoYykgMjAwNyAgICAgICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICAgIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMDggIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzgsMjUgKzM4LDI0IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgImxtNzUuaCIKIAotLyogSVNBIGRldmljZSwgaWYgZm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworI2lmZGVmIENPTkZJR19JU0EKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibG03NS5oIgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwKIAkJCQkJCTB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaXNhX2FkZHJlc3MgPSAweDI5MDsKLQogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KIEkyQ19DTElFTlRfSU5TTU9EXzQodzgzNzgxZCwgdzgzNzgyZCwgdzgzNzgzcywgYXM5OTEyN2YpOwogSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShmb3JjZV9zdWJjbGllbnRzLCAiTGlzdCBvZiBzdWJjbGllbnQgYWRkcmVzc2VzOiAiCkBAIC0xNzgsOSArMTc3LDkgQEAKICNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpCQkoKHZhbCkgKiAxMDAwKQogCiAjZGVmaW5lIEJFRVBfTUFTS19GUk9NX1JFRyh2YWwsdHlwZSkJKCh0eXBlKSA9PSBhczk5MTI3ZiA/IFwKLQkJCQkJICh2YWwpIF4gMHg3ZmZmIDogKHZhbCkpCisJCQkJCSAofih2YWwpKSAmIDB4N2ZmZiA6ICh2YWwpICYgMHhmZjdmZmYpCiAjZGVmaW5lIEJFRVBfTUFTS19UT19SRUcodmFsLHR5cGUpCSgodHlwZSkgPT0gYXM5OTEyN2YgPyBcCi0JCQkJCSAofih2YWwpKSAmIDB4N2ZmZiA6ICh2YWwpICYgMHhmZmZmZmYpCisJCQkJCSAofih2YWwpKSAmIDB4N2ZmZiA6ICh2YWwpICYgMHhmZjdmZmYpCiAKICNkZWZpbmUgRElWX0ZST01fUkVHKHZhbCkJCSgxIDw8ICh2YWwpKQogCkBAIC0xOTksMjUgKzE5OCwxNiBAQAogCXJldHVybiBpOwogfQogCi0vKiBUaGVyZSBhcmUgc29tZSBjb21wbGljYXRpb25zIGluIGEgbW9kdWxlIGxpa2UgdGhpcy4gRmlyc3Qgb2ZmLCBXODM3ODFEIGNoaXBzCi0gICBtYXkgYmUgYm90aCBwcmVzZW50IG9uIHRoZSBTTUJ1cyBhbmQgdGhlIElTQSBidXMsIGFuZCB3ZSBoYXZlIHRvIGhhbmRsZQotICAgdGhvc2UgY2FzZXMgc2VwYXJhdGVseSBhdCBzb21lIHBsYWNlcy4gU2Vjb25kLCB0aGVyZSBtaWdodCBiZSBzZXZlcmFsCi0gICBXODM3ODFEIGNoaXBzIGF2YWlsYWJsZSAod2VsbCwgYWN0dWFsbHksIHRoYXQgaXMgcHJvYmFibHkgbmV2ZXIgZG9uZTsgYnV0Ci0gICBpdCBpcyBhIGNsZWFuIGlsbHVzdHJhdGlvbiBvZiBob3cgdG8gaGFuZGxlIGEgY2FzZSBsaWtlIHRoYXQpLiBGaW5hbGx5LAotICAgYSBzcGVjaWZpYyBjaGlwIG1heSBiZSBhdHRhY2hlZCB0byAqYm90aCogSVNBIGFuZCBTTUJ1cywgYW5kIHdlIHdvdWxkCi0gICBub3QgbGlrZSB0byBkZXRlY3QgaXQgZG91YmxlLiBGb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgdGhlIFc4Mzc4MUQgYXQKLSAgIGxlYXN0LCBhIHJlZ2lzdGVyIHRlbGxzIHVzIHdoYXQgU01CdXMgYWRkcmVzcyB3ZSBhcmUgb24sIHNvIHRoYXQgaGVscHMKLSAgIGEgYml0IC0gZXhjZXB0IGlmIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgU01CdXMuIEdyb2FuLiBObyBzb2x1dGlvbgotICAgZm9yIHRoaXMgeWV0LiAqLwotCi0vKiBGb3IgSVNBIGNoaXBzLCB3ZSBhYnVzZSB0aGUgaTJjX2NsaWVudCBhZGRyIGFuZCBuYW1lIGZpZWxkcy4gV2UgYWxzbyB1c2UKLSAgIHRoZSBkcml2ZXIgZmllbGQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIEkyQyBhbmQgSVNBIGNoaXBzLiAqLwogc3RydWN0IHc4Mzc4MWRfZGF0YSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKIAorCS8qIEZvciBJU0EgZGV2aWNlIG9ubHkgKi8KKwljb25zdCBjaGFyICpuYW1lOworCWludCBpc2FfYWRkcjsKKwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KQEAgLTI0MCw3ICsyMzAsNiBAQAogCXU4IHZpZDsJCQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIAl1MzIgYWxhcm1zOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCiAJdTMyIGJlZXBfbWFzazsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwotCXU4IGJlZXBfZW5hYmxlOwkJLyogQm9vbGVhbiAqLwogCXU4IHB3bVs0XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggcHdtMl9lbmFibGU7CQkvKiBCb29sZWFuICovCiAJdTE2IHNlbnNbM107CQkvKiA3ODJELzc4M1Mgb25seS4KQEAgLTI0OSwzNiArMjM4LDE0IEBACiAJdTggdnJtOwogfTsKIAotc3RhdGljIGludCB3ODM3ODFkX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHc4Mzc4MWRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKLXN0YXRpYyBpbnQgdzgzNzgxZF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3ODM3ODFkX2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLXN0YXRpYyBpbnQgX19kZXZleGl0IHc4Mzc4MWRfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX2RhdGFfaWZfaXNhKHZvaWQpOworc3RhdGljIGludCB3ODM3ODFkX2FsaWFzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjaGlwaWQpOwogCiBzdGF0aWMgaW50IHc4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKTsKIHN0YXRpYyBpbnQgdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpOwogc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdzgzNzgxZF9pbml0X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdzgzNzgxZF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidzgzNzgxZCIsCi0JfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSB3ODM3ODFkX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gdzgzNzgxZF9kZXRhY2hfY2xpZW50LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzgzNzgxZF9pc2FfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkubmFtZSA9ICJ3ODM3ODFkIiwKLQl9LAotCS5wcm9iZSA9IHc4Mzc4MWRfaXNhX3Byb2JlLAotCS5yZW1vdmUgPSB3ODM3ODFkX2lzYV9yZW1vdmUsCi19OwotCi0KIC8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBzaG93X2luX3JlZyhyZWcpIFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBcCkBAIC01MTMsMTEgKzQ4MCw2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLAogCQkgICAgICAgKGxvbmcpQkVFUF9NQVNLX0ZST01fUkVHKGRhdGEtPmJlZXBfbWFzaywgZGF0YS0+dHlwZSkpOwogfQotc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwX2VuYWJsZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSB3ODM3ODFkX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIChsb25nKWRhdGEtPmJlZXBfZW5hYmxlKTsKLX0KIAogc3RhdGljIHNzaXplX3QKIHN0b3JlX2JlZXBfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNTI5LDEyICs0OTEsMTIgQEAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5iZWVwX21hc2sgPSBCRUVQX01BU0tfVE9fUkVHKHZhbCwgZGF0YS0+dHlwZSk7CisJZGF0YS0+YmVlcF9tYXNrICY9IDB4ODAwMDsgLyogcHJlc2VydmUgYmVlcCBlbmFibGUgKi8KKwlkYXRhLT5iZWVwX21hc2sgfD0gQkVFUF9NQVNLX1RPX1JFRyh2YWwsIGRhdGEtPnR5cGUpOwogCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSwKIAkJCSAgICBkYXRhLT5iZWVwX21hc2sgJiAweGZmKTsKIAl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsCi0JCQkgICAgKChkYXRhLT5iZWVwX21hc2sgPj4gOCkgJiAweDdmKQotCQkJICAgIHwgZGF0YS0+YmVlcF9lbmFibGUgPDwgNyk7CisJCQkgICAgKGRhdGEtPmJlZXBfbWFzayA+PiA4KSAmIDB4ZmYpOwogCWlmIChkYXRhLT50eXBlICE9IHc4Mzc4MWQgJiYgZGF0YS0+dHlwZSAhPSBhczk5MTI3ZikgewogCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzMsCiAJCQkJICAgICgoZGF0YS0+YmVlcF9tYXNrKSA+PiAxNikgJiAweGZmKTsKQEAgLTU0NCwzMSArNTA2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9iZWVwX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdTMyIHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCWlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+YmVlcF9lbmFibGUgPSB2YWw7Ci0JdmFsID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIpICYgMHg3ZjsKLQl2YWwgfD0gZGF0YS0+YmVlcF9lbmFibGUgPDwgNzsKLQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsIHZhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KIHN0YXRpYyBERVZJQ0VfQVRUUihiZWVwX21hc2ssIFNfSVJVR08gfCBTX0lXVVNSLAogCQlzaG93X2JlZXBfbWFzaywgc3RvcmVfYmVlcF9tYXNrKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihiZWVwX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXNob3dfYmVlcF9lbmFibGUsIHN0b3JlX2JlZXBfZW5hYmxlKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTY2Myw2ICs2MDIsOCBAQAogCQkJc2hvd19iZWVwLCBzdG9yZV9iZWVwLCA1KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYmVlcCwgU19JUlVHTywKIAkJCXNob3dfdGVtcDNfYmVlcCwgc3RvcmVfYmVlcCwgMTMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihiZWVwX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X2JlZXAsIHN0b3JlX2JlZXAsIDE1KTsKIAogc3RhdGljIHNzaXplX3QKIHNob3dfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKQpAQCAtODY2LDQ1ICs4MDcsMTkgQEAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfdHlwZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJc2hvd19zZW5zb3IsIHN0b3JlX3NlbnNvciwgMik7CiAKLS8qIEkyQyBkZXZpY2VzIGdldCB0aGlzIG5hbWUgYXR0cmlidXRlIGF1dG9tYXRpY2FsbHksIGJ1dCBmb3IgSVNBIGRldmljZXMKLSAgIHdlIG11c3QgY3JlYXRlIGl0IGJ5IG91cnNlbHZlcy4gKi8KLXN0YXRpYyBzc2l6ZV90Ci1zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+Y2xpZW50Lm5hbWUpOwotfQotc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW46Ci0gICAgICogdzgzNzgxZF9kcml2ZXIgaXMgaW5zZXJ0ZWQgKHdoZW4gdGhpcyBtb2R1bGUgaXMgbG9hZGVkKSwgZm9yIGVhY2gKLSAgICAgICBhdmFpbGFibGUgYWRhcHRlcgotICAgICAqIHdoZW4gYSBuZXcgYWRhcHRlciBpcyBpbnNlcnRlZCAoYW5kIHc4Mzc4MWRfZHJpdmVyIGlzIHN0aWxsIHByZXNlbnQpICovCi1zdGF0aWMgaW50Ci13ODM3ODFkX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCi0JCXJldHVybiAwOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgdzgzNzgxZF9kZXRlY3QpOwotfQotCiAvKiBBc3N1bWVzIHRoYXQgYWRhcHRlciBpcyBvZiBJMkMsIG5vdCBJU0EgdmFyaWV0eS4KICAqIE9USEVSV0lTRSBET04nVCBDQUxMIFRISVMKICAqLwogc3RhdGljIGludAotdzgzNzgxZF9kZXRlY3Rfc3ViY2xpZW50cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCwKLQkJc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQpCit3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50KQogewogCWludCBpLCB2YWwxID0gMCwgaWQ7CiAJaW50IGVycjsKLQljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOworCWludCBhZGRyZXNzID0gbmV3X2NsaWVudC0+YWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBzY19hZGRyWzJdOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50KTsKLQotCWRhdGEtPmxtNzVbMF0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghKGRhdGEtPmxtNzVbMF0pKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gRVJST1JfU0NfMDsKLQl9CisJZW51bSBjaGlwcyBraW5kID0gZGF0YS0+dHlwZTsKIAogCWlkID0gaTJjX2FkYXB0ZXJfaWQoYWRhcHRlcik7CiAKQEAgLTkyMiw1NSArODM3LDM1IEBACiAJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfSTJDX1NVQkFERFIsCiAJCQkJKGZvcmNlX3N1YmNsaWVudHNbMl0gJiAweDA3KSB8CiAJCQkJKChmb3JjZV9zdWJjbGllbnRzWzNdICYgMHgwNykgPDwgNCkpOwotCQlkYXRhLT5sbTc1WzBdLT5hZGRyID0gZm9yY2Vfc3ViY2xpZW50c1syXTsKKwkJc2NfYWRkclswXSA9IGZvcmNlX3N1YmNsaWVudHNbMl07CiAJfSBlbHNlIHsKIAkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JMkNfU1VCQUREUik7Ci0JCWRhdGEtPmxtNzVbMF0tPmFkZHIgPSAweDQ4ICsgKHZhbDEgJiAweDA3KTsKKwkJc2NfYWRkclswXSA9IDB4NDggKyAodmFsMSAmIDB4MDcpOwogCX0KIAogCWlmIChraW5kICE9IHc4Mzc4M3MpIHsKLQkJZGF0YS0+bG03NVsxXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghKGRhdGEtPmxtNzVbMV0pKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBFUlJPUl9TQ18xOwotCQl9Ci0KIAkJaWYgKGZvcmNlX3N1YmNsaWVudHNbMF0gPT0gaWQgJiYKIAkJICAgIGZvcmNlX3N1YmNsaWVudHNbMV0gPT0gYWRkcmVzcykgewotCQkJZGF0YS0+bG03NVsxXS0+YWRkciA9IGZvcmNlX3N1YmNsaWVudHNbM107CisJCQlzY19hZGRyWzFdID0gZm9yY2Vfc3ViY2xpZW50c1szXTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEtPmxtNzVbMV0tPmFkZHIgPSAweDQ4ICsgKCh2YWwxID4+IDQpICYgMHgwNyk7CisJCQlzY19hZGRyWzFdID0gMHg0OCArICgodmFsMSA+PiA0KSAmIDB4MDcpOwogCQl9Ci0JCWlmIChkYXRhLT5sbTc1WzBdLT5hZGRyID09IGRhdGEtPmxtNzVbMV0tPmFkZHIpIHsKKwkJaWYgKHNjX2FkZHJbMF0gPT0gc2NfYWRkclsxXSkgewogCQkJZGV2X2VycigmbmV3X2NsaWVudC0+ZGV2LAogCQkJICAgICAgICJEdXBsaWNhdGUgYWRkcmVzc2VzIDB4JXggZm9yIHN1YmNsaWVudHMuXG4iLAotCQkJICAgICAgIGRhdGEtPmxtNzVbMF0tPmFkZHIpOworCQkJICAgICAgIHNjX2FkZHJbMF0pOwogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBFUlJPUl9TQ18yOwogCQl9CiAJfQogCi0JaWYgKGtpbmQgPT0gdzgzNzgxZCkKLQkJY2xpZW50X25hbWUgPSAidzgzNzgxZCBzdWJjbGllbnQiOwotCWVsc2UgaWYgKGtpbmQgPT0gdzgzNzgyZCkKLQkJY2xpZW50X25hbWUgPSAidzgzNzgyZCBzdWJjbGllbnQiOwotCWVsc2UgaWYgKGtpbmQgPT0gdzgzNzgzcykKLQkJY2xpZW50X25hbWUgPSAidzgzNzgzcyBzdWJjbGllbnQiOwotCWVsc2UgaWYgKGtpbmQgPT0gYXM5OTEyN2YpCi0JCWNsaWVudF9uYW1lID0gImFzOTkxMjdmIHN1YmNsaWVudCI7Ci0KIAlmb3IgKGkgPSAwOyBpIDw9IDE7IGkrKykgewotCQkvKiBzdG9yZSBhbGwgZGF0YSBpbiB3ODM3ODFkICovCi0JCWkyY19zZXRfY2xpZW50ZGF0YShkYXRhLT5sbTc1W2ldLCBOVUxMKTsKLQkJZGF0YS0+bG03NVtpXS0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JCWRhdGEtPmxtNzVbaV0tPmRyaXZlciA9ICZ3ODM3ODFkX2RyaXZlcjsKLQkJZGF0YS0+bG03NVtpXS0+ZmxhZ3MgPSAwOwotCQlzdHJsY3B5KGRhdGEtPmxtNzVbaV0tPm5hbWUsIGNsaWVudF9uYW1lLAotCQkJSTJDX05BTUVfU0laRSk7Ci0JCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoZGF0YS0+bG03NVtpXSkpKSB7CisJCWRhdGEtPmxtNzVbaV0gPSBpMmNfbmV3X2R1bW15KGFkYXB0ZXIsIHNjX2FkZHJbaV0pOworCQlpZiAoIWRhdGEtPmxtNzVbaV0pIHsKIAkJCWRldl9lcnIoJm5ld19jbGllbnQtPmRldiwgIlN1YmNsaWVudCAlZCAiCiAJCQkJInJlZ2lzdHJhdGlvbiBhdCBhZGRyZXNzIDB4JXggIgotCQkJCSJmYWlsZWQuXG4iLCBpLCBkYXRhLT5sbTc1W2ldLT5hZGRyKTsKKwkJCQkiZmFpbGVkLlxuIiwgaSwgc2NfYWRkcltpXSk7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJaWYgKGkgPT0gMSkKIAkJCQlnb3RvIEVSUk9SX1NDXzM7CiAJCQlnb3RvIEVSUk9SX1NDXzI7CkBAIC05ODMsMTIgKzg3OCw5IEBACiAKIC8qIFVuZG8gaW5pdHMgaW4gY2FzZSBvZiBlcnJvcnMgKi8KIEVSUk9SX1NDXzM6Ci0JaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVswXSk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMF0pOwogRVJST1JfU0NfMjoKLQlrZnJlZShkYXRhLT5sbTc1WzFdKTsKIEVSUk9SX1NDXzE6Ci0Ja2ZyZWUoZGF0YS0+bG03NVswXSk7Ci1FUlJPUl9TQ18wOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwMjksNyArOTIxLDcgQEAKIAkmZGV2X2F0dHJfdnJtLmF0dHIsCiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAogCSZkZXZfYXR0cl9iZWVwX21hc2suYXR0ciwKLQkmZGV2X2F0dHJfYmVlcF9lbmFibGUuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2JlZXBfZW5hYmxlLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHc4Mzc4MWRfZ3JvdXAgPSB7CkBAIC0xMTUxLDk2ICsxMDQzLDc0IEBACiAJCX0KIAl9CiAKLQlpZiAoaXNfaXNhKSB7Ci0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQogCXJldHVybiAwOwogfQogCisvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQKLXc4Mzc4MWRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQordzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCisJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlpbnQgdmFsMSA9IDAsIHZhbDI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmlzYSA9IHc4Mzc4MWRfZGF0YV9pZl9pc2EoKTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJaW50IGFkZHJlc3MgPSBjbGllbnQtPmFkZHI7CiAJY29uc3QgY2hhciAqY2xpZW50X25hbWUgPSAiIjsKIAllbnVtIHZlbmRvciB7IHdpbmJvbmQsIGFzdXMgfSB2ZW5kaWQ7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBFUlJPUjE7Ci0JfQorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBPSy4gRm9yIG5vdywgd2UgcHJlc3VtZSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50LiBXZSBub3cgY3JlYXRlIHRoZQotCSAgIGNsaWVudCBzdHJ1Y3R1cmUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBmaWxsIGl0IGNvbXBsZXRlbHkgeWV0LgotCSAgIEJ1dCBpdCBhbGxvd3MgdXMgdG8gYWNjZXNzIHc4Mzc4MWRfe3JlYWQsd3JpdGV9X3ZhbHVlLiAqLwotCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3ODM3ODFkX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBFUlJPUjE7Ci0JfQotCi0JY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmdzgzNzgxZF9kcml2ZXI7Ci0JZGV2ID0gJmNsaWVudC0+ZGV2OwotCi0JLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KKwkvKiBXZSBibG9jayB1cGRhdGVzIG9mIHRoZSBJU0EgZGV2aWNlIHRvIG1pbmltaXplIHRoZSByaXNrIG9mCisJICAgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNhbWUgVzgzNzgxRCBjaGlwIHRocm91Z2ggZGlmZmVyZW50CisJICAgaW50ZXJmYWNlcy4gKi8KKwlpZiAoaXNhKQorCQltdXRleF9sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRoZSB3ODM3OD9kIG1heSBiZSBzdHVjayBpbiBzb21lIG90aGVyIGJhbmsgdGhhbiBiYW5rIDAuIFRoaXMgbWF5CiAJICAgbWFrZSByZWFkaW5nIG90aGVyIGluZm9ybWF0aW9uIGltcG9zc2libGUuIFNwZWNpZnkgYSBmb3JjZT0uLi4gb3IKIAkgICBmb3JjZV8qPS4uLiBwYXJhbWV0ZXIsIGFuZCB0aGUgV2luYm9uZCB3aWxsIGJlIHJlc2V0IHRvIHRoZSByaWdodAogCSAgIGJhbmsuICovCiAJaWYgKGtpbmQgPCAwKSB7Ci0JCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ09ORklHKSAmIDB4ODApIHsKKwkJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YQorCQkgICAgKGNsaWVudCwgVzgzNzgxRF9SRUdfQ09ORklHKSAmIDB4ODApIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGlvbiBvZiB3ODM3ODFkIGNoaXAgIgogCQkJCSJmYWlsZWQgYXQgc3RlcCAzXG4iKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKKwkJCWdvdG8gZXJyX25vZGV2OwogCQl9Ci0JCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSyk7Ci0JCXZhbDIgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CisJCXZhbDEgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LKTsKKwkJdmFsMiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0NISVBNQU4pOwogCQkvKiBDaGVjayBmb3IgV2luYm9uZCBvciBBc3VzIElEIGlmIGluIGJhbmsgMCAqLwogCQlpZiAoKCEodmFsMSAmIDB4MDcpKSAmJgogCQkgICAgKCgoISh2YWwxICYgMHg4MCkpICYmICh2YWwyICE9IDB4YTMpICYmICh2YWwyICE9IDB4YzMpKQogCQkgICAgIHx8ICgodmFsMSAmIDB4ODApICYmICh2YWwyICE9IDB4NWMpICYmICh2YWwyICE9IDB4MTIpKSkpIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGlvbiBvZiB3ODM3ODFkIGNoaXAgIgogCQkJCSJmYWlsZWQgYXQgc3RlcCA0XG4iKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKKwkJCWdvdG8gZXJyX25vZGV2OwogCQl9CiAJCS8qIElmIFdpbmJvbmQgU01CdXMsIGNoZWNrIGFkZHJlc3MgYXQgMHg0OC4KIAkJICAgQXN1cyBkb2Vzbid0IHN1cHBvcnQsIGV4Y2VwdCBmb3IgYXM5OTEyN2YgcmV2LjIgKi8KIAkJaWYgKCghKHZhbDEgJiAweDgwKSAmJiAodmFsMiA9PSAweGEzKSkgfHwKIAkJICAgICgodmFsMSAmIDB4ODApICYmICh2YWwyID09IDB4NWMpKSkgewotCQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZQotCQkJICAgIChkYXRhLCBXODM3ODFEX1JFR19JMkNfQUREUikgIT0gYWRkcmVzcykgeworCQkJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YQorCQkJICAgIChjbGllbnQsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7CiAJCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgIgogCQkJCQkiY2hpcCBmYWlsZWQgYXQgc3RlcCA1XG4iKTsKLQkJCQllcnIgPSAtRU5PREVWOwotCQkJCWdvdG8gRVJST1IyOworCQkJCWdvdG8gZXJyX25vZGV2OwogCQkJfQogCQl9CiAJfQogCiAJLyogV2UgaGF2ZSBlaXRoZXIgaGFkIGEgZm9yY2UgcGFyYW1ldGVyLCBvciB3ZSBoYXZlIGFscmVhZHkgZGV0ZWN0ZWQgdGhlCiAJICAgV2luYm9uZC4gUHV0IGl0IG5vdyBpbnRvIGJhbmsgMCBhbmQgVmVuZG9yIElEIEhpZ2ggQnl0ZSAqLwotCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSywKLQkJCSAgICAodzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JBTkspCi0JCQkgICAgICYgMHg3OCkgfCAweDgwKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKKwkJKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspCisJCSAmIDB4NzgpIHwgMHg4MCk7CiAKIAkvKiBEZXRlcm1pbmUgdGhlIGNoaXAgdHlwZS4gKi8KIAlpZiAoa2luZCA8PSAwKSB7CiAJCS8qIGdldCB2ZW5kb3IgSUQgKi8KLQkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0NISVBNQU4pOwogCQlpZiAodmFsMiA9PSAweDVjKQogCQkJdmVuZGlkID0gd2luYm9uZDsKIAkJZWxzZSBpZiAodmFsMiA9PSAweDEyKQpAQCAtMTI0OCwxMSArMTExOCwxMCBAQAogCQllbHNlIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgInc4Mzc4MWQgY2hpcCB2ZW5kb3IgaXMgIgogCQkJCSJuZWl0aGVyIFdpbmJvbmQgbm9yIEFzdXNcbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAotCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOworCQl2YWwxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CiAJCWlmICgodmFsMSA9PSAweDEwIHx8IHZhbDEgPT0gMHgxMSkgJiYgdmVuZGlkID09IHdpbmJvbmQpCiAJCQlraW5kID0gdzgzNzgxZDsKIAkJZWxzZSBpZiAodmFsMSA9PSAweDMwICYmIHZlbmRpZCA9PSB3aW5ib25kKQpAQCAtMTI2NiwxMSArMTEzNSwyMCBAQAogCQkJCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJJZ25vcmluZyAnZm9yY2UnICIKIAkJCQkJICJwYXJhbWV0ZXIgZm9yIHVua25vd24gY2hpcCBhdCAiCiAJCQkJCSAiYWRkcmVzcyAweCUwMnhcbiIsIGFkZHJlc3MpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CisJCX0KKworCQlpZiAoKGtpbmQgPT0gdzgzNzgxZCB8fCBraW5kID09IHc4Mzc4MmQpCisJCSAmJiB3ODM3ODFkX2FsaWFzX2RldGVjdChjbGllbnQsIHZhbDEpKSB7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXZpY2UgYXQgMHglMDJ4IGFwcGVhcnMgdG8gIgorCQkJCSJiZSB0aGUgc2FtZSBhcyBJU0EgZGV2aWNlXG4iLCBhZGRyZXNzKTsKKwkJCWdvdG8gZXJyX25vZGV2OwogCQl9CiAJfQogCisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwogCWlmIChraW5kID09IHc4Mzc4MWQpIHsKIAkJY2xpZW50X25hbWUgPSAidzgzNzgxZCI7CiAJfSBlbHNlIGlmIChraW5kID09IHc4Mzc4MmQpIHsKQEAgLTEyODEsMjQgKzExNTksNDYgQEAKIAkJY2xpZW50X25hbWUgPSAiYXM5OTEyN2YiOwogCX0KIAotCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwotCWRhdGEtPnR5cGUgPSBraW5kOworCXN0cmxjcHkoaW5mby0+dHlwZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwogCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCWdvdG8gRVJST1IyOworCXJldHVybiAwOworCisgZXJyX25vZGV2OgorCWlmIChpc2EpCisJCW11dGV4X3VubG9jaygmaXNhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc4Mzc4MWRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIEVSUk9SMTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlkYXRhLT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKIAogCS8qIGF0dGFjaCBzZWNvbmRhcnkgaTJjIGxtNzUtbGlrZSBjbGllbnRzICovCi0JaWYgKChlcnIgPSB3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKGFkYXB0ZXIsIGFkZHJlc3MsCi0JCQlraW5kLCBjbGllbnQpKSkKKwllcnIgPSB3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKGNsaWVudCk7CisJaWYgKGVycikKIAkJZ290byBFUlJPUjM7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCiAJdzgzNzgxZF9pbml0X2RldmljZShkZXYpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQllcnIgPSB3ODM3ODFkX2NyZWF0ZV9maWxlcyhkZXYsIGtpbmQsIDApOworCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKGRldiwgZGF0YS0+dHlwZSwgMCk7CiAJaWYgKGVycikKIAkJZ290byBFUlJPUjQ7CiAKQEAgLTEzMTQsMjY0ICsxMjE0LDExMyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CiAKLQlpZiAoZGF0YS0+bG03NVsxXSkgewotCQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzFdKTsKLQkJa2ZyZWUoZGF0YS0+bG03NVsxXSk7Ci0JfQotCWlmIChkYXRhLT5sbTc1WzBdKSB7Ci0JCWkyY19kZXRhY2hfY2xpZW50KGRhdGEtPmxtNzVbMF0pOwotCQlrZnJlZShkYXRhLT5sbTc1WzBdKTsKLQl9CisJaWYgKGRhdGEtPmxtNzVbMF0pCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShkYXRhLT5sbTc1WzBdKTsKKwlpZiAoZGF0YS0+bG03NVsxXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMV0pOwogRVJST1IzOgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci1FUlJPUjI6CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiBFUlJPUjE6CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludAotdzgzNzgxZF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit3ODM3ODFkX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JLyogbWFpbiBjbGllbnQgKi8KLQlpZiAoZGF0YSkgewotCQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOwotCX0KLQotCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBtYWluIGNsaWVudCAqLwotCWlmIChkYXRhKQotCQlrZnJlZShkYXRhKTsKLQotCS8qIHN1YmNsaWVudCAqLwotCWVsc2UKLQkJa2ZyZWUoY2xpZW50KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotdzgzNzgxZF9pc2FfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgZXJyLCByZWc7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMiwKLQkJCSAgICAidzgzNzgxZCIpKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNzgxZF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKLQl9Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JZGF0YS0+Y2xpZW50LmFkZHIgPSByZXMtPnN0YXJ0OwotCWkyY19zZXRfY2xpZW50ZGF0YSgmZGF0YS0+Y2xpZW50LCBkYXRhKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKLQotCXJlZyA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19XQ0hJUElEKTsKLQlzd2l0Y2ggKHJlZykgewotCWNhc2UgMHgzMDoKLQkJZGF0YS0+dHlwZSA9IHc4Mzc4MmQ7Ci0JCW5hbWUgPSAidzgzNzgyZCI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRhdGEtPnR5cGUgPSB3ODM3ODFkOwotCQluYW1lID0gInc4Mzc4MWQiOwotCX0KLQlzdHJsY3B5KGRhdGEtPmNsaWVudC5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIFc4Mzc4MUQgY2hpcCAqLwotCXc4Mzc4MWRfaW5pdF9kZXZpY2UoJnBkZXYtPmRldik7Ci0KLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKCZwZGV2LT5kZXYsIGRhdGEtPnR5cGUsIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7Ci0KLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotIGV4aXRfcmVtb3ZlX2ZpbGVzOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0Ja2ZyZWUoZGF0YSk7Ci0gZXhpdF9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQsIDIpOwotIGV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQKLXc4Mzc4MWRfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0JcmVsZWFzZV9yZWdpb24oZGF0YS0+Y2xpZW50LmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnc4Mzc4MWRfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOworCisJaWYgKGRhdGEtPmxtNzVbMF0pCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShkYXRhLT5sbTc1WzBdKTsKKwlpZiAoZGF0YS0+bG03NVsxXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMV0pOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhlIFNNQnVzIGxvY2tzIGl0c2VsZiwgdXN1YWxseSwgYnV0IG5vdGhpbmcgbWF5IGFjY2VzcyB0aGUgV2luYm9uZCBiZXR3ZWVuCi0gICBiYW5rIHN3aXRjaGVzLiBJU0EgYWNjZXNzIG11c3QgYWx3YXlzIGJlIGxvY2tlZCBleHBsaWNpdGx5IQotICAgV2UgaWdub3JlIHRoZSBXODM3ODFEIEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAotICAgd291bGQgc2xvdyBkb3duIHRoZSBXODM3ODFEIGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCi0gICBUaGVyZSBhcmUgc29tZSB1Z2x5IHR5cGVjYXN0cyBoZXJlLCBidXQgdGhlIGdvb2QgbmV3cyBpcyAtIHRoZXkgc2hvdWxkCi0gICBub3doZXJlIGVsc2UgYmUgbmVjZXNzYXJ5ISAqLwogc3RhdGljIGludAotdzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit3ODM3ODFkX3JlYWRfdmFsdWVfaTJjKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaW50IHJlcywgd29yZF9zaXplZCwgYmFuazsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCWludCByZXMsIGJhbms7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCi0JCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQotCQkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKLQkJICAgICYmICgoKHJlZyAmIDB4MDBmZikgPT0gMHg1MCkKLQkJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDUzKQotCQkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTUpKTsKLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKHJlZyA+PiA4LAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQotCQlvdXRiX3AocmVnICYgMHhmZiwgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQlyZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCWlmICh3b3JkX3NpemVkKSB7Ci0JCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKLQkJCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JCQlyZXMgPQotCQkJICAgIChyZXMgPDwgOCkgKyBpbmJfcChjbGllbnQtPmFkZHIgKwotCQkJCQkgICAgICAgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwotCQl9Ci0JCWlmIChyZWcgJiAweGZmMDApIHsKLQkJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcCgwLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KKwliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7CisJaWYgKGJhbmsgPiAyKQorCQkvKiBzd2l0Y2ggYmFua3MgKi8KKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCisJCQkJCSAgYmFuayk7CisJaWYgKGJhbmsgPT0gMCB8fCBiYW5rID4gMikgeworCQlyZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmKTsKIAl9IGVsc2UgewotCQliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7Ci0JCWlmIChiYW5rID4gMikKLQkJCS8qIHN3aXRjaCBiYW5rcyAqLwotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCi0JCQkJCQkgIGJhbmspOwotCQlpZiAoYmFuayA9PSAwIHx8IGJhbmsgPiAyKSB7Ci0JCQlyZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHN3aXRjaCB0byBzdWJjbGllbnQgKi8KLQkJCWNsID0gZGF0YS0+bG03NVtiYW5rIC0gMV07Ci0JCQkvKiBjb252ZXJ0IGZyb20gSVNBIHRvIExNNzUgSTJDIGFkZHJlc3NlcyAqLwotCQkJc3dpdGNoIChyZWcgJiAweGZmKSB7Ci0JCQljYXNlIDB4NTA6CS8qIFRFTVAgKi8KLQkJCQlyZXMgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsLCAwKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTI6CS8qIENPTkZJRyAqLwotCQkJCXJlcyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbCwgMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTM6CS8qIEhZU1QgKi8KLQkJCQlyZXMgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsLCAyKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMykpOwotCQkJCWJyZWFrOwotCQkJfQorCQkvKiBzd2l0Y2ggdG8gc3ViY2xpZW50ICovCisJCWNsID0gZGF0YS0+bG03NVtiYW5rIC0gMV07CisJCS8qIGNvbnZlcnQgZnJvbSBJU0EgdG8gTE03NSBJMkMgYWRkcmVzc2VzICovCisJCXN3aXRjaCAocmVnICYgMHhmZikgeworCQljYXNlIDB4NTA6CS8qIFRFTVAgKi8KKwkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDApKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTI6CS8qIENPTkZJRyAqLworCQkJcmVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTM6CS8qIEhZU1QgKi8KKwkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDIpKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KKwkJZGVmYXVsdDoKKwkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDMpKTsKKwkJCWJyZWFrOwogCQl9Ci0JCWlmIChiYW5rID4gMikKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoYmFuayA+IDIpCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKKwogCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQKLXc4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQordzgzNzgxZF93cml0ZV92YWx1ZV9pMmMoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWludCB3b3JkX3NpemVkLCBiYW5rOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IGJhbms7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCi0JCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQotCQkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKLQkJICAgICYmICgoKHJlZyAmIDB4MDBmZikgPT0gMHg1MykKLQkJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDU1KSk7Ci0JCWlmIChyZWcgJiAweGZmMDApIHsKLQkJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcChyZWcgPj4gOCwKLQkJCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KLQkJb3V0Yl9wKHJlZyAmIDB4ZmYsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJaWYgKHdvcmRfc2l6ZWQpIHsKLQkJCW91dGJfcCh2YWx1ZSA+PiA4LAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcCgocmVnICYgMHhmZikgKyAxLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJfQotCQlvdXRiX3AodmFsdWUgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCWlmIChyZWcgJiAweGZmMDApIHsKLQkJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCW91dGJfcCgwLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KKwliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7CisJaWYgKGJhbmsgPiAyKQorCQkvKiBzd2l0Y2ggYmFua3MgKi8KKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCisJCQkJCSAgYmFuayk7CisJaWYgKGJhbmsgPT0gMCB8fCBiYW5rID4gMikgeworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICYgMHhmZiwKKwkJCQkJICB2YWx1ZSAmIDB4ZmYpOwogCX0gZWxzZSB7Ci0JCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKLQkJaWYgKGJhbmsgPiAyKQotCQkJLyogc3dpdGNoIGJhbmtzICovCi0JCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKLQkJCQkJCSAgYmFuayk7Ci0JCWlmIChiYW5rID09IDAgfHwgYmFuayA+IDIpIHsKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmLAotCQkJCQkJICB2YWx1ZSAmIDB4ZmYpOwotCQl9IGVsc2UgewotCQkJLyogc3dpdGNoIHRvIHN1YmNsaWVudCAqLwotCQkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKLQkJCS8qIGNvbnZlcnQgZnJvbSBJU0EgdG8gTE03NSBJMkMgYWRkcmVzc2VzICovCi0JCQlzd2l0Y2ggKHJlZyAmIDB4ZmYpIHsKLQkJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCi0JCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbCwgMSwgdmFsdWUgJiAweGZmKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1MzoJLyogSFlTVCAqLwotCQkJCWkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2wsIDIsIHN3YWIxNih2YWx1ZSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDU1OgkvKiBPVkVSICovCi0JCQkJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbCwgMywgc3dhYjE2KHZhbHVlKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCS8qIHN3aXRjaCB0byBzdWJjbGllbnQgKi8KKwkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKKwkJLyogY29udmVydCBmcm9tIElTQSB0byBMTTc1IEkyQyBhZGRyZXNzZXMgKi8KKwkJc3dpdGNoIChyZWcgJiAweGZmKSB7CisJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsLCAxLCB2YWx1ZSAmIDB4ZmYpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MzoJLyogSFlTVCAqLworCQkJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbCwgMiwgc3dhYjE2KHZhbHVlKSk7CisJCQlicmVhazsKKwkJY2FzZSAweDU1OgkvKiBPVkVSICovCisJCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsLCAzLCBzd2FiMTYodmFsdWUpKTsKKwkJCWJyZWFrOwogCQl9Ci0JCWlmIChiYW5rID4gMikKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoYmFuayA+IDIpCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjc4LDcgKzE0MjcsNyBAQAogc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC0xNzc1LDggKzE1MjQsNyBAQAogCQkJCQkJVzgzNzgxRF9SRUdfQUxBUk0yKSA8PCA4KTsKIAkJfQogCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIpOwotCQlkYXRhLT5iZWVwX2VuYWJsZSA9IGkgPj4gNzsKLQkJZGF0YS0+YmVlcF9tYXNrID0gKChpICYgMHg3ZikgPDwgOCkgKworCQlkYXRhLT5iZWVwX21hc2sgPSAoaSA8PCA4KSArCiAJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSk7CiAJCWlmICgoZGF0YS0+dHlwZSAhPSB3ODM3ODFkKSAmJiAoZGF0YS0+dHlwZSAhPSBhczk5MTI3ZikpIHsKIAkJCWRhdGEtPmJlZXBfbWFzayB8PQpAQCAtMTc5Miw2ICsxNTQwLDI3NSBAQAogCXJldHVybiBkYXRhOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdzgzNzgxZF9pZHNbXSA9IHsKKwl7ICJ3ODM3ODFkIiwgdzgzNzgxZCwgfSwKKwl7ICJ3ODM3ODJkIiwgdzgzNzgyZCwgfSwKKwl7ICJ3ODM3ODNzIiwgdzgzNzgzcywgfSwKKwl7ICJhczk5MTI3ZiIsIGFzOTkxMjdmIH0sCisJeyAvKiBMSVNUIEVORCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHc4Mzc4MWRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4Mzc4MWRfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidzgzNzgxZCIsCisJfSwKKwkucHJvYmUJCT0gdzgzNzgxZF9wcm9iZSwKKwkucmVtb3ZlCQk9IHc4Mzc4MWRfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHc4Mzc4MWRfaWRzLAorCS5kZXRlY3QJCT0gdzgzNzgxZF9kZXRlY3QsCisJLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCit9OworCisvKgorICogSVNBIHJlbGF0ZWQgY29kZQorICovCisjaWZkZWYgQ09ORklHX0lTQQorCisvKiBJU0EgZGV2aWNlLCBpZiBmb3VuZCAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzcyA9IDB4MjkwOworCisvKiBJMkMgZGV2aWNlcyBnZXQgdGhpcyBuYW1lIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5LCBidXQgZm9yIElTQSBkZXZpY2VzCisgICB3ZSBtdXN0IGNyZWF0ZSBpdCBieSBvdXJzZWx2ZXMuICovCitzdGF0aWMgc3NpemVfdAorc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX2RhdGFfaWZfaXNhKHZvaWQpCit7CisJcmV0dXJuIHBkZXYgPyBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSA6IE5VTEw7Cit9CisKKy8qIFJldHVybnMgMSBpZiB0aGUgSTJDIGNoaXAgYXBwZWFycyB0byBiZSBhbiBhbGlhcyBvZiB0aGUgSVNBIGNoaXAgKi8KK3N0YXRpYyBpbnQgdzgzNzgxZF9hbGlhc19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY2hpcGlkKQoreworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmlzYTsKKwlpbnQgaTsKKworCWlmICghcGRldikJLyogTm8gSVNBIGNoaXAgKi8KKwkJcmV0dXJuIDA7CisKKwlpc2EgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBXODM3ODFEX1JFR19JMkNfQUREUikgIT0gY2xpZW50LT5hZGRyKQorCQlyZXR1cm4gMDsJLyogQWRkcmVzcyBkb2Vzbid0IG1hdGNoICovCisJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIFc4Mzc4MURfUkVHX1dDSElQSUQpICE9IGNoaXBpZCkKKwkJcmV0dXJuIDA7CS8qIENoaXAgdHlwZSBkb2Vzbid0IG1hdGNoICovCisKKwkvKiBXZSBjb21wYXJlIGFsbCB0aGUgbGltaXQgcmVnaXN0ZXJzLCB0aGUgY29uZmlnIHJlZ2lzdGVyIGFuZCB0aGUKKwkgKiBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAweDJiOyBpIDw9IDB4M2Q7IGkrKykgeworCQlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlKGlzYSwgaSkgIT0KKwkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpKQorCQkJcmV0dXJuIDA7CisJfQorCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBXODM3ODFEX1JFR19DT05GSUcpICE9CisJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0NPTkZJRykpCisJCXJldHVybiAwOworCWZvciAoaSA9IDB4NDM7IGkgPD0gMHg0NjsgaSsrKSB7CisJCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBpKSAhPQorCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAordzgzNzgxZF9yZWFkX3ZhbHVlX2lzYShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCWludCB3b3JkX3NpemVkLCByZXM7CisKKwl3b3JkX3NpemVkID0gKCgocmVnICYgMHhmZjAwKSA9PSAweDEwMCkKKwkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKKwkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUwKQorCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1MykKKwkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTUpKTsKKwlpZiAocmVnICYgMHhmZjAwKSB7CisJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcChyZWcgPj4gOCwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCX0KKwlvdXRiX3AocmVnICYgMHhmZiwgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJcmVzID0gaW5iX3AoZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJaWYgKHdvcmRfc2l6ZWQpIHsKKwkJb3V0Yl9wKChyZWcgJiAweGZmKSArIDEsCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJcmVzID0KKwkJICAgIChyZXMgPDwgOCkgKyBpbmJfcChkYXRhLT5pc2FfYWRkciArCisJCQkJICAgICAgIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9CisJaWYgKHJlZyAmIDB4ZmYwMCkgeworCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlvdXRiX3AoMCwgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit3ODM3ODFkX3dyaXRlX3ZhbHVlX2lzYShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJaW50IHdvcmRfc2l6ZWQ7CisKKwl3b3JkX3NpemVkID0gKCgocmVnICYgMHhmZjAwKSA9PSAweDEwMCkKKwkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKKwkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUzKQorCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1NSkpOworCWlmIChyZWcgJiAweGZmMDApIHsKKwkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZyA+PiA4LAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJfQorCW91dGJfcChyZWcgJiAweGZmLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwlpZiAod29yZF9zaXplZCkgeworCQlvdXRiX3AodmFsdWUgPj4gOCwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCX0KKwlvdXRiX3AodmFsdWUgJiAweGZmLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwlpZiAocmVnICYgMHhmZjAwKSB7CisJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCgwLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9Cit9CisKKy8qIFRoZSBTTUJ1cyBsb2NrcyBpdHNlbGYsIHVzdWFsbHksIGJ1dCBub3RoaW5nIG1heSBhY2Nlc3MgdGhlIFdpbmJvbmQgYmV0d2VlbgorICAgYmFuayBzd2l0Y2hlcy4gSVNBIGFjY2VzcyBtdXN0IGFsd2F5cyBiZSBsb2NrZWQgZXhwbGljaXRseSEKKyAgIFdlIGlnbm9yZSB0aGUgVzgzNzgxRCBCVVNZIGZsYWcgYXQgdGhpcyBtb21lbnQgLSBpdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcywKKyAgIHdvdWxkIHNsb3cgZG93biB0aGUgVzgzNzgxRCBhY2Nlc3MgYW5kIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorICAgVGhlcmUgYXJlIHNvbWUgdWdseSB0eXBlY2FzdHMgaGVyZSwgYnV0IHRoZSBnb29kIG5ld3MgaXMgLSB0aGV5IHNob3VsZAorICAgbm93aGVyZSBlbHNlIGJlIG5lY2Vzc2FyeSEgKi8KK3N0YXRpYyBpbnQKK3c4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWlmIChjbGllbnQpCisJCXJlcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZV9pMmMoZGF0YSwgcmVnKTsKKwllbHNlCisJCXJlcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZV9pc2EoZGF0YSwgcmVnKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoY2xpZW50KQorCQl3ODM3ODFkX3dyaXRlX3ZhbHVlX2kyYyhkYXRhLCByZWcsIHZhbHVlKTsKKwllbHNlCisJCXc4Mzc4MWRfd3JpdGVfdmFsdWVfaXNhKGRhdGEsIHJlZywgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit3ODM3ODFkX2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnIsIHJlZzsKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMiwKKwkJCSAgICAidzgzNzgxZCIpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBleGl0OworCX0KKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNzgxZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKKwl9CisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CisJZGF0YS0+aXNhX2FkZHIgPSByZXMtPnN0YXJ0OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCisJcmVnID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOworCXN3aXRjaCAocmVnKSB7CisJY2FzZSAweDMwOgorCQlkYXRhLT50eXBlID0gdzgzNzgyZDsKKwkJZGF0YS0+bmFtZSA9ICJ3ODM3ODJkIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YS0+dHlwZSA9IHc4Mzc4MWQ7CisJCWRhdGEtPm5hbWUgPSAidzgzNzgxZCI7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgVzgzNzgxRCBjaGlwICovCisJdzgzNzgxZF9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKKworCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJZXJyID0gdzgzNzgxZF9jcmVhdGVfZmlsZXMoJnBkZXYtPmRldiwgZGF0YS0+dHlwZSwgMSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCXJldHVybiAwOworCisgZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlrZnJlZShkYXRhKTsKKyBleGl0X3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7CisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAordzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQsIDIpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHc4Mzc4MWRfaXNhX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAidzgzNzgxZCIsCisJfSwKKwkucHJvYmUgPSB3ODM3ODFkX2lzYV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodzgzNzgxZF9pc2FfcmVtb3ZlKSwKK307CisKIC8qIHJldHVybiAxIGlmIGEgc3VwcG9ydGVkIGNoaXAgaXMgZm91bmQsIDAgb3RoZXJ3aXNlICovCiBzdGF0aWMgaW50IF9faW5pdAogdzgzNzgxZF9pc2FfZm91bmQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKQEAgLTE5MjgsMTggKzE5NDUsMTQgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLXNlbnNvcnNfdzgzNzgxZF9pbml0KHZvaWQpCit3ODM3ODFkX2lzYV9yZWdpc3Rlcih2b2lkKQogewogCWludCByZXM7CiAKLQlyZXMgPSBpMmNfYWRkX2RyaXZlcigmdzgzNzgxZF9kcml2ZXIpOwotCWlmIChyZXMpCi0JCWdvdG8gZXhpdDsKLQogCWlmICh3ODM3ODFkX2lzYV9mb3VuZChpc2FfYWRkcmVzcykpIHsKIAkJcmVzID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpOwogCQlpZiAocmVzKQotCQkJZ290byBleGl0X3VucmVnX2kyY19kcml2ZXI7CisJCQlnb3RvIGV4aXQ7CiAKIAkJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCiAJCXJlcyA9IHc4Mzc4MWRfaXNhX2RldmljZV9hZGQoaXNhX2FkZHJlc3MpOwpAQCAtMTk0OSwxMCArMTk2Miw4NiBAQAogCiAJcmV0dXJuIDA7CiAKLSBleGl0X3VucmVnX2lzYV9kcml2ZXI6CitleGl0X3VucmVnX2lzYV9kcml2ZXI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnc4Mzc4MWRfaXNhX2RyaXZlcik7Ci0gZXhpdF91bnJlZ19pMmNfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CitleGl0OgorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordzgzNzgxZF9pc2FfdW5yZWdpc3Rlcih2b2lkKQoreworCWlmIChwZGV2KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKKwl9Cit9CisjZWxzZSAvKiAhQ09ORklHX0lTQSAqLworCitzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF9kYXRhX2lmX2lzYSh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit3ODM3ODFkX2FsaWFzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjaGlwaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQoreworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXMgPSB3ODM3ODFkX3JlYWRfdmFsdWVfaTJjKGRhdGEsIHJlZyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZywgdTE2IHZhbHVlKQoreworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCXc4Mzc4MWRfd3JpdGVfdmFsdWVfaTJjKGRhdGEsIHJlZywgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQKK3c4Mzc4MWRfaXNhX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordzgzNzgxZF9pc2FfdW5yZWdpc3Rlcih2b2lkKQoreworfQorI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KKworc3RhdGljIGludCBfX2luaXQKK3NlbnNvcnNfdzgzNzgxZF9pbml0KHZvaWQpCit7CisJaW50IHJlczsKKworCS8qIFdlIHJlZ2lzdGVyIHRoZSBJU0EgZGV2aWNlIGZpcnN0LCBzbyB0aGF0IHdlIGNhbiBza2lwIHRoZQorCSAqIHJlZ2lzdHJhdGlvbiBvZiBhbiBJMkMgaW50ZXJmYWNlIHRvIHRoZSBzYW1lIGRldmljZS4gKi8KKwlyZXMgPSB3ODM3ODFkX2lzYV9yZWdpc3RlcigpOworCWlmIChyZXMpCisJCWdvdG8gZXhpdDsKKworCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CisJaWYgKHJlcykKKwkJZ290byBleGl0X3VucmVnX2lzYTsKKworCXJldHVybiAwOworCisgZXhpdF91bnJlZ19pc2E6CisJdzgzNzgxZF9pc2FfdW5yZWdpc3RlcigpOwogIGV4aXQ6CiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5NjAsMTAgKzIwNDksNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBzZW5zb3JzX3c4Mzc4MWRfZXhpdCh2b2lkKQogewotCWlmIChwZGV2KSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKLQl9CisJdzgzNzgxZF9pc2FfdW5yZWdpc3RlcigpOwogCWkyY19kZWxfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTFkLmMKaW5kZXggZGUyMTE0Mi4uNTc2OGRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTFkLmMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBTdXBwb3J0cyBmb2xsb3dpbmcgY2hpcHM6CiAKICAgICBDaGlwCSN2aW4JI2ZhbmluCSNwd20JI3RlbXAJd2NoaXBpZAl2ZW5kaWQJaTJjCUlTQQotICAgIHc4Mzc5MWQJMTAJNQkzCTMJMHg3MQkweDVjYTMJeWVzCW5vCisgICAgdzgzNzkxZAkxMAk1CTUJMwkweDcxCTB4NWNhMwl5ZXMJbm8KIAogICAgIFRoZSB3ODM3OTFkIGNoaXAgYXBwZWFycyB0byBiZSBwYXJ0IHdheSBiZXR3ZWVuIHRoZSA4Mzc4MWQgYW5kIHRoZQogICAgIDgzNzkyZC4gVGh1cywgdGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBib3RoIHRoZSB3ODM3OTJkLmMgYW5kCkBAIC00NSw2ICs0NSw3IEBACiAjZGVmaW5lIE5VTUJFUl9PRl9WSU4JCTEwCiAjZGVmaW5lIE5VTUJFUl9PRl9GQU5JTgkJNQogI2RlZmluZSBOVU1CRVJfT0ZfVEVNUElOCTMKKyNkZWZpbmUgTlVNQkVSX09GX1BXTQkJNQogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKQEAgLTExNiw2ICsxMTcsMjUgQEAKIAkweEJELAkJCS8qIEZBTiA1IENvdW50IExvdyBMaW1pdCBpbiBEYXRhU2hlZXQgKi8KIH07CiAKK3N0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19QV01bTlVNQkVSX09GX1BXTV0gPSB7CisJMHg4MSwJCQkvKiBQV00gMSBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworCTB4ODMsCQkJLyogUFdNIDIgZHV0eSBjeWNsZSByZWdpc3RlciBpbiBEYXRhU2hlZXQgKi8KKwkweDk0LAkJCS8qIFBXTSAzIGR1dHkgY3ljbGUgcmVnaXN0ZXIgaW4gRGF0YVNoZWV0ICovCisJMHhBMCwJCQkvKiBQV00gNCBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworCTB4QTEsCQkJLyogUFdNIDUgZHV0eSBjeWNsZSByZWdpc3RlciBpbiBEYXRhU2hlZXQgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19URU1QX1RBUkdFVFszXSA9IHsKKwkweDg1LAkJCS8qIFBXTSAxIHRhcmdldCB0ZW1wZXJhdHVyZSBmb3IgdGVtcCAxICovCisJMHg4NiwJCQkvKiBQV00gMiB0YXJnZXQgdGVtcGVyYXR1cmUgZm9yIHRlbXAgMiAqLworCTB4OTYsCQkJLyogUFdNIDMgdGFyZ2V0IHRlbXBlcmF0dXJlIGZvciB0ZW1wIDMgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19URU1QX1RPTFsyXSA9IHsKKwkweDg3LAkJCS8qIFBXTSAxLzIgdGVtcGVyYXR1cmUgdG9sZXJhbmNlICovCisJMHg5NywJCQkvKiBQV00gMyB0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgKi8KK307CisKIHN0YXRpYyBjb25zdCB1OCBXODM3OTFEX1JFR19GQU5fQ0ZHWzJdID0gewogCTB4ODQsCQkJLyogRkFOIDEvMiBjb25maWd1cmF0aW9uICovCiAJMHg5NSwJCQkvKiBGQU4gMyBjb25maWd1cmF0aW9uICovCkBAIC0xNjAsNiArMTgwLDcgQEAKIAkweEEzLAkJCS8qIEJFRVAgQ29udHJvbCBSZWdpc3RlciAzICovCiB9OwogCisjZGVmaW5lIFc4Mzc5MURfUkVHX0dQSU8JCTB4MTUKICNkZWZpbmUgVzgzNzkxRF9SRUdfQ09ORklHCQkweDQwCiAjZGVmaW5lIFc4Mzc5MURfUkVHX1ZJRF9GQU5ESVYJCTB4NDcKICNkZWZpbmUgVzgzNzkxRF9SRUdfRElEX1ZJRDQJCTB4NDkKQEAgLTIyNCw2ICsyNDUsMTUgQEAKIAkJCQkgKHZhbCkgPCAwID8gKCh2YWwpIC0gMjUwKSAvIDUwMCAqIDEyOCA6IFwKIAkJCQkgKCh2YWwpICsgMjUwKSAvIDUwMCAqIDEyOCkKIAorLyogZm9yIHRoZXJtYWwgY3J1aXNlIHRhcmdldCB0ZW1wLCA3LWJpdHMsIExTQiA9IDEgZGVncmVlIENlbHNpdXMgKi8KKyNkZWZpbmUgVEFSR0VUX1RFTVBfVE9fUkVHKHZhbCkJCSgodmFsKSA8IDAgPyAwIDogXAorCQkJCQkodmFsKSA+PSAxMjcwMDAgPyAxMjcgOiBcCisJCQkJCSgodmFsKSArIDUwMCkgLyAxMDAwKQorCisvKiBmb3IgdGhlcm1hbCBjcnVpc2UgdGVtcCB0b2xlcmFuY2UsIDQtYml0cywgTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cyAqLworI2RlZmluZSBUT0xfVEVNUF9UT19SRUcodmFsKQkJKCh2YWwpIDwgMCA/IDAgOiBcCisJCQkJCSh2YWwpID49IDE1MDAwID8gMTUgOiBcCisJCQkJCSgodmFsKSArIDUwMCkgLyAxMDAwKQogCiAjZGVmaW5lIEJFRVBfTUFTS19UT19SRUcodmFsKQkJKCh2YWwpICYgMHhmZmZmZmYpCiAjZGVmaW5lIEJFRVBfTUFTS19GUk9NX1JFRyh2YWwpCQkoKHZhbCkgJiAweGZmZmZmZikKQEAgLTI3NSw2ICszMDUsMTQgQEAKIAkJCQkgICB0d28gc2Vuc29ycyB3aXRoIHRocmVlIHZhbHVlcwogCQkJCSAgIChjdXIsIG92ZXIsIGh5c3QpICAqLwogCisJLyogUFdNcyAqLworCXU4IHB3bVs1XTsJCS8qIHB3bSBkdXR5IGN5Y2xlICovCisJdTggcHdtX2VuYWJsZVszXTsJLyogcHdtIGVuYWJsZSBzdGF0dXMgZm9yIGZhbiAxLTMKKwkJCQkJKGZhbiA0LTUgb25seSBzdXBwb3J0IG1hbnVhbCBtb2RlKSAqLworCisJdTggdGVtcF90YXJnZXRbM107CS8qIHB3bSAxLTMgdGFyZ2V0IHRlbXBlcmF0dXJlICovCisJdTggdGVtcF90b2xlcmFuY2VbM107CS8qIHB3bSAxLTMgdGVtcGVyYXR1cmUgdG9sZXJhbmNlICovCisKIAkvKiBNaXNjICovCiAJdTMyIGFsYXJtczsJCS8qIHJlYWx0aW1lIHN0YXR1cyByZWdpc3RlciBlbmNvZGluZyxjb21iaW5lZCAqLwogCXU4IGJlZXBfZW5hYmxlOwkJLyogR2xvYmFsIGJlZXAgZW5hYmxlICovCkBAIC02NTIsNiArNjkwLDIxNyBAQAogCVNFTlNPUl9BVFRSKGZhbjVfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIyKSwKIH07CiAKKy8qIHJlYWQvd3JpdGUgUFdNcyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5wd21bbnJdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5wd21bbnJdID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDI1NSk7CisJdzgzNzkxZF93cml0ZShjbGllbnQsIFc4Mzc5MURfUkVHX1BXTVtucl0sIGRhdGEtPnB3bVtucl0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfcHdtW10gPSB7CisJU0VOU09SX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDEpLAorCVNFTlNPUl9BVFRSKHB3bTMsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd20sIHN0b3JlX3B3bSwgMiksCisJU0VOU09SX0FUVFIocHdtNCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCAzKSwKKwlTRU5TT1JfQVRUUihwd201LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDQpLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5wd21fZW5hYmxlW25yXSArIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd21lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggcmVnX2NmZ190bXA7CisJdTggcmVnX2lkeCA9IDA7CisJdTggdmFsX3NoaWZ0ID0gMDsKKwl1OCBrZWVwX21hc2sgPSAwOworCisJaW50IHJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCisJaWYgKHJldCB8fCB2YWwgPCAxIHx8IHZhbCA+IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bV9lbmFibGVbbnJdID0gdmFsIC0gMTsKKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAwOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gMjsKKwkJa2VlcF9tYXNrID0gMHhmMzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gNDsKKwkJa2VlcF9tYXNrID0gMHhjZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZWdfaWR4ID0gMTsKKwkJdmFsX3NoaWZ0ID0gMjsKKwkJa2VlcF9tYXNrID0gMHhmMzsKKwkJYnJlYWs7CisJfQorCisJcmVnX2NmZ190bXAgPSB3ODM3OTFkX3JlYWQoY2xpZW50LCBXODM3OTFEX1JFR19GQU5fQ0ZHW3JlZ19pZHhdKTsKKwlyZWdfY2ZnX3RtcCA9IChyZWdfY2ZnX3RtcCAmIGtlZXBfbWFzaykgfAorCQkJCQlkYXRhLT5wd21fZW5hYmxlW25yXSA8PCB2YWxfc2hpZnQ7CisKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfRkFOX0NGR1tyZWdfaWR4XSwgcmVnX2NmZ190bXApOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfcHdtZW5hYmxlW10gPSB7CisJU0VOU09SX0FUVFIocHdtMV9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMCksCisJU0VOU09SX0FUVFIocHdtMl9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMSksCisJU0VOU09SX0FUVFIocHdtM19lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMiksCit9OworCisvKiBGb3IgU21hcnQgRmFuIEkgLyBUaGVybWFsIENydWlzZSAqLworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcF90YXJnZXRbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3RlbXBfdGFyZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHRhcmdldF9tYXNrOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT50ZW1wX3RhcmdldFtucl0gPSBUQVJHRVRfVEVNUF9UT19SRUcodmFsKTsKKwl0YXJnZXRfbWFzayA9IHc4Mzc5MWRfcmVhZChjbGllbnQsCisJCQkJVzgzNzkxRF9SRUdfVEVNUF9UQVJHRVRbbnJdKSAmIDB4ODA7CisJdzgzNzkxZF93cml0ZShjbGllbnQsIFc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUW25yXSwKKwkJCQlkYXRhLT50ZW1wX3RhcmdldFtucl0gfCB0YXJnZXRfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3RhcmdldFtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX3RhcmdldCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdGFyZ2V0LCBzdG9yZV90ZW1wX3RhcmdldCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfdGFyZ2V0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90YXJnZXQsIHN0b3JlX3RlbXBfdGFyZ2V0LCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM190YXJnZXQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RhcmdldCwgc3RvcmVfdGVtcF90YXJnZXQsIDIpLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3RvbGVyYW5jZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IHc4Mzc5MWRfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcF90b2xlcmFuY2VbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3RlbXBfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCXU4IHRhcmdldF9tYXNrOworCXU4IHJlZ19pZHggPSAwOworCXU4IHZhbF9zaGlmdCA9IDA7CisJdTgga2VlcF9tYXNrID0gMDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAwOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gMDsKKwkJa2VlcF9tYXNrID0gMHhmMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZWdfaWR4ID0gMDsKKwkJdmFsX3NoaWZ0ID0gNDsKKwkJa2VlcF9tYXNrID0gMHgwZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZWdfaWR4ID0gMTsKKwkJdmFsX3NoaWZ0ID0gMDsKKwkJa2VlcF9tYXNrID0gMHhmMDsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfdG9sZXJhbmNlW25yXSA9IFRPTF9URU1QX1RPX1JFRyh2YWwpOworCXRhcmdldF9tYXNrID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCVc4Mzc5MURfUkVHX1RFTVBfVE9MW3JlZ19pZHhdKSAmIGtlZXBfbWFzazsKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfVEVNUF9UT0xbcmVnX2lkeF0sCisJCQkoZGF0YS0+dGVtcF90b2xlcmFuY2VbbnJdIDw8IHZhbF9zaGlmdCkgfCB0YXJnZXRfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3RvbGVyYW5jZVtdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdG9sZXJhbmNlLCBzdG9yZV90ZW1wX3RvbGVyYW5jZSwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfdG9sZXJhbmNlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90b2xlcmFuY2UsIHN0b3JlX3RlbXBfdG9sZXJhbmNlLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM190b2xlcmFuY2UsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RvbGVyYW5jZSwgc3RvcmVfdGVtcF90b2xlcmFuY2UsIDIpLAorfTsKKwogLyogcmVhZC93cml0ZSB0aGUgdGVtcGVyYXR1cmUxLCBpbmNsdWRlcyBtZWFzdXJlZCB2YWx1ZSBhbmQgbGltaXRzICovCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCiAJCQkJY2hhciAqYnVmKQpAQCAtOTA4LDggKzExNTcsNiBAQAogCUZBTl9VTklUX0FUVFJTKDApLAogCUZBTl9VTklUX0FUVFJTKDEpLAogCUZBTl9VTklUX0FUVFJTKDIpLAotCUZBTl9VTklUX0FUVFJTKDMpLAotCUZBTl9VTklUX0FUVFJTKDQpLAogCVRFTVBfVU5JVF9BVFRSUygwKSwKIAlURU1QX1VOSVRfQVRUUlMoMSksCiAJVEVNUF9VTklUX0FUVFJTKDIpLApAQCAtOTE4LDYgKzExNjUsMTggQEAKIAkmc2RhX2JlZXBfY3RybFsxXS5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAogCSZkZXZfYXR0cl92cm0uYXR0ciwKKwkmc2RhX3B3bVswXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtWzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21bMl0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3B3bWVuYWJsZVswXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtZW5hYmxlWzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21lbmFibGVbMl0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdGFyZ2V0WzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RhcmdldFsxXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90YXJnZXRbMl0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdG9sZXJhbmNlWzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RvbGVyYW5jZVsxXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90b2xlcmFuY2VbMl0uZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC05MjUsNiArMTE4NCwyMCBAQAogCS5hdHRycyA9IHc4Mzc5MWRfYXR0cmlidXRlcywKIH07CiAKKy8qIFNlcGFyYXRlIGdyb3VwIG9mIGF0dHJpYnV0ZXMgZm9yIGZhbi9wd20gNC01LiBUaGVpciBwaW5zIGNhbiBhbHNvIGJlCisgICBpbiB1c2UgZm9yIEdQSU8gaW4gd2hpY2ggY2FzZSB0aGVpciBzeXNmcy1pbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZSBtYWRlCisgICBhdmFpbGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp3ODM3OTFkX2F0dHJpYnV0ZXNfZmFucHdtNDVbXSA9IHsKKwlGQU5fVU5JVF9BVFRSUygzKSwKKwlGQU5fVU5JVF9BVFRSUyg0KSwKKwkmc2RhX3B3bVszXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtWzRdLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdzgzNzkxZF9ncm91cF9mYW5wd200NSA9IHsKKwkuYXR0cnMgPSB3ODM3OTFkX2F0dHJpYnV0ZXNfZmFucHdtNDUsCit9OwogCiBzdGF0aWMgaW50IHc4Mzc5MWRfZGV0ZWN0X3N1YmNsaWVudHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKQEAgLTEwNTYsNiArMTMyOSw3IEBACiAJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAJaW50IGksIGVycjsKKwl1OCBoYXNfZmFucHdtNDU7CiAKICNpZmRlZiBERUJVRwogCWludCB2YWwxOwpAQCAtMTA5MCwxNSArMTM2NCwyNyBAQAogCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzkxZF9ncm91cCkpKQogCQlnb3RvIGVycm9yMzsKIAorCS8qIENoZWNrIGlmIHBpbnMgb2YgZmFuL3B3bSA0LTUgYXJlIGluIHVzZSBhcyBHUElPICovCisJaGFzX2ZhbnB3bTQ1ID0gdzgzNzkxZF9yZWFkKGNsaWVudCwgVzgzNzkxRF9SRUdfR1BJTykgJiAweDEwOworCWlmIChoYXNfZmFucHdtNDUpIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAorCQkJCQkgJnc4Mzc5MWRfZ3JvdXBfZmFucHdtNDUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjQ7CisJfQorCiAJLyogRXZlcnl0aGluZyBpcyByZWFkeSwgbm93IHJlZ2lzdGVyIHRoZSB3b3JraW5nIGRldmljZSAqLwogCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gZXJyb3I0OworCQlnb3RvIGVycm9yNTsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXJyb3I1OgorCWlmIChoYXNfZmFucHdtNDUpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc5MWRfZ3JvdXBfZmFucHdtNDUpOwogZXJyb3I0OgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc5MWRfZ3JvdXApOwogZXJyb3IzOgpAQCAtMTIzNiw2ICsxNTIyLDM2IEBACiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCQlkYXRhLT5mYW5fZGl2W2ldIHw9ICh2YmF0X3JlZyA+PiAoMyArIGkpKSAmIDB4MDQ7CiAKKwkJLyogVXBkYXRlIFBXTSBkdXR5IGN5Y2xlICovCisJCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfUFdNOyBpKyspIHsKKwkJCWRhdGEtPnB3bVtpXSA9ICB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCQkJVzgzNzkxRF9SRUdfUFdNW2ldKTsKKwkJfQorCisJCS8qIFVwZGF0ZSBQV00gZW5hYmxlIHN0YXR1cyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlyZWdfYXJyYXlfdG1wW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQkJCVc4Mzc5MURfUkVHX0ZBTl9DRkdbaV0pOworCQl9CisJCWRhdGEtPnB3bV9lbmFibGVbMF0gPSAocmVnX2FycmF5X3RtcFswXSA+PiAyKSAmIDB4MDM7CisJCWRhdGEtPnB3bV9lbmFibGVbMV0gPSAocmVnX2FycmF5X3RtcFswXSA+PiA0KSAmIDB4MDM7CisJCWRhdGEtPnB3bV9lbmFibGVbMl0gPSAocmVnX2FycmF5X3RtcFsxXSA+PiAyKSAmIDB4MDM7CisKKwkJLyogVXBkYXRlIFBXTSB0YXJnZXQgdGVtcGVyYXR1cmUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJZGF0YS0+dGVtcF90YXJnZXRbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCVc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUW2ldKSAmIDB4N2Y7CisJCX0KKworCQkvKiBVcGRhdGUgUFdNIHRlbXBlcmF0dXJlIHRvbGVyYW5jZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlyZWdfYXJyYXlfdG1wW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQkJVzgzNzkxRF9SRUdfVEVNUF9UT0xbaV0pOworCQl9CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzBdID0gcmVnX2FycmF5X3RtcFswXSAmIDB4MGY7CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzFdID0gKHJlZ19hcnJheV90bXBbMF0gPj4gNCkgJiAweDBmOworCQlkYXRhLT50ZW1wX3RvbGVyYW5jZVsyXSA9IHJlZ19hcnJheV90bXBbMV0gJiAweDBmOworCiAJCS8qIFVwZGF0ZSB0aGUgZmlyc3QgdGVtcGVyYXR1cmUgc2Vuc29yICovCiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJCWRhdGEtPnRlbXAxW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCmluZGV4IDFlYTM5MjUuLjQyNGRhZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwpAQCAtMzMyLDEwICszMzIsNiBAQAogCWludCBlcnJvcjsKIAl1OCB0ZW1wOwogCQotCS8qIGRyaXZlcl9kYXRhIG1pZ2h0IGNvbWUgZnJvbSB1c2VyLXNwYWNlLCBzbyBjaGVjayBpdCAqLwotCWlmIChpZC0+ZHJpdmVyX2RhdGEgPj0gQVJSQVlfU0laRShjaGlwbmFtZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGFtZDc1Nl9pb3BvcnQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiT25seSBvbmUgZGV2aWNlIHN1cHBvcnRlZCAiCiAJCSAgICAgICAiKHlvdSBoYXZlIGEgc3RyYW5nZSBtb3RoZXJib2FyZCwgYnR3KVxuIik7CkBAIC00MTIsNyArNDA4LDYgQEAKIAkuaWRfdGFibGUJPSBhbWQ3NTZfaWRzLAogCS5wcm9iZQkJPSBhbWQ3NTZfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhbWQ3NTZfcmVtb3ZlKSwKLQkuZHluaWRzLnVzZV9kcml2ZXJfZGF0YSA9IDEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhbWQ3NTZfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCmluZGV4IDBlN2IxYzYuLjYwY2E5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKQEAgLTI1OSw2ICsyNTksMzUgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJQb3dlck1hYyBpMmMgYnVzICVzIHJlZ2lzdGVyZWRcbiIsIG5hbWUpOworCisJaWYgKCFzdHJuY21wKGJhc2VuYW1lLCAidW5pLW4iLCA1KSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCQljb25zdCB1MzIgKnByb3A7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJCS8qIEluc3RhbnRpYXRlIEkyQyBtb3Rpb24gc2Vuc29yIGlmIHByZXNlbnQgKi8KKwkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYWNjZWxlcm9tZXRlciIpOworCQlpZiAobnAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJBQVBMLGFjY2VsZXJvbWV0ZXJfMSIpICYmCisJCSAgICAocHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpKSkgeworCQkJaW50IGkyY19idXM7CisJCQljb25zdCBjaGFyICp0bXBfYnVzOworCisJCQkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KKwkJCXRtcF9idXMgPSBzdHJzdHIobnAtPmZ1bGxfbmFtZSwgIi9pMmMtYnVzQCIpOworCQkJaWYgKHRtcF9idXMpCisJCQkJaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOworCQkJZWxzZQorCQkJCWkyY19idXMgPSAoKCpwcm9wKSA+PiA4KSAmIDB4MGY7CisKKwkJCWlmIChwbWFjX2kyY19nZXRfY2hhbm5lbChidXMpID09IGkyY19idXMpIHsKKwkJCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwkJCQlpbmZvLmFkZHIgPSAoKCpwcm9wKSAmIDB4ZmYpID4+IDE7CisJCQkJc3RybGNweShpbmZvLnR5cGUsICJhbXMiLCBJMkNfTkFNRV9TSVpFKTsKKwkJCQlpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCmluZGV4IDczZGM1MmUuLjlmMTk0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwpAQCAtMzMyLDEwICszMzIsNiBAQAogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyb3IgPSAtRU5PREVWOwogCi0JLyogZHJpdmVyX2RhdGEgbWlnaHQgY29tZSBmcm9tIHVzZXItc3BhY2UsIHNvIGNoZWNrIGl0ICovCi0JaWYgKGlkLT5kcml2ZXJfZGF0YSAmIDEgfHwgaWQtPmRyaXZlcl9kYXRhID4gMHhmZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBEZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIFNNQnVzIGFyZWFzICovCiAJaWYgKGZvcmNlX2FkZHIpIHsKIAkJdnQ1OTZfc21iYSA9IGZvcmNlX2FkZHIgJiAweGZmZjA7CkBAIC00ODMsNyArNDc5LDYgQEAKIAkubmFtZQkJPSAidnQ1OTZfc21idXMiLAogCS5pZF90YWJsZQk9IHZ0NTk2X2lkcywKIAkucHJvYmUJCT0gdnQ1OTZfcHJvYmUsCi0JLmR5bmlkcy51c2VfZHJpdmVyX2RhdGEgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3Z0NTk2X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYwppbmRleCAyYTRhY2IyLi5kNDc3NTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9hdDI0LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvYXQyNC5jCkBAIC00NjAsNyArNDYwLDYgQEAKIAkgKi8KIAlhdDI0LT5iaW4uYXR0ci5uYW1lID0gImVlcHJvbSI7CiAJYXQyNC0+YmluLmF0dHIubW9kZSA9IGNoaXAuZmxhZ3MgJiBBVDI0X0ZMQUdfSVJVR08gPyBTX0lSVUdPIDogU19JUlVTUjsKLQlhdDI0LT5iaW4uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCWF0MjQtPmJpbi5yZWFkID0gYXQyNF9iaW5fcmVhZDsKIAlhdDI0LT5iaW4uc2l6ZSA9IGNoaXAuYnl0ZV9sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTY4Mi5jIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKaW5kZXggMjNiZTRkNC4uZjNlZTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKQEAgLTE5MCw3ICsxOTAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJlZXByb20iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gRFMxNjgyX0VFUFJPTV9TSVpFLAogCS5yZWFkID0gZHMxNjgyX2VlcHJvbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMKaW5kZXggMTc2MTI2ZC4uNGIzNjRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jCkBAIC04MzIsNTIgKzgzMiw1MiBAQAogCiBzdGF0aWMgdm9pZCBtZW5lbGF1c190b190aW1lKGNoYXIgKnJlZ3MsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKLQl0LT50bV9zZWMgPSBCQ0QyQklOKHJlZ3NbMF0pOwotCXQtPnRtX21pbiA9IEJDRDJCSU4ocmVnc1sxXSk7CisJdC0+dG1fc2VjID0gYmNkMmJpbihyZWdzWzBdKTsKKwl0LT50bV9taW4gPSBiY2QyYmluKHJlZ3NbMV0pOwogCWlmICh0aGVfbWVuZWxhdXMtPnJ0Y19jb250cm9sICYgUlRDX0NUUkxfTU9ERTEyKSB7Ci0JCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3NbMl0gJiAweDFmKSAtIDE7CisJCXQtPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3NbMl0gJiAweDFmKSAtIDE7CiAJCWlmIChyZWdzWzJdICYgUlRDX0hSX1BNKQogCQkJdC0+dG1faG91ciArPSAxMjsKIAl9IGVsc2UKLQkJdC0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1syXSAmIDB4M2YpOwotCXQtPnRtX21kYXkgPSBCQ0QyQklOKHJlZ3NbM10pOwotCXQtPnRtX21vbiA9IEJDRDJCSU4ocmVnc1s0XSkgLSAxOwotCXQtPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3NbNV0pICsgMTAwOworCQl0LT50bV9ob3VyID0gYmNkMmJpbihyZWdzWzJdICYgMHgzZik7CisJdC0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1szXSk7CisJdC0+dG1fbW9uID0gYmNkMmJpbihyZWdzWzRdKSAtIDE7CisJdC0+dG1feWVhciA9IGJjZDJiaW4ocmVnc1s1XSkgKyAxMDA7CiB9CiAKIHN0YXRpYyBpbnQgdGltZV90b19tZW5lbGF1cyhzdHJ1Y3QgcnRjX3RpbWUgKnQsIGludCByZWdudW0pCiB7CiAJaW50CWhvdXIsIHN0YXR1czsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV9zZWMpKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1fc2VjKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV9taW4pKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1fbWluKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAogCWlmICh0aGVfbWVuZWxhdXMtPnJ0Y19jb250cm9sICYgUlRDX0NUUkxfTU9ERTEyKSB7CiAJCWhvdXIgPSB0LT50bV9ob3VyICsgMTsKIAkJaWYgKGhvdXIgPiAxMikKLQkJCWhvdXIgPSBSVENfSFJfUE0gfCBCSU4yQkNEKGhvdXIgLSAxMik7CisJCQlob3VyID0gUlRDX0hSX1BNIHwgYmluMmJjZChob3VyIC0gMTIpOwogCQllbHNlCi0JCQlob3VyID0gQklOMkJDRChob3VyKTsKKwkJCWhvdXIgPSBiaW4yYmNkKGhvdXIpOwogCX0gZWxzZQotCQlob3VyID0gQklOMkJDRCh0LT50bV9ob3VyKTsKKwkJaG91ciA9IGJpbjJiY2QodC0+dG1faG91cik7CiAJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBob3VyKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX21kYXkpKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1fbWRheSkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fbW9uICsgMSkpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9tb24gKyAxKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV95ZWFyIC0gMTAwKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX3llYXIgLSAxMDApKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCkBAIC05MTQsNyArOTE0LDcgQEAKIAl9CiAKIAltZW5lbGF1c190b190aW1lKHJlZ3MsIHQpOwotCXQtPnRtX3dkYXkgPSBCQ0QyQklOKHJlZ3NbNl0pOworCXQtPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbNl0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjcsNyArOTI3LDcgQEAKIAlzdGF0dXMgPSB0aW1lX3RvX21lbmVsYXVzKHQsIE1FTkVMQVVTX1JUQ19TRUMpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhNRU5FTEFVU19SVENfV0tEQVksIEJJTjJCQ0QodC0+dG1fd2RheSkpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhNRU5FTEFVU19SVENfV0tEQVksIGJpbjJiY2QodC0+dG1fd2RheSkpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9lcnIoJnRoZV9tZW5lbGF1cy0+Y2xpZW50LT5kZXYsICJydGMgd3JpdGUgcmVnICUwMnggIgogCQkJCSJlcnIgJWRcbiIsIE1FTkVMQVVTX1JUQ19XS0RBWSwgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IDc0YTM2OWEuLmE4MjBjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtODQsMjEgKzg0LDQwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBCTEtfREVWX0lERURJU0sKLQl0cmlzdGF0ZSAiSW5jbHVkZSBJREUvQVRBLTIgRElTSyBzdXBwb3J0IgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgd2lsbCBpbmNsdWRlIGVuaGFuY2VkIHN1cHBvcnQgZm9yIE1GTS9STEwvSURFIGhhcmQgZGlza3MuICBJZgotCSAgeW91IGhhdmUgYSBNRk0vUkxML0lERSBkaXNrLCBhbmQgdGhlcmUgaXMgbm8gc3BlY2lhbCByZWFzb24gdG8gdXNlCi0JICB0aGUgb2xkIGhhcmQgZGlzayBkcml2ZXIgaW5zdGVhZCwgc2F5IFkuICBJZiB5b3UgaGF2ZSBhbiBTQ1NJLW9ubHkKLQkgIHN5c3RlbSwgeW91IGNhbiBzYXkgTiBoZXJlLgorY29uZmlnIElERV9HRAorCXRyaXN0YXRlICJnZW5lcmljIEFUQS9BVEFQSSBkaXNrIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJaGVscAorCSAgU3VwcG9ydCBmb3IgQVRBL0FUQVBJIGRpc2tzIChpbmNsdWRpbmcgQVRBUEkgZmxvcHB5IGRyaXZlcykuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1kaXNrLgotCSAgRG8gbm90IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgaWYgeW91ciByb290IGZpbGUgc3lzdGVtCi0JICAodGhlIG9uZSBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkgLykgaXMgbG9jYXRlZCBvbiB0aGUgSURFIGRpc2suCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtZ2RfbW9kLgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgSURFX0dEX0FUQQorCWJvb2wgIkFUQSBkaXNrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJREVfR0QKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIHdpbGwgaW5jbHVkZSBzdXBwb3J0IGZvciBBVEEgaGFyZCBkaXNrcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIElERV9HRF9BVEFQSQorCWJvb2wgIkFUQVBJIGZsb3BweSBzdXBwb3J0IgorCWRlcGVuZHMgb24gSURFX0dECisJc2VsZWN0IElERV9BVEFQSQorCWhlbHAKKwkgIFRoaXMgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIEFUQVBJIGZsb3BweSBkcml2ZXMKKwkgIChpLmUuIElvbWVnYSBaSVAgb3IgTUtFIExTLTEyMCkuCisKKwkgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBqdW1wZXIgc2V0dGluZ3MgYW5kIHRoZSBxdWVzdGlvbgorCSAgb2Ygd2hlbiBhIFpJUCBkcml2ZSB1c2VzIGEgcGFydGl0aW9uIHRhYmxlLCBzZWUKKwkgIDxodHRwOi8vd3d3Lndpbi50dWUubmwvfmFlYi9saW51eC96aXAvemlwLTEuaHRtbD4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBCTEtfREVWX0lERUNTCiAJdHJpc3RhdGUgIlBDTUNJQSBJREUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDTUNJQQpAQCAtMTYzLDI5ICsxODIsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLXRhcGUuCiAKLWNvbmZpZyBCTEtfREVWX0lERUZMT1BQWQotCXRyaXN0YXRlICJJbmNsdWRlIElERS9BVEFQSSBGTE9QUFkgc3VwcG9ydCIKLQlzZWxlY3QgSURFX0FUQVBJCi0JLS0taGVscC0tLQotCSAgSWYgeW91IGhhdmUgYW4gSURFIGZsb3BweSBkcml2ZSB3aGljaCB1c2VzIHRoZSBBVEFQSSBwcm90b2NvbCwKLQkgIGFuc3dlciBZLiAgQVRBUEkgaXMgYSBuZXdlciBwcm90b2NvbCB1c2VkIGJ5IElERSBDRC1ST00vdGFwZS9mbG9wcHkKLQkgIGRyaXZlcywgc2ltaWxhciB0byB0aGUgU0NTSSBwcm90b2NvbC4KLQotCSAgVGhlIExTLTEyMCBhbmQgdGhlIElERS9BVEFQSSBJb21lZ2EgWklQIGRyaXZlIGFyZSBhbHNvIHN1cHBvcnRlZCBieQotCSAgdGhpcyBkcml2ZXIuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBqdW1wZXIgc2V0dGluZ3MgYW5kIHRoZSBxdWVzdGlvbgotCSAgb2Ygd2hlbiBhIFpJUCBkcml2ZSB1c2VzIGEgcGFydGl0aW9uIHRhYmxlLCBzZWUKLQkgIDxodHRwOi8vd3d3Lndpbi50dWUubmwvfmFlYi9saW51eC96aXAvemlwLTEuaHRtbD4uCi0JICAoQVRBUEkgUEQtQ0QvQ0RSIGRyaXZlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjsgc3VwcG9ydAotCSAgZm9yIFBELUNEL0NEUiBkcml2ZXMgaXMgYXZhaWxhYmxlIGlmIHlvdSBhbnN3ZXIgWSB0bwotCSAgIlNDU0kgZW11bGF0aW9uIHN1cHBvcnQiLCBiZWxvdykuCi0KLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgRkxPUFBZIGRyaXZlIHdpbGwgYmUgaWRlbnRpZmllZCBhbG9uZyB3aXRoCi0JICBvdGhlciBJREUgZGV2aWNlcywgYXMgImhkYiIgb3IgImhkYyIsIG9yIHNvbWV0aGluZyBzaW1pbGFyIChjaGVjawotCSAgdGhlIGJvb3QgbWVzc2FnZXMgd2l0aCBkbWVzZykuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1mbG9wcHkuCi0KIGNvbmZpZyBCTEtfREVWX0lERVNDU0kKIAl0cmlzdGF0ZSAiU0NTSSBlbXVsYXRpb24gc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBTQ1NJCkBAIC0zMzIsNyArMzI4LDcgQEAKICMgVE9ETzogc3BsaXQgaXQgb24gcGVyIGhvc3QgZHJpdmVyIGNvbmZpZyBvcHRpb25zIChvciBtb2R1bGUgcGFyYW1ldGVycykKIGNvbmZpZyBCTEtfREVWX09GRkJPQVJECiAJYm9vbCAiQm9vdCBvZmYtYm9hcmQgY2hpcHNldHMgZmlyc3Qgc3VwcG9ydCAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0lERVBDSSAmJiAoQkxLX0RFVl9BRUM2MlhYIHx8IEJMS19ERVZfR0VORVJJQyB8fCBCTEtfREVWX0hQVDM0WCB8fCBCTEtfREVWX0hQVDM2NiB8fCBCTEtfREVWX1BEQzIwMlhYX05FVyB8fCBCTEtfREVWX1BEQzIwMlhYX09MRCB8fCBCTEtfREVWX1RDODZDMDAxKQorCWRlcGVuZHMgb24gQkxLX0RFVl9JREVQQ0kgJiYgKEJMS19ERVZfQUVDNjJYWCB8fCBCTEtfREVWX0dFTkVSSUMgfHwgQkxLX0RFVl9IUFQzNjYgfHwgQkxLX0RFVl9QREMyMDJYWF9ORVcgfHwgQkxLX0RFVl9QREMyMDJYWF9PTEQgfHwgQkxLX0RFVl9UQzg2QzAwMSkKIAloZWxwCiAJICBOb3JtYWxseSwgSURFIGNvbnRyb2xsZXJzIGJ1aWx0IGludG8gdGhlIG1vdGhlcmJvYXJkIChvbi1ib2FyZAogCSAgY29udHJvbGxlcnMpIGFyZSBhc3NpZ25lZCB0byBpZGUwIGFuZCBpZGUxIHdoaWxlIHRob3NlIG9uIGFkZC1pbiBQQ0kKQEAgLTQ4MiwyOCArNDc4LDYgQEAKIAogCSAgSXQgaXMgc2FmZSB0byBzYXkgWSB0byB0aGlzIHF1ZXN0aW9uLgogCi1jb25maWcgQkxLX0RFVl9IUFQzNFgKLQl0cmlzdGF0ZSAiSFBUMzRYIGNoaXBzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEJST0tFTgotCXNlbGVjdCBCTEtfREVWX0lERURNQV9QQ0kKLQloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHVwIHRvIDQgbW9yZSBFSURFIGRldmljZXMgc2hhcmluZyBhIHNpbmdsZQotCSAgaW50ZXJydXB0LiBUaGUgSFBUMzQzIGNoaXBzZXQgaW4gaXRzIGN1cnJlbnQgZm9ybSBpcyBhIG5vbi1ib290YWJsZQotCSAgY29udHJvbGxlcjsgdGhlIEhQVDM0NS9IUFQzNjMgY2hpcHNldCBpcyBhIGJvb3RhYmxlIChuZWVkcyBCSU9TIEZJWCkKLQkgIFBDSSBVRE1BIGNvbnRyb2xsZXJzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBkeW5hbWljIHR1bmluZyBvZiB0aGUKLQkgIGNoaXBzZXQgZHVyaW5nIHRoZSBpZGUtcHJvYmUgYXQgYm9vdCB0aW1lLiBJdCBpcyByZXBvcnRlZCB0byBzdXBwb3J0Ci0JICBEVkQgSUkgZHJpdmVzLCBieSB0aGUgbWFudWZhY3R1cmVyLgotCi1jb25maWcgSFBUMzRYX0FVVE9ETUEKLQlib29sICJIUFQzNFggQVVUT0RNQSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQkxLX0RFVl9IUFQzNFggJiYgRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyBpcyBhIGRhbmdlcm91cyB0aGluZyB0byBhdHRlbXB0IGN1cnJlbnRseSEgUGxlYXNlIHJlYWQgdGhlCi0JICBjb21tZW50cyBhdCB0aGUgdG9wIG9mIDxmaWxlOmRyaXZlcnMvaWRlL3BjaS9ocHQzNHguYz4uICBJZiB5b3Ugc2F5IFkKLQkgIGhlcmUsIHRoZW4gc2F5IFkgdG8gIlVzZSBETUEgYnkgZGVmYXVsdCB3aGVuIGF2YWlsYWJsZSIgYXMgd2VsbC4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIEJMS19ERVZfSFBUMzY2CiAJdHJpc3RhdGUgIkhQVDM2WC8zN1ggY2hpcHNldCBzdXBwb3J0IgogCXNlbGVjdCBCTEtfREVWX0lERURNQV9QQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggY2VhZjc3OS4uMDkzZDMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTM3LDE4ICszNywyNSBAQAogb2JqLSQoQ09ORklHX0lERV9HRU5FUklDKQkJKz0gaWRlLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSURFUE5QKQkJKz0gaWRlLXBucC5vCiAKLWlkZS1kaXNrX21vZC15ICs9IGlkZS1kaXNrLm8gaWRlLWRpc2tfaW9jdGwubworaWRlLWdkX21vZC15ICs9IGlkZS1nZC5vCiBpZGUtY2RfbW9kLXkgKz0gaWRlLWNkLm8gaWRlLWNkX2lvY3RsLm8gaWRlLWNkX3ZlcmJvc2UubwotaWRlLWZsb3BweV9tb2QteSArPSBpZGUtZmxvcHB5Lm8gaWRlLWZsb3BweV9pb2N0bC5vCiAKK2lmZXEgKCQoQ09ORklHX0lERV9HRF9BVEEpLCB5KQorCWlkZS1nZF9tb2QteSArPSBpZGUtZGlzay5vIGlkZS1kaXNrX2lvY3RsLm8KIGlmZXEgKCQoQ09ORklHX0lERV9QUk9DX0ZTKSwgeSkKLQlpZGUtZGlza19tb2QteSArPSBpZGUtZGlza19wcm9jLm8KLQlpZGUtZmxvcHB5X21vZC15ICs9IGlkZS1mbG9wcHlfcHJvYy5vCisJaWRlLWdkX21vZC15ICs9IGlkZS1kaXNrX3Byb2MubworZW5kaWYKIGVuZGlmCiAKLW9iai0kKENPTkZJR19CTEtfREVWX0lERURJU0spCQkrPSBpZGUtZGlza19tb2QubworaWZlcSAoJChDT05GSUdfSURFX0dEX0FUQVBJKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWZsb3BweS5vIGlkZS1mbG9wcHlfaW9jdGwubworaWZlcSAoJChDT05GSUdfSURFX1BST0NfRlMpLCB5KQorCWlkZS1nZF9tb2QteSArPSBpZGUtZmxvcHB5X3Byb2MubworZW5kaWYKK2VuZGlmCisKK29iai0kKENPTkZJR19JREVfR0QpCQkJKz0gaWRlLWdkX21vZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JREVDRCkJCSs9IGlkZS1jZF9tb2Qubwotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFRkxPUFBZKQkJKz0gaWRlLWZsb3BweV9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSURFVEFQRSkJCSs9IGlkZS10YXBlLm8KIAogaWZlcSAoJChDT05GSUdfQkxLX0RFVl9JREVDUyksIHkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IDJlMzA1NzEuLjRlNThiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIHsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCi0JaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19OT19ET09STE9DSykKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRE9PUkxPQ0tJTkcpID09IDApCiAJCXJldHVybiAwOwogCiAJaWRlX2luaXRfcGMoJnBjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggMzMwOGIxYy4uMTMyNjVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTk5LDcgKzk5LDcgQEAKIC8qIE1hcmsgdGhhdCB3ZSd2ZSBzZWVuIGEgbWVkaWEgY2hhbmdlIGFuZCBpbnZhbGlkYXRlIG91ciBpbnRlcm5hbCBidWZmZXJzLiAqLwogc3RhdGljIHZvaWQgY2Ryb21fc2F3X21lZGlhX2NoYW5nZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19NRURJQV9DSEFOR0VEOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfVE9DX1ZBTElEOwogfQogCkBAIC0zNDAsOCArMzQwLDggQEAKIAl9CiAKIAlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICIlczogc3RhdDogMHgleCwgZ29vZF9zdGF0OiAweCV4LCAiCi0JCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXgsIGVycjogMHgleFxuIiwgX19mdW5jX18sIHN0YXQsCi0JCSAgICAgIGdvb2Rfc3RhdCwgcnEtPmNtZF90eXBlLCBlcnIpOworCQkgICAgICAicnEtPmNtZFswXTogMHgleCwgcnEtPmNtZF90eXBlOiAweCV4LCBlcnI6IDB4JXhcbiIsCisJCSAgICAgIF9fZnVuY19fLCBzdGF0LCBnb29kX3N0YXQsIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgZXJyKTsKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkpIHsKIAkJLyoKQEAgLTg0MywxMyArODQzLDEwIEBACiAJcnEtPnEtPnByZXBfcnFfZm4ocnEtPnEsIHJxKTsKIH0KIAotLyoKLSAqIEFsbCBvdGhlciBwYWNrZXQgY29tbWFuZHMuCi0gKi8KIHN0YXRpYyB2b2lkIGlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSk7CiAKIAkvKgogCSAqIFNvbWUgb2YgdGhlIHRyYWlsaW5nIHJlcXVlc3Qgc2Vuc2UgZmllbGRzIGFyZSBvcHRpb25hbCwKQEAgLTg3Niw3ICs4NzMsNyBAQAogCWlmICghc2Vuc2UpCiAJCXNlbnNlID0gJmxvY2FsX3NlbnNlOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgsICIKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCiAJCSAgICAgICJ0aW1lb3V0OiAlZCwgY21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgY21kWzBdLCB3cml0ZSwKIAkJICAgICAgdGltZW91dCwgY21kX2ZsYWdzKTsKIApAQCAtMTE3Nyw4ICsxMTc0LDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CiAJCXF1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlKSA+PiBTRUNUT1JfQklUUzsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHdyaXRlOiAweCV4LCBzZWNzX3Blcl9mcmFtZTogJXVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCB3cml0ZSwgc2VjdG9yc19wZXJfZnJhbWUpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJCSAgICAgICJzZWNzX3Blcl9mcmFtZTogJXVcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCB3cml0ZSwgc2VjdG9yc19wZXJfZnJhbWUpOwogCiAJaWYgKHdyaXRlKSB7CiAJCS8qIGRpc2sgaGFzIGJlY29tZSB3cml0ZSBwcm90ZWN0ZWQgKi8KQEAgLTEyMjEsNyArMTIxOSw4IEBACiBzdGF0aWMgdm9pZCBjZHJvbV9kb19ibG9ja19wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRfdHlwZTogMHgleFxuIiwgX19mdW5jX18sCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgorCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4XG4iLCBfX2Z1bmNfXywgcnEtPmNtZFswXSwKIAkJICAgICAgcnEtPmNtZF90eXBlKTsKIAogCWlmIChibGtfcGNfcmVxdWVzdChycSkpCkBAIC0xMjU3LDkgKzEyNTYsNiBAQAogCX0KIH0KIAotLyoKLSAqIGNkcm9tIGRyaXZlciByZXF1ZXN0IHJvdXRpbmUuCi0gKi8KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2NkX2RvX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCQkJCXNlY3Rvcl90IGJsb2NrKQogewpAQCAtMTI2Nyw4ICsxMjYzLDEwIEBACiAJaWRlX2hhbmRsZXJfdCAqZm47CiAJaW50IHhmZXJsZW47CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kX3R5cGU6IDB4JXgsIGJsb2NrOiAlbGx1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZF90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCAiCisJCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXgsIGJsb2NrOiAlbGx1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKIAogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19TRUVLSU5HKSB7CkBAIC0xNDEyLDYgKzE0MTAsMTAgQEAKIAogCSpjYXBhY2l0eSA9IDEgKyBiZTMyX3RvX2NwdShjYXBidWYubGJhKTsKIAkqc2VjdG9yc19wZXJfZnJhbWUgPSBibG9ja2xlbiA+PiBTRUNUT1JfQklUUzsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIiVzOiBjYXA6ICVsdSwgc2VjdG9yc19wZXJfZnJhbWU6ICVsdVxuIiwKKwkJICAgICAgX19mdW5jX18sICpjYXBhY2l0eSwgKnNlY3RvcnNfcGVyX2ZyYW1lKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjQzLDYgKzE2NDUsOSBAQAogCQltYXhzcGVlZCA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJmJ1Zls4ICsgOF0pOwogCX0KIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIiVzOiBjdXJzcGVlZDogJXUsIG1heHNwZWVkOiAldVxuIiwKKwkJICAgICAgX19mdW5jX18sIGN1cnNwZWVkLCBtYXhzcGVlZCk7CisKIAljZC0+Y3VycmVudF9zcGVlZCA9IChjdXJzcGVlZCArICgxNzYvMikpIC8gMTc2OwogCWNkLT5tYXhfc3BlZWQgPSAobWF4c3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIH0KQEAgLTE3MzIsNyArMTczNyw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKChidWZbOCArIDZdICYgMHgwMSkgPT0gMCkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19OT19ET09STE9DSzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwogCWlmIChidWZbOCArIDZdICYgMHgwOCkKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTk9fRUpFQ1Q7CiAJaWYgKGJ1Zls4ICsgM10gJiAweDAxKQpAQCAtMTc3Nyw3ICsxNzgyLDcgQEAKIAlpZiAoKGNkaS0+bWFzayAmIENEQ19EVkRfUikgPT0gMCB8fCAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SQU0pID09IDApCiAJCXByaW50ayhLRVJOX0NPTlQgIiBEVkQlcyVzIiwKIAkJCQkgKGNkaS0+bWFzayAmIENEQ19EVkRfUikgPyAiIiA6ICItUiIsCi0JCQkJIChjZGktPm1hc2sgJiBDRENfRFZEX1JBTSkgPyAiIiA6ICItUkFNIik7CisJCQkJIChjZGktPm1hc2sgJiBDRENfRFZEX1JBTSkgPyAiIiA6ICIvUkFNIik7CiAKIAlpZiAoKGNkaS0+bWFzayAmIENEQ19DRF9SKSA9PSAwIHx8IChjZGktPm1hc2sgJiBDRENfQ0RfUlcpID09IDApCiAJCXByaW50ayhLRVJOX0NPTlQgIiBDRCVzJXMiLApAQCAtMTkwOCw2ICsxOTEzLDE2IEBACiAJSURFX1BST0NfREVWU0VUKGRzY19vdmVybGFwLCAwLCAxKSwKIAl7IDAgfSwKIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfY2RfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlY2RfcHJvYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV9jZF9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVjZF9zZXR0aW5nczsKK30KICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNkX2xpc3RfZW50cnkgaWRlX2NkX3F1aXJrc19saXN0W10gPSB7CkBAIC0xOTg2LDggKzIwMDEsOCBAQAogCWlmICghZHJpdmUtPnF1ZXVlLT51bnBsdWdfZGVsYXkpCiAJCWRyaXZlLT5xdWV1ZS0+dW5wbHVnX2RlbGF5ID0gMTsKIAotCWRyaXZlLT5hdGFwaV9mbGFncyA9IElERV9BRkxBR19NRURJQV9DSEFOR0VEIHwgSURFX0FGTEFHX05PX0VKRUNUIHwKLQkJICAgICAgIGlkZV9jZF9mbGFncyhpZCk7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKKwlkcml2ZS0+YXRhcGlfZmxhZ3MgPSBJREVfQUZMQUdfTk9fRUpFQ1QgfCBpZGVfY2RfZmxhZ3MoaWQpOwogCiAJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVkVSVE9TXzMwMF9TU0QpICYmCiAJICAgIGZ3X3Jldls0XSA9PSAnMScgJiYgZndfcmV2WzZdIDw9ICcyJykKQEAgLTIwNjksOCArMjA4NCw4IEBACiAJLmVuZF9yZXF1ZXN0CQk9IGlkZV9lbmRfcmVxdWVzdCwKIAkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVjZF9wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGVjZF9zZXR0aW5ncywKKwkucHJvY19lbnRyaWVzCQk9IGlkZV9jZF9wcm9jX2VudHJpZXMsCisJLnByb2NfZGV2c2V0cwkJPSBpZGVfY2RfcHJvY19kZXZzZXRzLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCmluZGV4IDc0MjMxYjQuLmRmM2RmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCkBAIC04Niw4ICs4Niw4IEBACiAKIAlpZiAoc2xvdF9uciA9PSBDRFNMX0NVUlJFTlQpIHsKIAkJKHZvaWQpIGNkcm9tX2NoZWNrX3N0YXR1cyhkcml2ZSwgTlVMTCk7Ci0JCXJldHZhbCA9IChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKKwkJcmV0dmFsID0gKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJCXJldHVybiByZXR2YWw7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJc2Vuc2UgPSAmbXlfc2Vuc2U7CiAKIAkvKiBJZiB0aGUgZHJpdmUgY2Fubm90IGxvY2sgdGhlIGRvb3IsIGp1c3QgcHJldGVuZC4gKi8KLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX0RPT1JMT0NLKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKSB7CiAJCXN0YXQgPSAwOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSAgICAoc2Vuc2UtPmFzYyA9PSAweDI0IHx8IHNlbnNlLT5hc2MgPT0gMHgyMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vciBsb2NraW5nIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQlkcml2ZS0+bmFtZSk7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAkJc3RhdCA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCAzODUzYmRlLi4yMjM3NTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTE0LDkgKzE0LDYgQEAKICAqIFRoaXMgaXMgdGhlIElERS9BVEEgZGlzayBkcml2ZXIsIGFzIGV2b2x2ZWQgZnJvbSBoZC5jIGFuZCBpZGUuYy4KICAqLwogCi0jZGVmaW5lIElERURJU0tfVkVSU0lPTgkiMS4xOCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zOSw0NiArMzYsOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUKQotI2RlZmluZSBJREVfRElTS19NSU5PUlMJCSgxIDw8IFBBUlROX0JJVFMpCi0jZWxzZQotI2RlZmluZSBJREVfRElTS19NSU5PUlMJCTAKLSNlbmRpZgotCiAjaW5jbHVkZSAiaWRlLWRpc2suaCIKIAotc3RhdGljIERFRklORV9NVVRFWChpZGVkaXNrX3JlZl9tdXRleCk7Ci0KLSNkZWZpbmUgdG9faWRlX2Rpc2sob2JqKSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgaWRlX2Rpc2tfb2JqLCBrcmVmKQotCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICopOwotCi1zdGF0aWMgc3RydWN0IGlkZV9kaXNrX29iaiAqaWRlX2Rpc2tfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwotCWlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCWlmIChpZGtwKSB7Ci0JCWlmIChpZGVfZGV2aWNlX2dldChpZGtwLT5kcml2ZSkpCi0JCQlpZGtwID0gTlVMTDsKLQkJZWxzZQotCQkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOwotCX0KLQltdXRleF91bmxvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLQlyZXR1cm4gaWRrcDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHV0KHN0cnVjdCBpZGVfZGlza19vYmogKmlka3ApCi17Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQltdXRleF9sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci0Ja3JlZl9wdXQoJmlka3AtPmtyZWYsIGlkZV9kaXNrX3JlbGVhc2UpOwotCWlkZV9kZXZpY2VfcHV0KGRyaXZlKTsKLQltdXRleF91bmxvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLX0KLQogc3RhdGljIGNvbnN0IHU4IGlkZV9yd19jbWRzW10gPSB7CiAJQVRBX0NNRF9SRUFEX01VTFRJLAogCUFUQV9DTURfV1JJVEVfTVVMVEksCkBAIC0zNzQsNyArMzMzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRfaWRlZGlza19jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGlkZV9kaXNrX2dldF9jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAlpbnQgbGJhOwpAQCAtNDAzLDExICszNjIsMjggQEAKIAkJaWYgKGF0YV9pZF9ocGFfZW5hYmxlZChpZCkpCiAJCQlpZGVkaXNrX2NoZWNrX2hwYShkcml2ZSk7CiAJfQotfQogCi1zZWN0b3JfdCBpZGVfZGlza19jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIGRyaXZlLT5jYXBhY2l0eTY0OworCS8qIGxpbWl0IGRyaXZlIGNhcGFjaXR5IHRvIDEzN0dCIGlmIExCQTQ4IGNhbm5vdCBiZSB1c2VkICovCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA9PSAwICYmCisJICAgIGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IHVzZSBMQkE0OCAtIGZ1bGwgY2FwYWNpdHkgIgorCQkgICAgICAgIiVsbHUgc2VjdG9ycyAoJWxsdSBNQilcbiIsCisJCSAgICAgICBkcml2ZS0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylkcml2ZS0+Y2FwYWNpdHk2NCwKKwkJICAgICAgIHNlY3RvcnNfdG9fTUIoZHJpdmUtPmNhcGFjaXR5NjQpKTsKKwkJZHJpdmUtPmNhcGFjaXR5NjQgPSAxVUxMIDw8IDI4OworCX0KKworCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkpIHsKKwkJaWYgKGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggRE1BIC0gUElPIG1vZGUiCisJCQkJCSAiIHdpbGwgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHNlY3RvcnMgIgorCQkJCQkgIj4gJXVcbiIsIGRyaXZlLT5uYW1lLCAxIDw8IDI4KTsKKwkJfSBlbHNlCisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTEJBNDg7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZWRpc2tfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQpAQCAtNTA4LDcgKzQ4NCw3IEBACiAJCSAqIHRpbWUgd2UgaGF2ZSB0cmltbWVkIHRoZSBkcml2ZSBjYXBhY2l0eSBpZiBMQkE0OCBpcwogCQkgKiBub3QgYXZhaWxhYmxlIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVjaGVjayB0aGF0LgogCQkgKi8KLQkJY2FwYWNpdHkgPSBpZGVfZGlza19jYXBhY2l0eShkcml2ZSk7CisJCWNhcGFjaXR5ID0gaWRlX2dkX2NhcGFjaXR5KGRyaXZlKTsKIAkJYmFycmllciA9IGF0YV9pZF9mbHVzaF9lbmFibGVkKGlkKSAmJgogCQkJKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9GTFVTSCkgPT0gMCAmJgogCQkJKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA9PSAwIHx8CkBAIC02MTYsNyArNTkyLDEyIEBACiAKIGlkZV9leHRfZGV2c2V0X3J3X3N5bmMobm93ZXJyLCBub3dlcnIpOwogCi1zdGF0aWMgdm9pZCBpZGVkaXNrX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICpzKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBpZGVfZGlza19zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC02NTIsMzMgKzYzMywxMyBAQAogCQkJIGRyaXZlLT5xdWV1ZS0+bWF4X3NlY3RvcnMgLyAyKTsKIAogCS8qIGNhbGN1bGF0ZSBkcml2ZSBjYXBhY2l0eSwgYW5kIHNlbGVjdCBMQkEgaWYgcG9zc2libGUgKi8KLQlpbml0X2lkZWRpc2tfY2FwYWNpdHkoZHJpdmUpOwotCi0JLyogbGltaXQgZHJpdmUgY2FwYWNpdHkgdG8gMTM3R0IgaWYgTEJBNDggY2Fubm90IGJlIHVzZWQgKi8KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpID09IDAgJiYKLQkgICAgZHJpdmUtPmNhcGFjaXR5NjQgPiAxVUxMIDw8IDI4KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW5ub3QgdXNlIExCQTQ4IC0gZnVsbCBjYXBhY2l0eSAiCi0JCSAgICAgICAiJWxsdSBzZWN0b3JzICglbGx1IE1CKVxuIiwKLQkJICAgICAgIGRyaXZlLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWRyaXZlLT5jYXBhY2l0eTY0LAotCQkgICAgICAgc2VjdG9yc190b19NQihkcml2ZS0+Y2FwYWNpdHk2NCkpOwotCQlkcml2ZS0+Y2FwYWNpdHk2NCA9IDFVTEwgPDwgMjg7Ci0JfQotCi0JaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkgJiYKLQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpKSB7Ci0JCWlmIChkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdXNlIExCQTQ4IERNQSAtIFBJTyBtb2RlIgotCQkJCQkgIiB3aWxsIGJlIHVzZWQgZm9yIGFjY2Vzc2luZyBzZWN0b3JzICIKLQkJCQkJICI+ICV1XG4iLCBkcml2ZS0+bmFtZSwgMSA8PCAyOCk7Ci0JCX0gZWxzZQotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0xCQTQ4OwotCX0KKwlpZGVfZGlza19nZXRfY2FwYWNpdHkoZHJpdmUpOwogCiAJLyoKIAkgKiBpZiBwb3NzaWJsZSwgZ2l2ZSBmZGlzayBhY2Nlc3MgdG8gbW9yZSBvZiB0aGUgZHJpdmUsCiAJICogYnkgY29ycmVjdGluZyBiaW9zX2N5bHM6CiAJICovCi0JY2FwYWNpdHkgPSBpZGVfZGlza19jYXBhY2l0eShkcml2ZSk7CisJY2FwYWNpdHkgPSBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpOwogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0ZPUkNFRF9HRU9NKSA9PSAwKSB7CiAJCWlmIChhdGFfaWRfbGJhNDhfZW5hYmxlZChkcml2ZS0+aWQpKSB7CkBAIC03MTgsOSArNjc5LDE3IEBACiAJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1dDQUNIRTsKIAogCXNldF93Y2FjaGUoZHJpdmUsIDEpOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgPT0gMCAmJgorCSAgICAoZHJpdmUtPmhlYWQgPT0gMCB8fCBkcml2ZS0+aGVhZCA+IDE2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGdlb21ldHJ5OiAlZCBwaHlzaWNhbCBoZWFkcz9cbiIsCisJCQlkcml2ZS0+bmFtZSwgZHJpdmUtPmhlYWQpOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOworCX0gZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9jYWNoZWZsdXNoX3AoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Rpc2tfZmx1c2goaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlmIChhdGFfaWRfZmx1c2hfZW5hYmxlZChkcml2ZS0+aWQpID09IDAgfHwKIAkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfV0NBQ0hFKSA9PSAwKQpAQCAtNzMwLDI2NyArNjk5LDQwIEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3Y2FjaGUgZmx1c2ggZmFpbGVkIVxuIiwgZHJpdmUtPm5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZW1vdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBpZGVfZGlza19pbml0X21lZGlhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGlka3AtPmRpc2s7Ci0KLQlpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihkcml2ZSwgaWRrcC0+ZHJpdmVyKTsKLQotCWRlbF9nZW5kaXNrKGcpOwotCi0JaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0KLQlpZGVfZGlza19wdXQoaWRrcCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IHRvX2lkZV9kaXNrKGtyZWYpOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JZy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlwdXRfZGlzayhnKTsKLQlrZnJlZShpZGtwKTsKLX0KLQotc3RhdGljIGludCBpZGVfZGlza19wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpOwotCi0vKgotICogT24gSFBBIGRyaXZlcyB0aGUgY2FwYWNpdHkgbmVlZHMgdG8gYmUKLSAqIHJlaW5pdGlsaXplZCBvbiByZXN1bWUgb3RoZXJ3aXNlIHRoZSBkaXNrCi0gKiBjYW4gbm90IGJlIHVzZWQgYW5kIGEgaGFyZCByZXNldCBpcyByZXF1aXJlZAotICovCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZXN1bWUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoZHJpdmUtPmlkKSkKLQkJaW5pdF9pZGVkaXNrX2NhcGFjaXR5KGRyaXZlKTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2RldmljZV9zaHV0ZG93bihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0jaWZkZWYJQ09ORklHX0FMUEhBCi0JLyogT24gQWxwaGEsIGhhbHQoOCkgZG9lc24ndCBhY3R1YWxseSB0dXJuIHRoZSBtYWNoaW5lIG9mZiwKLQkgICBpdCBwdXRzIHlvdSBpbnRvIHRoZSBzb3J0IG9mIGZpcm13YXJlIG1vbml0b3IuIFR5cGljYWxseSwKLQkgICBpdCdzIHVzZWQgdG8gYm9vdCBhbm90aGVyIGtlcm5lbCBpbWFnZSwgc28gaXQncyBub3QgbXVjaAotCSAgIGRpZmZlcmVudCBmcm9tIHJlYm9vdCg4KS4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvCi0JICAgc3BpbiBkb3duIHRoZSBkaXNrIGluIHRoaXMgY2FzZSwgZXNwZWNpYWxseSBzaW5jZSBBbHBoYQotCSAgIGZpcm13YXJlIGRvZXNuJ3QgaGFuZGxlIGRpc2tzIGluIHN0YW5kYnkgbW9kZSBwcm9wZXJseS4KLQkgICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQncyByZWFzb25hYmx5IHNhZmUgdG8gdHVybiB0aGUgcG93ZXIKLQkgICBvZmYgd2hlbiB0aGUgc2h1dGRvd24gcHJvY2VzcyByZWFjaGVzIHRoZSBmaXJtd2FyZSBwcm9tcHQsCi0JICAgYXMgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHRha2VzIHJhdGhlciBsb25nIHRpbWUgLQotCSAgIGF0IGxlYXN0IDEwIHNlY29uZHMsIHdoaWNoIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvcgotCSAgIHRoZSBkaXNrIHRvIGV4cGlyZSBpdHMgd3JpdGUgY2FjaGUuICovCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUE9XRVJfT0ZGKSB7Ci0jZWxzZQotCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JFU1RBUlQpIHsKLSNlbmRpZgotCQlpZGVfY2FjaGVmbHVzaF9wKGRyaXZlKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIlNodXRkb3duOiAlc1xuIiwgZHJpdmUtPm5hbWUpOwotCi0JZHJpdmUtPmdlbmRldi5idXMtPnN1c3BlbmQoJmRyaXZlLT5nZW5kZXYsIFBNU0dfU1VTUEVORCk7Ci19Ci0KLXN0YXRpYyBpZGVfZHJpdmVyX3QgaWRlZGlza19kcml2ZXIgPSB7Ci0JLmdlbl9kcml2ZXIgPSB7Ci0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLm5hbWUJCT0gImlkZS1kaXNrIiwKLQkJLmJ1cwkJPSAmaWRlX2J1c190eXBlLAotCX0sCi0JLnByb2JlCQkJPSBpZGVfZGlza19wcm9iZSwKLQkucmVtb3ZlCQkJPSBpZGVfZGlza19yZW1vdmUsCi0JLnJlc3VtZQkJCT0gaWRlX2Rpc2tfcmVzdW1lLAotCS5zaHV0ZG93bgkJPSBpZGVfZGV2aWNlX3NodXRkb3duLAotCS52ZXJzaW9uCQk9IElERURJU0tfVkVSU0lPTiwKLQkuZG9fcmVxdWVzdAkJPSBpZGVfZG9fcndfZGlzaywKLQkuZW5kX3JlcXVlc3QJCT0gaWRlX2VuZF9yZXF1ZXN0LAotCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZV9kaXNrX3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZV9kaXNrX3NldHRpbmdzLAotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IGlkZWRpc2tfc2V0X2Rvb3Jsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQorc3RhdGljIGludCBpZGVfZGlza19zZXRfZG9vcmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKKwkJCQkgaW50IG9uKQogewogCWlkZV90YXNrX3QgdGFzazsKKwlpbnQgcmV0OworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKQorCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKIAl0YXNrLnRmLmNvbW1hbmQgPSBvbiA/IEFUQV9DTURfTUVESUFfTE9DSyA6IEFUQV9DTURfTUVESUFfVU5MT0NLOwogCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJcmV0ID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKworCWlmIChyZXQpCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaWRlZGlza19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwOwotCWlkZV9kcml2ZV90ICpkcml2ZTsKLQotCWlka3AgPSBpZGVfZGlza19nZXQoZGlzayk7Ci0JaWYgKGlka3AgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQlpZGtwLT5vcGVuZXJzKys7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKLQkJY2hlY2tfZGlza19jaGFuZ2UoaW5vZGUtPmlfYmRldik7Ci0JCS8qCi0JCSAqIElnbm9yZSB0aGUgcmV0dXJuIGNvZGUgZnJvbSBkb29yX2xvY2ssCi0JCSAqIHNpbmNlIHRoZSBvcGVuKCkgaGFzIGFscmVhZHkgc3VjY2VlZGVkLAotCQkgKiBhbmQgdGhlIGRvb3JfbG9jayBpcyBpcnJlbGV2YW50IGF0IHRoaXMgcG9pbnQuCi0JCSAqLwotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRE9PUkxPQ0tJTkcpICYmCi0JCSAgICBpZGVkaXNrX3NldF9kb29ybG9jayhkcml2ZSwgMSkpCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWRpc2tfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQlpZiAoaWRrcC0+b3BlbmVycyA9PSAxKQotCQlpZGVfY2FjaGVmbHVzaF9wKGRyaXZlKTsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpICYmIGlka3AtPm9wZW5lcnMgPT0gMSkgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRE9PUkxPQ0tJTkcpICYmCi0JCSAgICBpZGVkaXNrX3NldF9kb29ybG9jayhkcml2ZSwgMCkpCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7Ci0JfQotCi0JaWRrcC0+b3BlbmVycy0tOwotCi0JaWRlX2Rpc2tfcHV0KGlka3ApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coYmRldi0+YmRfZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQlnZW8tPmhlYWRzID0gZHJpdmUtPmJpb3NfaGVhZDsKLQlnZW8tPnNlY3RvcnMgPSBkcml2ZS0+Ymlvc19zZWN0OwotCWdlby0+Y3lsaW5kZXJzID0gKHUxNilkcml2ZS0+Ymlvc19jeWw7IC8qIHRydW5jYXRlICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JLyogZG8gbm90IHNjYW4gcGFydGl0aW9ucyB0d2ljZSBpZiB0aGlzIGlzIGEgcmVtb3ZhYmxlIGRldmljZSAqLwotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0FUVEFDSCkgewotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBpZiByZW1vdmFibGUsIGFsd2F5cyBhc3N1bWUgaXQgd2FzIGNoYW5nZWQgKi8KLQlyZXR1cm4gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpOwotfQotCi1zdGF0aWMgaW50IGlkZWRpc2tfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCXNldF9jYXBhY2l0eShkaXNrLCBpZGVfZGlza19jYXBhY2l0eShpZGtwLT5kcml2ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZWRpc2tfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCQk9IGlkZWRpc2tfb3BlbiwKLQkucmVsZWFzZQkJPSBpZGVkaXNrX3JlbGVhc2UsCi0JLmlvY3RsCQkJPSBpZGVfZGlza19pb2N0bCwKLQkuZ2V0Z2VvCQkJPSBpZGVkaXNrX2dldGdlbywKLQkubWVkaWFfY2hhbmdlZAkJPSBpZGVkaXNrX21lZGlhX2NoYW5nZWQsCi0JLnJldmFsaWRhdGVfZGlzawk9IGlkZWRpc2tfcmV2YWxpZGF0ZV9kaXNrCitjb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzIGlkZV9hdGFfZGlza19vcHMgPSB7CisJLmNoZWNrCQk9IGlkZV9kaXNrX2NoZWNrLAorCS5nZXRfY2FwYWNpdHkJPSBpZGVfZGlza19nZXRfY2FwYWNpdHksCisJLnNldHVwCQk9IGlkZV9kaXNrX3NldHVwLAorCS5mbHVzaAkJPSBpZGVfZGlza19mbHVzaCwKKwkuaW5pdF9tZWRpYQk9IGlkZV9kaXNrX2luaXRfbWVkaWEsCisJLnNldF9kb29ybG9jawk9IGlkZV9kaXNrX3NldF9kb29ybG9jaywKKwkuZG9fcmVxdWVzdAk9IGlkZV9kb19yd19kaXNrLAorCS5lbmRfcmVxdWVzdAk9IGlkZV9lbmRfcmVxdWVzdCwKKwkuaW9jdGwJCT0gaWRlX2Rpc2tfaW9jdGwsCiB9OwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkFUQSBESVNLIERyaXZlciIpOwotCi1zdGF0aWMgaW50IGlkZV9kaXNrX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwOwotCXN0cnVjdCBnZW5kaXNrICpnOwotCi0JLyogc3Ryc3RyKCJmb28iLCAiIikgaXMgbm9uLU5VTEwgKi8KLQlpZiAoIXN0cnN0cigiaWRlLWRpc2siLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykKLQkJZ290byBmYWlsZWQ7Ci0KLQlpZGtwID0ga3phbGxvYyhzaXplb2YoKmlka3ApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlka3ApCi0JCWdvdG8gZmFpbGVkOwotCi0JZyA9IGFsbG9jX2Rpc2tfbm9kZShJREVfRElTS19NSU5PUlMsIGh3aWZfdG9fbm9kZShkcml2ZS0+aHdpZikpOwotCWlmICghZykKLQkJZ290byBvdXRfZnJlZV9pZGtwOwotCi0JaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7Ci0KLQlrcmVmX2luaXQoJmlka3AtPmtyZWYpOwotCi0JaWRrcC0+ZHJpdmUgPSBkcml2ZTsKLQlpZGtwLT5kcml2ZXIgPSAmaWRlZGlza19kcml2ZXI7Ci0JaWRrcC0+ZGlzayA9IGc7Ci0KLQlnLT5wcml2YXRlX2RhdGEgPSAmaWRrcC0+ZHJpdmVyOwotCi0JZHJpdmUtPmRyaXZlcl9kYXRhID0gaWRrcDsKLQotCWlkZWRpc2tfc2V0dXAoZHJpdmUpOwotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpID09IDAgJiYKLQkgICAgKGRyaXZlLT5oZWFkID09IDAgfHwgZHJpdmUtPmhlYWQgPiAxNikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSU5WQUxJRCBHRU9NRVRSWTogJWQgUEhZU0lDQUwgSEVBRFM/XG4iLAotCQkJZHJpdmUtPm5hbWUsIGRyaXZlLT5oZWFkKTsKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKLQl9IGVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfQVRUQUNIOwotCi0JZy0+bWlub3JzID0gSURFX0RJU0tfTUlOT1JTOwotCWctPmRyaXZlcmZzX2RldiA9ICZkcml2ZS0+Z2VuZGV2OwotCWctPmZsYWdzIHw9IEdFTkhEX0ZMX0VYVF9ERVZUOwotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkKLQkJZy0+ZmxhZ3MgPSBHRU5IRF9GTF9SRU1PVkFCTEU7Ci0Jc2V0X2NhcGFjaXR5KGcsIGlkZV9kaXNrX2NhcGFjaXR5KGRyaXZlKSk7Ci0JZy0+Zm9wcyA9ICZpZGVkaXNrX29wczsKLQlhZGRfZGlzayhnKTsKLQlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfaWRrcDoKLQlrZnJlZShpZGtwKTsKLWZhaWxlZDoKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlkZWRpc2tfZXhpdCh2b2lkKQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpZGVkaXNrX2RyaXZlci5nZW5fZHJpdmVyKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaWRlZGlza19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlZGlza19kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BTElBUygiaWRlOiptLWRpc2sqIik7Ci1NT0RVTEVfQUxJQVMoImlkZS1kaXNrIik7Ci1tb2R1bGVfaW5pdChpZGVkaXNrX2luaXQpOwotbW9kdWxlX2V4aXQoaWRlZGlza19leGl0KTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmggYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5oCmluZGV4IGE4MmZhNDMuLmIyMzRiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suaApAQCAtMSwxOSArMSwxMSBAQAogI2lmbmRlZiBfX0lERV9ESVNLX0gKICNkZWZpbmUgX19JREVfRElTS19ICiAKLXN0cnVjdCBpZGVfZGlza19vYmogewotCWlkZV9kcml2ZV90CSpkcml2ZTsKLQlpZGVfZHJpdmVyX3QJKmRyaXZlcjsKLQlzdHJ1Y3QgZ2VuZGlzawkqZGlzazsKLQlzdHJ1Y3Qga3JlZglrcmVmOwotCXVuc2lnbmVkIGludAlvcGVuZXJzOwkvKiBwcm90ZWN0ZWQgYnkgQktMIGZvciBub3cgKi8KLX07CisjaW5jbHVkZSAiaWRlLWdkLmgiCiAKLSNkZWZpbmUgaWRlX2Rpc2tfZyhkaXNrKSBcCi0JY29udGFpbmVyX29mKChkaXNrKS0+cHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgaWRlX2Rpc2tfb2JqLCBkcml2ZXIpCi0KKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQQogLyogaWRlLWRpc2suYyAqLwotc2VjdG9yX3QgaWRlX2Rpc2tfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKik7CitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhX2Rpc2tfb3BzOwogaWRlX2RlY2xfZGV2c2V0KGFkZHJlc3MpOwogaWRlX2RlY2xfZGV2c2V0KG11bHRjb3VudCk7CiBpZGVfZGVjbF9kZXZzZXQobm93ZXJyKTsKQEAgLTIxLDEyICsxMywxNyBAQAogaWRlX2RlY2xfZGV2c2V0KGFjb3VzdGljKTsKIAogLyogaWRlLWRpc2tfaW9jdGwuYyAqLwotaW50IGlkZV9kaXNrX2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworaW50IGlkZV9kaXNrX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCSAgIHVuc2lnbmVkIGxvbmcpOwogCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAvKiBpZGUtZGlza19wcm9jLmMgKi8KIGV4dGVybiBpZGVfcHJvY19lbnRyeV90IGlkZV9kaXNrX3Byb2NbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZV9kaXNrX3NldHRpbmdzW107CiAjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGlkZV9kaXNrX3Byb2MJCU5VTEwKKyNkZWZpbmUgaWRlX2Rpc2tfc2V0dGluZ3MJTlVMTAorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0lERV9ESVNLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCmluZGV4IGE2Y2YxYTAzLi5hNDk2OThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX2lvY3RsLmMKQEAgLTEzLDEyICsxMywxMCBAQAogeyAwIH0KIH07CiAKLWludCBpZGVfZGlza19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK2ludCBpZGVfZGlza19pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhiZGV2LT5iZF9kaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKIAlpbnQgZXJyOwogCiAJZXJyID0gaWRlX3NldHRpbmdfaW9jdGwoZHJpdmUsIGJkZXYsIGNtZCwgYXJnLCBpZGVfZGlza19pb2N0bF9zZXR0aW5ncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKaW5kZXggNDcyNDk3Ni4uMTE0NmY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwpAQCAtNTYsNyArNTYsNyBAQAogCWlkZV9kcml2ZV90KmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKIAlpbnQgbGVuOwogCi0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZGlza19jYXBhY2l0eShkcml2ZSkpOworCWxlbiA9IHNwcmludGYocGFnZSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlX2dkX2NhcGFjaXR5KGRyaXZlKSk7CiAKIAlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKaW5kZXggMDkwMzc4Mi4uY2FjNDMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJCXhjb3VudCA9IGJjb3VudCAmIDB4ZmZmZjsKIAkJCWlmIChpc190cm0yOTApCiAJCQkJeGNvdW50ID0gKCh4Y291bnQgPj4gMikgLSAxKSA8PCAxNjsKLQkJCWlmICh4Y291bnQgPT0gMHgwMDAwKSB7CisJCQllbHNlIGlmICh4Y291bnQgPT0gMHgwMDAwKSB7CiAJCQkJaWYgKGNvdW50KysgPj0gUFJEX0VOVFJJRVMpCiAJCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOwogCQkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoMHg4MDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCBjZjBhYTI1Li5hZWIxYWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC0xNSwxMiArMTUsNiBAQAogICogRG9jdW1lbnRhdGlvbi9pZGUvQ2hhbmdlTG9nLmlkZS1mbG9wcHkuMTk5Ni0yMDAyCiAgKi8KIAotI2RlZmluZSBEUlZfTkFNRSAiaWRlLWZsb3BweSIKLSNkZWZpbmUgUEZYIERSVl9OQU1FICI6ICIKLQotI2RlZmluZSBJREVGTE9QUFlfVkVSU0lPTiAiMS4wMCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00OSwxOSArNDMsNiBAQAogCiAjaW5jbHVkZSAiaWRlLWZsb3BweS5oIgogCi0vKiBtb2R1bGUgcGFyYW1ldGVycyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKLW1vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7Ci0KLS8qIGRlZmluZSB0byBzZWUgZGVidWcgaW5mbyAqLwotI2RlZmluZSBJREVGTE9QUFlfREVCVUdfTE9HCTAKLQotI2lmIElERUZMT1BQWV9ERUJVR19MT0cKLSNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQogLyoKICAqIEFmdGVyIGVhY2ggZmFpbGVkIHBhY2tldCBjb21tYW5kIHdlIGlzc3VlIGEgcmVxdWVzdCBzZW5zZSBjb21tYW5kIGFuZCByZXRyeQogICogdGhlIHBhY2tldCBjb21tYW5kIElERUZMT1BQWV9NQVhfUENfUkVUUklFUyB0aW1lcy4KQEAgLTgzLDQzICs2NCwxMyBAQAogLyogRXJyb3IgY29kZSByZXR1cm5lZCBpbiBycS0+ZXJyb3JzIHRvIHRoZSBoaWdoZXIgcGFydCBvZiB0aGUgZHJpdmVyLiAqLwogI2RlZmluZQlJREVGTE9QUFlfRVJST1JfR0VORVJBTAkJMTAxCiAKLXN0YXRpYyBERUZJTkVfTVVURVgoaWRlZmxvcHB5X3JlZl9tdXRleCk7Ci0KLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9jbGVhbnVwX29iaihzdHJ1Y3Qga3JlZiAqKTsKLQotc3RhdGljIHN0cnVjdCBpZGVfZmxvcHB5X29iaiAqaWRlX2Zsb3BweV9nZXQoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmaWRlZmxvcHB5X3JlZl9tdXRleCk7Ci0JZmxvcHB5ID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9mbG9wcHlfb2JqKTsKLQlpZiAoZmxvcHB5KSB7Ci0JCWlmIChpZGVfZGV2aWNlX2dldChmbG9wcHktPmRyaXZlKSkKLQkJCWZsb3BweSA9IE5VTEw7Ci0JCWVsc2UKLQkJCWtyZWZfZ2V0KCZmbG9wcHktPmtyZWYpOwotCX0KLQltdXRleF91bmxvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCXJldHVybiBmbG9wcHk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcHV0KHN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5KQotewotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0KLQltdXRleF9sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmZmxvcHB5LT5rcmVmLCBpZGVmbG9wcHlfY2xlYW51cF9vYmopOwotCWlkZV9kZXZpY2VfcHV0KGRyaXZlKTsKLQltdXRleF91bmxvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotfQotCiAvKgogICogVXNlZCB0byBmaW5pc2ggc2VydmljaW5nIGEgcmVxdWVzdC4gRm9yIHJlYWQvd3JpdGUgcmVxdWVzdHMsIHdlIHdpbGwgY2FsbAogICogaWRlX2VuZF9yZXF1ZXN0IHRvIHBhc3MgdG8gdGhlIG5leHQgYnVmZmVyLgogICovCi1zdGF0aWMgaW50IGlkZWZsb3BweV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5zZWNzKQorc3RhdGljIGludCBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnNlY3MpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAlpbnQgZXJyb3I7CiAKQEAgLTE2MSwxMiArMTEyLDEyIEBACiAJc3RydWN0IGJpbyAqYmlvID0gcnEtPmJpbzsKIAogCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkKLQkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZHNjKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKIAlpbnQgdXB0b2RhdGUgPSBwYy0+ZXJyb3IgPyAwIDogMTsKIApAQCAtMjAwLDEwICsxNTEsMTAgQEAKIAkJCSAgICAgICAiQWJvcnRpbmcgcmVxdWVzdCFcbiIpOwogCX0KIAotCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIDApOworCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHksCitzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHksCiAJCQkJICAgIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCS8qIHN1cHJlc3MgZXJyb3IgbWVzc2FnZXMgcmVzdWx0aW5nIGZyb20gTWVkaXVtIG5vdCBwcmVzZW50ICovCkBAIC0yMjIsNyArMTczLDcgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxvcHB5X2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCiAJaWYgKGZsb3BweS0+ZmFpbGVkX3BjID09IE5VTEwgJiYKIAkgICAgcGMtPmNbMF0gIT0gR1BDTURfUkVRVUVTVF9TRU5TRSkKQEAgLTI4Niw3ICsyMzcsNyBAQAogCQkJCSAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNlY3RvcikKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaW50IGJsb2NrID0gc2VjdG9yIC8gZmxvcHB5LT5ic19mYWN0b3I7CiAJaW50IGJsb2NrcyA9IHJxLT5ucl9zZWN0b3JzIC8gZmxvcHB5LT5ic19mYWN0b3I7CiAJaW50IGNtZCA9IHJxX2RhdGFfZGlyKHJxKTsKQEAgLTMxMCw3ICsyNjEsNyBAQAogCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9PSzsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAorc3RhdGljIHZvaWQgaWRlZmxvcHB5X2Jsb2NrcGNfY21kKHN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSwKIAkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZGVfaW5pdF9wYyhwYyk7CkBAIC0zMjksMTMgKzI4MCwxMiBAQAogCXBjLT5yZXFfeGZlciA9IHBjLT5idWZfc2l6ZSA9IHJxLT5kYXRhX2xlbjsKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCXN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgYmxvY2tfcykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2Zsb3BweV9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7Ci0JdW5zaWduZWQgbG9uZyBibG9jayA9ICh1bnNpZ25lZCBsb25nKWJsb2NrX3M7CiAKIAlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBkZXY6ICVzLCBjbWQ6IDB4JXgsIGNtZF90eXBlOiAleCwgIgogCQkgICAgICAiZXJyb3JzOiAlZFxuIiwKQEAgLTM1Myw3ICszMDMsNyBAQAogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSS9PIGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CiAKLQkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewpAQCAtMzYxLDExICszMTEsMTEgQEAKIAkJICAgIChycS0+bnJfc2VjdG9ycyAlIGZsb3BweS0+YnNfZmFjdG9yKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHVuc3VwcG9ydGVkIHIvdyBycSBzaXplXG4iLAogCQkJCWRyaXZlLT5uYW1lKTsKLQkJCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCQlwYyA9ICZmbG9wcHktPnF1ZXVlZF9wYzsKLQkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZHJpdmUsIHBjLCBycSwgYmxvY2spOworCQlpZGVmbG9wcHlfY3JlYXRlX3J3X2NtZChkcml2ZSwgcGMsIHJxLCAodW5zaWduZWQgbG9uZylibG9jayk7CiAJfSBlbHNlIGlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewogCQlwYyA9IChzdHJ1Y3QgaWRlX2F0YXBpX3BjICopIHJxLT5idWZmZXI7CiAJfSBlbHNlIGlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKQEAgLTM3Myw3ICszMjMsNyBAQAogCQlpZGVmbG9wcHlfYmxvY2twY19jbWQoZmxvcHB5LCBwYywgcnEpOwogCX0gZWxzZSB7CiAJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCBQRlggInVuc3VwcG9ydGVkIGNvbW1hbmQgaW4gcXVldWUiKTsKLQkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTM5NCw3ICszNDQsNyBAQAogICovCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZmxvcHB5LT5kaXNrOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggKnBhZ2U7CkBAIC00MTAsMTEgKzM2MCwxMSBAQAogCX0KIAogCWlmIChwYy5idWZbM10gJiAweDgwKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX1dQOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19XUDsKIAllbHNlCi0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1dQOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfV1A7CiAKLQlzZXRfZGlza19ybyhkaXNrLCAhIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfV1ApKTsKKwlzZXRfZGlza19ybyhkaXNrLCAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1dQKSk7CiAKIAlwYWdlID0gJnBjLmJ1Zls4XTsKIApAQCAtNDQ1LDcgKzM5NSw5IEBACiAJCQlkcml2ZS0+bmFtZSwgbGJhX2NhcGFjaXR5LCBjYXBhY2l0eSk7CiAJCWZsb3BweS0+YmxvY2tzID0gZmxvcHB5LT5ibG9ja19zaXplID8KIAkJCWNhcGFjaXR5IC8gZmxvcHB5LT5ibG9ja19zaXplIDogMDsKKwkJZHJpdmUtPmNhcGFjaXR5NjQgPSBmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00NTUsNyArNDA3LDcgQEAKICAqLwogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZmxvcHB5LT5kaXNrOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggKmNhcF9kZXNjOwpAQCAtNDY2LDcgKzQxOCw3IEBACiAJZHJpdmUtPmJpb3NfaGVhZCA9IGRyaXZlLT5iaW9zX3NlY3QgPSAwOwogCWZsb3BweS0+YmxvY2tzID0gMDsKIAlmbG9wcHktPmJzX2ZhY3RvciA9IDE7Ci0Jc2V0X2NhcGFjaXR5KGZsb3BweS0+ZGlzaywgMCk7CisJZHJpdmUtPmNhcGFjaXR5NjQgPSAwOwogCiAJaWRlX2Zsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoJnBjKTsKIAlpZiAoaWRlX3F1ZXVlX3BjX3RhaWwoZHJpdmUsIGRpc2ssICZwYykpIHsKQEAgLTUyMyw2ICs0NzUsOCBAQAogCQkJCQkgICAgICAgIm5vbiA1MTIgYnl0ZXMgYmxvY2sgc2l6ZSBub3QgIgogCQkJCQkgICAgICAgImZ1bGx5IHN1cHBvcnRlZFxuIiwKIAkJCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKKwkJCQlkcml2ZS0+Y2FwYWNpdHk2NCA9CisJCQkJCWZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3I7CiAJCQkJcmMgPSAwOwogCQkJfQogCQkJYnJlYWs7CkBAIC01NDcsMjEgKzUwMSwxMiBAQAogCWlmICghKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19DTElLX0RSSVZFKSkKIAkJKHZvaWQpIGlkZV9mbG9wcHlfZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZShkcml2ZSk7CiAKLQlzZXRfY2FwYWNpdHkoZGlzaywgZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJzX2ZhY3Rvcik7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKLXNlY3Rvcl90IGlkZV9mbG9wcHlfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBjYXBhY2l0eSA9IGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3I7Ci0KLQlyZXR1cm4gY2FwYWNpdHk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5KQoteworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwogCiAJZHJpdmUtPnBjX2NhbGxiYWNrCSA9IGlkZV9mbG9wcHlfY2FsbGJhY2s7CkBAIC01OTIsMjUyICs1MzcsNDIgQEAKIAkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0NMSUtfRFJJVkU7CiAJCS8qIElPTUVHQSBDbGlrISBkcml2ZXMgZG8gbm90IHN1cHBvcnQgbG9jay91bmxvY2sgY29tbWFuZHMgKi8KLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19OT19ET09STE9DSzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwogCX0KIAogCSh2b2lkKSBpZGVfZmxvcHB5X2dldF9jYXBhY2l0eShkcml2ZSk7CiAKIAlpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGZsb3BweS0+ZHJpdmVyKTsKKworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0FUVEFDSDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZW1vdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9mbHVzaChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBmbG9wcHktPmRpc2s7Ci0KLQlpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihkcml2ZSwgZmxvcHB5LT5kcml2ZXIpOwotCi0JZGVsX2dlbmRpc2soZyk7Ci0KLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfY2xlYW51cF9vYmooc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgaW50IGlkZV9mbG9wcHlfaW5pdF9tZWRpYShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gdG9faWRlX2RydihrcmVmLCBpZGVfZmxvcHB5X29iaik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGZsb3BweS0+ZGlzazsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JZy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlwdXRfZGlzayhnKTsKLQlrZnJlZShmbG9wcHkpOwotfQotCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfcHJvYmUoaWRlX2RyaXZlX3QgKik7Ci0KLXN0YXRpYyBpZGVfZHJpdmVyX3QgaWRlZmxvcHB5X2RyaXZlciA9IHsKLQkuZ2VuX2RyaXZlciA9IHsKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkubmFtZQkJPSAiaWRlLWZsb3BweSIsCi0JCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKLQl9LAotCS5wcm9iZQkJCT0gaWRlX2Zsb3BweV9wcm9iZSwKLQkucmVtb3ZlCQkJPSBpZGVfZmxvcHB5X3JlbW92ZSwKLQkudmVyc2lvbgkJPSBJREVGTE9QUFlfVkVSU0lPTiwKLQkuZG9fcmVxdWVzdAkJPSBpZGVmbG9wcHlfZG9fcmVxdWVzdCwKLQkuZW5kX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2VuZF9yZXF1ZXN0LAotCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZV9mbG9wcHlfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRlX2Zsb3BweV9zZXR0aW5ncywKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBpZGVmbG9wcHlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlOwogCWludCByZXQgPSAwOwogCi0JZmxvcHB5ID0gaWRlX2Zsb3BweV9nZXQoZGlzayk7Ci0JaWYgKCFmbG9wcHkpCi0JCXJldHVybiAtRU5YSU87CisJaWYgKGlkZV9kb190ZXN0X3VuaXRfcmVhZHkoZHJpdmUsIGRpc2spKQorCQlpZGVfZG9fc3RhcnRfc3RvcChkcml2ZSwgZGlzaywgMSk7CiAKLQlkcml2ZSA9IGZsb3BweS0+ZHJpdmU7CisJcmV0ID0gaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoZHJpdmUpOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJc2V0X2NhcGFjaXR5KGRpc2ssIGlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOwogCi0JZmxvcHB5LT5vcGVuZXJzKys7Ci0KLQlpZiAoZmxvcHB5LT5vcGVuZXJzID09IDEpIHsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwotCQkvKiBKdXN0IGluIGNhc2UgKi8KLQotCQlpZiAoaWRlX2RvX3Rlc3RfdW5pdF9yZWFkeShkcml2ZSwgZGlzaykpCi0JCQlpZGVfZG9fc3RhcnRfc3RvcChkcml2ZSwgZGlzaywgMSk7Ci0KLQkJaWYgKGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5KGRyaXZlKQotCQkgICAmJiAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSA9PSAwCi0JCSAgICAvKgotCQkgICAgICogQWxsb3cgT19OREVMQVkgdG8gb3BlbiBhIGRyaXZlIHdpdGhvdXQgYSBkaXNrLCBvciB3aXRoIGFuCi0JCSAgICAgKiB1bnJlYWRhYmxlIGRpc2ssIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgZm9ybWF0IGNhcGFjaXR5Ci0JCSAgICAgKiBvZiB0aGUgZHJpdmUgb3IgYmVnaW4gdGhlIGZvcm1hdCAtIFNhbQotCQkgICAgICovCi0JCSAgICApIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dF9wdXRfZmxvcHB5OwotCQl9Ci0KLQkJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfV1ApICYmIChmaWxwLT5mX21vZGUgJiAyKSkgewotCQkJcmV0ID0gLUVST0ZTOwotCQkJZ290byBvdXRfcHV0X2Zsb3BweTsKLQkJfQotCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKLQkJaWRlX3NldF9tZWRpYV9sb2NrKGRyaXZlLCBkaXNrLCAxKTsKLQkJY2hlY2tfZGlza19jaGFuZ2UoaW5vZGUtPmlfYmRldik7Ci0JfSBlbHNlIGlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXRfcHV0X2Zsb3BweTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLW91dF9wdXRfZmxvcHB5OgotCWZsb3BweS0+b3BlbmVycy0tOwotCWlkZV9mbG9wcHlfcHV0KGZsb3BweSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpZGVmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChmbG9wcHktPm9wZW5lcnMgPT0gMSkgewotCQlpZGVfc2V0X21lZGlhX2xvY2soZHJpdmUsIGRpc2ssIDApOwotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7Ci0JfQotCi0JZmxvcHB5LT5vcGVuZXJzLS07Ci0KLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLAotCQkJCQkJICAgICBpZGVfZmxvcHB5X29iaik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKLQotCWdlby0+aGVhZHMgPSBkcml2ZS0+Ymlvc19oZWFkOwotCWdlby0+c2VjdG9ycyA9IGRyaXZlLT5iaW9zX3NlY3Q7Ci0JZ2VvLT5jeWxpbmRlcnMgPSAodTE2KWRyaXZlLT5iaW9zX2N5bDsgLyogdHJ1bmNhdGUgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVmbG9wcHlfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZmxvcHB5X29iaik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKLQlpbnQgcmV0OwotCi0JLyogZG8gbm90IHNjYW4gcGFydGl0aW9ucyB0d2ljZSBpZiB0aGlzIGlzIGEgcmVtb3ZhYmxlIGRldmljZSAqLwotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0FUVEFDSCkgewotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0ID0gISEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX01FRElBX0NIQU5HRUQpOwotCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX01FRElBX0NIQU5HRUQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpZGVmbG9wcHlfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9mbG9wcHlfb2JqKTsKLQlzZXRfY2FwYWNpdHkoZGlzaywgaWRlX2Zsb3BweV9jYXBhY2l0eShmbG9wcHktPmRyaXZlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlZmxvcHB5X29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQkJPSBpZGVmbG9wcHlfb3BlbiwKLQkucmVsZWFzZQkJPSBpZGVmbG9wcHlfcmVsZWFzZSwKLQkuaW9jdGwJCQk9IGlkZV9mbG9wcHlfaW9jdGwsCi0JLmdldGdlbwkJCT0gaWRlZmxvcHB5X2dldGdlbywKLQkubWVkaWFfY2hhbmdlZAkJPSBpZGVmbG9wcHlfbWVkaWFfY2hhbmdlZCwKLQkucmV2YWxpZGF0ZV9kaXNrCT0gaWRlZmxvcHB5X3JldmFsaWRhdGVfZGlzaworY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhcGlfZGlza19vcHMgPSB7CisJLmNoZWNrCQk9IGlkZV9jaGVja19hdGFwaV9kZXZpY2UsCisJLmdldF9jYXBhY2l0eQk9IGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5LAorCS5zZXR1cAkJPSBpZGVfZmxvcHB5X3NldHVwLAorCS5mbHVzaAkJPSBpZGVfZmxvcHB5X2ZsdXNoLAorCS5pbml0X21lZGlhCT0gaWRlX2Zsb3BweV9pbml0X21lZGlhLAorCS5zZXRfZG9vcmxvY2sJPSBpZGVfc2V0X21lZGlhX2xvY2ssCisJLmRvX3JlcXVlc3QJPSBpZGVfZmxvcHB5X2RvX3JlcXVlc3QsCisJLmVuZF9yZXF1ZXN0CT0gaWRlX2Zsb3BweV9lbmRfcmVxdWVzdCwKKwkuaW9jdGwJCT0gaWRlX2Zsb3BweV9pb2N0bCwKIH07Ci0KLXN0YXRpYyBpbnQgaWRlX2Zsb3BweV9wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHk7Ci0Jc3RydWN0IGdlbmRpc2sgKmc7Ci0KLQlpZiAoIXN0cnN0cigiaWRlLWZsb3BweSIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9mbG9wcHkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKCFpZGVfY2hlY2tfYXRhcGlfZGV2aWNlKGRyaXZlLCBEUlZfTkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mICIKLQkJICAgICAgIERSVl9OQU1FICJcbiIsIGRyaXZlLT5uYW1lKTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCWZsb3BweSA9IGt6YWxsb2Moc2l6ZW9mKGlkZWZsb3BweV9mbG9wcHlfdCksIEdGUF9LRVJORUwpOwotCWlmICghZmxvcHB5KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBDYW4ndCBhbGxvY2F0ZSBhIGZsb3BweSBzdHJ1Y3R1cmVcbiIsCi0JCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQotCWcgPSBhbGxvY19kaXNrKDEgPDwgUEFSVE5fQklUUyk7Ci0JaWYgKCFnKQotCQlnb3RvIG91dF9mcmVlX2Zsb3BweTsKLQotCWlkZV9pbml0X2Rpc2soZywgZHJpdmUpOwotCi0Ja3JlZl9pbml0KCZmbG9wcHktPmtyZWYpOwotCi0JZmxvcHB5LT5kcml2ZSA9IGRyaXZlOwotCWZsb3BweS0+ZHJpdmVyID0gJmlkZWZsb3BweV9kcml2ZXI7Ci0JZmxvcHB5LT5kaXNrID0gZzsKLQotCWctPnByaXZhdGVfZGF0YSA9ICZmbG9wcHktPmRyaXZlcjsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGZsb3BweTsKLQotCWRyaXZlLT5kZWJ1Z19tYXNrID0gZGVidWdfbWFzazsKLQotCWlkZWZsb3BweV9zZXR1cChkcml2ZSwgZmxvcHB5KTsKLQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7Ci0KLQlnLT5taW5vcnMgPSAxIDw8IFBBUlROX0JJVFM7Ci0JZy0+ZHJpdmVyZnNfZGV2ID0gJmRyaXZlLT5nZW5kZXY7Ci0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKQotCQlnLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQlnLT5mb3BzID0gJmlkZWZsb3BweV9vcHM7Ci0JYWRkX2Rpc2soZyk7Ci0JcmV0dXJuIDA7Ci0KLW91dF9mcmVlX2Zsb3BweToKLQlrZnJlZShmbG9wcHkpOwotZmFpbGVkOgotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaWRlZmxvcHB5X2V4aXQodm9pZCkKLXsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaWRlZmxvcHB5X2RyaXZlci5nZW5fZHJpdmVyKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaWRlZmxvcHB5X2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICIgZHJpdmVyICIgSURFRkxPUFBZX1ZFUlNJT04gIlxuIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlZmxvcHB5X2RyaXZlci5nZW5fZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FMSUFTKCJpZGU6Km0tZmxvcHB5KiIpOwotTU9EVUxFX0FMSUFTKCJpZGUtZmxvcHB5Iik7Ci1tb2R1bGVfaW5pdChpZGVmbG9wcHlfaW5pdCk7Ci1tb2R1bGVfZXhpdChpZGVmbG9wcHlfZXhpdCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFUQVBJIEZMT1BQWSBEcml2ZXIiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5oIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5oCmluZGV4IDE3Y2Y4NjUuLmMxNzEyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmgKQEAgLTEsMzcgKzEsOSBAQAogI2lmbmRlZiBfX0lERV9GTE9QUFlfSAogI2RlZmluZSBfX0lERV9GTE9QUFlfSAogCi0vKgotICogTW9zdCBvZiBvdXIgZ2xvYmFsIGRhdGEgd2hpY2ggd2UgbmVlZCB0byBzYXZlIGV2ZW4gYXMgd2UgbGVhdmUgdGhlIGRyaXZlcgotICogZHVlIHRvIGFuIGludGVycnVwdCBvciBhIHRpbWVyIGV2ZW50IGlzIHN0b3JlZCBpbiBhIHZhcmlhYmxlIG9mIHR5cGUKLSAqIGlkZWZsb3BweV9mbG9wcHlfdCwgZGVmaW5lZCBiZWxvdy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogewotCWlkZV9kcml2ZV90CSpkcml2ZTsKLQlpZGVfZHJpdmVyX3QJKmRyaXZlcjsKLQlzdHJ1Y3QgZ2VuZGlzawkqZGlzazsKLQlzdHJ1Y3Qga3JlZglrcmVmOwotCXVuc2lnbmVkIGludAlvcGVuZXJzOwkvKiBwcm90ZWN0ZWQgYnkgQktMIGZvciBub3cgKi8KKyNpbmNsdWRlICJpZGUtZ2QuaCIKIAotCS8qIExhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOwotCS8qIHVzZWQgZm9yIGJsa197ZnMscGN9X3JlcXVlc3QoKSByZXF1ZXN0cyAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgcXVldWVkX3BjOwotCi0JLyogTGFzdCBlcnJvciBpbmZvcm1hdGlvbiAqLwotCXU4IHNlbnNlX2tleSwgYXNjLCBhc2NxOwotCi0JaW50IHByb2dyZXNzX2luZGljYXRpb247Ci0KLQkvKiBEZXZpY2UgaW5mb3JtYXRpb24gKi8KLQkvKiBDdXJyZW50IGZvcm1hdCAqLwotCWludCBibG9ja3MsIGJsb2NrX3NpemUsIGJzX2ZhY3RvcjsKLQkvKiBMYXN0IGZvcm1hdCBjYXBhY2l0eSBkZXNjcmlwdG9yICovCi0JdTggY2FwX2Rlc2NbOF07Ci0JLyogQ29weSBvZiB0aGUgZmxleGlibGUgZGlzayBwYWdlICovCi0JdTggZmxleGlibGVfZGlza19wYWdlWzMyXTsKLX0gaWRlZmxvcHB5X2Zsb3BweV90OwotCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEFQSQogLyoKICAqIFBhZ2VzIG9mIHRoZSBTRUxFQ1QgU0VOU0UgLyBNT0RFIFNFTlNFIHBhY2tldCBjb21tYW5kcy4KICAqIFNlZSBTRkYtODA3MGkgc3BlYy4KQEAgLTQ2LDE3ICsxOCwyMiBAQAogI2RlZmluZSBJREVGTE9QUFlfSU9DVExfRk9STUFUX0dFVF9QUk9HUkVTUwkweDQ2MDMKIAogLyogaWRlLWZsb3BweS5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhcGlfZGlza19vcHM7CiB2b2lkIGlkZV9mbG9wcHlfY3JlYXRlX21vZGVfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwgdTgpOwogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwotc2VjdG9yX3QgaWRlX2Zsb3BweV9jYXBhY2l0eShpZGVfZHJpdmVfdCAqKTsKIAogLyogaWRlLWZsb3BweV9pb2N0bC5jICovCi1pbnQgaWRlX2Zsb3BweV9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworaW50IGlkZV9mbG9wcHlfaW9jdGwoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJICAgICB1bnNpZ25lZCBsb25nKTsKIAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogLyogaWRlLWZsb3BweV9wcm9jLmMgKi8KIGV4dGVybiBpZGVfcHJvY19lbnRyeV90IGlkZV9mbG9wcHlfcHJvY1tdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgaWRlX2Zsb3BweV9zZXR0aW5nc1tdOwogI2VuZGlmCisjZWxzZQorI2RlZmluZSBpZGVfZmxvcHB5X3Byb2MJCU5VTEwKKyNkZWZpbmUgaWRlX2Zsb3BweV9zZXR0aW5ncwlOVUxMCisjZW5kaWYKIAogI2VuZGlmIC8qX19JREVfRkxPUFBZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYwppbmRleCBhM2E3YTA4Li40MDllNGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCkBAIC0zMyw3ICszMyw3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfZm9ybWF0X2NhcGFjaXRpZXMoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgX191c2VyICphcmcpCiB7Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggaGVhZGVyX2xlbiwgZGVzY19jbnQ7CiAJaW50IGksIGJsb2NrcywgbGVuZ3RoLCB1X2FycmF5X3NpemUsIHVfaW5kZXg7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9zZnJwX2JpdChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAKIAlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19TUkZQOwpAQCAtMTMyLDE3ICsxMzIsMTcgQEAKIAogc3RhdGljIGludCBpZGVfZmxvcHB5X2Zvcm1hdF91bml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IF9fdXNlciAqYXJnKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCWludCBibG9ja3MsIGxlbmd0aCwgZmxhZ3MsIGVyciA9IDA7CiAKIAlpZiAoZmxvcHB5LT5vcGVuZXJzID4gMSkgewogCQkvKiBEb24ndCBmb3JtYXQgaWYgc29tZW9uZSBpcyB1c2luZyB0aGUgZGlzayAqLwotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwogCiAJLyoKIAkgKiBTZW5kIEFUQVBJX0ZPUk1BVF9VTklUIHRvIHRoZSBkcml2ZS4KQEAgLTE3NCw3ICsxNzQsNyBAQAogCiBvdXQ6CiAJaWYgKGVycikKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2Zvcm1hdF9wcm9ncmVzcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgcHJvZ3Jlc3NfaW5kaWNhdGlvbiA9IDB4MTAwMDA7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogc3RhdGljIGludCBpZGVfZmxvcHB5X2xvY2tkb29yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIGludCBjbWQpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZmxvcHB5LT5kaXNrOwogCWludCBwcmV2ZW50ID0gKGFyZyAmJiBjbWQgIT0gQ0RST01FSkVDVCkgPyAxIDogMDsKIApAQCAtMjYwLDEzICsyNjAsMTAgQEAKIAl9CiB9CiAKLWludCBpZGVfZmxvcHB5X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitpbnQgaWRlX2Zsb3BweV9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssCi0JCQkJCQkgICAgIGlkZV9mbG9wcHlfb2JqKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMKaW5kZXggNzZmMGM2Yy4uM2VjNzYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMKQEAgLTksNyArOSw3IEBACiAJaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwogCWludCBsZW47CiAKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9mbG9wcHlfY2FwYWNpdHkoZHJpdmUpKTsKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOwogCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ODk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0wLDAgKzEsMzk4IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorCisjaWYgIWRlZmluZWQoQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUKQorI2RlZmluZSBJREVfRElTS19NSU5PUlMJCSgxIDw8IFBBUlROX0JJVFMpCisjZWxzZQorI2RlZmluZSBJREVfRElTS19NSU5PUlMJCTAKKyNlbmRpZgorCisjaW5jbHVkZSAiaWRlLWRpc2suaCIKKyNpbmNsdWRlICJpZGUtZmxvcHB5LmgiCisKKyNkZWZpbmUgSURFX0dEX1ZFUlNJT04JIjEuMTgiCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWJ1Z19tYXNrOworbW9kdWxlX3BhcmFtKGRlYnVnX21hc2ssIHVsb25nLCAwNjQ0KTsKKworc3RhdGljIERFRklORV9NVVRFWChpZGVfZGlza19yZWZfbXV0ZXgpOworCitzdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICopOworCitzdGF0aWMgc3RydWN0IGlkZV9kaXNrX29iaiAqaWRlX2Rpc2tfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlpZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJaWYgKGlka3ApIHsKKwkJaWYgKGlkZV9kZXZpY2VfZ2V0KGlka3AtPmRyaXZlKSkKKwkJCWlka3AgPSBOVUxMOworCQllbHNlCisJCQlrcmVmX2dldCgmaWRrcC0+a3JlZik7CisJfQorCW11dGV4X3VubG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlyZXR1cm4gaWRrcDsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHV0KHN0cnVjdCBpZGVfZGlza19vYmogKmlka3ApCit7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwltdXRleF9sb2NrKCZpZGVfZGlza19yZWZfbXV0ZXgpOworCWtyZWZfcHV0KCZpZGtwLT5rcmVmLCBpZGVfZGlza19yZWxlYXNlKTsKKwlpZGVfZGV2aWNlX3B1dChkcml2ZSk7CisJbXV0ZXhfdW5sb2NrKCZpZGVfZGlza19yZWZfbXV0ZXgpOworfQorCitzZWN0b3JfdCBpZGVfZ2RfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBkcml2ZS0+Y2FwYWNpdHk2NDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfcHJvYmUoaWRlX2RyaXZlX3QgKik7CisKK3N0YXRpYyB2b2lkIGlkZV9nZF9yZW1vdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOworCisJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7CisKKwlkZWxfZ2VuZGlzayhnKTsKKworCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCisJaWRlX2Rpc2tfcHV0KGlka3ApOworfQorCitzdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSB0b19pZGVfZHJ2KGtyZWYsIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisJc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOworCisJZHJpdmUtPmRpc2tfb3BzID0gTlVMTDsKKwlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcHV0X2Rpc2soZyk7CisJa2ZyZWUoaWRrcCk7Cit9CisKKy8qCisgKiBPbiBIUEEgZHJpdmVzIHRoZSBjYXBhY2l0eSBuZWVkcyB0byBiZQorICogcmVpbml0aWxpemVkIG9uIHJlc3VtZSBvdGhlcndpc2UgdGhlIGRpc2sKKyAqIGNhbiBub3QgYmUgdXNlZCBhbmQgYSBoYXJkIHJlc2V0IGlzIHJlcXVpcmVkCisgKi8KK3N0YXRpYyB2b2lkIGlkZV9nZF9yZXN1bWUoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoZHJpdmUtPmlkKSkKKwkJKHZvaWQpZHJpdmUtPmRpc2tfb3BzLT5nZXRfY2FwYWNpdHkoZHJpdmUpOworfQorCitzdGF0aWMgdm9pZCBpZGVfZ2Rfc2h1dGRvd24oaWRlX2RyaXZlX3QgKmRyaXZlKQoreworI2lmZGVmCUNPTkZJR19BTFBIQQorCS8qIE9uIEFscGhhLCBoYWx0KDgpIGRvZXNuJ3QgYWN0dWFsbHkgdHVybiB0aGUgbWFjaGluZSBvZmYsCisJICAgaXQgcHV0cyB5b3UgaW50byB0aGUgc29ydCBvZiBmaXJtd2FyZSBtb25pdG9yLiBUeXBpY2FsbHksCisJICAgaXQncyB1c2VkIHRvIGJvb3QgYW5vdGhlciBrZXJuZWwgaW1hZ2UsIHNvIGl0J3Mgbm90IG11Y2gKKwkgICBkaWZmZXJlbnQgZnJvbSByZWJvb3QoOCkuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0bworCSAgIHNwaW4gZG93biB0aGUgZGlzayBpbiB0aGlzIGNhc2UsIGVzcGVjaWFsbHkgc2luY2UgQWxwaGEKKwkgICBmaXJtd2FyZSBkb2Vzbid0IGhhbmRsZSBkaXNrcyBpbiBzdGFuZGJ5IG1vZGUgcHJvcGVybHkuCisJICAgT24gdGhlIG90aGVyIGhhbmQsIGl0J3MgcmVhc29uYWJseSBzYWZlIHRvIHR1cm4gdGhlIHBvd2VyCisJICAgb2ZmIHdoZW4gdGhlIHNodXRkb3duIHByb2Nlc3MgcmVhY2hlcyB0aGUgZmlybXdhcmUgcHJvbXB0LAorCSAgIGFzIHRoZSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0YWtlcyByYXRoZXIgbG9uZyB0aW1lIC0KKwkgICBhdCBsZWFzdCAxMCBzZWNvbmRzLCB3aGljaCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IKKwkgICB0aGUgZGlzayB0byBleHBpcmUgaXRzIHdyaXRlIGNhY2hlLiAqLworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1BPV0VSX09GRikgeworI2Vsc2UKKwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SRVNUQVJUKSB7CisjZW5kaWYKKwkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJTaHV0ZG93bjogJXNcbiIsIGRyaXZlLT5uYW1lKTsKKworCWRyaXZlLT5nZW5kZXYuYnVzLT5zdXNwZW5kKCZkcml2ZS0+Z2VuZGV2LCBQTVNHX1NVU1BFTkQpOworfQorCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX2Rpc2tfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgPyBpZGVfZGlza19wcm9jIDogaWRlX2Zsb3BweV9wcm9jOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqaWRlX2Rpc2tfcHJvY19kZXZzZXRzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgPyBpZGVfZGlza19zZXR0aW5ncworCQkJCQkgIDogaWRlX2Zsb3BweV9zZXR0aW5nczsKK30KKyNlbmRpZgorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9nZF9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJIHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3Qgc2VjdG9yKQoreworCXJldHVybiBkcml2ZS0+ZGlza19vcHMtPmRvX3JlcXVlc3QoZHJpdmUsIHJxLCBzZWN0b3IpOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2VjcykKK3sKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5yc2Vjcyk7Cit9CisKK3N0YXRpYyBpZGVfZHJpdmVyX3QgaWRlX2dkX2RyaXZlciA9IHsKKwkuZ2VuX2RyaXZlciA9IHsKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubmFtZQkJPSAiaWRlLWdkIiwKKwkJLmJ1cwkJPSAmaWRlX2J1c190eXBlLAorCX0sCisJLnByb2JlCQkJPSBpZGVfZ2RfcHJvYmUsCisJLnJlbW92ZQkJCT0gaWRlX2dkX3JlbW92ZSwKKwkucmVzdW1lCQkJPSBpZGVfZ2RfcmVzdW1lLAorCS5zaHV0ZG93bgkJPSBpZGVfZ2Rfc2h1dGRvd24sCisJLnZlcnNpb24JCT0gSURFX0dEX1ZFUlNJT04sCisJLmRvX3JlcXVlc3QJCT0gaWRlX2dkX2RvX3JlcXVlc3QsCisJLmVuZF9yZXF1ZXN0CQk9IGlkZV9nZF9lbmRfcmVxdWVzdCwKKwkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAorI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworCS5wcm9jX2VudHJpZXMJCT0gaWRlX2Rpc2tfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX2Rpc2tfcHJvY19kZXZzZXRzLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGlkZV9nZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwOworCWlkZV9kcml2ZV90ICpkcml2ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlka3AgPSBpZGVfZGlza19nZXQoZGlzayk7CisJaWYgKGlka3AgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCWRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKworCWlka3AtPm9wZW5lcnMrKzsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpICYmIGlka3AtPm9wZW5lcnMgPT0gMSkgeworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQkvKiBKdXN0IGluIGNhc2UgKi8KKworCQlyZXQgPSBkcml2ZS0+ZGlza19vcHMtPmluaXRfbWVkaWEoZHJpdmUsIGRpc2spOworCisJCS8qCisJCSAqIEFsbG93IE9fTkRFTEFZIHRvIG9wZW4gYSBkcml2ZSB3aXRob3V0IGEgZGlzaywgb3Igd2l0aCBhbgorCQkgKiB1bnJlYWRhYmxlIGRpc2ssIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgZm9ybWF0IGNhcGFjaXR5CisJCSAqIG9mIHRoZSBkcml2ZSBvciBiZWdpbiB0aGUgZm9ybWF0IC0gU2FtCisJCSAqLworCQlpZiAocmV0ICYmIChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpID09IDApIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dF9wdXRfaWRrcDsKKwkJfQorCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XUCkgJiYgKGZpbHAtPmZfbW9kZSAmIDIpKSB7CisJCQlyZXQgPSAtRVJPRlM7CisJCQlnb3RvIG91dF9wdXRfaWRrcDsKKwkJfQorCisJCS8qCisJCSAqIElnbm9yZSB0aGUgcmV0dXJuIGNvZGUgZnJvbSBkb29yX2xvY2ssCisJCSAqIHNpbmNlIHRoZSBvcGVuKCkgaGFzIGFscmVhZHkgc3VjY2VlZGVkLAorCQkgKiBhbmQgdGhlIGRvb3JfbG9jayBpcyBpcnJlbGV2YW50IGF0IHRoaXMgcG9pbnQuCisJCSAqLworCQlkcml2ZS0+ZGlza19vcHMtPnNldF9kb29ybG9jayhkcml2ZSwgZGlzaywgMSk7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CisJCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOworCX0gZWxzZSBpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1MpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9wdXRfaWRrcDsKKwl9CisJcmV0dXJuIDA7CisKK291dF9wdXRfaWRrcDoKKwlpZGtwLT5vcGVuZXJzLS07CisJaWRlX2Rpc2tfcHV0KGlka3ApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKKwkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKKwkJZHJpdmUtPmRpc2tfb3BzLT5zZXRfZG9vcmxvY2soZHJpdmUsIGRpc2ssIDApOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCX0KKworCWlka3AtPm9wZW5lcnMtLTsKKworCWlkZV9kaXNrX3B1dChpZGtwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJZ2VvLT5oZWFkcyA9IGRyaXZlLT5iaW9zX2hlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZHJpdmUtPmJpb3Nfc2VjdDsKKwlnZW8tPmN5bGluZGVycyA9ICh1MTYpZHJpdmUtPmJpb3NfY3lsOyAvKiB0cnVuY2F0ZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKwlpbnQgcmV0OworCisJLyogZG8gbm90IHNjYW4gcGFydGl0aW9ucyB0d2ljZSBpZiB0aGlzIGlzIGEgcmVtb3ZhYmxlIGRldmljZSAqLworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0FUVEFDSCkgeworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQpOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19NRURJQV9DSEFOR0VEOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlzZXRfY2FwYWNpdHkoZGlzaywgaWRlX2dkX2NhcGFjaXR5KGlka3AtPmRyaXZlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5pb2N0bChkcml2ZSwgaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVfZ2Rfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCQk9IGlkZV9nZF9vcGVuLAorCS5yZWxlYXNlCQk9IGlkZV9nZF9yZWxlYXNlLAorCS5pb2N0bAkJCT0gaWRlX2dkX2lvY3RsLAorCS5nZXRnZW8JCQk9IGlkZV9nZF9nZXRnZW8sCisJLm1lZGlhX2NoYW5nZWQJCT0gaWRlX2dkX21lZGlhX2NoYW5nZWQsCisJLnJldmFsaWRhdGVfZGlzawk9IGlkZV9nZF9yZXZhbGlkYXRlX2Rpc2sKK307CisKK3N0YXRpYyBpbnQgaWRlX2dkX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzICpkaXNrX29wcyA9IE5VTEw7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKKwlzdHJ1Y3QgZ2VuZGlzayAqZzsKKworCS8qIHN0cnN0cigiZm9vIiwgIiIpIGlzIG5vbi1OVUxMICovCisJaWYgKCFzdHJzdHIoImlkZS1nZCIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKKwkJZ290byBmYWlsZWQ7CisKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCWRpc2tfb3BzID0gJmlkZV9hdGFfZGlza19vcHM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQVBJCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5KQorCQlkaXNrX29wcyA9ICZpZGVfYXRhcGlfZGlza19vcHM7CisjZW5kaWYKKwlpZiAoZGlza19vcHMgPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAoZGlza19vcHMtPmNoZWNrKGRyaXZlLCBEUlZfTkFNRSkgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlclxuIiwKKwkJCWRyaXZlLT5uYW1lKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWRrcCA9IGt6YWxsb2Moc2l6ZW9mKCppZGtwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZGtwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW4ndCBhbGxvY2F0ZSBhIGRpc2sgc3RydWN0dXJlXG4iLAorCQkJZHJpdmUtPm5hbWUpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlnID0gYWxsb2NfZGlza19ub2RlKElERV9ESVNLX01JTk9SUywgaHdpZl90b19ub2RlKGRyaXZlLT5od2lmKSk7CisJaWYgKCFnKQorCQlnb3RvIG91dF9mcmVlX2lka3A7CisKKwlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKKworCWtyZWZfaW5pdCgmaWRrcC0+a3JlZik7CisKKwlpZGtwLT5kcml2ZSA9IGRyaXZlOworCWlka3AtPmRyaXZlciA9ICZpZGVfZ2RfZHJpdmVyOworCWlka3AtPmRpc2sgPSBnOworCisJZy0+cHJpdmF0ZV9kYXRhID0gJmlka3AtPmRyaXZlcjsKKworCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGlka3A7CisJZHJpdmUtPmRlYnVnX21hc2sgPSBkZWJ1Z19tYXNrOworCWRyaXZlLT5kaXNrX29wcyA9IGRpc2tfb3BzOworCisJZGlza19vcHMtPnNldHVwKGRyaXZlKTsKKworCXNldF9jYXBhY2l0eShnLCBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKKworCWctPm1pbm9ycyA9IElERV9ESVNLX01JTk9SUzsKKwlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKKwlnLT5mbGFncyB8PSBHRU5IRF9GTF9FWFRfREVWVDsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpCisJCWctPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCWctPmZvcHMgPSAmaWRlX2dkX29wczsKKwlhZGRfZGlzayhnKTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaWRrcDoKKwlrZnJlZShpZGtwKTsKK2ZhaWxlZDoKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2luaXQgaWRlX2dkX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICIgZHJpdmVyICIgSURFX0dEX1ZFUlNJT04gIlxuIik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlX2dkX2RyaXZlci5nZW5fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlkZV9nZF9leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmlkZV9nZF9kcml2ZXIuZ2VuX2RyaXZlcik7Cit9CisKK01PRFVMRV9BTElBUygiaWRlOiptLWRpc2sqIik7CitNT0RVTEVfQUxJQVMoImlkZS1kaXNrIik7CitNT0RVTEVfQUxJQVMoImlkZToqbS1mbG9wcHkqIik7CitNT0RVTEVfQUxJQVMoImlkZS1mbG9wcHkiKTsKK21vZHVsZV9pbml0KGlkZV9nZF9pbml0KTsKK21vZHVsZV9leGl0KGlkZV9nZF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiZ2VuZXJpYyBBVEEvQVRBUEkgZGlzayBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oIGIvZHJpdmVycy9pZGUvaWRlLWdkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzZDEwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19JREVfR0RfSAorI2RlZmluZSBfX0lERV9HRF9ICisKKyNkZWZpbmUgRFJWX05BTUUgImlkZS1nZCIKKyNkZWZpbmUgUEZYIERSVl9OQU1FICI6ICIKKworLyogZGVmaW5lIHRvIHNlZSBkZWJ1ZyBpbmZvICovCisjZGVmaW5lIElERV9HRF9ERUJVR19MT0cJMAorCisjaWYgSURFX0dEX0RFQlVHX0xPRworI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZWxzZQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdHJ1Y3QgaWRlX2Rpc2tfb2JqIHsKKwlpZGVfZHJpdmVfdAkqZHJpdmU7CisJaWRlX2RyaXZlcl90CSpkcml2ZXI7CisJc3RydWN0IGdlbmRpc2sJKmRpc2s7CisJc3RydWN0IGtyZWYJa3JlZjsKKwl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCisKKwkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKKwkvKiB1c2VkIGZvciBibGtfe2ZzLHBjfV9yZXF1ZXN0KCkgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKKworCS8qIExhc3QgZXJyb3IgaW5mb3JtYXRpb24gKi8KKwl1OCBzZW5zZV9rZXksIGFzYywgYXNjcTsKKworCWludCBwcm9ncmVzc19pbmRpY2F0aW9uOworCisJLyogRGV2aWNlIGluZm9ybWF0aW9uICovCisJLyogQ3VycmVudCBmb3JtYXQgKi8KKwlpbnQgYmxvY2tzLCBibG9ja19zaXplLCBic19mYWN0b3I7CisJLyogTGFzdCBmb3JtYXQgY2FwYWNpdHkgZGVzY3JpcHRvciAqLworCXU4IGNhcF9kZXNjWzhdOworCS8qIENvcHkgb2YgdGhlIGZsZXhpYmxlIGRpc2sgcGFnZSAqLworCXU4IGZsZXhpYmxlX2Rpc2tfcGFnZVszMl07Cit9OworCitzZWN0b3JfdCBpZGVfZ2RfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKik7CisKKyNlbmRpZiAvKiBfX0lERV9HRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDc3YzZlYWUuLjcxNjJkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xNDkzLDggKzE0OTMsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJaHdncm91cC0+cnEgPSBOVUxMOwotCV9fZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMSk7Ci0JX19nZW5lcmljX3VucGx1Z19kZXZpY2UoZHJpdmUtPnF1ZXVlKTsKKwlfX2Vsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOworCWJsa19zdGFydF9xdWV1ZWluZyhkcml2ZS0+cXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IGI3NjJkZWIuLmJiN2ExZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtNzU1LDcgKzc1NSw3IEBACiAJIAogCXVkZWxheSgxKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7CiAJdWRlbGF5KDEpOwogCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCAxOWY4Yzc3Li4xNjQ5ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCWRyaXZlLT5yZWFkeV9zdGF0ID0gMDsKIAkJaWYgKGF0YV9pZF9jZGJfaW50cihpZCkpCiAJCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQ7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RPT1JMT0NLSU5HOwogCQkvKiB3ZSBkb24ndCBkbyBoZWFkIHVubG9hZGluZyBvbiBBVEFQSSBkZXZpY2VzICovCiAJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX1VOTE9BRDsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggYjI2OTI2NC4uYzMxZDBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC01NjcsMTAgKzU2NywxMCBAQAogdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikKIHsKIAltdXRleF9sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwotCWRyaXZlLT5zZXR0aW5ncyA9IGRyaXZlci0+c2V0dGluZ3M7CisJZHJpdmUtPnNldHRpbmdzID0gZHJpdmVyLT5wcm9jX2RldnNldHMoZHJpdmUpOwogCW11dGV4X3VubG9jaygmaWRlX3NldHRpbmdfbXR4KTsKIAotCWlkZV9hZGRfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2MsIGRyaXZlKTsKKwlpZGVfYWRkX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jX2VudHJpZXMoZHJpdmUpLCBkcml2ZSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTU5MSw3ICs1OTEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZGVfcmVtb3ZlX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jKTsKKwlpZGVfcmVtb3ZlX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jX2VudHJpZXMoZHJpdmUpKTsKIAogCW11dGV4X2xvY2soJmlkZV9zZXR0aW5nX210eCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCBkODc5Yzc3Li5iMmIyZTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTIxMDgsNyArMjEwOCw3IEBACiAKIAkvKiBkZXZpY2UgbGFja3MgbG9ja2luZyBzdXBwb3J0IGFjY29yZGluZyB0byBjYXBhYmlsaXRpZXMgcGFnZSAqLwogCWlmICgoY2Fwc1s2XSAmIDEpID09IDApCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAogCWlmIChjYXBzWzddICYgMHgwMikKIAkJdGFwZS0+YmxrX3NpemUgPSA1MTI7CkBAIC0yMjk4LDYgKzIyOTgsMTYgQEAKIAl7ICJuYW1lIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZXRhcGVfcmVhZF9uYW1lLAlOVUxMIH0sCiAJeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfdGFwZV9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGV0YXBlX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfdGFwZV9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGV0YXBlX3NldHRpbmdzOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgaWRlX3RhcGVfcHJvYmUoaWRlX2RyaXZlX3QgKik7CkBAIC0yMzE1LDggKzIzMjUsOCBAQAogCS5lbmRfcmVxdWVzdAkJPSBpZGV0YXBlX2VuZF9yZXF1ZXN0LAogCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZXRhcGVfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRldGFwZV9zZXR0aW5ncywKKwkucHJvY19lbnRyaWVzCQk9IGlkZV90YXBlX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV90YXBlX3Byb2NfZGV2c2V0cywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCmluZGV4IDAyZTZlZTcuLmFiNDRhMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUKQEAgLTExLDcgKzExLDYgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX1NDMTIwMCkJCSs9IHNjMTIwMC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9DWTgyQzY5MykJCSs9IGN5ODJjNjkzLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0RFTEtJTikJCSs9IGRlbGtpbl9jYi5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9IUFQzNFgpCQkrPSBocHQzNHgubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSFBUMzY2KQkJKz0gaHB0MzY2Lm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lUODIxMykJCSs9IGl0ODIxMy5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JVDgyMVgpCQkrPSBpdDgyMXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCmluZGV4IDg2ODlhNzAuLjhmMWIyZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKQEAgLTQ2LDEwICs0NiwyNyBAQAogCS5xdWlya3Byb2MJCT0gaWRlX3VuZGVjb2RlZF9zbGF2ZSwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsa2luX2NiX2luaXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCWludCBpOworCisJb3V0YigweDAyLCBiYXNlICsgMHgxZSk7CS8qIHNldCBuSUVOIHRvIGJsb2NrIGludGVycnVwdHMgKi8KKwlpbmIoYmFzZSArIDB4MTcpOwkJLyogcmVhZCBzdGF0dXMgdG8gY2xlYXIgaW50ZXJydXB0cyAqLworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzZXR1cCk7ICsraSkgeworCQlpZiAoc2V0dXBbaV0pCisJCQlvdXRiKHNldHVwW2ldLCBiYXNlICsgaSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkZWxraW5fY2JfcG9ydF9pbmZvID0gewogCS5wb3J0X29wcwkJPSAmZGVsa2luX2NiX3BvcnRfb3BzLAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19JT18zMkJJVCB8IElERV9IRkxBR19VTk1BU0tfSVJRUyB8CiAJCQkJICBJREVfSEZMQUdfTk9fRE1BLAorCS5pbml0X2NoaXBzZXQJCT0gZGVsa2luX2NiX2luaXRfY2hpcHNldCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC01Nyw3ICs3NCw3IEBACiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQlpbnQgaSwgcmM7CisJaW50IHJjOwogCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKQEAgLTcyLDEyICs4OSw4IEBACiAJCXJldHVybiByYzsKIAl9CiAJYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOwotCW91dGIoMHgwMiwgYmFzZSArIDB4MWUpOwkvKiBzZXQgbklFTiB0byBibG9jayBpbnRlcnJ1cHRzICovCi0JaW5iKGJhc2UgKyAweDE3KTsJCS8qIHJlYWQgc3RhdHVzIHRvIGNsZWFyIGludGVycnVwdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNldHVwKTsgKytpKSB7Ci0JCWlmIChzZXR1cFtpXSkKLQkJCW91dGIoc2V0dXBbaV0sIGJhc2UgKyBpKTsKLQl9CisKKwlkZWxraW5fY2JfaW5pdF9jaGlwc2V0KGRldik7CiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBiYXNlICsgMHgxMCwgYmFzZSArIDB4MWUpOwpAQCAtMTEwLDYgKzEyMyw0MCBAQAogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGRlbGtpbl9jYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlwY2lfc2F2ZV9zdGF0ZShkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlbGtpbl9jYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmM7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKworCWlmIChob3N0LT5pbml0X2NoaXBzZXQpCisJCWhvc3QtPmluaXRfY2hpcHNldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBkZWxraW5fY2Jfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGRlbGtpbl9jYl9yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZWxraW5fY2JfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAweDExNDUsIDB4ZjAyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyAweDExNDUsIDB4ZjAyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCkBAIC0xMjIsNiArMTY5LDggQEAKIAkuaWRfdGFibGUJPSBkZWxraW5fY2JfcGNpX3RibCwKIAkucHJvYmUJCT0gZGVsa2luX2NiX3Byb2JlLAogCS5yZW1vdmUJCT0gZGVsa2luX2NiX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGRlbGtpbl9jYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZGVsa2luX2NiX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGRlbGtpbl9jYl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMWEzYWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMAlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoKLSAqCi0gKiAwMDoxMi4wIFVua25vd24gbWFzcyBzdG9yYWdlIGNvbnRyb2xsZXI6Ci0gKiBUcmlvbmVzIFRlY2hub2xvZ2llcywgSW5jLgotICogVW5rbm93biBkZXZpY2UgMDAwMyAocmV2IDAxKQotICoKLSAqIGhkZTogVURNQSAyICgweDAwMDAgMHgwMDAyKSAoMHgwMDAwIDB4MDAxMCkKLSAqIGhkZjogVURNQSAyICgweDAwMDIgMHgwMDEyKSAoMHgwMDEwIDB4MDAzMCkKLSAqIGhkZTogRE1BIDIgICgweDAwMDAgMHgwMDAyKSAoMHgwMDAwIDB4MDAxMCkKLSAqIGhkZjogRE1BIDIgICgweDAwMDIgMHgwMDEyKSAoMHgwMDEwIDB4MDAzMCkKLSAqIGhkZzogRE1BIDEgICgweDAwMTIgMHgwMDUyKSAoMHgwMDMwIDB4MDA3MCkKLSAqIGhkaDogRE1BIDEgICgweDAwNTIgMHgwMjUyKSAoMHgwMDcwIDB4MDBmMCkKLSAqCi0gKiBpZGUtcGNpLmMgcmVmZXJlbmNlCi0gKgotICogU2luY2UgdGhlcmUgYXJlIHR3byBjYXJkcyB0aGF0IHJlcG9ydCBhbG1vc3QgaWRlbnRpY2FsbHksCi0gKiB0aGUgb25seSBkaXNjZXJuYWJsZSBkaWZmZXJlbmNlIGlzIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgaW4gcGNpY21kLgotICogQm9vdGluZy1CSU9TIGNhcmQgb3IgSFBUMzYzIDo6IHBjaWNtZCA9PSAweDA3Ci0gKiBOb24tYm9vdGFibGUgY2FyZCBvciBIUFQzNDMgOjogcGNpY21kID09IDB4MDUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgImhwdDM0eCIKLQotI2RlZmluZSBIUFQzNDNfREVCVUdfRFJJVkVfSU5GTwkJMAotCi1zdGF0aWMgdm9pZCBocHQzNHhfc2V0X21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihkcml2ZS0+aHdpZi0+ZGV2KTsKLQl1MzIgcmVnMT0gMCwgdG1wMSA9IDAsIHJlZzIgPSAwLCB0bXAyID0gMDsKLQl1OAkJCWhpX3NwZWVkLCBsb19zcGVlZDsKLQotCWhpX3NwZWVkID0gc3BlZWQgPj4gNDsKLQlsb19zcGVlZCA9IHNwZWVkICYgMHgwZjsKLQotCWlmIChoaV9zcGVlZCAmIDcpIHsKLQkJaGlfc3BlZWQgPSAoaGlfc3BlZWQgJiA0KSA/IDB4MDEgOiAweDEwOwotCX0gZWxzZSB7Ci0JCWxvX3NwZWVkIDw8PSA1OwotCQlsb19zcGVlZCA+Pj0gNTsKLQl9Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAmcmVnMSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgJnJlZzIpOwotCXRtcDEgPSAoKGxvX3NwZWVkIDw8ICgzKmRyaXZlLT5kbikpIHwgKHJlZzEgJiB+KDcgPDwgKDMqZHJpdmUtPmRuKSkpKTsKLQl0bXAyID0gKChoaV9zcGVlZCA8PCBkcml2ZS0+ZG4pIHwgKHJlZzIgJiB+KDB4MTEgPDwgZHJpdmUtPmRuKSkpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCB0bXAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgdG1wMik7Ci0KLSNpZiBIUFQzNDNfREVCVUdfRFJJVkVfSU5GTwotCXByaW50aygiJXM6ICVzIGRyaXZlJWQgKDB4JTA0eCAweCUwNHgpICgweCUwNHggMHglMDR4KSIgXAotCQkiICgweCUwMnggMHglMDJ4KVxuIiwKLQkJZHJpdmUtPm5hbWUsIGlkZV94ZmVyX3ZlcmJvc2Uoc3BlZWQpLAotCQlkcml2ZS0+ZG4sIHJlZzEsIHRtcDEsIHJlZzIsIHRtcDIsCi0JCWhpX3NwZWVkLCBsb19zcGVlZCk7Ci0jZW5kaWYgLyogSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8gKi8KLX0KLQotc3RhdGljIHZvaWQgaHB0MzR4X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKLXsKLQlocHQzNHhfc2V0X21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwotfQotCi0vKgotICogSWYgdGhlIEJJT1MgZG9lcyBub3Qgc2V0IHRoZSBJTyBiYXNlIGFkZGFyZXNzIHRvIFhYMDAsIDM0MyB3aWxsIGZhaWwuCi0gKi8KLSNkZWZpbmUJSFBUMzRYX1BDSV9JTklUX1JFRwkJMHg4MAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNHgoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgaSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBocHQzNHhJb0Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQl1bnNpZ25lZCBsb25nIGhwdF9hZGRyWzRdID0geyAweDIwLCAweDM0LCAweDI4LCAweDNjIH07Ci0JdW5zaWduZWQgbG9uZyBocHRfYWRkcl9sZW5bNF0gPSB7IDcsIDMsIDcsIDMgfTsKLQl1MTYgY21kOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBIUFQzNFhfUENJX0lOSVRfUkVHLCAweDAwKTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQotCWlmIChjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweEYwKTsKLQllbHNlCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDIwKTsKLQotCS8qCi0JICogU2luY2UgMjAtMjMgY2FuIGJlIGFzc2lnbmVkIGFuZCBhcmUgUi9XLCB3ZSBjb3JyZWN0IHRoZW0uCi0JICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCAmIH5QQ0lfQ09NTUFORF9JTyk7Ci0JZm9yKGk9MDsgaTw0OyBpKyspIHsKLQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IChocHQzNHhJb0Jhc2UgKyBocHRfYWRkcltpXSk7Ci0JCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIGhwdF9hZGRyX2xlbltpXTsKLQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJCShQQ0lfQkFTRV9BRERSRVNTXzAgKyAoaSAqIDQpKSwKLQkJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0KTsKLQl9Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gZGV2LT5pcnE7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGhwdDM0eF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb19tb2RlCQk9IGhwdDM0eF9zZXRfcGlvX21vZGUsCi0JLnNldF9kbWFfbW9kZQkJPSBocHQzNHhfc2V0X21vZGUsCi19OwotCi0jZGVmaW5lIElERV9IRkxBR1NfSFBUMzRYIFwKLQkoSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8IFwKLQkgSURFX0hGTEFHX05PX0RTQyB8IFwKLQkgSURFX0hGTEFHX05PX0FVVE9ETUEpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBocHQzNHhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCXsgLyogMDogSFBUMzQzICovCi0JCS5uYW1lCQk9IERSVl9OQU1FLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM0eCwKLQkJLnBvcnRfb3BzCT0gJmhwdDM0eF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDM0WCB8IElERV9IRkxBR19OT05fQk9PVEFCTEUsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotCX0sCi0JeyAvKiAxOiBIUFQzNDUgKi8KLQkJLm5hbWUJCT0gRFJWX05BTUUsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfaHB0MzR4LAotCQkucG9ydF9vcHMJPSAmaHB0MzR4X3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfSFBUMzRYIHwgSURFX0hGTEFHX09GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCi0jaWZkZWYgQ09ORklHX0hQVDM0WF9BVVRPRE1BCi0JCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMiwKLQkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAotCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAotI2VuZGlmCi0JfQotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgaHB0MzR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZDsKLQl1MTYgcGNpY21kID0gMDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZwY2ljbWQpOwotCi0JZCA9ICZocHQzNHhfY2hpcHNldHNbKHBjaWNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPyAxIDogMF07Ci0KLQlyZXR1cm4gaWRlX3BjaV9pbml0X29uZShkZXYsIGQsIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0MzR4X3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzQzKSwgMCB9LAotCXsgMCwgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaHB0MzR4X3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHB0MzR4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIkhQVDM0eF9JREUiLAotCS5pZF90YWJsZQk9IGhwdDM0eF9wY2lfdGJsLAotCS5wcm9iZQkJPSBocHQzNHhfaW5pdF9vbmUsCi0JLnJlbW92ZQkJPSBpZGVfcGNpX3JlbW92ZSwKLQkuc3VzcGVuZAk9IGlkZV9wY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGlkZV9wY2lfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaHB0MzR4X2lkZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZocHQzNHhfcGNpX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBocHQzNHhfaWRlX2V4aXQodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhwdDM0eF9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaHB0MzR4X2lkZV9pbml0KTsKLW1vZHVsZV9leGl0KGhwdDM0eF9pZGVfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkFuZHJlIEhlZHJpY2siKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIEhpZ2hwb2ludCAzNHggSURFIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKaW5kZXggOWNmMTcxYy4uYTc5MDllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYwpAQCAtMyw3ICszLDcgQEAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegotICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDgJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoYW5rcyB0byBIaWdoUG9pbnQgVGVjaG5vbG9naWVzIGZvciB0aGVpciBhc3Npc3RhbmNlLCBhbmQgaGFyZHdhcmUuCiAgKiBTcGVjaWFsIFRoYW5rcyB0byBKb24gQnVyY2htb3JlIGluIFNhbkRpZWdvIGZvciB0aGUgZGVlcCBwb2NrZXRzLCBoaXMKQEAgLTc0OCwyNiArNzQ4LDI0IEBACiAJc3RydWN0IHBjaV9kZXYJKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKIAotCWlmIChkcml2ZS0+cXVpcmtfbGlzdCkgewotCQlpZiAoaW5mby0+Y2hpcF90eXBlID49IEhQVDM3MCkgewotCQkJdTggc2NyMSA9IDA7CisJaWYgKGRyaXZlLT5xdWlya19saXN0ID09IDApCisJCXJldHVybjsKIAotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7Ci0JCQlpZiAoKChzY3IxICYgMHgxMCkgPj4gNCkgIT0gbWFzaykgewotCQkJCWlmIChtYXNrKQotCQkJCQlzY3IxIHw9ICAweDEwOwotCQkJCWVsc2UKLQkJCQkJc2NyMSAmPSB+MHgxMDsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVhLCBzY3IxKTsKLQkJCX0KLQkJfSBlbHNlIHsKKwlpZiAoaW5mby0+Y2hpcF90eXBlID49IEhQVDM3MCkgeworCQl1OCBzY3IxID0gMDsKKworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWEsICZzY3IxKTsKKwkJaWYgKCgoc2NyMSAmIDB4MTApID4+IDQpICE9IG1hc2spIHsKIAkJCWlmIChtYXNrKQotCQkJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CisJCQkJc2NyMSB8PSAgMHgxMDsKIAkJCWVsc2UKLQkJCQllbmFibGVfaXJxIChod2lmLT5pcnEpOworCQkJCXNjcjEgJj0gfjB4MTA7CisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVhLCBzY3IxKTsKIAkJfQotCX0gZWxzZQotCQlvdXRiKEFUQV9ERVZDVExfT0JTIHwgKG1hc2sgPyAyIDogMCksIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKKwl9IGVsc2UgaWYgKG1hc2spCisJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CisJZWxzZQorCQllbmFibGVfaXJxKGh3aWYtPmlycSk7CiB9CiAKIC8qCkBAIC0xMjg5LDcgKzEyODcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2hwdDM2NihpZGVfaHdpZl90ICpod2lmKQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7CiAJaW50IHNlcmlhbGl6ZQkJPSBIUFRfU0VSSUFMSVpFX0lPOwogCXU4ICBjaGlwX3R5cGUJCT0gaW5mby0+Y2hpcF90eXBlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwppbmRleCA5Y2UxZDgwLi40OWYxNjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwpAQCAtNjE3LDcgKzYxNyw2IEBACiAJdW5zaWduZWQgbG9uZyBpbnRtYXNrX3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBtb2RlX3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBlY21vZGVfcG9ydDsKLQl1bnNpZ25lZCBsb25nIGRtYV9zdGF0dXNfcG9ydDsKIAl1MzIgcmVnID0gMDsKIAlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0czsKIAlpbnQgcmM7CkBAIC02MzcsNyArNjM2LDYgQEAKIAlpbnRtYXNrX3BvcnQgPSBkbWFfYmFzZSArIDB4MDEwOwogCW1vZGVfcG9ydCA9IGN0bF9iYXNlICsgMHgwMjQ7CiAJZWNtb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4ZjAwOwotCWRtYV9zdGF0dXNfcG9ydCA9IGRtYV9iYXNlICsgMHgwMDQ7CiAKIAkvKiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uICovCiAJcmVnID0gMDsKQEAgLTg0Myw4ICs4NDEsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NjYyhpZGVfaHdpZl90ICpod2lmKQogewotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQogCS8qIFBURVJBREQgKi8KIAlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMTgpLCBod2lmLT5kbWF0YWJsZV9kbWEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwppbmRleCBkZDYzNDU0Li44YWY5YjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKQEAgLTEwMSwxOCArMTAxLDggQEAKIAlmb3IgKGkgPSAwOyBpIDw9IDc7IGkrKykKIAkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnICsgaSAqIDQ7CiAKLQlpZiAoY3RybF9wb3J0KQotCQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxX3BvcnQpCi0JCWh3LT5pb19wb3J0cy5pcnFfYWRkciA9IGlycV9wb3J0OwotfQotCi1zdGF0aWMgdm9pZAotc2dpaW9jNF9tYXNrcHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlLCBpbnQgbWFzaykKLXsKLQl3cml0ZWIoQVRBX0RFVkNUTF9PQlMgfCAobWFzayA/IDIgOiAwKSwKLQkgICAgICAgKHZvaWQgX19pb21lbSAqKWRyaXZlLT5od2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RybF9wb3J0OworCWh3LT5pb19wb3J0cy5pcnFfYWRkciA9IGlycV9wb3J0OwogfQogCiBzdGF0aWMgaW50CkBAIC0zMTAsMTYgKzMwMCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyOwogCXU4IHJlZyA9ICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKIAotCWlmICgocG9ydCAmIDB4RkZGKSA9PSAweDExQykgewkvKiBTdGF0dXMgcmVnaXN0ZXIgb2YgSU9DNCAqLwotCQlpZiAoIShyZWcgJiBBVEFfQlVTWSkpIHsgLyogTm90IGJ1c3kuLi4gY2hlY2sgZm9yIGludGVycnVwdCAqLwotCQkJdW5zaWduZWQgbG9uZyBvdGhlcl9pciA9IHBvcnQgLSAweDExMDsKLQkJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOworCWlmICghKHJlZyAmIEFUQV9CVVNZKSkgewkvKiBOb3QgYnVzeS4uLiBjaGVjayBmb3IgaW50ZXJydXB0ICovCisJCXVuc2lnbmVkIGxvbmcgb3RoZXJfaXIgPSBwb3J0IC0gMHgxMTA7CisJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwogCi0JCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCi0JCQlpZiAoaW50cl9yZWcgJiAweDAzKSB7Ci0JCQkJd3JpdGVsKDB4MDMsICh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwotCQkJCWludHJfcmVnID0gKHUzMikgcmVhZGwoKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7Ci0JCQl9CisJCS8qIENsZWFyIHRoZSBJbnRlcnJ1cHQsIEVycm9yIGJpdHMgb24gdGhlIElPQzQgKi8KKwkJaWYgKGludHJfcmVnICYgMHgwMykgeworCQkJd3JpdGVsKDB4MDMsICh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOworCQkJaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKIAkJfQogCX0KIApAQCAtMzMyLDEzICszMjAsOSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApICsgSU9DNF9ETUFfT0ZGU0VUOwotCXZvaWQgX19pb21lbSAqdmlydF9kbWFfYmFzZTsKIAlpbnQgbnVtX3BvcnRzID0gc2l6ZW9mIChpb2M0X2RtYV9yZWdzX3QpOwogCXZvaWQgKnBhZDsKIAotCWlmIChkbWFfYmFzZSA9PSAwKQotCQlyZXR1cm4gLTE7Ci0KIAlwcmludGsoS0VSTl9JTkZPICIgICAgJXM6IE1NSU8tRE1BXG4iLCBod2lmLT5uYW1lKTsKIAogCWlmIChyZXF1ZXN0X21lbV9yZWdpb24oZG1hX2Jhc2UsIG51bV9wb3J0cywgaHdpZi0+bmFtZSkgPT0gTlVMTCkgewpAQCAtMzQ4LDE0ICszMzIsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JdmlydF9kbWFfYmFzZSA9IGlvcmVtYXAoZG1hX2Jhc2UsIG51bV9wb3J0cyk7Ci0JaWYgKHZpcnRfZG1hX2Jhc2UgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSAtLSBFUlJPUjogdW5hYmxlIHRvIG1hcCBhZGRyZXNzZXMgIgotCQkgICAgICAgIjB4JWx4IHRvIDB4JWx4XG4iLCBfX2Z1bmNfXywgaHdpZi0+bmFtZSwKLQkJICAgICAgIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOwotCQlnb3RvIGRtYV9yZW1hcF9mYWlsdXJlOwotCX0KLQlod2lmLT5kbWFfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2RtYV9iYXNlOworCWh3aWYtPmRtYV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aW9fcG9ydHMuaXJxX2FkZHIgKworCQkJIElPQzRfRE1BX09GRlNFVDsKIAogCWh3aWYtPnNnX21heF9uZW50cyA9IElPQzRfUFJEX0VOVFJJRVM7CiAKQEAgLTM3OSw5ICszNTcsNiBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBjaGFuZ2luZyBmcm9tIERNQSB0byBQSU8gbW9kZSIsIGh3aWYtPm5hbWUpOwogCiBkbWFfcGNpX2FsbG9jX2ZhaWx1cmU6Ci0JaW91bm1hcCh2aXJ0X2RtYV9iYXNlKTsKLQotZG1hX3JlbWFwX2ZhaWx1cmU6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMpOwogCiAJcmV0dXJuIC0xOwpAQCAtNTYzLDggKzUzOCw2IEBACiAJLnNldF9kbWFfbW9kZQkJPSBzZ2lpb2M0X3NldF9kbWFfbW9kZSwKIAkvKiByZXNldCBETUEgZW5naW5lLCBjbGVhciBJUlFzICovCiAJLnJlc2V0cHJvYwkJPSBzZ2lpb2M0X3Jlc2V0cHJvYywKLQkvKiBtYXNrIG9uL29mZiBOSUVOIHJlZ2lzdGVyICovCi0JLm1hc2twcm9jCQk9IHNnaWlvYzRfbWFza3Byb2MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNnaWlvYzRfZG1hX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGE3OGQzNWEuLmYxZTgyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICNkZWZpbmUgQ01fQ09VTlRFUl9BVFRSKF9uYW1lLCBfaW5kZXgpIFwKIHN0cnVjdCBjbV9jb3VudGVyX2F0dHJpYnV0ZSBjbV8jI19uYW1lIyNfY291bnRlcl9hdHRyID0geyBcCi0JLmF0dHIgPSB7IC5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IDA0NDQsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sIFwKKwkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gMDQ0NCB9LCBcCiAJLmluZGV4ID0gX2luZGV4IFwKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggNWExY2YyNS4uMWU1YjY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0zNzgsNiArMzc4LDcgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOwogCisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CiAJaXNjc2lfaG9zdF9yZW1vdmUoc2hvc3QpOwogCWlzY3NpX2hvc3RfZnJlZShzaG9zdCk7CiB9CkBAIC01OTcsNyArNTk4LDcgQEAKIAkuY21kX3Blcl9sdW4gICAgICAgICAgICA9IElTQ1NJX01BWF9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAotCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBpc2NzaV9laF9ob3N0X3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAogCS51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUgICAgICAgICAgICAgID0gImlzY3NpX2lzZXIiLAogCS50aGlzX2lkICAgICAgICAgICAgICAgID0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtZmYuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCmluZGV4IDc4MzliN2IuLjBkZTlhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCkBAIC0xOTcsMTMgKzE5NywxNiBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhbiBjb25kaXRpb24KICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwKKwkJCQkgICBzdHJ1Y3QgZmZfZWZmZWN0ICpuZXcpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAobmV3LT50eXBlICE9IEZGX1NQUklORyAmJiBuZXctPnR5cGUgIT0gRkZfRlJJQ1RJT04pIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfY29uZGl0aW9uX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjIsMTAgKzIyNSwxMyBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhIG1hZ25pdHVkZQogICogcGFyYW1ldGVyIHBhY2tldAogICovCi1zdGF0aWMgaW50IG5lZWRfbWFnbml0dWRlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX21hZ25pdHVkZV9tb2RpZmllcihzdHJ1Y3QgaWZvcmNlICppZm9yY2UsCisJCQkJICAgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlpZiAoZWZmZWN0LT50eXBlICE9IEZGX0NPTlNUQU5UKSB7Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMzYsNyArMjQyLDggQEAKICAqIEFuYWx5c2UgdGhlIGNoYW5nZXMgaW4gYW4gZWZmZWN0LCBhbmQgdGVsbCBpZiB3ZSBuZWVkIHRvIHNlbmQgYW4gZW52ZWxvcGUKICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSwgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQogewogCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CiAJY2FzZSBGRl9DT05TVEFOVDoKQEAgLTI1Niw3ICsyNjMsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2NiwxMCArMjc0LDEyIEBACiAgKiBBbmFseXNlIHRoZSBjaGFuZ2VzIGluIGFuIGVmZmVjdCwgYW5kIHRlbGwgaWYgd2UgbmVlZCB0byBzZW5kIGEgcGVyaW9kaWMKICAqIHBhcmFtZXRlciBlZmZlY3QKICAqLwotc3RhdGljIGludCBuZWVkX3BlcmlvZF9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9wZXJpb2RfbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLCBzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsCisJCQkJc3RydWN0IGZmX2VmZmVjdCAqbmV3KQogewogCWlmIChuZXctPnR5cGUgIT0gRkZfUEVSSU9ESUMpIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfcGVyaW9kX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAob2xkLT51LnBlcmlvZGljLnBlcmlvZCAhPSBuZXctPnUucGVyaW9kaWMucGVyaW9kCkBAIC0zNTUsNyArMzY1LDcgQEAKIAlpbnQgcGFyYW0yX2VyciA9IDE7CiAJaW50IGNvcmVfZXJyID0gMDsKIAotCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMV9lcnIgPSBtYWtlX3BlcmlvZF9tb2RpZmllcihpZm9yY2UsIG1vZDFfY2h1bmssCiAJCQlvbGQgIT0gTlVMTCwKIAkJCWVmZmVjdC0+dS5wZXJpb2RpYy5tYWduaXR1ZGUsIGVmZmVjdC0+dS5wZXJpb2RpYy5vZmZzZXQsCkBAIC0zNjUsNyArMzc1LDcgQEAKIAkJc2V0X2JpdChGRl9NT0QxX0lTX1VTRUQsIGNvcmVfZWZmZWN0LT5mbGFncyk7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9lbnZlbG9wZV9tb2RpZmllcihvbGQsIGVmZmVjdCkpIHsKKwlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMl9lcnIgPSBtYWtlX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgbW9kMl9jaHVuaywKIAkJCW9sZCAhPU5VTEwsCiAJCQllZmZlY3QtPnUucGVyaW9kaWMuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQyNSw3ICs0MzUsNyBAQAogCWludCBwYXJhbTJfZXJyID0gMTsKIAlpbnQgY29yZV9lcnIgPSAwOwogCi0JaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0xX2VyciA9IG1ha2VfbWFnbml0dWRlX21vZGlmaWVyKGlmb3JjZSwgbW9kMV9jaHVuaywKIAkJCW9sZCAhPSBOVUxMLAogCQkJZWZmZWN0LT51LmNvbnN0YW50LmxldmVsKTsKQEAgLTQzNCw3ICs0NDQsNyBAQAogCQlzZXRfYml0KEZGX01PRDFfSVNfVVNFRCwgY29yZV9lZmZlY3QtPmZsYWdzKTsKIAl9CiAKLQlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0yX2VyciA9IG1ha2VfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBtb2QyX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uc3RhbnQuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQ4Nyw3ICs0OTcsNyBAQAogCQlkZWZhdWx0OiByZXR1cm4gLTE7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW1fZXJyID0gbWFrZV9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBtb2QxX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uZGl0aW9uWzBdLnJpZ2h0X3NhdHVyYXRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwppbmRleCA2MWVlNmUzLi5iYWFiZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTIxOCw3ICsyMTgsOSBAQAogCQkvKiBDaGVjazogbm8gZWZmZWN0cyBzaG91bGQgYmUgcHJlc2VudCBpbiBtZW1vcnkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGRldi0+ZmYtPm1heF9lZmZlY3RzOyBpKyspIHsKIAkJCWlmICh0ZXN0X2JpdChGRl9DT1JFX0lTX1VTRUQsIGlmb3JjZS0+Y29yZV9lZmZlY3RzW2ldLmZsYWdzKSkgewotCQkJCXdhcm4oImlmb3JjZV9yZWxlYXNlOiBEZXZpY2Ugc3RpbGwgb3ducyBlZmZlY3RzIik7CisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCQkiJXM6IERldmljZSBzdGlsbCBvd25zIGVmZmVjdHNcbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzM1LDI2ICszMzcsMjYgQEAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk0iKSkKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTSIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBNXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiUCIpKQogCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgUCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBQXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiQiIpKQogCQlpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kID0gKGlmb3JjZS0+ZWRhdGFbMl0gPDwgOCkgfCBpZm9yY2UtPmVkYXRhWzFdOwogCWVsc2UKLQkJd2FybigiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IEIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgQlxuIik7CiAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk4iKSkKIAkJZmZfZWZmZWN0cyA9IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTiIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBOXG4iKTsKIAogCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIHN0b3JlIG1vcmUgZWZmZWN0cyB0aGFuIHRoZSBkcml2ZXIgY2FuIHJlYWxseSBoYW5kbGUgKi8KIAlpZiAoZmZfZWZmZWN0cyA+IElGT1JDRV9FRkZFQ1RTX01BWCkgewotCQl3YXJuKCJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpIiwKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpXG4iLAogCQkgICAgICAgSUZPUkNFX0VGRkVDVFNfTUFYLCBmZl9lZmZlY3RzKTsKIAkJZmZfZWZmZWN0cyA9IElGT1JDRV9FRkZFQ1RTX01BWDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXBhY2tldHMuYwppbmRleCAwMTViNTBhLi5hMTdiNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMKQEAgLTY1LDcgKzY1LDggQEAKIAogCiAJaWYgKENJUkNfU1BBQ0UoaGVhZCwgdGFpbCwgWE1JVF9TSVpFKSA8IG4rMikgewotCQl3YXJuKCJub3QgZW5vdWdoIHNwYWNlIGluIHhtaXQgYnVmZmVyIHRvIHNlbmQgbmV3IHBhY2tldCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAibm90IGVub3VnaCBzcGFjZSBpbiB4bWl0IGJ1ZmZlciB0byBzZW5kIG5ldyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZm9yY2UtPnhtaXRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQl3YXJuKCJ1bnVzZWQgZWZmZWN0ICUwNHggdXBkYXRlZCAhISEiLCBhZGRyKTsKKwlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVudXNlZCBlZmZlY3QgJTA0eCB1cGRhdGVkICEhIVxuIiwgYWRkcik7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xNTksNyArMTYwLDggQEAKIAlzdGF0aWMgaW50IGJlaW5nX3VzZWQgPSAwOwogCiAJaWYgKGJlaW5nX3VzZWQpCi0JCXdhcm4oInJlLWVudHJhbnQgY2FsbCB0byBpZm9yY2VfcHJvY2VzcyAlZCIsIGJlaW5nX3VzZWQpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAicmUtZW50cmFudCBjYWxsIHRvIGlmb3JjZV9wcm9jZXNzICVkXG4iLCBiZWluZ191c2VkKTsKIAliZWluZ191c2VkKys7CiAKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCmluZGV4IDg1MWNjNDA4Li5mODMxODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlpZiAoIChuPXVzYl9zdWJtaXRfdXJiKGlmb3JjZS0+b3V0LCBHRlBfQVRPTUlDKSkgKSB7CiAJCWNsZWFyX2JpdChJRk9SQ0VfWE1JVF9SVU5OSU5HLCBpZm9yY2UtPnhtaXRfZmxhZ3MpOwotCQl3YXJuKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcbiIsIG4pOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxuIiwgbik7CiAJfQogCiAJLyogVGhlIElGT1JDRV9YTUlUX1JVTk5JTkcgYml0IGlzIG5vdCBjbGVhcmVkIGhlcmUuIFRoYXQncyBpbnRlbmRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggODM5ZDFjOS4uYjg2OGI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTkxMSw3ICs5MTEsNyBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnhwYWRfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKaW5kZXggZGViZmMxYS4uZTI5MGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCkBAIC0yODUsNyArMjg1LDYgQEAKIH07CiAKIC8qIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcAkJKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKTsKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZV9vcGVuCQkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpOwogc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9jbG9zZQkJKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KTsKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZV9zZW5kcGFja2V0CShzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CkBAIC0zMDcsMTUgKzMwNiwxNiBAQAogLyoKICAqCWF0aV9yZW1vdGVfZHVtcF9pbnB1dAogICovCi1zdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2R1bXAodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAoKGxlbiA9PSAxKSAmJiAoZGF0YVswXSAhPSAodW5zaWduZWQgY2hhcikweGZmKSAmJiAoZGF0YVswXSAhPSAweDAwKSkKLQkJd2FybigiV2VpcmQgYnl0ZSAweCUwMngiLCBkYXRhWzBdKTsKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQgYnl0ZSAweCUwMnhcbiIsIGRhdGFbMF0pOwogCWVsc2UgaWYgKGxlbiA9PSA0KQotCQl3YXJuKCJXZWlyZCBrZXkgJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCWRldl93YXJuKGRldiwgIldlaXJkIGtleSAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOwogCWVsc2UKLQkJd2FybigiV2VpcmQgZGF0YSwgbGVuPSVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC4uLiIsCisJCWRldl93YXJuKGRldiwgIldlaXJkIGRhdGEsIGxlbj0lZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAuLi5cbiIsCiAJCSAgICAgbGVuLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBACiAJLyogRGVhbCB3aXRoIHN0cmFuZ2UgbG9va2luZyBpbnB1dHMgKi8KIAlpZiAoICh1cmItPmFjdHVhbF9sZW5ndGggIT0gNCkgfHwgKGRhdGFbMF0gIT0gMHgxNCkgfHwKIAkJKChkYXRhWzNdICYgMHgwZikgIT0gMHgwMCkgKSB7Ci0JCWF0aV9yZW1vdGVfZHVtcChkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlhdGlfcmVtb3RlX2R1bXAoJnVyYi0+ZGV2LT5kZXYsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCWF0aV9yZW1vdGUgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCWlmICghYXRpX3JlbW90ZSkgewotCQl3YXJuKCIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19mdW5jX18pOworCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC04MzQsOSArODM0LDExIEBACiAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKIAlpZiAocmVzdWx0KQotCQllcnIoInVzYl9yZWdpc3RlciBlcnJvciAjJWRcbiIsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGVycm9yICMlZFxuIiwgcmVzdWx0KTsKIAllbHNlCi0JCWluZm8oIlJlZ2lzdGVyZWQgVVNCIGRyaXZlciAiIERSSVZFUl9ERVNDICIgdi4gIiBEUklWRVJfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCmluZGV4IDExYjVjN2UuLjkzYTIyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwpAQCAtOTk5LDcgKzk5OSw4IEBACiB7CiAJaW50IHJldCA9IHVzYl9yZWdpc3RlcigmeWVhbGlua19kcml2ZXIpOwogCWlmIChyZXQgPT0gMCkKLQkJaW5mbyhEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04pOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jCmluZGV4IDU3MGUwZTguLjY3MGM2MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jCkBAIC0yODAsNyArMjgwLDggQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2JfYWNlY2FkX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKaW5kZXggZTUzYzgzOC4uN2QwMDVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKQEAgLTE3MDYsMjAgKzE3MDYsMjEgQEAKIAlhaXB0ZWsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWlwdGVrKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWFpcHRlayB8fCAhaW5wdXRkZXYpIHsKLQkJd2FybigiYWlwdGVrOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IG9yIGlucHV0IGRldmljZSIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJICJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IG9yIGlucHV0IGRldmljZVxuIik7CiAJCWdvdG8gZmFpbDE7CiAgICAgICAgIH0KIAogCWFpcHRlay0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModXNiZGV2LCBBSVBURUtfUEFDS0VUX0xFTkdUSCwKIAkJCQkJR0ZQX0FUT01JQywgJmFpcHRlay0+ZGF0YV9kbWEpOwogICAgICAgICBpZiAoIWFpcHRlay0+ZGF0YSkgewotCQl3YXJuKCJhaXB0ZWs6IGNhbm5vdCBhbGxvY2F0ZSB1c2IgYnVmZmVyIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgdXNiIGJ1ZmZlclxuIik7CiAJCWdvdG8gZmFpbDE7CiAJfQogCiAJYWlwdGVrLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghYWlwdGVrLT51cmIpIHsKLQkgICAgICAgIHdhcm4oImFpcHRlazogY2Fubm90IGFsbG9jYXRlIHVyYiIpOworCSAgICAgICAgZGV2X3dhcm4oJmludGYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSB1cmJcbiIpOwogCQlnb3RvIGZhaWwyOwogCX0KIApAQCAtMTg0Myw4ICsxODQ0LDkgQEAKIAkJYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gc3BlZWRzW2ldOwogCQkodm9pZClhaXB0ZWtfcHJvZ3JhbV90YWJsZXQoYWlwdGVrKTsKIAkJaWYgKGFpcHRlay0+aW5wdXRkZXYtPmFic21heFtBQlNfWF0gPiAwKSB7Ci0JCQlpbmZvKCJpbnB1dDogQWlwdGVrIHVzaW5nICVkIG1zIHByb2dyYW1taW5nIHNwZWVkXG4iLAotCQkJICAgICBhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkpOworCQkJZGV2X2luZm8oJmludGYtPmRldiwKKwkJCQkgIkFpcHRlayB1c2luZyAlZCBtcyBwcm9ncmFtbWluZyBzcGVlZFxuIiwKKwkJCQkgYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTg1Miw3ICsxODU0LDggQEAKIAkvKiBNdXJwaHkgc2F5cyB0aGF0IHNvbWUgZGF5IHNvbWVvbmUgd2lsbCBoYXZlIGEgdGFibGV0IHRoYXQgZmFpbHMgdGhlCiAJICAgYWJvdmUgdGVzdC4gVGhhdCdzIHlvdSwgRnJlZGVyaWMgUm9kcmlnbyAqLwogCWlmIChpID09IEFSUkFZX1NJWkUoc3BlZWRzKSkgewotCQlpbmZvKCJpbnB1dDogQWlwdGVrIHRyaWVkIGFsbCBzcGVlZHMsIG5vIHNhbmUgcmVzcG9uc2UiKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwKKwkJCSAiQWlwdGVrIHRyaWVkIGFsbCBzcGVlZHMsIG5vIHNhbmUgcmVzcG9uc2VcbiIpOwogCQlnb3RvIGZhaWwyOwogCX0KIApAQCAtMTg2NCw3ICsxODY3LDggQEAKIAkgKi8KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmYWlwdGVrX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQl3YXJuKCJhaXB0ZWs6IGNhbm5vdCBjcmVhdGUgc3lzZnMgZ3JvdXAgZXJyOiAlZCIsIGVycik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJjYW5ub3QgY3JlYXRlIHN5c2ZzIGdyb3VwIGVycjogJWRcbiIsCisJCQkgZXJyKTsKIAkJZ290byBmYWlsMzsKICAgICAgICAgfQogCkBAIC0xODcyLDcgKzE4NzYsOCBAQAogCSAqLwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhaXB0ZWstPmlucHV0ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXdhcm4oImFpcHRlazogaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIHJldHVybmVkIGVycjogJWQiLCBlcnIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJICJpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgcmV0dXJuZWQgZXJyOiAlZFxuIiwgZXJyKTsKIAkJZ290byBmYWlsNDsKICAgICAgICAgfQogCXJldHVybiAwOwpAQCAtMTkyMiw4ICsxOTI3LDkgQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhaXB0ZWtfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApIHsKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiAiIERSSVZFUl9BVVRIT1IpOwotCQlpbmZvKERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfQVVUSE9SICJcbiIpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCmluZGV4IDdkZjAyMjguLjU1MjRlMDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCkBAIC0yLDcgKzIsNyBAQAogCiBHVENPIGRpZ2l0aXplciBVU0IgZHJpdmVyCiAKLVVzZSB0aGUgZXJyKCksIGRiZygpIGFuZCBpbmZvKCkgbWFjcm9zIGZyb20gdXNiLmggZm9yIHN5c3RlbSBsb2dnaW5nCitVc2UgdGhlIGVycigpIGFuZCBkYmcoKSBtYWNyb3MgZnJvbSB1c2IuaCBmb3Igc3lzdGVtIGxvZ2dpbmcKIAogVE8gQ0hFQ0s6ICBJcyBwcmVzc3VyZSBkb25lIHJpZ2h0IG9uIHJlcG9ydCA1PwogCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCQlrZnJlZShndGNvKTsKIAl9CiAKLQlpbmZvKCJndGNvIGRyaXZlciBkaXNjb25uZWN0ZWQiKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJndGNvIGRyaXZlciBkaXNjb25uZWN0ZWRcbiIpOwogfQogCiAvKiAgIFNUQU5EQVJEIE1PRFVMRSBMT0FEIFJPVVRJTkVTICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKaW5kZXggZDg5MTEyZi4uNjY4MmIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCkBAIC0yMTUsNyArMjE1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmtidGFiX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7Ci0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKaW5kZXggNWZiYzQ2My4uMDllMjI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKQEAgLTM4NSw3ICszODUsOCBAQAogCXdhY29tX2RyaXZlci5pZF90YWJsZSA9IGdldF9kZXZpY2VfdGFibGUoKTsKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJndhY29tX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCA2ZTFlOGM2Li44MzE3ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC0yMTksNyArMjE5LDcgQEAKIAogY29uZmlnIFRPVUNIU0NSRUVOX1VDQjE0MDAKIAl0cmlzdGF0ZSAiUGhpbGlwcyBVQ0IxNDAwIHRvdWNoc2NyZWVuIgotCXNlbGVjdCBBQzk3X0JVUworCWRlcGVuZHMgb24gQUM5N19CVVMKIAlkZXBlbmRzIG9uIFVDQjE0MDBfQ09SRQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBVQ0IxNDAwIHRvdWNoc2NyZWVuIGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwppbmRleCBjMzhkNGUwLi5hODk3MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9hZGMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAKICNkZWZpbmUgTU9ETkFNRSAiaHA2ODBfdHNfaW5wdXQiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggZTNlNDA0Mi4uYzdmZjFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTE3OSw3ICsxNzksNyBAQAogCiBjb25maWcgTEVEU19UUklHR0VSX0lERV9ESVNLCiAJYm9vbCAiTEVEIElERSBEaXNrIFRyaWdnZXIiCi0JZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTICYmIEJMS19ERVZfSURFRElTSworCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUyAmJiBJREVfR0RfQVRBCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBjb250cm9sbGVkIGJ5IElERSBkaXNrIGFjdGl2aXR5LgogCSAgSWYgdW5zdXJlLCBzYXkgWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCmluZGV4IDg0NGQ1OTc5Li5lOGZiMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAKIHN0YXRpYyB2b2lkIGhwNnh4bGVkX2dyZWVuX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IDEwMzMwNGMuLjliZjM0NjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMKKysrIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCkBAIC04NDksNyArODQ5LDcgQEAKIAlkbV9iaW9fcmVjb3JkKCZtcGlvLT5kZXRhaWxzLCBiaW8pOwogCiAJbWFwX2NvbnRleHQtPnB0ciA9IG1waW87Ci0JYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1QpOworCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCk7CiAJciA9IG1hcF9pbyhtLCBiaW8sIG1waW8sIDApOwogCWlmIChyIDwgMCB8fCByID09IERNX01BUElPX1JFUVVFVUUpCiAJCW1lbXBvb2xfZnJlZShtcGlvLCBtLT5tcGlvX3Bvb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggODc0NDAxNC4uZDRhYzQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAltcF9iaC0+YmlvID0gKmJpbzsKIAltcF9iaC0+YmlvLmJpX3NlY3RvciArPSBtdWx0aXBhdGgtPnJkZXYtPmRhdGFfb2Zmc2V0OwogCW1wX2JoLT5iaW8uYmlfYmRldiA9IG11bHRpcGF0aC0+cmRldi0+YmRldjsKLQltcF9iaC0+YmlvLmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVCk7CisJbXBfYmgtPmJpby5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAltcF9iaC0+YmlvLmJpX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsKIAltcF9iaC0+YmlvLmJpX3ByaXZhdGUgPSBtcF9iaDsKIAlnZW5lcmljX21ha2VfcmVxdWVzdCgmbXBfYmgtPmJpbyk7CkBAIC0zOTMsNyArMzkzLDcgQEAKIAkJCSpiaW8gPSAqKG1wX2JoLT5tYXN0ZXJfYmlvKTsKIAkJCWJpby0+Ymlfc2VjdG9yICs9IGNvbmYtPm11bHRpcGF0aHNbbXBfYmgtPnBhdGhdLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bXVsdGlwYXRoc1ttcF9iaC0+cGF0aF0ucmRldi0+YmRldjsKLQkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKKwkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCk7CiAJCQliaW8tPmJpX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsKIAkJCWJpby0+YmlfcHJpdmF0ZSA9IG1wX2JoOwogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKaW5kZXggMjI3NjQyYi4uYTg4NzgyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKQEAgLTM0ODEsNyArMzQ4MSw5IEBACiAJCQkJCX0KIAkJCQkJY3RybFZhbCA9IDA7CiAJCQkJCWZvciAoayA9IDA7IGsgPCBzdGF0ZS0+TVhMX0N0cmxbaV0uc2l6ZTsgaysrKQotCQkJCQkJY3RybFZhbCArPSBzdGF0ZS0+TVhMX0N0cmxbaV0udmFsW2tdICogKDEgPDwgayk7CisJCQkJCQljdHJsVmFsICs9IHN0YXRlLT4KKwkJCQkJCQlNWExfQ3RybFtpXS52YWxba10gKgorCQkJCQkJCSgxIDw8IGspOwogCQkJCX0gZWxzZQogCQkJCQlyZXR1cm4gLTE7CiAJCQl9CkBAIC0zNTgxLDcgKzM1ODMsNyBAQAogCiBzdGF0aWMgdTMyIE1YTF9DZWlsaW5nKHUzMiB2YWx1ZSwgdTMyIHJlc29sdXRpb24pCiB7Ci0JcmV0dXJuICh2YWx1ZS9yZXNvbHV0aW9uICsgKHZhbHVlICUgcmVzb2x1dGlvbiA+IDAgPyAxIDogMCkpOworCXJldHVybiB2YWx1ZSAvIHJlc29sdXRpb24gKyAodmFsdWUgJSByZXNvbHV0aW9uID4gMCA/IDEgOiAwKTsKIH0KIAogLyogUmV0cmlldmUgdGhlIEluaXRpYWx6YXRpb24gUmVnaXN0ZXJzICovCkBAIC0zOTEwLDcgKzM5MTIsMTAgQEAKIAogc3RhdGljIGludCBteGw1MDA1c19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogeworCXN0cnVjdCBteGw1MDA1c19zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwlzdGF0ZS0+Y3VycmVudF9tb2RlID0gTVhMX1FBTTsKIAlyZXR1cm4gbXhsNTAwNXNfcmVjb25maWd1cmUoZmUsIE1YTF9RQU0sIE1YTDUwMDVTX0JBTkRXSURUSF82TUhaKTsKIH0KIApAQCAtNDA5Miw3ICs0MDk3LDYgQEAKIAlzdGF0ZS0+ZnJvbnRlbmQgPSBmZTsKIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwogCXN0YXRlLT5pMmMgPSBpMmM7Ci0Jc3RhdGUtPmN1cnJlbnRfbW9kZSA9IE1YTF9RQU07CiAKIAlwcmludGsoS0VSTl9JTkZPICJNWEw1MDA1UzogQXR0YWNoZWQgYXQgYWRkcmVzcyAweCUwMnhcbiIsCiAJCWNvbmZpZy0+aTJjX2FkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCmluZGV4IDJhMWFhYzEuLmZiM2YzYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKQEAgLTQ5Myw2ICs0OTMsNyBAQAogCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzM6CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzM6CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzM6CisJY2FzZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszOgogCWNhc2UgVFVORVJfTEdfTlRTQ19UQVBFOgogCWNhc2UgVFVORVJfUEhJTElQU19GTTEyNTZfSUgzOgogCWNhc2UgVFVORVJfVENMX01GMDJHSVBfNU46CkBAIC03NjcsNiArNzY4LDcgQEAKIAogCXN3aXRjaCAocHJpdi0+dHlwZSkgewogCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszOgorCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMzoKIAkJaWYgKHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfOF9NSFogJiYKIAkJICAgIHBhcmFtcy0+ZnJlcXVlbmN5ID49IDE1ODg3MDAwMCkKIAkJCWJ1ZlszXSB8PSAweDA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwppbmRleCAwNDk2MWExLi43YzBiYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwpAQCAtOTQ2LDcgKzk0Niw3IEBACiAJfSwKIH07CiAKLS8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRShYKV9NSzMgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFsX3Jhbmdlc1tdID0gewogCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHg4NiwgMHg1MSwgfSwKQEAgLTk4NCw2ICs5ODQsMjcgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mbWQxMjE2bWV4X21rM19wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFsX3JhbmdlcyksCisJCS5oYXNfdGRhOTg4NyA9IDEsCisJCS5wb3J0MV9hY3RpdmUgPSAxLAorCQkucG9ydDJfYWN0aXZlID0gMSwKKwkJLnBvcnQyX2ZtX2hpZ2hfc2Vuc2l0aXZpdHkgPSAxLAorCQkucG9ydDJfaW52ZXJ0X2Zvcl9zZWNhbV9sYyA9IDEsCisJCS5wb3J0MV9zZXRfZm9yX2ZtX21vbm8gPSAxLAorCQkucmFkaW9faWYgPSAxLAorCQkuZm1fZ2Fpbl9ub3JtYWwgPSAxLAorCX0sCisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9ESUdJVEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX2R2Yl9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19kdmJfcmFuZ2VzKSwKKwkJLmlmZnJlcSA9IDE2ICogMzYuMTI1LCAvKk1IeiovCisJfSwKK307CiAKIC8qIC0tLS0tLSBUVU5FUl9MR19URFZTX0gwNlhGIC0gTEcgSU5OT1RFSyAvIElORklORU9OIEFUU0MgLS0tLS0gKi8KIApAQCAtMTY2Myw2ICsxNjg0LDE2IEBACiAJCS5wYXJhbXMgPSB0dW5lcl90Y2xfbWYwMmdpcF81bl9wYXJhbXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RjbF9tZjAyZ2lwXzVuX3BhcmFtcyksCiAJfSwKKwlbVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LM10gPSB7IC8qIFBoaWxpcHMgUEFMICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBGTUQxMjE2TUVYIE1LMyBIeWJyaWQgVHVuZXIiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWV4X21rM19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1leF9tazNfcGFyYW1zKSwKKwkJLm1pbiA9IDE2ICogIDUwLjg3LAorCQkubWF4ID0gMTYgKiA4NTguMDAsCisJCS5zdGVwc2l6ZSA9IDE2NjY2NywKKwkJLmluaXRkYXRhID0gdHVhNjAzeF9hZ2MxMTIsCisJCS5zbGVlcGRhdGEgPSAodThbXSl7IDQsIDB4OWMsIDB4NjAsIDB4ODUsIDB4NTQgfSwKKwl9LAogfTsKIEVYUE9SVF9TWU1CT0wodHVuZXJzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCmluZGV4IGY5YzJiYjkuLmUxMmQxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoeGM1MDAwX2xpc3RfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCk7CiAKLSNkZWZpbmUgZHByaW50ayhsZXZlbCxmbXQsIGFyZy4uLikgaWYgKGRlYnVnID49IGxldmVsKSBcCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgPj0gbGV2ZWwpIFwKIAlwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQsICJ4YzUwMDAiLCAjIyBhcmcpCiAKICNkZWZpbmUgWEM1MDAwX0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS14YzUwMDAtMS4xLmZ3IgpAQCAtMTM4LDExICsxMzgsMTEgQEAKICAgIGltbWVkaWF0ZWx5IHRoZSBsZW5ndGggb2YgdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbi4KIAogKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBYQ19UVl9TVEFOREFSRCB7CiAJY2hhciAqTmFtZTsKIAl1MTYgQXVkaW9Nb2RlOwogCXUxNiBWaWRlb01vZGU7Ci19IFhDX1RWX1NUQU5EQVJEOworfTsKIAogLyogVHVuZXIgc3RhbmRhcmRzICovCiAjZGVmaW5lIE1OX05UU0NfUEFMX0JUU0MJMApAQCAtMTY5LDcgKzE2OSw3IEBACiAjZGVmaW5lIEZNX1JhZGlvX0lOUFVUMiAJMjEKICNkZWZpbmUgRk1fUmFkaW9fSU5QVVQxIAkyMgogCi1zdGF0aWMgWENfVFZfU1RBTkRBUkQgWEM1MDAwX1N0YW5kYXJkW01BWF9UVl9TVEFOREFSRF0gPSB7CitzdGF0aWMgc3RydWN0IFhDX1RWX1NUQU5EQVJEIFhDNTAwMF9TdGFuZGFyZFtNQVhfVFZfU1RBTkRBUkRdID0gewogCXsiTS9OLU5UU0MvUEFMLUJUU0MiLCAweDA0MDAsIDB4ODAyMH0sCiAJeyJNL04tTlRTQy9QQUwtQTIiLCAgIDB4MDYwMCwgMHg4MDIwfSwKIAl7Ik0vTi1OVFNDL1BBTC1FSUFKIiwgMHgwNDQwLCAweDgwMjB9LApAQCAtMTgzLDcgKzE4Myw3IEBACiAJeyJEL0stUEFMLU5JQ0FNIiwgICAgIDB4MEU4MCwgMHg4MDA5fSwKIAl7IkQvSy1QQUwtTU9OTyIsICAgICAgMHgxNDc4LCAweDgwMDl9LAogCXsiRC9LLVNFQ0FNLUEyIERLMSIsICAweDEyMDAsIDB4ODAwOX0sCi0JeyJEL0stU0VDQU0tQTIgTC9ESzMiLDB4MEUwMCwgMHg4MDA5fSwKKwl7IkQvSy1TRUNBTS1BMiBML0RLMyIsIDB4MEUwMCwgMHg4MDA5fSwKIAl7IkQvSy1TRUNBTS1BMiBNT05PIiwgMHgxNDc4LCAweDgwMDl9LAogCXsiTC1TRUNBTS1OSUNBTSIsICAgICAweDhFODIsIDB4MDAwOX0sCiAJeyJMJy1TRUNBTS1OSUNBTSIsICAgIDB4OEU4MiwgMHg0MDA5fSwKQEAgLTMwNyw5ICszMDcsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbGVuLCBwb3MsIGluZGV4OwogCXU4IGJ1ZltYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSF07CiAKLQlpbmRleD0wOwotCXdoaWxlICgoaTJjX3NlcXVlbmNlW2luZGV4XSE9MHhGRikgfHwgKGkyY19zZXF1ZW5jZVtpbmRleCsxXSE9MHhGRikpIHsKLQkJbGVuID0gaTJjX3NlcXVlbmNlW2luZGV4XSogMjU2ICsgaTJjX3NlcXVlbmNlW2luZGV4KzFdOworCWluZGV4ID0gMDsKKwl3aGlsZSAoKGkyY19zZXF1ZW5jZVtpbmRleF0gIT0gMHhGRikgfHwKKwkJKGkyY19zZXF1ZW5jZVtpbmRleCArIDFdICE9IDB4RkYpKSB7CisJCWxlbiA9IGkyY19zZXF1ZW5jZVtpbmRleF0gKiAyNTYgKyBpMmNfc2VxdWVuY2VbaW5kZXgrMV07CiAJCWlmIChsZW4gPT0gMHgwMDAwKSB7CiAJCQkvKiBSRVNFVCBjb21tYW5kICovCiAJCQlyZXN1bHQgPSB4Y19yZXNldChmZSk7CkBAIC0zMjksMTUgKzMzMCwxNyBAQAogCQkJYnVmWzFdID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgMV07CiAJCQlwb3MgPSAyOwogCQkJd2hpbGUgKHBvcyA8IGxlbikgewotCQkJCWlmICgobGVuIC0gcG9zKSA+IFhDX01BWF9JMkNfV1JJVEVfTEVOR1RIIC0gMikgewotCQkJCQluYnl0ZXNfdG9fc2VuZCA9IFhDX01BWF9JMkNfV1JJVEVfTEVOR1RIOwotCQkJCX0gZWxzZSB7CisJCQkJaWYgKChsZW4gLSBwb3MpID4gWENfTUFYX0kyQ19XUklURV9MRU5HVEggLSAyKQorCQkJCQluYnl0ZXNfdG9fc2VuZCA9CisJCQkJCQlYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSDsKKwkJCQllbHNlCiAJCQkJCW5ieXRlc190b19zZW5kID0gKGxlbiAtIHBvcyArIDIpOworCQkJCWZvciAoaSA9IDI7IGkgPCBuYnl0ZXNfdG9fc2VuZDsgaSsrKSB7CisJCQkJCWJ1ZltpXSA9IGkyY19zZXF1ZW5jZVtpbmRleCArIHBvcyArCisJCQkJCQlpIC0gMl07CiAJCQkJfQotCQkJCWZvciAoaT0yOyBpPG5ieXRlc190b19zZW5kOyBpKyspIHsKLQkJCQkJYnVmW2ldID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgcG9zICsgaSAtIDJdOwotCQkJCX0KLQkJCQlyZXN1bHQgPSB4Y19zZW5kX2kyY19kYXRhKHByaXYsIGJ1ZiwgbmJ5dGVzX3RvX3NlbmQpOworCQkJCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLAorCQkJCQluYnl0ZXNfdG9fc2VuZCk7CiAKIAkJCQlpZiAocmVzdWx0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKQogCQkJCQlyZXR1cm4gcmVzdWx0OwpAQCAtMzg2LDggKzM4OSw3IEBACiAJZHByaW50aygxLCAiJXMoJWQpIFNvdXJjZSA9ICVzXG4iLCBfX2Z1bmNfXywgcmZfbW9kZSwKIAkJcmZfbW9kZSA9PSBYQ19SRl9NT0RFX0FJUiA/ICJBTlRFTk5BIiA6ICJDQUJMRSIpOwogCi0JaWYgKChyZl9tb2RlICE9IFhDX1JGX01PREVfQUlSKSAmJiAocmZfbW9kZSAhPSBYQ19SRl9NT0RFX0NBQkxFKSkKLQl7CisJaWYgKChyZl9tb2RlICE9IFhDX1JGX01PREVfQUlSKSAmJiAocmZfbW9kZSAhPSBYQ19SRl9NT0RFX0NBQkxFKSkgewogCQlyZl9tb2RlID0gWENfUkZfTU9ERV9DQUJMRTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXMoKSwgSW52YWxpZCBtb2RlLCBkZWZhdWx0aW5nIHRvIENBQkxFIiwKQEAgLTU2MCwxMyArNTYyLDEzIEBACiAJCS5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYnVmLCAubGVuID0gbGVuIH07CiAKIAlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19wcm9wcy5hZGFwLCAmbXNnLCAxKSAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGM1MDAwIEkyQyByZWFkIGZhaWxlZCAobGVuPSVpKVxuIiwoaW50KWxlbik7CisJCXByaW50ayhLRVJOX0VSUiAieGM1MDAwIEkyQyByZWFkIGZhaWxlZCAobGVuPSVpKVxuIiwgKGludClsZW4pOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGM1MDAwX2Z3dXBsb2FkKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCB4YzUwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IHhjNTAwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKQEAgLTU3Niw3ICs1NzgsOCBAQAogCXByaW50ayhLRVJOX0lORk8gInhjNTAwMDogd2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsCiAJCVhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFKTsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSwgJnByaXYtPmkyY19wcm9wcy5hZGFwLT5kZXYpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSwKKwkJJnByaXYtPmkyY19wcm9wcy5hZGFwLT5kZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDA6IFVwbG9hZCBmYWlsZWQuIChmaWxlIG5vdCBmb3VuZD8pXG4iKTsKIAkJcmV0ID0gWENfUkVTVUxUX1JFU0VUX0ZBSUxVUkU7CkBAIC01OTIsNyArNTk1LDcgQEAKIAkJcmV0ID0gWENfUkVTVUxUX1JFU0VUX0ZBSUxVUkU7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAieGM1MDAwOiBmaXJtd2FyZSB1cGxvYWRcbiIpOwotCQlyZXQgPSB4Y19sb2FkX2kyY19zZXF1ZW5jZShmZSwgIGZ3LT5kYXRhICk7CisJCXJldCA9IHhjX2xvYWRfaTJjX3NlcXVlbmNlKGZlLCAgZnctPmRhdGEpOwogCX0KIAogb3V0OgpAQCAtNjUxLDcgKzY1NCw3IEBACiAKIAlkcHJpbnRrKDEsICIlcygpIGZyZXF1ZW5jeT0lZCAoSHopXG4iLCBfX2Z1bmNfXywgcGFyYW1zLT5mcmVxdWVuY3kpOwogCi0Jc3dpdGNoKHBhcmFtcy0+dS52c2IubW9kdWxhdGlvbikgeworCXN3aXRjaCAocGFyYW1zLT51LnZzYi5tb2R1bGF0aW9uKSB7CiAJY2FzZSBWU0JfODoKIAljYXNlIFZTQl8xNjoKIAkJZHByaW50aygxLCAiJXMoKSBWU0IgbW9kdWxhdGlvblxuIiwgX19mdW5jX18pOwpAQCAtNzQ4LDQyICs3NTEsNDIgQEAKIAkvKiBGSVggTUU6IFNvbWUgdmlkZW8gc3RhbmRhcmRzIG1heSBoYXZlIHNldmVyYWwgcG9zc2libGUgYXVkaW8KIAkJICAgc3RhbmRhcmRzLiBXZSBzaW1wbHkgZGVmYXVsdCB0byBvbmUgb2YgdGhlbSBoZXJlLgogCSAqLwotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgewogCQkvKiBkZWZhdWx0IHRvIEJUU0MgYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBNTl9OVFNDX1BBTF9CVFNDOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9CRykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9CRykgewogCQkvKiBkZWZhdWx0IHRvIE5JQ0FNIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gQkdfUEFMX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKIAkJLyogZGVmYXVsdCB0byBOSUNBTSBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IElfUEFMX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgewogCQkvKiBkZWZhdWx0IHRvIE5JQ0FNIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gREtfUEFMX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0RLKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fREspIHsKIAkJLyogZGVmYXVsdCB0byBBMiBESzEgYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBES19TRUNBTV9BMkRLMTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgewogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IExfU0VDQU1fTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTEMpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MQykgewogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IExDX1NFQ0FNX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CkBAIC03OTEsNyArNzk0LDcgQEAKIHR1bmVfY2hhbm5lbDoKIAlyZXQgPSB4Y19TZXRTaWduYWxTb3VyY2UocHJpdiwgcHJpdi0+cmZfbW9kZSk7CiAJaWYgKHJldCAhPSBYQ19SRVNVTFRfU1VDQ0VTUykgewotCXByaW50ayhLRVJOX0VSUgorCQlwcmludGsoS0VSTl9FUlIKIAkJCSJ4YzUwMDA6IHhjX1NldFNpZ25hbFNvdXJjZSglZCkgZmFpbGVkXG4iLAogCQkJcHJpdi0+cmZfbW9kZSk7CiAJCXJldHVybiAtRVJFTU9URUlPOwpAQCAtODYzLDcgKzg2Niw3IEBACiAJICogSTJDIHRyYW5zYWN0aW9ucyB1bnRpbCBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZS4gIFRoaXMgd2F5IHdlCiAJICogZG9uJ3QgaGF2ZSB0byByZWx5IG9uIGNsb2NrIHN0cmV0Y2hpbmcgd29ya2luZy4KIAkgKi8KLQl4Y193YWl0KCAxMDAgKTsKKwl4Y193YWl0KDEwMCk7CiAKIAkvKiBEZWZhdWx0IHRvICJDQUJMRSIgbW9kZSAqLwogCXJldCB8PSB4Y193cml0ZV9yZWcocHJpdiwgWFJFR19TSUdOQUxTT1VSQ0UsIFhDX1JGX01PREVfQ0FCTEUpOwpAQCAtODg1LDE1ICs4ODgsMTMgQEAKIAkgKi8KIAogCXJldCA9IHhjX3NodXRkb3duKHByaXYpOwotCWlmKHJldCAhPSBYQ19SRVNVTFRfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkieGM1MDAwOiAlcygpIHVuYWJsZSB0byBzaHV0ZG93biB0dW5lclxuIiwKIAkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JfQotCWVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gWENfUkVTVUxUX1NVQ0NFU1M7Ci0JfQogfQogCiBzdGF0aWMgaW50IHhjNTAwMF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQpAQCAtOTg5LDcgKzk5MCw3IEBACiAJaWYgKHhjNTAwMF9yZWFkcmVnKHByaXYsIFhSRUdfUFJPRFVDVF9JRCwgJmlkKSAhPSAwKQogCQlnb3RvIGZhaWw7CiAKLQlzd2l0Y2goaWQpIHsKKwlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBYQ19QUk9EVUNUX0lEX0ZXX0xPQURFRDoKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkJInhjNTAwMDogU3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQgYXQgYWRkcmVzcyAweCUwMnhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmgKaW5kZXggY2YxYTU1OC4uZjRjMTQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaApAQCAtNDUsMTcgKzQ1LDE3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDApIHx8IFwKICAgICAoZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHhjNTAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAkJCQkJICBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHhjNTAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnhjNTAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJCQkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCiAJCQkJCQkgc3RydWN0IHhjNTAwMF9jb25maWcgKmNmZykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KLSNlbmRpZiAvLyBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwCisjZW5kaWYKIAotI2VuZGlmIC8vIF9fWEM1MDAwX0hfXworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggZjczMjE0NC4uMTRlNjI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtNTk1LDYgKzU5NSwxOCBAQAogCWRtMTEwNWR2Yl9kbWFfdW5tYXAoZG0xMTA1ZHZiKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBzaGFycF96MDE5NGFfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkuaW5pdHRhYiA9IHNoYXJwX3owMTk0YV9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMSwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF8xLAorCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlLAorfTsKKwogc3RhdGljIHN0cnVjdCBzdHYwMjg4X2NvbmZpZyBlYXJkYV9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAogCS5taW5fZGVsYXlfbXMgPSAxMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IGYxNzBlODIuLjU2ODlkMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC00Nyw2ICs0Nyw3IEBACiBzdGF0aWMgaW50IGR2Yl9mb3JjZV9hdXRvX2ludmVyc2lvbjsKIHN0YXRpYyBpbnQgZHZiX292ZXJyaWRlX3R1bmVfZGVsYXk7CiBzdGF0aWMgaW50IGR2Yl9wb3dlcmRvd25fb25fc2xlZXAgPSAxOworc3RhdGljIGludCBkdmJfbWZlX3dhaXRfdGltZSA9IDU7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChmcm9udGVuZF9kZWJ1ZywgZHZiX2Zyb250ZW5kX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmcm9udGVuZF9kZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGNvcmUgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CkBAIC01OCw2ICs1OSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl9vdmVycmlkZV90dW5lX2RlbGF5LCAiMDogbm9ybWFsIChkZWZhdWx0KSwgPjAgPT4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGxvY2sgYWZ0ZXIgYSB0dW5lIGF0dGVtcHQiKTsKIG1vZHVsZV9wYXJhbShkdmJfcG93ZXJkb3duX29uX3NsZWVwLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkdmJfcG93ZXJkb3duX29uX3NsZWVwLCAiMDogZG8gbm90IHBvd2VyIGRvd24sIDE6IHR1cm4gTE5CIHZvbHRhZ2Ugb2ZmIG9uIHNsZWVwIChkZWZhdWx0KSIpOworbW9kdWxlX3BhcmFtKGR2Yl9tZmVfd2FpdF90aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkdmJfbWZlX3dhaXRfdGltZSwgIldhaXQgdXAgdG8gPG1mZV93YWl0X3RpbWU+IHNlY29uZHMgb24gb3BlbigpIGZvciBtdWx0aS1mcm9udGVuZCB0byBiZWNvbWUgYXZhaWxhYmxlIChkZWZhdWx0OjUgc2Vjb25kcykiKTsKIAogI2RlZmluZSBkcHJpbnRrIGlmIChkdmJfZnJvbnRlbmRfZGVidWcpIHByaW50awogCkBAIC0yMTIsOCArMjE1LDkgQEAKIAogc3RhdGljIHZvaWQgZHZiX2Zyb250ZW5kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JZHByaW50ayAoIkRWQjogaW5pdGlhbGlzaW5nIGZyb250ZW5kICVpICglcykuLi5cbiIsCisJZHByaW50ayAoIkRWQjogaW5pdGlhbGlzaW5nIGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgKCVzKS4uLlxuIiwKIAkJIGZlLT5kdmItPm51bSwKKwkJIGZlLT5pZCwKIAkJIGZlLT5vcHMuaW5mby5uYW1lKTsKIAogCWlmIChmZS0+b3BzLmluaXQpCkBAIC02ODYsNyArNjkwLDcgQEAKIAltYigpOwogCiAJZmVfdGhyZWFkID0ga3RocmVhZF9ydW4oZHZiX2Zyb250ZW5kX3RocmVhZCwgZmUsCi0JCSJrZHZiLWZlLSVpIiwgZmUtPmR2Yi0+bnVtKTsKKwkJImtkdmItYWQtJWktZmUtJWkiLCBmZS0+ZHZiLT5udW0sZmUtPmlkKTsKIAlpZiAoSVNfRVJSKGZlX3RocmVhZCkpIHsKIAkJcmV0ID0gUFRSX0VSUihmZV90aHJlYWQpOwogCQlwcmludGsoImR2Yl9mcm9udGVuZF9zdGFydDogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQgKCVkKVxuIiwgcmV0KTsKQEAgLTcxMCw4ICs3MTQsOCBAQAogCQkqZnJlcV9tYXggPSBtaW4oZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9tYXgsIGZlLT5vcHMudHVuZXJfb3BzLmluZm8uZnJlcXVlbmN5X21heCk7CiAKIAlpZiAoKmZyZXFfbWluID09IDAgfHwgKmZyZXFfbWF4ID09IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogZnJvbnRlbmQgJXUgZnJlcXVlbmN5IGxpbWl0cyB1bmRlZmluZWQgLSBmaXggdGhlIGRyaXZlclxuIiwKLQkJICAgICAgIGZlLT5kdmItPm51bSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAldSBmcmVxdWVuY3kgbGltaXRzIHVuZGVmaW5lZCAtIGZpeCB0aGUgZHJpdmVyXG4iLAorCQkgICAgICAgZmUtPmR2Yi0+bnVtLGZlLT5pZCk7CiB9CiAKIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2NoZWNrX3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCkBAIC03MjQsOCArNzI4LDggQEAKIAlkdmJfZnJvbnRlbmRfZ2V0X2ZyZXF1ZW55X2xpbWl0cyhmZSwgJmZyZXFfbWluLCAmZnJlcV9tYXgpOwogCWlmICgoZnJlcV9taW4gJiYgcGFybXMtPmZyZXF1ZW5jeSA8IGZyZXFfbWluKSB8fAogCSAgICAoZnJlcV9tYXggJiYgcGFybXMtPmZyZXF1ZW5jeSA+IGZyZXFfbWF4KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IGZyZXF1ZW5jeSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCi0JCSAgICAgICBmZS0+ZHZiLT5udW0sIHBhcm1zLT5mcmVxdWVuY3ksIGZyZXFfbWluLCBmcmVxX21heCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAlaSBmcmVxdWVuY3kgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAorCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBmZS0+aWQsIHBhcm1zLT5mcmVxdWVuY3ksIGZyZXFfbWluLCBmcmVxX21heCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzM1LDggKzczOSw4IEBACiAJCSAgICAgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSA8IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4pIHx8CiAJCSAgICAoZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCAmJgogCQkgICAgIHBhcm1zLT51LnFwc2suc3ltYm9sX3JhdGUgPiBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCi0JCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKKwkJCSAgICAgICBmZS0+ZHZiLT5udW0sIGZlLT5pZCwgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSwKIAkJCSAgICAgICBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluLCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC03NDYsOCArNzUwLDggQEAKIAkJICAgICBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUgPCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluKSB8fAogCQkgICAgKGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXggJiYKIAkJICAgICBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUgPiBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCi0JCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgc3ltYm9sIHJhdGUgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAorCQkJICAgICAgIGZlLT5kdmItPm51bSwgZmUtPmlkLCBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUsCiAJCQkgICAgICAgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbiwgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtODk5LDMwICs5MDMsMzAgQEAKIAlpbnQgaTsKIAogCWlmICh0dnAtPmNtZCA8PSAwIHx8IHR2cC0+Y21kID4gRFRWX01BWF9DT01NQU5EKSB7Ci0JCXByaW50aygiJXM6IHR2cC5jbWQgPSAweCUwOHggKHVuZGVmaW5lZC91bmtub3duL2ludmFsaWQpXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHZwLmNtZCA9IDB4JTA4eCB1bmRlZmluZWRcbiIsCiAJCQlfX2Z1bmNfXywgdHZwLT5jbWQpOwogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKCIlcygpIHR2cC5jbWQgICAgPSAweCUwOHggKCVzKVxuIgotCQksX19GVU5DVElPTl9fCisJZHByaW50aygiJXMoKSB0dnAuY21kICAgID0gMHglMDh4ICglcylcbiIKKwkJLF9fZnVuY19fCiAJCSx0dnAtPmNtZAogCQksZHR2X2NtZHNbIHR2cC0+Y21kIF0ubmFtZSk7CiAKIAlpZihkdHZfY21kc1sgdHZwLT5jbWQgXS5idWZmZXIpIHsKIAotCQlwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmxlbiA9IDB4JTAyeFxuIgotCQkJLF9fRlVOQ1RJT05fXworCQlkcHJpbnRrKCIlcygpIHR2cC51LmJ1ZmZlci5sZW4gPSAweCUwMnhcbiIKKwkJCSxfX2Z1bmNfXwogCQkJLHR2cC0+dS5idWZmZXIubGVuKTsKIAogCQlmb3IoaSA9IDA7IGkgPCB0dnAtPnUuYnVmZmVyLmxlbjsgaSsrKQotCQkJcHJpbnRrKCIlcygpIHR2cC51LmJ1ZmZlci5kYXRhWzB4JTAyeF0gPSAweCUwMnhcbiIKLQkJCQksX19GVU5DVElPTl9fCisJCQlkcHJpbnRrKCIlcygpIHR2cC51LmJ1ZmZlci5kYXRhWzB4JTAyeF0gPSAweCUwMnhcbiIKKwkJCQksX19mdW5jX18KIAkJCQksaQogCQkJCSx0dnAtPnUuYnVmZmVyLmRhdGFbaV0pOwogCiAJfSBlbHNlCi0JCXByaW50aygiJXMoKSB0dnAudS5kYXRhID0gMHglMDh4XG4iLCBfX0ZVTkNUSU9OX18sIHR2cC0+dS5kYXRhKTsKKwkJZHByaW50aygiJXMoKSB0dnAudS5kYXRhID0gMHglMDh4XG4iLCBfX2Z1bmNfXywgdHZwLT51LmRhdGEpOwogfQogCiBpbnQgaXNfbGVnYWN5X2RlbGl2ZXJ5X3N5c3RlbShmZV9kZWxpdmVyeV9zeXN0ZW1fdCBzKQpAQCAtOTQyLDggKzk0Niw2IEBACiB7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAKLQlwcmludGsoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAljLT5mcmVxdWVuY3kgPSBwLT5mcmVxdWVuY3k7CiAJYy0+aW52ZXJzaW9uID0gcC0+aW52ZXJzaW9uOwogCkBAIC05OTgsMjcgKzEwMDAsMjUgQEAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCA9ICZmZXByaXYtPnBhcmFtZXRlcnM7CiAKLQlwcmludGsoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAlwLT5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CiAJcC0+aW52ZXJzaW9uID0gYy0+aW52ZXJzaW9uOwogCiAJc3dpdGNoIChmZS0+b3BzLmluZm8udHlwZSkgewogCWNhc2UgRkVfUVBTSzoKLQkJcHJpbnRrKCIlcygpIFByZXBhcmluZyBRUFNLIHJlcVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgUVBTSyByZXFcbiIsIF9fZnVuY19fKTsKIAkJcC0+dS5xcHNrLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CiAJCXAtPnUucXBzay5mZWNfaW5uZXIgPSBjLT5mZWNfaW5uZXI7CiAJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJTOwogCQlicmVhazsKIAljYXNlIEZFX1FBTToKLQkJcHJpbnRrKCIlcygpIFByZXBhcmluZyBRQU0gcmVxXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIFByZXBhcmluZyBRQU0gcmVxXG4iLCBfX2Z1bmNfXyk7CiAJCXAtPnUucWFtLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CiAJCXAtPnUucWFtLmZlY19pbm5lciA9IGMtPmZlY19pbm5lcjsKIAkJcC0+dS5xYW0ubW9kdWxhdGlvbiA9IGMtPm1vZHVsYXRpb247CiAJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJDX0FOTkVYX0FDOwogCQlicmVhazsKIAljYXNlIEZFX09GRE06Ci0JCXByaW50aygiJXMoKSBQcmVwYXJpbmcgT0ZETSByZXFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIE9GRE0gcmVxXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChjLT5iYW5kd2lkdGhfaHogPT0gNjAwMDAwMCkKIAkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfNl9NSFo7CiAJCWVsc2UgaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA3MDAwMDAwKQpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIAkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CiAJCWJyZWFrOwogCWNhc2UgRkVfQVRTQzoKLQkJcHJpbnRrKCIlcygpIFByZXBhcmluZyBWU0IgcmVxXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIFByZXBhcmluZyBWU0IgcmVxXG4iLCBfX2Z1bmNfXyk7CiAJCXAtPnUudnNiLm1vZHVsYXRpb24gPSBjLT5tb2R1bGF0aW9uOwogCQlpZiAoKGMtPm1vZHVsYXRpb24gPT0gVlNCXzgpIHx8IChjLT5tb2R1bGF0aW9uID09IFZTQl8xNikpCiAJCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfQVRTQzsKQEAgLTEwNTUsMTQgKzEwNTUsMTMgQEAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCA9ICZmZXByaXYtPnBhcmFtZXRlcnM7CiAKLQlwcmludGsoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAlwLT5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CiAJcC0+aW52ZXJzaW9uID0gYy0+aW52ZXJzaW9uOwogCiAJc3dpdGNoKGMtPm1vZHVsYXRpb24pIHsKIAljYXNlIFBTS184OgogCWNhc2UgQVBTS18xNjoKKwljYXNlIEFQU0tfMzI6CiAJY2FzZSBRUFNLOgogCQlwLT51LnFwc2suc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKIAkJcC0+dS5xcHNrLmZlY19pbm5lciA9IGMtPmZlY19pbm5lcjsKQEAgLTEwODksMTkgKzEwODgsMTcgQEAKIHsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCS8qIEZvciBsZWdhY3kgZGVsaXZlcnkgc3lzdGVtcyB3ZSBkb24ndCBuZWVkIHRoZSBkZWxpdmVyeV9zeXN0ZW0gdG8KIAkgKiBiZSBzcGVjaWZpZWQsIGJ1dCB3ZSBwb3B1bGF0ZSB0aGUgb2xkZXIgc3RydWN0dXJlcyBmcm9tIHRoZSBjYWNoZQogCSAqIHNvIHdlIGNhbiBjYWxsIHNldF9mcm9udGVuZCBvbiBvbGRlciBkcml2ZXJzLgogCSAqLwogCWlmKGlzX2xlZ2FjeV9kZWxpdmVyeV9zeXN0ZW0oYy0+ZGVsaXZlcnlfc3lzdGVtKSkgewogCi0JCXByaW50aygiJXMoKSBsZWdhY3ksIG1vZHVsYXRpb24gPSAlZFxuIiwgX19GVU5DVElPTl9fLCBjLT5tb2R1bGF0aW9uKTsKKwkJZHByaW50aygiJXMoKSBsZWdhY3ksIG1vZHVsYXRpb24gPSAlZFxuIiwgX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOwogCQlkdHZfcHJvcGVydHlfbGVnYWN5X3BhcmFtc19zeW5jKGZlKTsKIAogCX0gZWxzZSB7Ci0JCXByaW50aygiJXMoKSBhZHYsIG1vZHVsYXRpb24gPSAlZFxuIiwgX19GVU5DVElPTl9fLCBjLT5tb2R1bGF0aW9uKTsKKwkJZHByaW50aygiJXMoKSBhZHYsIG1vZHVsYXRpb24gPSAlZFxuIiwgX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOwogCiAJCS8qIEZvciBhZHZhbmNlZCBkZWxpdmVyeSBzeXN0ZW1zIC8gbW9kdWxhdGlvbiB0eXBlcyAuLi4KIAkJICogd2Ugc2VlZCB0aGUgbGVjYWN5IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIHN0cnVjdHVyZQpAQCAtMTEyMyw4ICsxMTIwLDYgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlwcmludGsoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAlkdHZfcHJvcGVydHlfZHVtcCh0dnApOwogCiAJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KQEAgLTExOTgsNyArMTE5Myw2IEBACiB7CiAJaW50IHIgPSAwOwogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7Ci0JcHJpbnRrKCIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCWR0dl9wcm9wZXJ0eV9kdW1wKHR2cCk7CiAKIAkvKiBBbGxvdyB0aGUgZnJvbnRlbmQgdG8gdmFsaWRhdGUgaW5jb21pbmcgcHJvcGVydGllcyAqLwpAQCAtMTIxMyw3ICsxMjA3LDcgQEAKIAkJLyogUmVzZXQgYSBjYWNoZSBvZiBkYXRhIHNwZWNpZmljIHRvIHRoZSBmcm9udGVuZCBoZXJlLiBUaGlzIGRvZXMKIAkJICogbm90IGVmZmVjdCBoYXJkd2FyZS4KIAkJICovCi0JCXByaW50aygiJXMoKSBGbHVzaGluZyBwcm9wZXJ0eSBjYWNoZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZHByaW50aygiJXMoKSBGbHVzaGluZyBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOwogCQltZW1zZXQoJmZlLT5kdHZfcHJvcGVydHlfY2FjaGUsIDAsIHNpemVvZihzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMpKTsKIAkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IHR2cC0+Y21kOwogCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19VTkRFRklORUQ7CkBAIC0xMjI0LDcgKzEyMTgsNyBAQAogCQkgKiBpb2N0bC4KIAkJICovCiAJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPSB0dnAtPmNtZDsKLQkJcHJpbnRrKCIlcygpIEZpbmFsaXNlZCBwcm9wZXJ0eSBjYWNoZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZHByaW50aygiJXMoKSBGaW5hbGlzZWQgcHJvcGVydHkgY2FjaGVcbiIsIF9fZnVuY19fKTsKIAkJZHR2X3Byb3BlcnR5X2NhY2hlX3N1Ym1pdChmZSk7CiAKIAkJciB8PSBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KGlub2RlLCBmaWxlLCBGRV9TRVRfRlJPTlRFTkQsCkBAIC0xMzM1LDEyICsxMzI5LDEwIEBACiAJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmKGNtZCA9PSBGRV9TRVRfUFJPUEVSVFkpIHsKLQkJcHJpbnRrKCIlcygpIEZFX1NFVF9QUk9QRVJUWVxuIiwgX19GVU5DVElPTl9fKTsKLQogCQl0dnBzID0gKHN0cnVjdCBkdHZfcHJvcGVydGllcyBfX3VzZXIgKilwYXJnOwogCi0JCXByaW50aygiJXMoKSBwcm9wZXJ0aWVzLm51bSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHR2cHMtPm51bSk7Ci0JCXByaW50aygiJXMoKSBwcm9wZXJ0aWVzLnByb3BzID0gJXBcbiIsIF9fRlVOQ1RJT05fXywgdHZwcy0+cHJvcHMpOworCQlkcHJpbnRrKCIlcygpIHByb3BlcnRpZXMubnVtID0gJWRcbiIsIF9fZnVuY19fLCB0dnBzLT5udW0pOworCQlkcHJpbnRrKCIlcygpIHByb3BlcnRpZXMucHJvcHMgPSAlcFxuIiwgX19mdW5jX18sIHR2cHMtPnByb3BzKTsKIAogCQkvKiBQdXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgdGhhdCBjYW4KIAkJICogYmUgc2VudCBhdCBvbmNlICovCkBAIC0xMzY0LDE4ICsxMzU2LDE2IEBACiAJCQllcnIgfD0gKHR2cCArIGkpLT5yZXN1bHQ7CiAJCX0KIAotCQlpZihmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN0YXRlID09IERUVl9UVU5FKSB7Ci0JCQlwcmludGsoIiVzKCkgUHJvcGVydHkgY2FjaGUgaXMgZnVsbCwgdHVuaW5nXG4iLCBfX0ZVTkNUSU9OX18pOwotCQl9CisJCWlmKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPT0gRFRWX1RVTkUpCisJCQlkcHJpbnRrKCIlcygpIFByb3BlcnR5IGNhY2hlIGlzIGZ1bGwsIHR1bmluZ1xuIiwgX19mdW5jX18pOwogCiAJfSBlbHNlCiAJaWYoY21kID09IEZFX0dFVF9QUk9QRVJUWSkgewotCQlwcmludGsoIiVzKCkgRkVfR0VUX1BST1BFUlRZXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJCXR2cHMgPSAoc3RydWN0IGR0dl9wcm9wZXJ0aWVzIF9fdXNlciAqKXBhcmc7CiAKLQkJcHJpbnRrKCIlcygpIHByb3BlcnRpZXMubnVtID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdHZwcy0+bnVtKTsKLQkJcHJpbnRrKCIlcygpIHByb3BlcnRpZXMucHJvcHMgPSAlcFxuIiwgX19GVU5DVElPTl9fLCB0dnBzLT5wcm9wcyk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5udW0gPSAlZFxuIiwgX19mdW5jX18sIHR2cHMtPm51bSk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5wcm9wcyA9ICVwXG4iLCBfX2Z1bmNfXywgdHZwcy0+cHJvcHMpOwogCiAJCS8qIFB1dCBhbiBhcmJpdHJhcnkgbGltaXQgb24gdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGNhbgogCQkgKiBiZSBzZW50IGF0IG9uY2UgKi8KQEAgLTE3MDQsMTMgKzE2OTQsNTMgQEAKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gZHZiZGV2LT5wcml2OwogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CisJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyID0gZmUtPmR2YjsKIAlpbnQgcmV0OwogCiAJZHByaW50ayAoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlpZiAoYWRhcHRlci0+bWZlX3NoYXJlZCkgeworCQltdXRleF9sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOworCisJCWlmIChhZGFwdGVyLT5tZmVfZHZiZGV2ID09IE5VTEwpCisJCQlhZGFwdGVyLT5tZmVfZHZiZGV2ID0gZHZiZGV2OworCisJCWVsc2UgaWYgKGFkYXB0ZXItPm1mZV9kdmJkZXYgIT0gZHZiZGV2KSB7CisJCQlzdHJ1Y3QgZHZiX2RldmljZQorCQkJCSptZmVkZXYgPSBhZGFwdGVyLT5tZmVfZHZiZGV2OworCQkJc3RydWN0IGR2Yl9mcm9udGVuZAorCQkJCSptZmUgPSBtZmVkZXYtPnByaXY7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUKKwkJCQkqbWZlcHJpdiA9IG1mZS0+ZnJvbnRlbmRfcHJpdjsKKwkJCWludCBtZmVyZXRyeSA9IChkdmJfbWZlX3dhaXRfdGltZSA8PCAxKTsKKworCQkJbXV0ZXhfdW5sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOworCQkJd2hpbGUgKG1mZXJldHJ5LS0gJiYgKG1mZWRldi0+dXNlcnMgIT0gLTEgfHwKKwkJCQkJbWZlcHJpdi0+dGhyZWFkICE9IE5VTEwpKSB7CisJCQkJaWYobXNsZWVwX2ludGVycnVwdGlibGUoNTAwKSkgeworCQkJCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJfQorCisJCQltdXRleF9sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOworCQkJaWYoYWRhcHRlci0+bWZlX2R2YmRldiAhPSBkdmJkZXYpIHsKKwkJCQltZmVkZXYgPSBhZGFwdGVyLT5tZmVfZHZiZGV2OworCQkJCW1mZSA9IG1mZWRldi0+cHJpdjsKKwkJCQltZmVwcml2ID0gbWZlLT5mcm9udGVuZF9wcml2OworCQkJCWlmIChtZmVkZXYtPnVzZXJzICE9IC0xIHx8CisJCQkJCQltZmVwcml2LT50aHJlYWQgIT0gTlVMTCkgeworCQkJCQltdXRleF91bmxvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQkJCXJldHVybiAtRUJVU1k7CisJCQkJfQorCQkJCWFkYXB0ZXItPm1mZV9kdmJkZXYgPSBkdmJkZXY7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoZHZiZGV2LT51c2VycyA9PSAtMSAmJiBmZS0+b3BzLnRzX2J1c19jdHJsKSB7CiAJCWlmICgocmV0ID0gZmUtPm9wcy50c19idXNfY3RybChmZSwgMSkpIDwgMCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycjA7CiAJfQogCiAJaWYgKChyZXQgPSBkdmJfZ2VuZXJpY19vcGVuIChpbm9kZSwgZmlsZSkpIDwgMCkKQEAgLTE3MzAsNiArMTc2MCw4IEBACiAJCWZlcHJpdi0+ZXZlbnRzLmV2ZW50ciA9IGZlcHJpdi0+ZXZlbnRzLmV2ZW50dyA9IDA7CiAJfQogCisJaWYgKGFkYXB0ZXItPm1mZV9zaGFyZWQpCisJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogCiBlcnIyOgpAQCAtMTczNyw2ICsxNzY5LDkgQEAKIGVycjE6CiAJaWYgKGR2YmRldi0+dXNlcnMgPT0gLTEgJiYgZmUtPm9wcy50c19idXNfY3RybCkKIAkJZmUtPm9wcy50c19idXNfY3RybChmZSwgMCk7CitlcnIwOgorCWlmIChhZGFwdGVyLT5tZmVfc2hhcmVkKQorCQltdXRleF91bmxvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgwNiw4ICsxODQxLDkgQEAKIAlmZS0+ZHZiID0gZHZiOwogCWZlcHJpdi0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX09GRjsKIAotCXByaW50ayAoIkRWQjogcmVnaXN0ZXJpbmcgZnJvbnRlbmQgJWkgKCVzKS4uLlxuIiwKKwlwcmludGsgKCJEVkI6IHJlZ2lzdGVyaW5nIGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgKCVzKS4uLlxuIiwKIAkJZmUtPmR2Yi0+bnVtLAorCQlmZS0+aWQsCiAJCWZlLT5vcHMuaW5mby5uYW1lKTsKIAogCWR2Yl9yZWdpc3Rlcl9kZXZpY2UgKGZlLT5kdmIsICZmZXByaXYtPmR2YmRldiwgJmR2YmRldl90ZW1wbGF0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggMzA1NTMwMS4uZGI0YTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTIyMiw2ICsyMjIsNyBAQAogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyBkdHZfcHJvcGVydHlfY2FjaGU7CiAjZGVmaW5lIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIgMAogCWludCAoKmNhbGxiYWNrKSh2b2lkICphZGFwdGVyX3ByaXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCBhcmcpOworCWludCBpZDsKIH07CiAKIGV4dGVybiBpbnQgZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCA2NjU3NzZkLi5hMTEzNzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMzI2LDYgKzMyNiw5IEBACiAJYWRhcC0+bmFtZSA9IG5hbWU7CiAJYWRhcC0+bW9kdWxlID0gbW9kdWxlOwogCWFkYXAtPmRldmljZSA9IGRldmljZTsKKwlhZGFwLT5tZmVfc2hhcmVkID0gMDsKKwlhZGFwLT5tZmVfZHZiZGV2ID0gTlVMTDsKKwltdXRleF9pbml0ICgmYWRhcC0+bWZlX2xvY2spOwogCiAJbGlzdF9hZGRfdGFpbCAoJmFkYXAtPmxpc3RfaGVhZCwgJmR2Yl9hZGFwdGVyX2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCmluZGV4IDg5ZDEyZGMuLjU3NGUzMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCkBAIC02Miw2ICs2MiwxMCBAQAogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKIAogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKworCWludCBtZmVfc2hhcmVkOwkJCS8qIGluZGljYXRlcyBtdXR1YWxseSBleGNsdXNpdmUgZnJvbnRlbmRzICovCisJc3RydWN0IGR2Yl9kZXZpY2UgKm1mZV9kdmJkZXY7CS8qIGZyb250ZW5kIGRldmljZSBpbiB1c2UgKi8KKwlzdHJ1Y3QgbXV0ZXggbWZlX2xvY2s7CQkvKiBhY2Nlc3MgbG9jayBmb3IgdGhyZWFkIGNyZWF0aW9uICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCmluZGV4IGNhNTNkZjYuLjYyODZmYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwpAQCAtNDIyLDYgKzQyMiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX2luaXR0YWIsCisJLm1jbGsgPSA4ODAwMDAwMFVMLAorCS5pbnZlcnQgPSAxLAorCS5za2lwX3JlaW5pdCA9IDAsCisJLmxvY2tfb3V0cHV0ID0gU1RWMDI5OV9MT0NLT1VUUFVUXzEsCisJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IHNoYXJwX3owMTk0YV9zZXRfc3ltYm9sX3JhdGUsCit9OworCiBzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIGR3MjEwNF9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDU1LAogCS5tcGdfY2xrX3Bvc19wb2wgPSAweDAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKaW5kZXggOTQzMGUwMy4uNWQxYWJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDIyNzAyLmgiCiAKLQogc3RydWN0IGN4MjI3MDJfc3RhdGUgewogCi0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CiAKIAkvKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCi0JY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWc7CisJY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC00OSwxMCArNDgsMTMgQEAKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKKwogI2RlZmluZSBkcHJpbnRrCWlmIChkZWJ1ZykgcHJpbnRrCiAKIC8qIFJlZ2lzdGVyIHZhbHVlcyB0byBpbml0aWFsaXNlIHRoZSBkZW1vZCAqLwotc3RhdGljIHU4IGluaXRfdGFiIFtdID0geworc3RhdGljIHU4IGluaXRfdGFiW10gPSB7CiAJMHgwMCwgMHgwMCwgLyogU3RvcCBhcXVpc2l0aW9uICovCiAJMHgwQiwgMHgwNiwKIAkweDA5LCAweDAxLApAQCAtODAsNjUgKzgyLDY3IEBACiAJMHhmZCwgMHgwMCwKIH07CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl93cml0ZXJlZyAoc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCitzdGF0aWMgaW50IGN4MjI3MDJfd3JpdGVyZWcoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCS5idWYgPSBidWYsIC5sZW4gPSAyIH07CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CiAKIAlpZiAocmV0ICE9IDEpCi0JCXByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDJ4LCByZXQgPT0gJWkpXG4iLAorCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlczogZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCiAJCQlfX2Z1bmNfXywgcmVnLCBkYXRhLCByZXQpOwogCiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyB1OCBjeDIyNzAyX3JlYWRyZWcgKHN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSwgdTggcmVnKQorc3RhdGljIHU4IGN4MjI3MDJfcmVhZHJlZyhzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCB9OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKLQkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKLQkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAxIH0gfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCisJCQkuYnVmID0gYjAsIC5sZW4gPSAxIH0sCisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5idWYgPSBiMSwgLmxlbiA9IDEgfSB9OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CiAKIAlpZiAocmV0ICE9IDIpCi0JCXByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJldCA9PSAlaSlcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLAorCQkJX19mdW5jX18sIHJldCk7CiAKIAlyZXR1cm4gYjFbMF07CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9zZXRfaW52ZXJzaW9uIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIGludCBpbnZlcnNpb24pCitzdGF0aWMgaW50IGN4MjI3MDJfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIGludCBpbnZlcnNpb24pCiB7CiAJdTggdmFsOwogCiAJc3dpdGNoIChpbnZlcnNpb24pIHsKLQotCQljYXNlIElOVkVSU0lPTl9BVVRPOgotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JCWNhc2UgSU5WRVJTSU9OX09OOgotCQkJdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQyk7Ci0JCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEMsIHZhbCB8IDB4MDEpOwotCi0JCWNhc2UgSU5WRVJTSU9OX09GRjoKLQkJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEMpOwotCQkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBDLCB2YWwgJiAweGZlKTsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KKwljYXNlIElOVkVSU0lPTl9BVVRPOgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJY2FzZSBJTlZFUlNJT05fT046CisJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQyk7CisJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCB2YWwgfCAweDAxKTsKKwljYXNlIElOVkVSU0lPTl9PRkY6CisJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQyk7CisJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCB2YWwgJiAweGZlKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIH0KIAogLyogUmV0cmlldmUgdGhlIGRlbW9kIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGN4MjI3MDJfZ2V0X3RwcyAoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHBzKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwKKwlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqcCkKIHsKIAl1OCB2YWw7CiAKQEAgLTE0NiwxODAgKzE1MCwyODEgQEAKIAlpZiAoIShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEEpICYgMHgyMCkpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwMSk7Ci0Jc3dpdGNoKCAodmFsJjB4MTgpPj4zKSB7Ci0JCWNhc2UgMDogcC0+Y29uc3RlbGxhdGlvbiA9ICAgUVBTSzsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsgYnJlYWs7CisJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDAxKTsKKwlzd2l0Y2ggKCh2YWwgJiAweDE4KSA+PiAzKSB7CisJY2FzZSAwOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUVBTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUUFNXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7CisJCWJyZWFrOwogCX0KLQlzd2l0Y2goIHZhbCYweDA3ICkgewotCQljYXNlIDA6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOyBicmVhazsKLQkJY2FzZSAxOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfMTsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzI7IGJyZWFrOwotCQljYXNlIDM6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV80OyBicmVhazsKKwlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKKwljYXNlIDA6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV80OworCQlicmVhazsKIAl9CiAKIAotCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MDIpOwotCXN3aXRjaCggKHZhbCYweDM4KT4+MyApIHsKLQkJY2FzZSAwOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOyBicmVhazsKLQkJY2FzZSAxOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOyBicmVhazsKLQkJY2FzZSAyOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfM180OyBicmVhazsKLQkJY2FzZSAzOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OyBicmVhazsKLQkJY2FzZSA0OiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OyBicmVhazsKKwl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MDIpOworCXN3aXRjaCAoKHZhbCAmIDB4MzgpID4+IDMpIHsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQotCXN3aXRjaCggdmFsJjB4MDcgKSB7Ci0JCWNhc2UgMDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzNfNDsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsgYnJlYWs7Ci0JCWNhc2UgNDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsgYnJlYWs7CisJc3dpdGNoICh2YWwgJiAweDA3KSB7CisJY2FzZSAwOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ183Xzg7CisJCWJyZWFrOwogCX0KIAotCi0JdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwMyk7Ci0Jc3dpdGNoKCAodmFsJjB4MGMpPj4yICkgewotCQljYXNlIDA6IHAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OyBicmVhazsKLQkJY2FzZSAyOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzg7IGJyZWFrOwotCQljYXNlIDM6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfNDsgYnJlYWs7CisJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDAzKTsKKwlzd2l0Y2ggKCh2YWwgJiAweDBjKSA+PiAyKSB7CisJY2FzZSAwOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV84OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKIAl9Ci0Jc3dpdGNoKCB2YWwmMHgwMyApIHsKLQkJY2FzZSAwOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOyBicmVhazsKLQkJY2FzZSAxOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOyBicmVhazsKKwlzd2l0Y2ggKHZhbCAmIDB4MDMpIHsKKwljYXNlIDA6CisJCXAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBjeDIyNzAyX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JZHByaW50ayAoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKIAlpZiAoZW5hYmxlKQotCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgJiAweGZlKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEQsCisJCQljeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpICYgMHhmZSk7CiAJZWxzZQotCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgfCAxKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEQsCisJCQljeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpIHwgMSk7CiB9CiAKIC8qIFRhbGsgdG8gdGhlIGRlbW9kLCBzZXQgdGhlIEZFQywgR1VBUkQsIFFBTSBzZXR0aW5ncyBldGMgKi8KLXN0YXRpYyBpbnQgY3gyMjcwMl9zZXRfdHBzIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDIyNzAyX3NldF90cHMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXU4IHZhbDsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CiAJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHApOwotCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAl9CiAKIAkvKiBzZXQgaW52ZXJzaW9uICovCi0JY3gyMjcwMl9zZXRfaW52ZXJzaW9uIChzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKKwljeDIyNzAyX3NldF9pbnZlcnNpb24oc3RhdGUsIHAtPmludmVyc2lvbik7CiAKIAkvKiBzZXQgYmFuZHdpZHRoICovCi0Jc3dpdGNoKHAtPnUub2ZkbS5iYW5kd2lkdGgpIHsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5iYW5kd2lkdGgpIHsKIAljYXNlIEJBTkRXSURUSF82X01IWjoKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MjAgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDIwKTsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfN19NSFo6Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDEwICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpIHwgMHgxMCk7CiAJCWJyZWFrOwogCWNhc2UgQkFORFdJRFRIXzhfTUhaOgotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYweGNmICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQljeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRwcmludGsgKCIlczogaW52YWxpZCBiYW5kd2lkdGhcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogaW52YWxpZCBiYW5kd2lkdGhcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0KLQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDX0FVVE87IC8vdGVtcCBoYWNrIGFzIG1hbnVhbCBub3Qgd29ya2luZworCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsgLyogdGVtcCBoYWNrIGFzIG1hbnVhbCBub3Qgd29ya2luZyAqLwogCiAJLyogdXNlIGF1dG8gY29uZmlndXJhdGlvbj8gKi8KLQlpZigocC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbj09SElFUkFSQ0hZX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5jb25zdGVsbGF0aW9uPT1RQU1fQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUD09RkVDX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFA9PUZFQ19BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWw9PUdVQVJEX0lOVEVSVkFMX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZT09VFJBTlNNSVNTSU9OX01PREVfQVVUTykgKSB7CisJaWYgKChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID09IEhJRVJBUkNIWV9BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9PSBRQU1fQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9PSBGRUNfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9PSBGRUNfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID09IEdVQVJEX0lOVEVSVkFMX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV9BVVRPKSkgewogCiAJCS8qIFRQUyBTb3VyY2UgLSB1c2UgaGFyZHdhcmUgZHJpdmVuIHZhbHVlcyAqLwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA2LCAweDEwKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNywgMHg5KTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwOCwgMHhDMSk7Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikgJiAweGZjICk7Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikKKwkJCSYgMHhmYyk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCk7CiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDAsIDB4MDEpOyAvKiBCZWdpbiBhcXVpc2l0aW9uICovCi0JCWRwcmludGsoIiVzOiBBdXRvZGV0ZWN0aW5nXG4iLF9fZnVuY19fKTsKKwkJZHByaW50aygiJXM6IEF1dG9kZXRlY3RpbmdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogbWFudWFsbHkgcHJvZ3JhbW1lZCB2YWx1ZXMgKi8KLQl2YWw9MDsKLQlzd2l0Y2gocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24pIHsKLQkJY2FzZSAgIFFQU0s6IHZhbCA9ICh2YWwmMHhlNyk7IGJyZWFrOwotCQljYXNlIFFBTV8xNjogdmFsID0gKHZhbCYweGU3KXwweDA4OyBicmVhazsKLQkJY2FzZSBRQU1fNjQ6IHZhbCA9ICh2YWwmMHhlNyl8MHgxMDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgY29uc3RlbGxhdGlvblxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAwOworCXN3aXRjaCAocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24pIHsKKwljYXNlIFFQU0s6CisJCXZhbCA9ICh2YWwgJiAweGU3KTsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMTY6CisJCXZhbCA9ICh2YWwgJiAweGU3KSB8IDB4MDg7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQl2YWwgPSAodmFsICYgMHhlNykgfCAweDEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBjb25zdGVsbGF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzd2l0Y2gocC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbikgewotCQljYXNlIEhJRVJBUkNIWV9OT05FOiB2YWwgPSAodmFsJjB4ZjgpOyBicmVhazsKLQkJY2FzZSAgICBISUVSQVJDSFlfMTogdmFsID0gKHZhbCYweGY4KXwxOyBicmVhazsKLQkJY2FzZSAgICBISUVSQVJDSFlfMjogdmFsID0gKHZhbCYweGY4KXwyOyBicmVhazsKLQkJY2FzZSAgICBISUVSQVJDSFlfNDogdmFsID0gKHZhbCYweGY4KXwzOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBoaWVyYXJjaHlcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uKSB7CisJY2FzZSBISUVSQVJDSFlfTk9ORToKKwkJdmFsID0gKHZhbCAmIDB4ZjgpOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8xOgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAxOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8yOgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAyOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV80OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBoaWVyYXJjaHlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDA2LCB2YWwpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDYsIHZhbCk7CiAKLQl2YWw9MDsKLQlzd2l0Y2gocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCkgewotCQljYXNlIEZFQ19OT05FOgotCQljYXNlIEZFQ18xXzI6IHZhbCA9ICh2YWwmMHhjNyk7IGJyZWFrOwotCQljYXNlIEZFQ18yXzM6IHZhbCA9ICh2YWwmMHhjNyl8MHgwODsgYnJlYWs7Ci0JCWNhc2UgRkVDXzNfNDogdmFsID0gKHZhbCYweGM3KXwweDEwOyBicmVhazsKLQkJY2FzZSBGRUNfNV82OiB2YWwgPSAodmFsJjB4YzcpfDB4MTg7IGJyZWFrOwotCQljYXNlIEZFQ183Xzg6IHZhbCA9ICh2YWwmMHhjNyl8MHgyMDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgY29kZV9yYXRlX0hQXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXZhbCA9IDA7CisJc3dpdGNoIChwLT51Lm9mZG0uY29kZV9yYXRlX0hQKSB7CisJY2FzZSBGRUNfTk9ORToKKwljYXNlIEZFQ18xXzI6CisJCXZhbCA9ICh2YWwgJiAweGM3KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMl8zOgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDA4OworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MTA7CisJCWJyZWFrOworCWNhc2UgRkVDXzVfNjoKKwkJdmFsID0gKHZhbCAmIDB4YzcpIHwgMHgxODsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDIwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBjb2RlX3JhdGVfSFBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN3aXRjaChwLT51Lm9mZG0uY29kZV9yYXRlX0xQKSB7Ci0JCWNhc2UgRkVDX05PTkU6Ci0JCWNhc2UgRkVDXzFfMjogdmFsID0gKHZhbCYweGY4KTsgYnJlYWs7Ci0JCWNhc2UgRkVDXzJfMzogdmFsID0gKHZhbCYweGY4KXwxOyBicmVhazsKLQkJY2FzZSBGRUNfM180OiB2YWwgPSAodmFsJjB4ZjgpfDI7IGJyZWFrOwotCQljYXNlIEZFQ181XzY6IHZhbCA9ICh2YWwmMHhmOCl8MzsgYnJlYWs7Ci0JCWNhc2UgRkVDXzdfODogdmFsID0gKHZhbCYweGY4KXw0OyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBjb2RlX3JhdGVfTFBcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwLT51Lm9mZG0uY29kZV9yYXRlX0xQKSB7CisJY2FzZSBGRUNfTk9ORToKKwljYXNlIEZFQ18xXzI6CisJCXZhbCA9ICh2YWwgJiAweGY4KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMl8zOgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAxOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDI7CisJCWJyZWFrOworCWNhc2UgRkVDXzVfNjoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMzsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBjb2RlX3JhdGVfTFBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDA3LCB2YWwpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDcsIHZhbCk7CiAKLQl2YWw9MDsKLQlzd2l0Y2gocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsKSB7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjogdmFsID0gKHZhbCYweGYzKTsgYnJlYWs7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8xNjogdmFsID0gKHZhbCYweGYzKXwweDA0OyBicmVhazsKLQkJY2FzZSAgR1VBUkRfSU5URVJWQUxfMV84OiB2YWwgPSAodmFsJjB4ZjMpfDB4MDg7IGJyZWFrOwotCQljYXNlICBHVUFSRF9JTlRFUlZBTF8xXzQ6IHZhbCA9ICh2YWwmMHhmMyl8MHgwYzsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgZ3VhcmRfaW50ZXJ2YWxcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJdmFsID0gMDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCkgeworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpOworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMTY6CisJCXZhbCA9ICh2YWwgJiAweGYzKSB8IDB4MDQ7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgorCQl2YWwgPSAodmFsICYgMHhmMykgfCAweDA4OworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfNDoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpIHwgMHgwYzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgZ3VhcmRfaW50ZXJ2YWxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN3aXRjaChwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUpIHsKLQkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzogdmFsID0gKHZhbCYweGZjKTsgYnJlYWs7Ci0JCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6IHZhbCA9ICh2YWwmMHhmYyl8MTsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgdHJhbnNtaXNzaW9uX21vZGVcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCQl2YWwgPSAodmFsICYgMHhmYyk7CisJCWJyZWFrOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCXZhbCA9ICh2YWwgJiAweGZjKSB8IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIHRyYW5zbWlzc2lvbl9tb2RlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA4LCB2YWwpOwotCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEIpICYgMHhmYykgfCAweDAyICk7Ci0JY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDAgKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBCLAorCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKSAmIDB4ZmMpIHwgMHgwMik7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDApOwogCiAJLyogQmVnaW4gY2hhbm5lbCBhcXVpc2l0aW9uICovCiAJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7CkBAIC0zMjksMTA5ICs0MzQsMTExIEBACiAKIC8qIFJlc2V0IHRoZSBkZW1vZCBoYXJkd2FyZSBhbmQgcmVzZXQgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwogICAgdG8gYSBkZWZhdWx0IHN0YXRlLiAqLwotc3RhdGljIGludCBjeDIyNzAyX2luaXQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBjeDIyNzAyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwMCwgMHgwMik7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMik7CiAKIAltc2xlZXAoMTApOwogCi0JZm9yIChpPTA7IGk8c2l6ZW9mKGluaXRfdGFiKTsgaSs9MikKLQkJY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIGluaXRfdGFiW2ldLCBpbml0X3RhYltpKzFdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkgKz0gMikKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgaW5pdF90YWJbaV0sIGluaXRfdGFiW2kgKyAxXSk7CiAKLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHhmOCwgKHN0YXRlLT5jb25maWctPm91dHB1dF9tb2RlIDw8IDEpICYgMHgwMik7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHhmOCwgKHN0YXRlLT5jb25maWctPm91dHB1dF9tb2RlIDw8IDEpCisJCSYgMHgwMik7CiAKIAljeDIyNzAyX2kyY19nYXRlX2N0cmwoZmUsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCByZWcwQTsKIAl1OCByZWcyMzsKIAogCSpzdGF0dXMgPSAwOwogCi0JcmVnMEEgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDBBKTsKLQlyZWcyMyA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MjMpOworCXJlZzBBID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBBKTsKKwlyZWcyMyA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgyMyk7CiAKLQlkcHJpbnRrICgiJXM6IHN0YXR1cyBkZW1vZD0weCUwMnggYWdjPTB4JTAyeFxuIgotCQksX19mdW5jX18scmVnMEEscmVnMjMpOworCWRwcmludGsoIiVzOiBzdGF0dXMgZGVtb2Q9MHglMDJ4IGFnYz0weCUwMnhcbiIKKwkJLCBfX2Z1bmNfXywgcmVnMEEsIHJlZzIzKTsKIAotCWlmKHJlZzBBICYgMHgxMCkgeworCWlmIChyZWcwQSAmIDB4MTApIHsKIAkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKIAkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKIAkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKIAl9CiAKLQlpZihyZWcwQSAmIDB4MjApCisJaWYgKHJlZzBBICYgMHgyMCkKIAkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKIAotCWlmKHJlZzIzIDwgMHhmMCkKKwlpZiAocmVnMjMgPCAweGYwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQlpZihjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKKwlpZiAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKIAkJLyogUmVhbHRpbWUgc3RhdGlzdGljcyAqLwotCQkqYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNwotCQkJfCAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERikmMHg3Rik7CisJCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKKwkJCXwgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERikgJiAweDdGKTsKIAl9IGVsc2UgewogCQkvKiBBdmVyYWd0aW5lIHN0YXRpc3RpY3MgKi8KLQkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKLQkJCXwgY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERik7CisJCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKKwkJCXwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNpZ25hbF9zdHJlbmd0aCkKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwl1MTYgKnNpZ25hbF9zdHJlbmd0aCkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXUxNiByc19iZXIgPSAwOwotCXJzX2JlciA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MjMpOworCXJzX2JlciA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgyMyk7CiAJKnNpZ25hbF9zdHJlbmd0aCA9IChyc19iZXIgPDwgOCkgfCByc19iZXI7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQl1MTYgcnNfYmVyPTA7Ci0JaWYoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhFNCkgJiAweDAyKSB7CisJdTE2IHJzX2JlciA9IDA7CisJaWYgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhFNCkgJiAweDAyKSB7CiAJCS8qIFJlYWx0aW1lIHN0YXRpc3RpY3MgKi8KLQkJcnNfYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNwotCQkJfCAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERikmIDB4N0YpOworCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKKwkJCXwgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERikgJiAweDdGKTsKIAl9IGVsc2UgewogCQkvKiBBdmVyYWdpbmUgc3RhdGlzdGljcyAqLwotCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA4Ci0JCQl8IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REYpOworCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDgKKwkJCXwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKTsKIAl9CiAJKnNuciA9IH5yc19iZXI7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCitzdGF0aWMgaW50IGN4MjI3MDJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXU4IF91Y2Jsb2NrczsKIAogCS8qIFJTIFVuY29ycmVjdGFibGUgUGFja2V0IENvdW50IHRoZW4gcmVzZXQgKi8KLQlfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweEUzKTsKKwlfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4RTMpOwogCWlmIChzdGF0ZS0+cHJldlVDQmxvY2tzIDwgX3VjYmxvY2tzKQogCQkqdWNibG9ja3MgPSAoX3VjYmxvY2tzIC0gc3RhdGUtPnByZXZVQ0Jsb2Nrcyk7CiAJZWxzZQpAQCAtNDQxLDM0ICs1NDgsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDIyNzAyX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQl1OCByZWcwQyA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEMpOworCXU4IHJlZzBDID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKTsKIAogCXAtPmludmVyc2lvbiA9IHJlZzBDICYgMHgxID8gSU5WRVJTSU9OX09OIDogSU5WRVJTSU9OX09GRjsKLQlyZXR1cm4gY3gyMjcwMl9nZXRfdHBzIChzdGF0ZSwgJnAtPnUub2ZkbSk7CisJcmV0dXJuIGN4MjI3MDJfZ2V0X3RwcyhzdGF0ZSwgJnAtPnUub2ZkbSk7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQorc3RhdGljIGludCBjeDIyNzAyX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKIHsKIAl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjeDIyNzAyX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBjeDIyNzAyX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJa2ZyZWUoc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyMjcwMl9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSksIEdGUF9LRVJORUwpOwpAQCAtNDg1LDcgKzU5NCw4IEBACiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyMjcwMl9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjI3MDJfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCkBAIC00OTMsNiArNjAzLDcgQEAKIAlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGN4MjI3MDJfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjI3MDJfb3BzID0gewogCkBAIC01MjUsMTEgKzYzNiw2IEBACiAJLnJlYWRfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRfdWNibG9ja3MsCiB9OwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25leGFudCBDWDIyNzAyIERWQi1UIERlbW9kdWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotRVhQT1JUX1NZTUJPTChjeDIyNzAyX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaAppbmRleCBiMWU0NjVjLi5mMTU0ZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgY3gyMjcwMl9jb25maWcKLXsKK3N0cnVjdCBjeDIyNzAyX2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCkBAIC00MSwxNiArNDAsMTkgQEAKIAl1OCBvdXRwdXRfbW9kZTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDIpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMl9NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyMjcwMl9hdHRhY2goCisJY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDIyNzAyX2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KLSNlbmRpZiAvLyBDT05GSUdfRFZCX0NYMjI3MDIKKyNlbmRpZgogCi0jZW5kaWYgLy8gQ1gyMjcwMl9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCmluZGV4IGRlYjM2ZjQuLmIxNDRiMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYwpAQCAtNDEsMTAgKzQxLDE0IEBACiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiY3gyNDExNi5oIgogCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOworCiAjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAogCWRvIHsgXAotCQlpZiAoZGVidWcpIHByaW50ayAoImN4MjQxMTY6ICIgYXJncyk7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAiIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS1jeDI0MTE2LmZ3IgpAQCAtNjgsMTMgKzcyLDIwIEBACiAjZGVmaW5lIENYMjQxMTZfUkVHX1VDQjggICAgKDB4Y2EpCiAjZGVmaW5lIENYMjQxMTZfUkVHX0NMS0RJViAgKDB4ZjMpCiAjZGVmaW5lIENYMjQxMTZfUkVHX1JBVEVESVYgKDB4ZjkpCi0jZGVmaW5lIENYMjQxMTZfUkVHX0ZFQ1NUQVRVUyAoMHg5YykgICAgLyogY29uZmlndXJlZCBmZWMgKG5vdCB0dW5lZCkgb3IgYWN0dWFsIEZFQyAodHVuZWQpIDE9MS8yIDI9Mi8zIGV0YyAqLworCisvKiBjb25maWd1cmVkIGZlYyAobm90IHR1bmVkKSBvciBhY3R1YWwgRkVDICh0dW5lZCkgMT0xLzIgMj0yLzMgZXRjICovCisjZGVmaW5lIENYMjQxMTZfUkVHX0ZFQ1NUQVRVUyAoMHg5YykKIAogLyogRkVDU1RBVFVTIGJpdHMgKi8KLSNkZWZpbmUgQ1gyNDExNl9GRUNfRkVDTUFTSyAgICgweDFmKSAgICAvKiBtYXNrIHRvIGRldGVybWluZSBjb25maWd1cmVkIGZlYyAobm90IHR1bmVkKSBvciBhY3R1YWwgZmVjICh0dW5lZCkgKi8KLSNkZWZpbmUgQ1gyNDExNl9GRUNfRFZCUyAgICAgICgweDIwKSAgICAvKiBTZWxlY3QgRFZCLVMgZGVtb2R1bGF0b3IsIGVsc2UgRFZCLVMyICovCisvKiBtYXNrIHRvIGRldGVybWluZSBjb25maWd1cmVkIGZlYyAobm90IHR1bmVkKSBvciBhY3R1YWwgZmVjICh0dW5lZCkgKi8KKyNkZWZpbmUgQ1gyNDExNl9GRUNfRkVDTUFTSyAgICgweDFmKQorCisvKiBTZWxlY3QgRFZCLVMgZGVtb2R1bGF0b3IsIGVsc2UgRFZCLVMyICovCisjZGVmaW5lIENYMjQxMTZfRkVDX0RWQlMgICAgICAoMHgyMCkKICNkZWZpbmUgQ1gyNDExNl9GRUNfVU5LTk9XTiAgICgweDQwKSAgICAvKiBVbmtub3duL3VudXNlZCAqLwotI2RlZmluZSBDWDI0MTE2X0ZFQ19QSUxPVCAgICAgKDB4ODApICAgIC8qIFBpbG90IG1vZGUgcmVxdWVzdGVkIHdoZW4gdHVuaW5nIGVsc2UgYWx3YXlzIHJlc2V0IHdoZW4gdHVuZWQgKi8KKworLyogUGlsb3QgbW9kZSByZXF1ZXN0ZWQgd2hlbiB0dW5pbmcgZWxzZSBhbHdheXMgcmVzZXQgd2hlbiB0dW5lZCAqLworI2RlZmluZSBDWDI0MTE2X0ZFQ19QSUxPVCAgICAgKDB4ODApCiAKIC8qIGFyZyBidWZmZXIgc2l6ZSAqLwogI2RlZmluZSBDWDI0MTE2X0FSR0xFTiAoMHgxZSkKQEAgLTExNiwxMiArMTI3LDE3IEBACiAKIC8qIERpU0VxQyB0b25lIGJ1cnN0ICovCiBzdGF0aWMgaW50IHRvbmVidXJzdCA9IDE7Cittb2R1bGVfcGFyYW0odG9uZWJ1cnN0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh0b25lYnVyc3QsICJEaVNFcUMgdG9uZWJ1cnN0IDA9T0ZGLCAxPVRPTkUgQ0FDSEUsICJcCisJIjI9TUVTU0FHRSBDQUNIRSAoZGVmYXVsdDoxKSIpOwogCiAvKiBTTlIgbWVhc3VyZW1lbnRzICovCi1zdGF0aWMgaW50IGVzbm9fc25yID0gMDsKK3N0YXRpYyBpbnQgZXNub19zbnI7Cittb2R1bGVfcGFyYW0oZXNub19zbnIsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU05SIHJldHVybiB1bml0cywgMD1QRVJDRU5UQUdFIDAtMTAwLCAiXAorCSIxPUVTTk8oZGIgKiAxMCkgKGRlZmF1bHQ6MCkiKTsKIAotZW51bSBjbWRzCi17CitlbnVtIGNtZHMgewogCUNNRF9TRVRfVkNPICAgICA9IDB4MTAsCiAJQ01EX1RVTkVSRVFVRVNUID0gMHgxMSwKIAlDTURfTVBFR0NPTkZJRyAgPSAweDEzLApAQCAtMTM4LDggKzE1NCw3IEBACiB9OwogCiAvKiBUaGUgRGVtb2QvVHVuZXIgY2FuJ3QgZWFzaWx5IHByb3ZpZGUgdGhlc2UsIHdlIGNhY2hlIHRoZW0gKi8KLXN0cnVjdCBjeDI0MTE2X3R1bmluZwoteworc3RydWN0IGN4MjQxMTZfdHVuaW5nIHsKIAl1MzIgZnJlcXVlbmN5OwogCXUzMiBzeW1ib2xfcmF0ZTsKIAlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb247CkBAIC0xNTgsMTYgKzE3MywxNCBAQAogfTsKIAogLyogQmFzaWMgY29tbWFuZHMgdGhhdCBhcmUgc2VudCB0byB0aGUgZmlybXdhcmUgKi8KLXN0cnVjdCBjeDI0MTE2X2NtZAoteworc3RydWN0IGN4MjQxMTZfY21kIHsKIAl1OCBsZW47CiAJdTggYXJnc1tDWDI0MTE2X0FSR0xFTl07CiB9OwogCi1zdHJ1Y3QgY3gyNDExNl9zdGF0ZQotewotCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOwotCWNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyogY29uZmlnOworc3RydWN0IGN4MjQxMTZfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnOwogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIApAQCAtMTc5LDE5ICsxOTIsMjAgQEAKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgZHNlY19jbWQ7CiB9OwogCi1zdGF0aWMgaW50IGN4MjQxMTZfd3JpdGVyZWcoc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBpbnQgcmVnLCBpbnQgZGF0YSkKK3N0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsIGludCByZWcsIGludCBkYXRhKQogewogCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKIAkJLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKIAlpbnQgZXJyOwogCi0JaWYgKGRlYnVnPjEpCisJaWYgKGRlYnVnID4gMSkKIAkJcHJpbnRrKCJjeDI0MTE2OiAlczogd3JpdGUgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAotCQkJCQkJX19mdW5jX18scmVnLCBkYXRhKTsKKwkJCV9fZnVuY19fLCByZWcsIGRhdGEpOwogCi0JaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKKwllcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CisJaWYgKGVyciAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdyaXRlcmVnIGVycm9yKGVyciA9PSAlaSwgcmVnID09IDB4JTAyeCwiCiAJCQkgIiB2YWx1ZSA9PSAweCUwMngpXG4iLCBfX2Z1bmNfXywgZXJyLCByZWcsIGRhdGEpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CkBAIC0yMDAsNyArMjE0LDggQEAKIH0KIAogLyogQnVsayBieXRlIHdyaXRlcyB0byBhIHNpbmdsZSBJMkMgYWRkcmVzcywgZm9yIDMyayBmaXJtd2FyZSBsb2FkICovCi1zdGF0aWMgaW50IGN4MjQxMTZfd3JpdGVyZWdOKHN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSwgaW50IHJlZywgdTggKmRhdGEsIHUxNiBsZW4pCitzdGF0aWMgaW50IGN4MjQxMTZfd3JpdGVyZWdOKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwgaW50IHJlZywKKwkJCSAgICAgY29uc3QgdTggKmRhdGEsIHUxNiBsZW4pCiB7CiAJaW50IHJldCA9IC1FUkVNT1RFSU87CiAJc3RydWN0IGkyY19tc2cgbXNnOwpAQCAtMjIxLDEyICsyMzYsMTMgQEAKIAltc2cuYnVmID0gYnVmOwogCW1zZy5sZW4gPSBsZW4gKyAxOwogCi0JaWYgKGRlYnVnPjEpCi0JCXByaW50aygiY3gyNDExNjogJXM6ICB3cml0ZSByZWdOIDB4JTAyeCwgbGVuID0gJWRcbiIsCi0JCQkJCQlfX2Z1bmNfXyxyZWcsIGxlbik7CisJaWYgKGRlYnVnID4gMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNDExNjogJXM6ICB3cml0ZSByZWdOIDB4JTAyeCwgbGVuID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCBsZW4pOwogCi0JaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4XG4iLAorCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4XG4iLAogCQkJIF9fZnVuY19fLCByZXQsIHJlZyk7CiAJCXJldCA9IC1FUkVNT1RFSU87CiAJfQpAQCAtMjM3LDMwICsyNTMsMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZHJlZyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUsIHU4IHJlZykKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwgdTggcmVnKQogewogCWludCByZXQ7CiAJdTggYjBbXSA9IHsgcmVnIH07CiAJdTggYjFbXSA9IHsgMCB9OwogCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewotCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAotCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDEgfQorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwgLmxlbiA9IDEgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLCAubGVuID0gMSB9CiAJfTsKIAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOwogCiAJaWYgKHJldCAhPSAyKSB7Ci0JCXByaW50aygiJXM6IHJlZz0weCV4IChlcnJvcj0lZClcbiIsIF9fZnVuY19fLCByZWcsIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZz0weCV4IChlcnJvcj0lZClcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChkZWJ1Zz4xKQotCQlwcmludGsoImN4MjQxMTY6IHJlYWQgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLHJlZywgYjFbMF0pOworCWlmIChkZWJ1ZyA+IDEpCisJCXByaW50ayhLRVJOX0lORk8gImN4MjQxMTY6IHJlYWQgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAorCQkJcmVnLCBiMVswXSk7CiAKIAlyZXR1cm4gYjFbMF07CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQorc3RhdGljIGludCBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLAorCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbikKIHsKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBpbnZlcnNpb24pOwogCkBAIC0zMDgsMTAgKzMyOSwxMCBAQAogICogRWcuKDIvMykgc3phcCAiWm9uZSBIb3Jyb3IiCiAgKgogICogbWFzay92YWwgPSAweDA0LCAweDIwCi0gKiBzdGF0dXMgMWYgfCBzaWduYWwgYzNjMCB8IHNuciBhMzMzIHwgYmVyIDAwMDAwMDk4IHwgdW5jIDAwMDAwMDAwIHwgRkVfSEFTX0xPQ0sKKyAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwOTggfCB1bmMgMCB8IEZFX0hBU19MT0NLCiAgKgogICogbWFzay92YWwgPSAweDA0LCAweDMwCi0gKiBzdGF0dXMgMWYgfCBzaWduYWwgYzNjMCB8IHNuciBhMzMzIHwgYmVyIDAwMDAwMDAwIHwgdW5jIDAwMDAwMDAwIHwgRkVfSEFTX0xPQ0sKKyAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwMDAgfCB1bmMgMCB8IEZFX0hBU19MT0NLCiAgKgogICogQWZ0ZXIgdHVuaW5nIEZFQ1NUQVRVUyBjb250YWlucyBhY3R1YWwgRkVDCiAgKiBpbiB1c2UgbnVtYmVyZWQgMSB0aHJvdWdoIHRvIDggZm9yIDEvMiAuLiAyLzMgZXRjCkBAIC0zODksMTggKzQxMCwxNiBAQAogICAqLwogfTsKIAotc3RhdGljIGludCBjeDI0MTE2X2xvb2t1cF9mZWNtb2Qoc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLAorc3RhdGljIGludCBjeDI0MTE2X2xvb2t1cF9mZWNtb2Qoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLAogCWZlX21vZHVsYXRpb25fdCBtLCBmZV9jb2RlX3JhdGVfdCBmKQogewogCWludCBpLCByZXQgPSAtRU9QTk9UU1VQUDsKIAogCWRwcmludGsoIiVzKDB4JTAyeCwweCUwMngpXG4iLCBfX2Z1bmNfXywgbSwgZik7CiAKLQlmb3IoaT0wIDsgaSA8IHNpemVvZihDWDI0MTE2X01PREZFQ19NT0RFUykgLyBzaXplb2Yoc3RydWN0IGN4MjQxMTZfbW9kZmVjKSA7IGkrKykKLQl7Ci0JCWlmKCAobSA9PSBDWDI0MTE2X01PREZFQ19NT0RFU1tpXS5tb2R1bGF0aW9uKSAmJgotCQkJKGYgPT0gQ1gyNDExNl9NT0RGRUNfTU9ERVNbaV0uZmVjKSApCi0JCQl7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoQ1gyNDExNl9NT0RGRUNfTU9ERVMpOyBpKyspIHsKKwkJaWYgKChtID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLm1vZHVsYXRpb24pICYmCisJCQkoZiA9PSBDWDI0MTE2X01PREZFQ19NT0RFU1tpXS5mZWMpKSB7CiAJCQkJcmV0ID0gaTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQwOSw3ICs0MjgsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfZmVjKHN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSwgZmVfbW9kdWxhdGlvbl90IG1vZCwgZmVfY29kZV9yYXRlX3QgZmVjKQorc3RhdGljIGludCBjeDI0MTE2X3NldF9mZWMoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLAorCWZlX21vZHVsYXRpb25fdCBtb2QsIGZlX2NvZGVfcmF0ZV90IGZlYykKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNDE3LDcgKzQzNyw3IEBACiAKIAlyZXQgPSBjeDI0MTE2X2xvb2t1cF9mZWNtb2Qoc3RhdGUsIG1vZCwgZmVjKTsKIAotCWlmKHJldCA8IDApCisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlzdGF0ZS0+ZG54dC5mZWMgPSBmZWM7CkBAIC00MjksNyArNDQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF9zeW1ib2xyYXRlKHN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSwgdTMyIHJhdGUpCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCB1MzIgcmF0ZSkKIHsKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCByYXRlKTsKIApAQCAtNDQ2LDQyICs0NjYsNDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X2xvYWRfZmlybXdhcmUgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKK3N0YXRpYyBpbnQgY3gyNDExNl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOwogCi1zdGF0aWMgaW50IGN4MjQxMTZfZmlybXdhcmVfb25kZW1hbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjQxMTZfZmlybXdhcmVfb25kZW1hbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgcmV0ID0gMDsKIAotCWRwcmludGsoIiVzKClcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWlmIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4MjApID4gMCkKLQl7CisJaWYgKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgPiAwKSB7CiAKIAkJaWYgKHN0YXRlLT5za2lwX2Z3X2xvYWQpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBMb2FkIGZpcm13YXJlICovCi0JCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgc29tZW9uZSB1cGxvYWRzIGl0ICovCi0JCXByaW50aygiJXM6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCAoJXMpLi4uXG4iLCBfX2Z1bmNfXywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFKTsKLQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSwgJnN0YXRlLT5pMmMtPmRldik7Ci0JCXByaW50aygiJXM6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCgyKS4uLlxuIiwgX19mdW5jX18pOworCQkvKiByZXF1ZXN0IHRoZSBmaXJtd2FyZSwgdGhpcyB3aWxsIGJsb2NrIHVudGlsIGxvYWRlZCAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsCisJCQlfX2Z1bmNfXywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFKTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSwKKwkJCSZzdGF0ZS0+aTJjLT5kZXYpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkKDIpLi4uXG4iLAorCQkJX19mdW5jX18pOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoIiVzOiBObyBmaXJtd2FyZSB1cGxvYWRlZCAodGltZW91dCBvciBmaWxlIG5vdCBmb3VuZD8pXG4iLCBfX2Z1bmNfXyk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBmaXJtd2FyZSB1cGxvYWRlZCAiCisJCQkJIih0aW1lb3V0IG9yIGZpbGUgbm90IGZvdW5kPylcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAotCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVjdXJzZSBiYWNrIHRocm91Z2ggaGVyZSBkdXJpbmcgbG9hZGluZyAqLworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVjdXJzZSBiYWNrIHRocm91Z2ggaGVyZQorCQkgKiBkdXJpbmcgbG9hZGluZyAqLwogCQlzdGF0ZS0+c2tpcF9md19sb2FkID0gMTsKIAogCQlyZXQgPSBjeDI0MTE2X2xvYWRfZmlybXdhcmUoZmUsIGZ3KTsKIAkJaWYgKHJldCkKLQkJCXByaW50aygiJXM6IFdyaXRpbmcgZmlybXdhcmUgdG8gZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogV3JpdGluZyBmaXJtd2FyZSB0byBkZXZpY2UgZmFpbGVkXG4iLAorCQkJCV9fZnVuY19fKTsKIAogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCQlwcmludGsoIiVzOiBGaXJtd2FyZSB1cGxvYWQgJXNcbiIsIF9fZnVuY19fLCByZXQgPT0gMCA/ICJjb21wbGV0ZSIgOiAiZmFpbGVkIik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaXJtd2FyZSB1cGxvYWQgJXNcbiIsIF9fZnVuY19fLAorCQkJcmV0ID09IDAgPyAiY29tcGxldGUiIDogImZhaWxlZCIpOwogCiAJCS8qIEVuc3VyZSBmaXJtd2FyZSBpcyBhbHdheXMgbG9hZGVkIGlmIHJlcXVpcmVkICovCiAJCXN0YXRlLT5za2lwX2Z3X2xvYWQgPSAwOwpAQCAtNDkwLDggKzUxNywxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFRha2UgYSBiYXNpYyBmaXJtd2FyZSBjb21tYW5kIHN0cnVjdHVyZSwgZm9ybWF0IGl0IGFuZCBmb3J3YXJkIGl0IGZvciBwcm9jZXNzaW5nICovCi1zdGF0aWMgaW50IGN4MjQxMTZfY21kX2V4ZWN1dGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBjeDI0MTE2X2NtZCAqY21kKQorLyogVGFrZSBhIGJhc2ljIGZpcm13YXJlIGNvbW1hbmQgc3RydWN0dXJlLCBmb3JtYXQgaXQKKyAqIGFuZCBmb3J3YXJkIGl0IGZvciBwcm9jZXNzaW5nCisgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9jbWRfZXhlY3V0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGN4MjQxMTZfY21kICpjbWQpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGksIHJldDsKQEAgLTQ5OSw0OSArNTI4LDQ5IEBACiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogTG9hZCB0aGUgZmlybXdhcmUgaWYgcmVxdWlyZWQgKi8KLQlpZiAoIChyZXQgPSBjeDI0MTE2X2Zpcm13YXJlX29uZGVtYW5kKGZlKSkgIT0gMCkKLQl7Ci0JCXByaW50aygiJXMoKTogVW5hYmxlIGluaXRpYWxpc2UgdGhlIGZpcm13YXJlXG4iLCBfX2Z1bmNfXyk7CisJcmV0ID0gY3gyNDExNl9maXJtd2FyZV9vbmRlbWFuZChmZSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogVW5hYmxlIGluaXRpYWxpc2UgdGhlIGZpcm13YXJlXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIFdyaXRlIHRoZSBjb21tYW5kICovCi0JZm9yKGkgPSAwOyBpIDwgY21kLT5sZW4gOyBpKyspCi0JeworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmxlbiA7IGkrKykgewogCQlkcHJpbnRrKCIlczogMHglMDJ4ID09IDB4JTAyeFxuIiwgX19mdW5jX18sIGksIGNtZC0+YXJnc1tpXSk7CiAJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIGksIGNtZC0+YXJnc1tpXSk7CiAJfQogCiAJLyogU3RhcnQgZXhlY3V0aW9uIGFuZCB3YWl0IGZvciBjbWQgdG8gdGVybWluYXRlICovCiAJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfRVhFQ1VURSwgMHgwMSk7Ci0Jd2hpbGUoIGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfRVhFQ1VURSkgKQotCXsKKwl3aGlsZSAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFKSkgewogCQltc2xlZXAoMTApOwotCQlpZihpKysgPiA2NCkKLQkJewotCQkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIGlmIHRoZSBmaXJtd2FyZSBkb2VzIG5vIHJlc3BvbmQgKi8KLQkJCXByaW50aygiJXMoKSBGaXJtd2FyZSBub3QgcmVzcG9uZGluZ1xuIiwgX19mdW5jX18pOworCQlpZiAoaSsrID4gNjQpIHsKKwkJCS8qIEF2b2lkIGxvb3BpbmcgZm9yZXZlciBpZiB0aGUgZmlybXdhcmUgZG9lcworCQkJCW5vdCByZXNwb25kICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcygpIEZpcm13YXJlIG5vdCByZXNwb25kaW5nXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJCXJldHVybiAtRVJFTU9URUlPOwogCQl9CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfbG9hZF9maXJtd2FyZSAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCitzdGF0aWMgaW50IGN4MjQxMTZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogewotCXN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CiAJaW50IGksIHJldDsKIAl1bnNpZ25lZCBjaGFyIHZlcnNbNF07CiAKIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwotCWRwcmludGsoIkZpcm13YXJlIGlzICV6dSBieXRlcyAoJTAyeCAlMDJ4IC4uICUwMnggJTAyeClcbiIKLQkJCSxmdy0+c2l6ZQotCQkJLGZ3LT5kYXRhWzBdCi0JCQksZnctPmRhdGFbMV0KLQkJCSxmdy0+ZGF0YVsgZnctPnNpemUtMiBdCi0JCQksZnctPmRhdGFbIGZ3LT5zaXplLTEgXQotCQkJKTsKKwlkcHJpbnRrKCJGaXJtd2FyZSBpcyAlenUgYnl0ZXMgKCUwMnggJTAyeCAuLiAlMDJ4ICUwMngpXG4iLAorCQkJZnctPnNpemUsCisJCQlmdy0+ZGF0YVswXSwKKwkJCWZ3LT5kYXRhWzFdLAorCQkJZnctPmRhdGFbZnctPnNpemUtMl0sCisJCQlmdy0+ZGF0YVtmdy0+c2l6ZS0xXSk7CiAKIAkvKiBUb2dnbGUgODh4IFNSU1QgcGluIHRvIHJlc2V0IGRlbW9kICovCiAJaWYgKHN0YXRlLT5jb25maWctPnJlc2V0X2RldmljZSkKQEAgLTU4Nyw3ICs2MTYsNyBAQAogCWNtZC5hcmdzWzB4MDddID0gMHg5ZDsKIAljbWQuYXJnc1sweDA4XSA9IDB4ZmM7CiAJY21kLmFyZ3NbMHgwOV0gPSAweDA2OwotCWNtZC5sZW49IDB4MGE7CisJY21kLmxlbiA9IDB4MGE7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNTk4LDcgKzYyNyw3IEBACiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfVFVORVJJTklUOwogCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKIAljbWQuYXJnc1sweDAyXSA9IDB4MDA7Ci0JY21kLmxlbj0gMHgwMzsKKwljbWQubGVuID0gMHgwMzsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC02MTUsMzYgKzY0NCwzOCBAQAogCWVsc2UKIAkJY21kLmFyZ3NbMHgwNF0gPSAweDAyOwogCWNtZC5hcmdzWzB4MDVdID0gMHgwMDsKLQljbWQubGVuPSAweDA2OworCWNtZC5sZW4gPSAweDA2OwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIEZpcm13YXJlIENNRCAzNTogR2V0IGZpcm13YXJlIHZlcnNpb24gKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9VUERGV1ZFUlM7Ci0JY21kLmxlbj0gMHgwMjsKLQlmb3IoaT0wOyBpPDQ7IGkrKykgeworCWNtZC5sZW4gPSAweDAyOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJY21kLmFyZ3NbMHgwMV0gPSBpOwogCQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKLQkJdmVyc1tpXT0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19NQUlMQk9YKTsKKwkJdmVyc1tpXSA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfTUFJTEJPWCk7CiAJfQotCXByaW50aygiJXM6IEZXIHZlcnNpb24gJWkuJWkuJWkuJWlcbiIsIF9fZnVuY19fLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBGVyB2ZXJzaW9uICVpLiVpLiVpLiVpXG4iLCBfX2Z1bmNfXywKIAkJdmVyc1swXSwgdmVyc1sxXSwgdmVyc1syXSwgdmVyc1szXSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewogCS8qIFRoZSBpc2w2NDIxIG1vZHVsZSB3aWxsIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZvcHMuICovCi0JZHByaW50aygiJXMoKSBUaGlzIHNob3VsZCBuZXZlciBhcHBlYXIgaWYgdGhlIGlzbDY0MjEgbW9kdWxlIGlzIGxvYWRlZCBjb3JyZWN0bHlcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzKCkgVGhpcyBzaG91bGQgbmV2ZXIgYXBwZWFyIGlmIHRoZSBpc2w2NDIxIG1vZHVsZSAiCisJCSJpcyBsb2FkZWQgY29ycmVjdGx5XG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIApAQCAtNjY2LDIyICs2OTcsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQkqYmVyID0gICggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIyNCkgPDwgMjQgKSB8Ci0JCSggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIxNikgPDwgMTYgKSB8Ci0JCSggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVI4ICkgPDwgOCAgKSB8Ci0JCSAgY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIwICk7CisJKmJlciA9ICAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIyNCkgPDwgMjQpIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQkVSMTYpIDw8IDE2KSB8CisJCShjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjgpICA8PCA4KSAgfAorCQkgY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIwKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBUT0RPIERldGVybWluZSBmdW5jdGlvbiBhbmQgc2NhbGUgYXBwcm9wcmlhdGVseSAqLwotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNpZ25hbF9zdHJlbmd0aCkKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwl1MTYgKnNpZ25hbF9zdHJlbmd0aCkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwpAQCAtNjkyLDM5ICs3MjQsNDMgQEAKIAogCS8qIEZpcm13YXJlIENNRCAxOTogR2V0IEFHQyAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX0dFVEFHQzsKLQljbWQubGVuPSAweDAxOworCWNtZC5sZW4gPSAweDAxOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCXNpZ19yZWFkaW5nID0gKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMpICYgQ1gyNDExNl9TSUdOQUxfTUFTSyApIHwKLQkJKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NJR05BTCkgPDwgNiApOwotCSpzaWduYWxfc3RyZW5ndGg9IDAgLSBzaWdfcmVhZGluZzsKKwlzaWdfcmVhZGluZyA9CisJCShjeDI0MTE2X3JlYWRyZWcoc3RhdGUsCisJCQlDWDI0MTE2X1JFR19TU1RBVFVTKSAmIENYMjQxMTZfU0lHTkFMX01BU0spIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU0lHTkFMKSA8PCA2KTsKKwkqc2lnbmFsX3N0cmVuZ3RoID0gMCAtIHNpZ19yZWFkaW5nOwogCi0JZHByaW50aygiJXM6IHJhdyAvIGNvb2tlZCA9IDB4JTA0eCAvIDB4JTA0eFxuIiwgX19mdW5jX18sIHNpZ19yZWFkaW5nLCAqc2lnbmFsX3N0cmVuZ3RoKTsKKwlkcHJpbnRrKCIlczogcmF3IC8gY29va2VkID0gMHglMDR4IC8gMHglMDR4XG4iLAorCQlfX2Z1bmNfXywgc2lnX3JlYWRpbmcsICpzaWduYWxfc3RyZW5ndGgpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIFNOUiAoMC4uMTAwKSUgPSAoc2lnICYgMHhmMCkgKiAxMCArIChzaWcgJiAweDBmKSAqIDEwIC8gMTYgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3Nucl9wY3Qoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yX3BjdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggc25yX3JlYWRpbmc7CiAJc3RhdGljIGNvbnN0IHUzMiBzbnJfdGFiW10gPSB7IC8qIDEwIHggVGFibGUgKHJvdW5kZWQgdXApICovCi0JCTB4MDAwMDAsMHgwMTk5QSwweDAzMzMzLDB4MDRjY0QsMHgwNjY2NywKLQkJCTB4MDgwMDAsMHgwOTk5QSwweDBiMzMzLDB4MGNjY0QsMHgwZTY2NywKLQkJMHgxMDAwMCwweDExOTlBLDB4MTMzMzMsMHgxNGNjRCwweDE2NjY3LDB4MTgwMDAgfTsKKwkJMHgwMDAwMCwgMHgwMTk5QSwgMHgwMzMzMywgMHgwNGNjRCwgMHgwNjY2NywKKwkJMHgwODAwMCwgMHgwOTk5QSwgMHgwYjMzMywgMHgwY2NjRCwgMHgwZTY2NywKKwkJMHgxMDAwMCwgMHgxMTk5QSwgMHgxMzMzMywgMHgxNGNjRCwgMHgxNjY2NywKKwkJMHgxODAwMCB9OwogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc25yX3JlYWRpbmcgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FVQUxJVFkwKTsKIAotCWlmKHNucl9yZWFkaW5nID49IDB4YTAgLyogMTAwJSAqLykKKwlpZiAoc25yX3JlYWRpbmcgPj0gMHhhMCAvKiAxMDAlICovKQogCQkqc25yID0gMHhmZmZmOwogCWVsc2UKLQkJKnNuciA9IHNucl90YWIgWyAoIHNucl9yZWFkaW5nICYgMHhmMCApICAgPj4gNCBdICsKLQkJCSggc25yX3RhYiBbICggc25yX3JlYWRpbmcgJiAweDBmICkgXSA+PiA0ICk7CisJCSpzbnIgPSBzbnJfdGFiWyhzbnJfcmVhZGluZyAmIDB4ZjApID4+IDRdICsKKwkJCShzbnJfdGFiWyhzbnJfcmVhZGluZyAmIDB4MGYpXSA+PiA0KTsKIAogCWRwcmludGsoIiVzOiByYXcgLyBjb29rZWQgPSAweCUwMnggLyAweCUwNHhcbiIsIF9fZnVuY19fLAogCQlzbnJfcmVhZGluZywgKnNucik7CkBAIC03MzYsNyArNzcyLDcgQEAKICAqIEVTTk8sIGZyb20gMC0+MzBkYiAodmFsdWVzIDAtPjMwMCkuIFdlIHByb3ZpZGUgdGhpcyB2YWx1ZSBieQogICogZGVmYXVsdC4KICAqLwotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yX2Vzbm8oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yX2Vzbm8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCkBAIC03NTAsNyArNzg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJaWYgKGVzbm9fc25yID09IDEpCiAJCXJldHVybiBjeDI0MTE2X3JlYWRfc25yX2Vzbm8oZmUsIHNucik7CkBAIC03NTgsMjcgKzc5NCwyNyBAQAogCQlyZXR1cm4gY3gyNDExNl9yZWFkX3Nucl9wY3QoZmUsIHNucik7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQkqdWNibG9ja3MgPSAoIGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfVUNCOCkgPDwgOCApIHwKKwkqdWNibG9ja3MgPSAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19VQ0I4KSA8PCA4KSB8CiAJCWN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfVUNCMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogT3ZlcndyaXRlIHRoZSBjdXJyZW50IHR1bmluZyBwYXJhbXMsIHdlIGFyZSBhYm91dCB0byB0dW5lICovCi1zdGF0aWMgdm9pZCBjeDI0MTE2X2Nsb25lX3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIGN4MjQxMTZfY2xvbmVfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCW1lbWNweSgmc3RhdGUtPmRjdXIsICZzdGF0ZS0+ZG54dCwgc2l6ZW9mKHN0YXRlLT5kY3VyKSk7CiB9CiAKIC8qIFdhaXQgZm9yIExOQiAqLwotc3RhdGljIGludCBjeDI0MTE2X3dhaXRfZm9yX2xuYihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl93YWl0X2Zvcl9sbmIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGk7CkBAIC03ODcsNyArODIzLDcgQEAKIAkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19RU1RBVFVTKSk7CiAKIAkvKiBXYWl0IGZvciB1cCB0byAzMDAgbXMgKi8KLQlmb3IoaSA9IDA7IGkgPCAzMCA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAzMCA7IGkrKykgewogCQlpZiAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19RU1RBVFVTKSAmIDB4MjApCiAJCQlyZXR1cm4gMDsKIAkJbXNsZWVwKDEwKTsKQEAgLTc5OCwyMCArODM0LDIxIEBACiAJcmV0dXJuIC1FVElNRURPVVQ7IC8qIC1FQlVTWSA/ICovCiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCiB7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlpbnQgcmV0OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgdG9uZSk7Ci0JaWYgKCAodG9uZSAhPSBTRUNfVE9ORV9PTikgJiYgKHRvbmUgIT0gU0VDX1RPTkVfT0ZGKSApIHsKLQkJcHJpbnRrKCIlczogSW52YWxpZCwgdG9uZT0lZFxuIiwgX19mdW5jX18sIHRvbmUpOworCWlmICgodG9uZSAhPSBTRUNfVE9ORV9PTikgJiYgKHRvbmUgIT0gU0VDX1RPTkVfT0ZGKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkLCB0b25lPSVkXG4iLCBfX2Z1bmNfXywgdG9uZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIFdhaXQgZm9yIExOQiByZWFkeSAqLwogCXJldCA9IGN4MjQxMTZfd2FpdF9mb3JfbG5iKGZlKTsKLQlpZihyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBNaW4gZGVsYXkgdGltZSBhZnRlciBEaVNFcUMgc2VuZCAqLwpAQCAtODIwLDcgKzg1Nyw3IEBACiAJLyogVGhpcyBpcyBhbHdheXMgZG9uZSBiZWZvcmUgdGhlIHRvbmUgaXMgc2V0ICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfU0VUX1RPTkVQUkU7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwotCWNtZC5sZW49IDB4MDI7CisJY21kLmxlbiA9IDB4MDI7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwpAQCAtODM2LDExICs4NzMsMTEgQEAKIAkJY21kLmFyZ3NbMHgwM10gPSAweDAxOwogCQlicmVhazsKIAljYXNlIFNFQ19UT05FX09GRjoKLQkJZHByaW50aygiJXM6IHNldHRpbmcgdG9uZSBvZmZcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogc2V0dGluZyB0b25lIG9mZlxuIiwgX19mdW5jX18pOwogCQljbWQuYXJnc1sweDAzXSA9IDB4MDA7CiAJCWJyZWFrOwogCX0KLQljbWQubGVuPSAweDA0OworCWNtZC5sZW4gPSAweDA0OwogCiAJLyogTWluIGRlbGF5IHRpbWUgYmVmb3JlIERpU0VxQyBzZW5kICovCiAJbXNsZWVwKDE1KTsgLyogWFhYIGRldGVybWluZSBpcyBGVyBkb2VzIHRoaXMsIHNlZSBzZW5kX2Rpc2VxYy9idXJzdCAqLwpAQCAtODQ5LDcgKzg4Niw3IEBACiB9CiAKIC8qIEluaXRpYWxpc2UgRGlTRXFDICovCi1zdGF0aWMgaW50IGN4MjQxMTZfZGlzZXFjX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjQxMTZfZGlzZXFjX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKQEAgLTg2NCw3ICs5MDEsNyBAQAogCWNtZC5hcmdzWzB4MDVdID0gMHgyODsKIAljbWQuYXJnc1sweDA2XSA9ICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORU9GRikgPyAweDAwIDogMHgwMTsKIAljbWQuYXJnc1sweDA3XSA9IDB4MDE7Ci0JY21kLmxlbj0gMHgwODsKKwljbWQubGVuID0gMHgwODsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC04NzgsMzYgKzkxNSwzOCBAQAogCS8qIFVua25vd24gKi8KIAlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19BUkcyXzJdID0gMHgwMjsKIAlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19BUkczXzBdID0gMHgwMDsKLQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19BUkc0XzBdID0gMHgwMDsgLyogQ29udGludWF0aW9uIGZsYWc/ICovCisJLyogQ29udGludWF0aW9uIGZsYWc/ICovCisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQVJHNF8wXSA9IDB4MDA7CiAKIAkvKiBEaVNFcUMgbWVzc2FnZSBsZW5ndGggKi8KIAlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dID0gMHgwMDsKIAogCS8qIENvbW1hbmQgbGVuZ3RoICovCi0Jc3RhdGUtPmRzZWNfY21kLmxlbj0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTOworCXN0YXRlLT5kc2VjX2NtZC5sZW4gPSBDWDI0MTE2X0RJU0VRQ19NU0dPRlM7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogU2VuZCBEaVNFcUMgbWVzc2FnZSB3aXRoIGRlcml2ZWQgYnVyc3QgKGhhY2spIHx8IHByZXZpb3VzIGJ1cnN0ICovCi1zdGF0aWMgaW50IGN4MjQxMTZfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpkKQorc3RhdGljIGludCBjeDI0MTE2X3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpkKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBpLCByZXQ7CiAKIAkvKiBEdW1wIERpU0VxQyBtZXNzYWdlICovCiAJaWYgKGRlYnVnKSB7Ci0JCXByaW50aygiY3gyNDExNjogJXMoIiwgX19mdW5jX18pOwotCQlmb3IoaSA9IDAgOyBpIDwgZC0+bXNnX2xlbiA7KSB7Ci0JCQlwcmludGsoIjB4JTAyeCIsIGQtPm1zZ1tpXSk7Ci0JCQlpZigrK2kgPCBkLT5tc2dfbGVuKQotCQkJCXByaW50aygiLCAiKTsKLQkJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNDExNjogJXMoIiwgX19mdW5jX18pOworCQlmb3IgKGkgPSAwIDsgaSA8IGQtPm1zZ19sZW4gOykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJ4IiwgZC0+bXNnW2ldKTsKKwkJCWlmICgrK2kgPCBkLT5tc2dfbGVuKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiwgIik7CisJCX0KIAkJcHJpbnRrKCIpIHRvbmVidXJzdD0lZFxuIiwgdG9uZWJ1cnN0KTsKIAl9CiAKIAkvKiBWYWxpZGF0ZSBsZW5ndGggKi8KLQlpZihkLT5tc2dfbGVuID4gKENYMjQxMTZfQVJHTEVOIC0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTKSkKKwlpZiAoZC0+bXNnX2xlbiA+IChDWDI0MTE2X0FSR0xFTiAtIENYMjQxMTZfRElTRVFDX01TR09GUykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRGlTRXFDIG1lc3NhZ2UgKi8KQEAgLTkxOCwxOCArOTU3LDE5IEBACiAJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA9IGQtPm1zZ19sZW47CiAKIAkvKiBDb21tYW5kIGxlbmd0aCAqLwotCXN0YXRlLT5kc2VjX2NtZC5sZW49IENYMjQxMTZfRElTRVFDX01TR09GUyArIHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl07CisJc3RhdGUtPmRzZWNfY21kLmxlbiA9IENYMjQxMTZfRElTRVFDX01TR09GUyArCisJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl07CiAKIAkvKiBEaVNFcUMgdG9uZWJ1cnN0ICovCi0JaWYodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKKwlpZiAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKIAkJLyogTWVzc2FnZSBpcyBjYWNoZWQgKi8KIAkJcmV0dXJuIDA7CiAKLQllbHNlIGlmKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKQorCWVsc2UgaWYgKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKQogCQkvKiBNZXNzYWdlIGlzIHNlbnQgd2l0aG91dCBidXJzdCAqLwogCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPSAwOwogCi0JZWxzZSBpZih0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORUNBQ0hFKSB7CisJZWxzZSBpZiAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVDQUNIRSkgewogCQkvKgogCQkgKiBNZXNzYWdlIGlzIHNlbnQgd2l0aCBkZXJpdmVkIGVsc2UgY2FjaGVkIGJ1cnN0CiAJCSAqCkBAIC05NDgsMTUgKzk4OCwxNyBAQAogCQkgKiAgICAgICAgICAgICAgWSA9IFZPTFRBR0UgICAgICAgICAgICAgKDA9MTNWLCAxPTE4VikKIAkJICogICAgICAgICAgICAgIFogPSBCQU5EICAgICAgICAgICAgICAgICgwPUxPVywgMT1ISUdIKDIySykpCiAJCSAqLwotCQlpZihkLT5tc2dfbGVuID49IDQgJiYgZC0+bXNnWzJdID09IDB4MzgpCi0JCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPSAoKGQtPm1zZ1szXSAmIDQpID4+IDIpOwotCQlpZihkZWJ1ZykKLQkJCWRwcmludGsoIiVzIGJ1cnN0PSVkXG4iLCBfX2Z1bmNfXywgc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdKTsKKwkJaWYgKGQtPm1zZ19sZW4gPj0gNCAmJiBkLT5tc2dbMl0gPT0gMHgzOCkKKwkJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9CisJCQkJKChkLT5tc2dbM10gJiA0KSA+PiAyKTsKKwkJaWYgKGRlYnVnKQorCQkJZHByaW50aygiJXMgYnVyc3Q9JWRcbiIsIF9fZnVuY19fLAorCQkJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSk7CiAJfQogCiAJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCiAJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFdhaXQgZm9yIHZvbHRhZ2UvbWluIHJlcGVhdCBkZWxheSAqLwpAQCAtOTY0LDcgKzEwMDYsNyBAQAogCiAJLyogQ29tbWFuZCAqLwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZzdGF0ZS0+ZHNlY19jbWQpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAkvKgogCSAqIFdhaXQgZm9yIHNlbmQKQEAgLTk3NiwyOSArMTAxOCwzMyBAQAogCSAqICAxMi41bXMgYnVyc3QgICAgICAgICsKIAkgKiA+MTVtcyBkZWxheSAgICAgICAgICAgIChYWFggZGV0ZXJtaW5lIGlmIEZXIGRvZXMgdGhpcywgc2VlIHNldF90b25lKQogCSAqLwotCW1zbGVlcCggKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKyAoKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKSA/IDMwIDogNjApICk7CisJbXNsZWVwKChzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dIDw8IDQpICsKKwkJKCh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORU9GRikgPyAzMCA6IDYwKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogU2VuZCBEaVNFcUMgYnVyc3QgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCitzdGF0aWMgaW50IGN4MjQxMTZfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHJldDsKIAotCWRwcmludGsoIiVzKCVkKSB0b25lYnVyc3Q9JWRcbiIsX19mdW5jX18sIGJ1cnN0LCB0b25lYnVyc3QpOworCWRwcmludGsoIiVzKCVkKSB0b25lYnVyc3Q9JWRcbiIsIF9fZnVuY19fLCBidXJzdCwgdG9uZWJ1cnN0KTsKIAogCS8qIERpU0VxQyBidXJzdCAqLwogCWlmIChidXJzdCA9PSBTRUNfTUlOSV9BKQotCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPSBDWDI0MTE2X0RJU0VRQ19NSU5JX0E7Ci0JZWxzZSBpZihidXJzdCA9PSBTRUNfTUlOSV9CKQotCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPSBDWDI0MTE2X0RJU0VRQ19NSU5JX0I7CisJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9CisJCQlDWDI0MTE2X0RJU0VRQ19NSU5JX0E7CisJZWxzZSBpZiAoYnVyc3QgPT0gU0VDX01JTklfQikKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0KKwkJCUNYMjQxMTZfRElTRVFDX01JTklfQjsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRGlTRXFDIHRvbmVidXJzdCAqLwotCWlmKHRvbmVidXJzdCAhPSBDWDI0MTE2X0RJU0VRQ19NRVNHQ0FDSEUpCisJaWYgKHRvbmVidXJzdCAhPSBDWDI0MTE2X0RJU0VRQ19NRVNHQ0FDSEUpCiAJCS8qIEJ1cnN0IGlzIGNhY2hlZCAqLwogCQlyZXR1cm4gMDsKIApAQCAtMTAwNiw3ICsxMDUyLDcgQEAKIAogCS8qIFdhaXQgZm9yIExOQiByZWFkeSAqLwogCXJldCA9IGN4MjQxMTZfd2FpdF9mb3JfbG5iKGZlKTsKLQlpZihyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBXYWl0IGZvciB2b2x0YWdlL21pbiByZXBlYXQgZGVsYXkgKi8KQEAgLTEwMTQsNyArMTA2MCw3IEBACiAKIAkvKiBDb21tYW5kICovCiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJnN0YXRlLT5kc2VjX2NtZCk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyoKQEAgLTEwMjcsMzQgKzEwNzMsMzIgQEAKIAkgKiAgMTIuNW1zIGJ1cnN0ICAgICAgICArCiAJICogPjE1bXMgZGVsYXkgICAgICAgICAgICAoWFhYIGRldGVybWluZSBpZiBGVyBkb2VzIHRoaXMsIHNlZSBzZXRfdG9uZSkKIAkgKi8KLQltc2xlZXAoIChzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dIDw8IDQpICsgNjAgKTsKKwltc2xlZXAoKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKyA2MCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3gyNDExNl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgY3gyNDExNl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWRwcmludGsoIiVzXG4iLF9fZnVuY19fKTsKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCWtmcmVlKHN0YXRlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMTZfb3BzOwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDI0MTE2X2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcqIGNvbmZpZywKLQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTE2X2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKLQlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUgPSBOVUxMOworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IE5VTEw7CiAJaW50IHJldDsKIAotCWRwcmludGsoIiVzXG4iLF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0YXRlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8ga21hbGxvY1xuIik7CisJaWYgKHN0YXRlID09IE5VTEwpCiAJCWdvdG8gZXJyb3IxOwotCX0KIAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwogCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSk7CkBAIC0xMDYzLDMyICsxMTA3LDM2IEBACiAJc3RhdGUtPmkyYyA9IGkyYzsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyBwcmVzZW50ICovCi0JcmV0ID0gKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRikgPDwgOCkgfCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4RkUpOworCXJldCA9IChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4RkYpIDw8IDgpIHwKKwkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweEZFKTsKIAlpZiAocmV0ICE9IDB4MDUwMSkgewotCQlwcmludGsoIkludmFsaWQgcHJvYmUsIHByb2JhYmx5IG5vdCBhIENYMjQxMTYgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSW52YWxpZCBwcm9iZSwgcHJvYmFibHkgbm90IGEgQ1gyNDExNiBkZXZpY2VcbiIpOwogCQlnb3RvIGVycm9yMjsKIAl9CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDExNl9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjQxMTZfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCiBlcnJvcjI6IGtmcmVlKHN0YXRlKTsKIGVycm9yMTogcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGN4MjQxMTZfYXR0YWNoKTsKKwogLyoKICAqIEluaXRpYWxpc2Ugb3Igd2FrZSB1cCBkZXZpY2UKICAqCiAgKiBQb3dlciBjb25maWcgd2lsbCByZXNldCBhbmQgbG9hZCBpbml0aWFsIGZpcm13YXJlIGlmIHJlcXVpcmVkCiAgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjQxMTZfaW5pdGZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CiAJaW50IHJldDsKIAotCWRwcmludGsoIiVzKClcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qIFBvd2VyIG9uICovCiAJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhlMCwgMCk7CkBAIC0xMDk4LDkgKzExNDYsOSBAQAogCS8qIEZpcm13YXJlIENNRCAzNjogUG93ZXIgY29uZmlnICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfVFVORVJTTEVFUDsKIAljbWQuYXJnc1sweDAxXSA9IDA7Ci0JY21kLmxlbj0gMHgwMjsKKwljbWQubGVuID0gMHgwMjsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKLQlpZihyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gY3gyNDExNl9kaXNlcWNfaW5pdChmZSk7CkBAIC0xMTA5LDIwICsxMTU3LDIwIEBACiAvKgogICogUHV0IGRldmljZSB0byBzbGVlcAogICovCi1zdGF0aWMgaW50IGN4MjQxMTZfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjQxMTZfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogRmlybXdhcmUgQ01EIDM2OiBQb3dlciBjb25maWcgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUlNMRUVQOwogCWNtZC5hcmdzWzB4MDFdID0gMTsKLQljbWQubGVuPSAweDAyOworCWNtZC5sZW4gPSAweDAyOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFBvd2VyIG9mZiAoU2h1dGRvd24gY2xvY2tzKSAqLwpAQCAtMTEzMywxMyArMTE4MSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5KiB0dnApCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKIHsKIAlkcHJpbnRrKCIlcyguLilcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR0dl9wcm9wZXJ0eSogdHZwKQorc3RhdGljIGludCBjeDI0MTE2X2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCiB7CiAJZHByaW50aygiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CkBAIC0xMTQ4LDcgKzExOTgsOCBAQAogLyogZHZiLWNvcmUgdG9sZCB1cyB0byB0dW5lLCB0aGUgdHYgcHJvcGVydHkgY2FjaGUgd2lsbCBiZSBjb21wbGV0ZSwKICAqIGl0J3Mgc2FmZSBmb3IgaXMgdG8gcHVsbCB2YWx1ZXMgYW5kIHVzZSB0aGVtIGZvciB0dW5pbmcgcHVycG9zZXMuCiAgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwpAQCAtMTE1Niw5NiArMTIwNywxMDIgQEAKIAlmZV9zdGF0dXNfdCB0dW5lcnN0YXQ7CiAJaW50IGksIHN0YXR1cywgcmV0LCByZXR1bmU7CiAKLQlkcHJpbnRrKCIlcygpXG4iLF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlzd2l0Y2goYy0+ZGVsaXZlcnlfc3lzdGVtKSB7Ci0JCWNhc2UgU1lTX0RWQlM6Ci0JCQlkcHJpbnRrKCIlczogRFZCLVMgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkXG4iLF9fZnVuY19fKTsKKwlzd2l0Y2ggKGMtPmRlbGl2ZXJ5X3N5c3RlbSkgeworCWNhc2UgU1lTX0RWQlM6CisJCWRwcmludGsoIiVzOiBEVkItUyBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsIF9fZnVuY19fKTsKIAotCQkJLyogT25seSBRUFNLIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMgKi8KLQkJCWlmKGMtPm1vZHVsYXRpb24gIT0gUVBTSykgewotCQkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBtb2R1bGF0aW9uIHNlbGVjdGVkICglZClcbiIsCi0JCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKLQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9CisJCS8qIE9ubHkgUVBTSyBpcyBzdXBwb3J0ZWQgZm9yIERWQi1TICovCisJCWlmIChjLT5tb2R1bGF0aW9uICE9IFFQU0spIHsKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBtb2R1bGF0aW9uIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CiAKLQkJCS8qIFBpbG90IGRvZXNuJ3QgZXhpc3QgaW4gRFZCLVMsIHR1cm4gYml0IG9mZiAqLworCQkvKiBQaWxvdCBkb2Vzbid0IGV4aXN0IGluIERWQi1TLCB0dXJuIGJpdCBvZmYgKi8KKwkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gQ1gyNDExNl9QSUxPVF9PRkY7CisJCXJldHVuZSA9IDE7CisKKwkJLyogRFZCLVMgb25seSBzdXBwb3J0cyAwLjM1ICovCisJCWlmIChjLT5yb2xsb2ZmICE9IFJPTExPRkZfMzUpIHsKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCByb2xsb2ZmIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPnJvbGxvZmYpOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAzNTsKKwkJYnJlYWs7CisKKwljYXNlIFNZU19EVkJTMjoKKwkJZHByaW50aygiJXM6IERWQi1TMiBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsIF9fZnVuY19fKTsKKworCQkvKgorCQkgKiBOQkMgOFBTSy9RUFNLIHdpdGggRFZCLVMgaXMgc3VwcG9ydGVkIGZvciBEVkItUzIsCisJCSAqIGJ1dCBub3QgaGFyZHdhcmUgYXV0byBkZXRlY3Rpb24KKwkJICovCisJCWlmIChjLT5tb2R1bGF0aW9uICE9IFBTS184ICYmIGMtPm1vZHVsYXRpb24gIT0gUVBTSykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQlzd2l0Y2ggKGMtPnBpbG90KSB7CisJCWNhc2UgUElMT1RfQVVUTzoJLyogTm90IHN1cHBvcnRlZCBidXQgZW11bGF0ZWQgKi8KKwkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IChjLT5tb2R1bGF0aW9uID09IFFQU0spCisJCQkJPyBDWDI0MTE2X1BJTE9UX09GRiA6IENYMjQxMTZfUElMT1RfT047CisJCQlyZXR1bmUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgUElMT1RfT0ZGOgogCQkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gQ1gyNDExNl9QSUxPVF9PRkY7Ci0JCQlyZXR1bmUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgUElMT1RfT046CisJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09OOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcGlsb3QgbW9kZSBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5waWxvdCk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KIAotCQkJLyogRFZCLVMgb25seSBzdXBwb3J0cyAwLjM1ICovCi0JCQlpZihjLT5yb2xsb2ZmICE9IFJPTExPRkZfMzUpIHsKLQkJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCQlfX2Z1bmNfXywgYy0+cm9sbG9mZik7Ci0JCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJfQorCQlzd2l0Y2ggKGMtPnJvbGxvZmYpIHsKKwkJY2FzZSBST0xMT0ZGXzIwOgorCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDIwOworCQkJYnJlYWs7CisJCWNhc2UgUk9MTE9GRl8yNToKKwkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAyNTsKKwkJCWJyZWFrOworCQljYXNlIFJPTExPRkZfMzU6CiAJCQlzdGF0ZS0+ZG54dC5yb2xsb2ZmX3ZhbCA9IENYMjQxMTZfUk9MTE9GRl8wMzU7CiAJCQlicmVhazsKLQotCQljYXNlIFNZU19EVkJTMjoKLQkJCWRwcmludGsoIiVzOiBEVkItUzIgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkXG4iLF9fZnVuY19fKTsKLQotCQkJLyoKLQkJCSAqIE5CQyA4UFNLL1FQU0sgd2l0aCBEVkItUyBpcyBzdXBwb3J0ZWQgZm9yIERWQi1TMiwKLQkJCSAqIGJ1dCBub3QgaGFyZHdhcmUgYXV0byBkZXRlY3Rpb24KLQkJCSAqLwotCQkJaWYoYy0+bW9kdWxhdGlvbiAhPSBQU0tfOCAmJiBjLT5tb2R1bGF0aW9uICE9IFFQU0spIHsKLQkJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgbW9kdWxhdGlvbiBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCQlfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7Ci0JCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJfQotCi0JCQlzd2l0Y2goYy0+cGlsb3QpIHsKLQkJCQljYXNlIFBJTE9UX0FVVE86CS8qIE5vdCBzdXBwb3J0ZWQgYnV0IGVtdWxhdGVkICovCi0JCQkJCXJldHVuZSA9IDI7CS8qIEZhbGwtdGhyb3VnaCAqLwotCQkJCWNhc2UgUElMT1RfT0ZGOgotCQkJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09GRjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBQSUxPVF9PTjoKLQkJCQkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gQ1gyNDExNl9QSUxPVF9PTjsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIHBpbG90IG1vZGUgc2VsZWN0ZWQgKCVkKVxuIiwKLQkJCQkJCV9fZnVuY19fLCBjLT5waWxvdCk7Ci0JCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJCX0KLQotCQkJc3dpdGNoKGMtPnJvbGxvZmYpIHsKLQkJCQljYXNlIFJPTExPRkZfMjA6Ci0JCQkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsPSBDWDI0MTE2X1JPTExPRkZfMDIwOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFJPTExPRkZfMjU6Ci0JCQkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsPSBDWDI0MTE2X1JPTExPRkZfMDI1OwotCQkJCQlicmVhazsKLQkJCQljYXNlIFJPTExPRkZfMzU6Ci0JCQkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsPSBDWDI0MTE2X1JPTExPRkZfMDM1OwotCQkJCQlicmVhazsKLQkJCQljYXNlIFJPTExPRkZfQVVUTzoJLyogUm9sbG9mZiBtdXN0IGJlIGV4cGxpY2l0ICovCi0JCQkJZGVmYXVsdDoKLQkJCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIHJvbGxvZmYgc2VsZWN0ZWQgKCVkKVxuIiwKLQkJCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKLQkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJfQotCQkJYnJlYWs7Ci0KKwkJY2FzZSBST0xMT0ZGX0FVVE86CS8qIFJvbGxvZmYgbXVzdCBiZSBleHBsaWNpdCAqLwogCQlkZWZhdWx0OgotCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCV9fZnVuY19fLCBjLT5kZWxpdmVyeV9zeXN0ZW0pOworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIHJvbGxvZmYgc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+cm9sbG9mZik7CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkICglZClcbiIsCisJCQlfX2Z1bmNfXywgYy0+ZGVsaXZlcnlfc3lzdGVtKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAlzdGF0ZS0+ZG54dC5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKIAlzdGF0ZS0+ZG54dC5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CiAJc3RhdGUtPmRueHQucGlsb3QgPSBjLT5waWxvdDsKIAlzdGF0ZS0+ZG54dC5yb2xsb2ZmID0gYy0+cm9sbG9mZjsKIAotCWlmICgocmV0ID0gY3gyNDExNl9zZXRfaW52ZXJzaW9uKHN0YXRlLCBjLT5pbnZlcnNpb24pKSAhPSAgMCkKKwlyZXQgPSBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RhdGUsIGMtPmludmVyc2lvbik7CisJaWYgKHJldCAhPSAgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIEZFQ19OT05FL0FVVE8gZm9yIERWQi1TMiBpcyBub3Qgc3VwcG9ydGVkIGFuZCBkZXRlY3RlZCBoZXJlICovCi0JaWYgKChyZXQgPSBjeDI0MTE2X3NldF9mZWMoc3RhdGUsIGMtPm1vZHVsYXRpb24sIGMtPmZlY19pbm5lcikpICE9ICAwKQorCXJldCA9IGN4MjQxMTZfc2V0X2ZlYyhzdGF0ZSwgYy0+bW9kdWxhdGlvbiwgYy0+ZmVjX2lubmVyKTsKKwlpZiAocmV0ICE9ICAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBjeDI0MTE2X3NldF9zeW1ib2xyYXRlKHN0YXRlLCBjLT5zeW1ib2xfcmF0ZSkpICE9ICAwKQorCXJldCA9IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIGMtPnN5bWJvbF9yYXRlKTsKKwlpZiAocmV0ICE9ICAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogZGlzY2FyZCB0aGUgJ2N1cnJlbnQnIHR1bmluZyBwYXJhbWV0ZXJzIGFuZCBwcmVwYXJlIHRvIHR1bmUgKi8KQEAgLTEyNzEsNyArMTMyOCw3IEBACiAJLyogU2V0L1Jlc2V0IEIvVyAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX0JBTkRXSURUSDsKIAljbWQuYXJnc1sweDAxXSA9IDB4MDE7Ci0JY21kLmxlbj0gMHgwMjsKKwljbWQubGVuID0gMHgwMjsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC0xMzE5LDcgKzEzNzYsNyBAQAogCQljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19SQVRFRElWLCAweDAwKTsKIAl9CiAKLQljbWQubGVuPSAweDEzOworCWNtZC5sZW4gPSAweDEzOwogCiAJLyogV2UgbmVlZCB0byBzdXBwb3J0IHBpbG90IGFuZCBub24tcGlsb3QgdHVuaW5nIGluIHRoZQogCSAqIGRyaXZlciBhdXRvbWF0aWNhbGx5LiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYmVjYXVzZQpAQCAtMTMyNywxMiArMTM4NCwxMyBAQAogCSAqLwogCWRvIHsKIAkJLyogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyICovCi0JCXN0YXR1cyA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUykgJiBDWDI0MTE2X1NJR05BTF9NQVNLOworCQlzdGF0dXMgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMpCisJCQkmIENYMjQxMTZfU0lHTkFMX01BU0s7CiAJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMsIHN0YXR1cyk7CiAKIAkJLyogVHVuZSAqLwogCQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKLQkJaWYoIHJldCAhPSAwICkKKwkJaWYgKHJldCAhPSAwKQogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTEzNDEsMjggKzEzOTksMjcgQEAKIAkJICogSWYgd2UgYXJlIGFibGUgdG8gdHVuZSB0aGVuIGdlbmVyYWxseSBpdCBvY2N1cnMgd2l0aGluIDEwMG1zLgogCQkgKiBJZiBpdCB0YWtlcyBsb25nZXIsIHRyeSBhIGRpZmZlcmVudCB0b25lYnVyc3Qgc2V0dGluZy4KIAkJICovCi0JCWZvcihpID0gMDsgaSA8IDUwIDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA1MCA7IGkrKykgewogCQkJY3gyNDExNl9yZWFkX3N0YXR1cyhmZSwgJnR1bmVyc3RhdCk7CiAJCQlzdGF0dXMgPSB0dW5lcnN0YXQgJiAoRkVfSEFTX1NJR05BTCB8IEZFX0hBU19TWU5DKTsKLQkJCWlmKHN0YXR1cyA9PSAoRkVfSEFTX1NJR05BTCB8IEZFX0hBU19TWU5DKSkgewotCQkJCWRwcmludGsoIiVzOiBUdW5lZFxuIixfX2Z1bmNfXyk7CisJCQlpZiAoc3RhdHVzID09IChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpKSB7CisJCQkJZHByaW50aygiJXM6IFR1bmVkXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byB0dW5lZDsKIAkJCX0KIAkJCW1zbGVlcCgxMCk7CiAJCX0KIAotCQlkcHJpbnRrKCIlczogTm90IHR1bmVkXG4iLF9fZnVuY19fKTsKKwkJZHByaW50aygiJXM6IE5vdCB0dW5lZFxuIiwgX19mdW5jX18pOwogCiAJCS8qIFRvZ2dsZSBwaWxvdCBiaXQgd2hlbiBpbiBhdXRvLXBpbG90ICovCi0JCWlmKHN0YXRlLT5kY3VyLnBpbG90ID09IFBJTE9UX0FVVE8pCisJCWlmIChzdGF0ZS0+ZGN1ci5waWxvdCA9PSBQSUxPVF9BVVRPKQogCQkJY21kLmFyZ3NbMHgwN10gXj0gQ1gyNDExNl9QSUxPVF9PTjsKLQl9Ci0Jd2hpbGUoLS1yZXR1bmUpOworCX0gd2hpbGUgKC0tcmV0dW5lKTsKIAogdHVuZWQ6ICAvKiBTZXQvUmVzZXQgQi9XICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfQkFORFdJRFRIOwogCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKLQljbWQubGVuPSAweDAyOworCWNtZC5sZW4gPSAweDAyOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTE0MDcsMTcgKzE0NjQsNyBAQAogCS5zZXRfZnJvbnRlbmQgPSBjeDI0MTE2X3NldF9mcm9udGVuZCwKIH07CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0OjApIik7Ci0KLW1vZHVsZV9wYXJhbSh0b25lYnVyc3QsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHRvbmVidXJzdCwgIkRpU0VxQyB0b25lYnVyc3QgMD1PRkYsIDE9VE9ORSBDQUNIRSwgMj1NRVNTQUdFIENBQ0hFIChkZWZhdWx0OjEpIik7Ci0KLW1vZHVsZV9wYXJhbShlc25vX3NuciwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTTlIgcmV0dXJuIHVuaXRzLCAwPVBFUkNFTlRBR0UgMC0xMDAsIDE9RVNOTyhkYiAqIDEwKSAoZGVmYXVsdDowKSIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50IGN4MjQxMTYvY3gyNDExOCBoYXJkd2FyZSIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotRVhQT1JUX1NZTUJPTChjeDI0MTE2X2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuaAppbmRleCA4ZGJjZWMyLi40Y2IzZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmgKQEAgLTIzLDMxICsyMywzMiBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBjeDI0MTE2X2NvbmZpZwoteworc3RydWN0IGN4MjQxMTZfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKIAkvKiBOZWVkIHRvIHNldCBkZXZpY2UgcGFyYW0gZm9yIHN0YXJ0X2RtYSAqLwotCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKKwlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiAKIAkvKiBOZWVkIHRvIHJlc2V0IGRldmljZSBkdXJpbmcgZmlybXdhcmUgbG9hZGluZyAqLwotCWludCAoKnJlc2V0X2RldmljZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOworCWludCAoKnJlc2V0X2RldmljZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwogCiAJLyogTmVlZCB0byBzZXQgTVBFRyBwYXJhbWV0ZXJzICovCiAJdTggbXBnX2Nsa19wb3NfcG9sOjB4MDI7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTYpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTE2X01PRFVMRSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDI0MTE2X2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcqIGNvbmZpZywKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTZfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyogY29uZmlnLAotCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDExNl9hdHRhY2goCisJY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfQ1gyNDExNgorI2VuZGlmCiAKICNlbmRpZiAvKiBDWDI0MTE2X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCmluZGV4IDcxNTYxNTcuLjFhOGMzNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtMzMsNyArMzMsMTMgQEAKICNkZWZpbmUgWFRBTCAxMDExMTAwMAogCiBzdGF0aWMgaW50IGZvcmNlX2JhbmQ7Cittb2R1bGVfcGFyYW0oZm9yY2VfYmFuZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfYmFuZCwgIkZvcmNlIGEgc3BlY2lmaWMgYmFuZCBzZWxlY3QgIlwKKwkiKDEtOSwgZGVmYXVsdDpvZmYpLiIpOworCiBzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKIAogI2RlZmluZSBpbmZvKGFyZ3MuLi4pIGRvIHsgcHJpbnRrKEtFUk5fSU5GTyAiQ1gyNDEyMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZXJyKGFyZ3MuLi4pICBkbyB7IHByaW50ayhLRVJOX0VSUiAgIkNYMjQxMjM6ICIgYXJncyk7IH0gd2hpbGUgKDApCkBAIC00NiwxMCArNTIsOSBAQAogCQl9IFwKIAl9IHdoaWxlICgwKQogCi1zdHJ1Y3QgY3gyNDEyM19zdGF0ZQotewotCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOwotCWNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyogY29uZmlnOworc3RydWN0IGN4MjQxMjNfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyAqY29uZmlnOwogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIApAQCAtNzAsOCArNzUsNyBAQAogfTsKIAogLyogVmFyaW91cyB0dW5lciBkZWZhdWx0cyBuZWVkIHRvIGJlIGVzdGFibGlzaGVkIGZvciBhIGdpdmVuIHN5bWJvbCByYXRlIFNwcyAqLwotc3RhdGljIHN0cnVjdAoteworc3RhdGljIHN0cnVjdCBjeDI0MTIzX0FHQ192YWwgewogCXUzMiBzeW1ib2xyYXRlX2xvdzsKIAl1MzIgc3ltYm9scmF0ZV9oaWdoOwogCXUzMiBWQ0Fwcm9nZGF0YTsKQEAgLTEwOSw4ICsxMTMsNyBAQAogICogZml4bWU6IFRoZSBib3VuZHMgb24gdGhlIGJhbmRzIGRvIG5vdCBtYXRjaCB0aGUgZG9jIGluIHJlYWwgbGlmZS4KICAqIGZpeG1lOiBTb21lIG9mIHRoZW0gaGF2ZSBiZWVuIG1vdmVkLCBvdGhlciBtaWdodCBuZWVkIGFkanVzdG1lbnQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QKLXsKK3N0YXRpYyBzdHJ1Y3QgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbCB7CiAJdTMyIGZyZXFfbG93OwogCXUzMiBmcmVxX2hpZ2g7CiAJdTMyIFZDT2RpdmlkZXI7CkBAIC0yNDksNyArMjUyLDggQEAKIAogCS8qIHByaW50ayhLRVJOX0RFQlVHICJ3ciglMDJ4KTogJTAyeCAlMDJ4XG4iLCBpMmNfYWRkciwgcmVnLCBkYXRhKTsgKi8KIAotCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChlcnIgIT0gMSkgewogCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgogCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX2Z1bmNfXywgZXJyLCByZWcsIGRhdGEpOwogCQlyZXR1cm4gZXJyOwpAQCAtMjg0LDcgKzI4OCw4IEBACiAjZGVmaW5lIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIHJlZywgdmFsKSBcCiAJY3gyNDEyM19pMmNfd3JpdGVyZWcoc3RhdGUsIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIHJlZywgdmFsKQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbikKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwKKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb24pCiB7CiAJdTggbm9tX3JlZyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwZSk7CiAJdTggYXV0b19yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTApOwpAQCAtMzExLDcgKzMxNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19nZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgKmludmVyc2lvbikKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwKKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCAqaW52ZXJzaW9uKQogewogCXU4IHZhbDsKIApAQCAtMzI4LDE4ICszMzQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCBmZWMpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsIGZlX2NvZGVfcmF0ZV90IGZlYykKIHsKIAl1OCBub21fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDBlKSAmIH4weDA3OwogCi0JaWYgKCAoZmVjIDwgRkVDX05PTkUpIHx8IChmZWMgPiBGRUNfQVVUTykgKQorCWlmICgoZmVjIDwgRkVDX05PTkUpIHx8IChmZWMgPiBGRUNfQVVUTykpCiAJCWZlYyA9IEZFQ19BVVRPOwogCiAJLyogU2V0IHRoZSBzb2Z0IGRlY2lzaW9uIHRocmVzaG9sZCAqLwotCWlmKGZlYyA9PSBGRUNfMV8yKQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpIHwgMHgwMSk7CisJaWYgKGZlYyA9PSBGRUNfMV8yKQorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLAorCQkJY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSB8IDB4MDEpOwogCWVsc2UKLQkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHg0MywgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSAmIH4weDAxKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHg0MywKKwkJCWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHg0MykgJiB+MHgwMSk7CiAKIAlzd2l0Y2ggKGZlYykgewogCWNhc2UgRkVDXzFfMjoKQEAgLTM4OCwxMSArMzk2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19nZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgKmZlYykKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwgZmVfY29kZV9yYXRlX3QgKmZlYykKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7CisJcmV0ID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDFiKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlyZXQgPSByZXQgJiAweDA3OwpAQCAtNDMzLDE2ICs0NDEsMTYgQEAKIHsKIAl1MzIgZXhwLCBuZWFyZXN0ID0gMDsKIAl1MzIgZGl2ID0gYSAvIGI7Ci0JaWYoYSAlIGIgPj0gYiAvIDIpICsrZGl2OwotCWlmKGRpdiA8ICgxIDw8IDMxKSkKLQl7Ci0JCWZvcihleHAgPSAxOyBkaXYgPiBleHA7IG5lYXJlc3QrKykKKwlpZiAoYSAlIGIgPj0gYiAvIDIpCisJCSsrZGl2OworCWlmIChkaXYgPCAoMSA8PCAzMSkpIHsKKwkJZm9yIChleHAgPSAxOyBkaXYgPiBleHA7IG5lYXJlc3QrKykKIAkJCWV4cCArPSBleHA7CiAJfQogCXJldHVybiBuZWFyZXN0OwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCB1MzIgc3JhdGUpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLCB1MzIgc3JhdGUpCiB7CiAJdTMyIHRtcCwgc2FtcGxlX3JhdGUsIHJhdGlvLCBzYW1wbGVfZ2FpbjsKIAl1OCBwbGxfbXVsdDsKQEAgLTQ5OCw5ICs1MDYsOSBAQAogCiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwMSwgcGxsX211bHQgKiA2KTsKIAotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIChyYXRpbyA+PiAxNikgJiAweDNmICk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOSwgKHJhdGlvID4+ICA4KSAmIDB4ZmYgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBhLCAocmF0aW8gICAgICApICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIChyYXRpbyA+PiAxNikgJiAweDNmKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAocmF0aW8gPj4gOCkgJiAweGZmKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBhLCByYXRpbyAmIDB4ZmYpOwogCiAJLyogYWxzbyBzZXQgdGhlIGRlbW9kdWxhdG9yIHNhbXBsZSBnYWluICovCiAJc2FtcGxlX2dhaW4gPSBjeDI0MTIzX2ludF9sb2cyKHNhbXBsZV9yYXRlLCBzcmF0ZSk7CkBAIC01MTQsMTAgKzUyMiwxMiBAQAogfQogCiAvKgotICogQmFzZWQgb24gdGhlIHJlcXVpcmVkIGZyZXF1ZW5jeSBhbmQgc3ltYm9scmF0ZSwgdGhlIHR1bmVyIEFHQyBoYXMgdG8gYmUgY29uZmlndXJlZAotICogYW5kIHRoZSBjb3JyZWN0IGJhbmQgc2VsZWN0ZWQuIENhbGN1bGF0ZSB0aG9zZSB2YWx1ZXMKKyAqIEJhc2VkIG9uIHRoZSByZXF1aXJlZCBmcmVxdWVuY3kgYW5kIHN5bWJvbHJhdGUsIHRoZSB0dW5lciBBR0MgaGFzCisgKiB0byBiZSBjb25maWd1cmVkIGFuZCB0aGUgY29ycmVjdCBiYW5kIHNlbGVjdGVkLgorICogQ2FsY3VsYXRlIHRob3NlIHZhbHVlcy4KICAqLwotc3RhdGljIGludCBjeDI0MTIzX3BsbF9jYWxjdWxhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfY2FsY3VsYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgbmRpdiA9IDAsIGFkaXYgPSAwLCB2Y29fZGl2ID0gMDsKQEAgLTUyNSw2ICs1MzUsOCBAQAogCWludCBwdW1wID0gMjsKIAlpbnQgYmFuZCA9IDA7CiAJaW50IG51bV9iYW5kcyA9IEFSUkFZX1NJWkUoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHMpOworCXN0cnVjdCBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsICpic3YgPSBOVUxMOworCXN0cnVjdCBjeDI0MTIzX0FHQ192YWwgKmFnY3YgPSBOVUxMOwogCiAJLyogRGVmYXVsdHMgZm9yIGxvdyBmcmVxLCBsb3cgcmF0ZSAqLwogCXN0YXRlLT5WQ0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzWzBdLlZDQXByb2dkYXRhOwpAQCAtNTMyLDU4ICs1NDQsNjUgQEAKIAlzdGF0ZS0+YmFuZHNlbGVjdGFyZyA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLnByb2dkYXRhOwogCXZjb19kaXYgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXS5WQ09kaXZpZGVyOwogCi0JLyogRm9yIHRoZSBnaXZlbiBzeW1ib2wgcmF0ZSwgZGV0ZXJtaW5lIHRoZSBWQ0EsIFZHQSBhbmQgRklMVFVORSBwcm9ncmFtbWluZyBiaXRzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3gyNDEyM19BR0NfdmFscyk7IGkrKykKLQl7Ci0JCWlmICgoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2xvdyA8PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICYmCi0JCSAgICAoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2hpZ2ggPj0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSApIHsKLQkJCXN0YXRlLT5WQ0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzW2ldLlZDQXByb2dkYXRhOwotCQkJc3RhdGUtPlZHQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uVkdBcHJvZ2RhdGE7Ci0JCQlzdGF0ZS0+RklMVHVuZSA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uRklMVHVuZTsKKwkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZAorCSAqIEZJTFRVTkUgcHJvZ3JhbW1pbmcgYml0cyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjQxMjNfQUdDX3ZhbHMpOyBpKyspIHsKKwkJYWdjdiA9ICZjeDI0MTIzX0FHQ192YWxzW2ldOworCQlpZiAoKGFnY3YtPnN5bWJvbHJhdGVfbG93IDw9IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgJiYKKwkJICAgIChhZ2N2LT5zeW1ib2xyYXRlX2hpZ2ggPj0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSkgeworCQkJc3RhdGUtPlZDQWFyZyA9IGFnY3YtPlZDQXByb2dkYXRhOworCQkJc3RhdGUtPlZHQWFyZyA9IGFnY3YtPlZHQXByb2dkYXRhOworCQkJc3RhdGUtPkZJTFR1bmUgPSBhZ2N2LT5GSUxUdW5lOwogCQl9CiAJfQogCiAJLyogZGV0ZXJtaW5lIHRoZSBiYW5kIHRvIHVzZSAqLwotCWlmKGZvcmNlX2JhbmQgPCAxIHx8IGZvcmNlX2JhbmQgPiBudW1fYmFuZHMpCi0JewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmRzOyBpKyspCi0JCXsKLQkJCWlmICgoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgotCQkJICAgIChjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2hpZ2ggPj0gcC0+ZnJlcXVlbmN5KSApCisJaWYgKGZvcmNlX2JhbmQgPCAxIHx8IGZvcmNlX2JhbmQgPiBudW1fYmFuZHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5kczsgaSsrKSB7CisJCQlic3YgPSAmY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV07CisJCQlpZiAoKGJzdi0+ZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgorCQkJCShic3YtPmZyZXFfaGlnaCA+PSBwLT5mcmVxdWVuY3kpKQogCQkJCWJhbmQgPSBpOwogCQl9Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJYmFuZCA9IGZvcmNlX2JhbmQgLSAxOwogCiAJc3RhdGUtPmJhbmRzZWxlY3RhcmcgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5wcm9nZGF0YTsKIAl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uVkNPZGl2aWRlcjsKIAogCS8qIGRldGVybWluZSB0aGUgY2hhcmdlIHB1bXAgY3VycmVudCAqLwotCWlmICggcC0+ZnJlcXVlbmN5IDwgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfbG93ICsgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9oaWdoKS8yICkKKwlpZiAocC0+ZnJlcXVlbmN5IDwgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfbG93ICsKKwkJY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9oaWdoKSAvIDIpCiAJCXB1bXAgPSAweDAxOwogCWVsc2UKIAkJcHVtcCA9IDB4MDI7CiAKIAkvKiBEZXRlcm1pbmUgdGhlIE4vQSBkaXZpZGVycyBmb3IgdGhlIHJlcXVlc3RlZCBsYmFuZCBmcmVxIChpbiBrSHopLiAqLwotCS8qIE5vdGU6IHRoZSByZWZlcmVuY2UgZGl2aWRlciBSPTEwLCBmcmVxdWVuY3kgaXMgaW4gS0h6LCBYVEFMIGlzIGluIEh6ICovCi0JbmRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpIC8gMzIpICYgMHgxZmY7Ci0JYWRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKKwkvKiBOb3RlOiB0aGUgcmVmZXJlbmNlIGRpdmlkZXIgUj0xMCwgZnJlcXVlbmN5IGlzIGluIEtIeiwKKwkgKiBYVEFMIGlzIGluIEh6ICovCisJbmRpdiA9ICgoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLworCQkoMiAqIFhUQUwgLyAxMDAwKSkgLyAzMikgJiAweDFmZjsKKwlhZGl2ID0gKCgocC0+ZnJlcXVlbmN5ICogdmNvX2RpdiAqIDEwKSAvCisJCSgyICogWFRBTCAvIDEwMDApKSAlIDMyKSAmIDB4MWY7CiAKIAlpZiAoYWRpdiA9PSAwICYmIG5kaXYgPiAwKQogCQluZGl2LS07CiAKLQkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwgY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLwotCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfCAocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CisJLyogY29udHJvbCBiaXRzIDExLCByZWZkaXYgMTEsIGNoYXJnZSBwdW1wIHBvbGFyaXR5IDEsCisJICogY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLworCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfAorCQkocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFR1bmVyIGRhdGEgaXMgMjEgYml0cyBsb25nLCBtdXN0IGJlIGxlZnQtYWxpZ25lZCBpbiBkYXRhLgotICogVHVuZXIgY3gyNDEwOSBpcyB3cml0dGVuIHRocm91Z2ggYSBkZWRpY2F0ZWQgM3dpcmUgaW50ZXJmYWNlIG9uIHRoZSBkZW1vZCBjaGlwLgorICogVHVuZXIgY3gyNDEwOSBpcyB3cml0dGVuIHRocm91Z2ggYSBkZWRpY2F0ZWQgM3dpcmUgaW50ZXJmYWNlCisgKiBvbiB0aGUgZGVtb2QgY2hpcC4KICAqLwotc3RhdGljIGludCBjeDI0MTIzX3BsbF93cml0ZXJlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwLCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfd3JpdGVyZWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CkBAIC02MTAsNyArNjI5LDcgQEAKIAogCS8qIHNlbmQgYW5vdGhlciA4IGJ5dGVzLCB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhPj44KSAmIDB4ZmYgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YSA+PiA4KSAmIDB4ZmYpOwogCXdoaWxlICgoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDIwKSAmIDB4NDApID09IDApIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKIAkJCWVycigiJXM6ICBkZW1vZHVsYXRvciBpcyBub3QgcmVzcG9uZGluZywgIlwKQEAgLTYyMCw5ICs2MzksMTAgQEAKIAkJbXNsZWVwKDEwKTsKIAl9CiAKLQkvKiBzZW5kIHRoZSBsb3dlciA1IGJpdHMgb2YgdGhpcyBieXRlLCBwYWRkZWQgd2l0aCAzIExCQiwgd2FpdCBmb3IgdGhlIHNlbmQgdG8gYmUgY29tcGxldGVkICovCisJLyogc2VuZCB0aGUgbG93ZXIgNSBiaXRzIG9mIHRoaXMgYnl0ZSwgcGFkZGVkIHdpdGggMyBMQkIsCisJICogd2FpdCBmb3IgdGhlIHNlbmQgdG8gYmUgY29tcGxldGVkICovCiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDQwKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YSkgJiAweGZmICk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMiwgKGRhdGEpICYgMHhmZik7CiAJd2hpbGUgKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjApICYgMHg4MCkpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKIAkJCWVycigiJXM6ICBkZW1vZHVsYXRvciBpcyBub3QgcmVzcG9uZGluZywiIFwKQEAgLTYzOSw3ICs2NTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfcGxsX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsOwpAQCAtNjkwLDcgKzcxMSw3IEBACiAJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjMsIHIpOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfaW5pdGZlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBjeDI0MTIzX2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKQEAgLTY5OSwxOSArNzIwLDIyIEBACiAKIAkvKiBDb25maWd1cmUgdGhlIGRlbW9kIHRvIGEgZ29vZCBzZXQgb2YgZGVmYXVsdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI0MTIzX3JlZ2RhdGEpOyBpKyspCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIGN4MjQxMjNfcmVnZGF0YVtpXS5yZWcsIGN4MjQxMjNfcmVnZGF0YVtpXS5kYXRhKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgY3gyNDEyM19yZWdkYXRhW2ldLnJlZywKKwkJCWN4MjQxMjNfcmVnZGF0YVtpXS5kYXRhKTsKIAogCS8qIFNldCB0aGUgTE5CIHBvbGFyaXR5ICovCi0JaWYoc3RhdGUtPmNvbmZpZy0+bG5iX3BvbGFyaXR5KQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDMyLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MzIpIHwgMHgwMik7CisJaWYgKHN0YXRlLT5jb25maWctPmxuYl9wb2xhcml0eSkKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgzMiwKKwkJCWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzMikgfCAweDAyKTsKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT5kb250X3VzZV9wbGwpCi0JY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKKwkJY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsOwpAQCAtNzQwLDcgKzc2NCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjAwKTsKIAl3aGlsZSAoIShjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpICYgMHg0MCkpIHsKLQkJaWYodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZXJyKCIlczogZGlzZXFjIHF1ZXVlIG5vdCByZWFkeSwgIiBcCiAJCQkJImNvbW1hbmQgbWF5IGJlIGxvc3QuXG4iLCBfX2Z1bmNfXyk7CiAJCQlicmVhazsKQEAgLTc0OSw3ICs3NzMsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqY21kKQorc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGksIHZhbCwgdG9uZTsKQEAgLTc3MSwyMCArNzk2LDIxIEBACiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MkMgKyBpLCBjbWQtPm1zZ1tpXSk7CiAKIAl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwKSB8ICgoY21kLT5tc2dfbGVuLTMpICYgMykpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwKSB8CisJCSgoY21kLT5tc2dfbGVuLTMpICYgMykpOwogCiAJLyogd2FpdCBmb3IgZGlzZXFjIG1lc3NhZ2UgdG8gZmluaXNoIHNlbmRpbmcgKi8KIAljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CiAKIAkvKiByZXN0YXJ0IGNvbnRpbnVvdXMgdG9uZSBpZiBlbmFibGVkICovCi0JaWYgKHRvbmUgJiAweDEwKSB7CisJaWYgKHRvbmUgJiAweDEwKQogCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCB0b25lICYgfjB4NDApOwotCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQorc3RhdGljIGludCBjeDI0MTIzX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCB2YWwsIHRvbmU7CkBAIC04MTQsMTMgKzg0MCwxMyBAQAogCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MmEsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyYSkgJiAweGZiKTsKIAogCS8qIHJlc3RhcnQgY29udGludW91cyB0b25lIGlmIGVuYWJsZWQgKi8KLQlpZiAodG9uZSAmIDB4MTApIHsKKwlpZiAodG9uZSAmIDB4MTApCiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHRvbmUgJiB+MHg0MCk7Ci0JfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgc3luYyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxNCk7CkBAIC04NTMsOCArODc5LDkgQEAKIH0KIAogLyoKLSAqIENvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBtZWFzdXJlbWVudCBvZiBlcnJvcnMgaW4gYmxvY2tzLCBiZWNhdXNlIG5vIFVDQkxPQ0tTIHZhbHVlCi0gKiBpcyBhdmFpbGFibGUsIHNvIHRoaXMgdmFsdWUgZG91YmxlcyB1cCB0byBzYXRpc2Z5IGJvdGggbWVhc3VyZW1lbnRzCisgKiBDb25maWd1cmVkIHRvIHJldHVybiB0aGUgbWVhc3VyZW1lbnQgb2YgZXJyb3JzIGluIGJsb2NrcywKKyAqIGJlY2F1c2Ugbm8gVUNCTE9DS1MgdmFsdWUgaXMgYXZhaWxhYmxlLCBzbyB0aGlzIHZhbHVlIGRvdWJsZXMgdXAKKyAqIHRvIHNhdGlzZnkgYm90aCBtZWFzdXJlbWVudHMuCiAgKi8KIHN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7CkBAIC04NzYsNyArOTAzLDggQEAKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCSpzaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4M2IpIDw8IDg7IC8qIGxhcmdlciA9IGJldHRlciAqLworCS8qIGxhcmdlciA9IGJldHRlciAqLworCSpzaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4M2IpIDw8IDg7CiAKIAlkcHJpbnRrKCJTaWduYWwgc3RyZW5ndGggPSAlZFxuIiwgKnNpZ25hbF9zdHJlbmd0aCk7CiAKQEAgLTkwNyw3ICs5MzUsNyBAQAogCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQogCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKIAotCXN0YXRlLT5jdXJyZW50ZnJlcT1wLT5mcmVxdWVuY3k7CisJc3RhdGUtPmN1cnJlbnRmcmVxID0gcC0+ZnJlcXVlbmN5OwogCXN0YXRlLT5jdXJyZW50c3ltYm9scmF0ZSA9IHAtPnUucXBzay5zeW1ib2xfcmF0ZTsKIAogCWN4MjQxMjNfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKQEAgLTkzMiw3ICs5NjAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIApAQCAtOTUyLDcgKzk4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHZhbDsKQEAgLTk3Nyw4ICsxMDA2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcywKK3N0YXRpYyBpbnQgY3gyNDEyM190dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCiAJCQl1bnNpZ25lZCBpbnQgbW9kZV9mbGFncywKIAkJCXVuc2lnbmVkIGludCAqZGVsYXksCiAJCQlmZV9zdGF0dXNfdCAqc3RhdHVzKQpAQCAtOTk3LDEyICsxMDI2LDEyIEBACiAKIHN0YXRpYyBpbnQgY3gyNDEyM19nZXRfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlyZXR1cm4gMTsgLy9GRV9BTEdPX0hXCisJcmV0dXJuIDE7IC8qIEZFX0FMR09fSFcgKi8KIH0KIAotc3RhdGljIHZvaWQgY3gyNDEyM19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgY3gyNDEyM19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIlxuIik7CiAJaTJjX2RlbF9hZGFwdGVyKCZzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIpOwogCWtmcmVlKHN0YXRlKTsKQEAgLTEwMTMsNyArMTA0Miw3IEBACiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CiAJLyogdGhpcyByZXBlYXRlciBjbG9zZXMgYWZ0ZXIgdGhlIGZpcnN0IHN0b3AgKi8KLSAgICBjeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDEpOworCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMSk7CiAJcmV0dXJuIGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIG51bSk7CiB9CiAKQEAgLTEwMzcsOCArMTA2Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDI0MTIzX29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnKiBjb25maWcsCi0JCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9CiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTIzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDU3LDIwICsxMDg2LDI1IEBACiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCiAJc3RhdGUtPmRlbW9kX3JldiA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwMCk7CiAJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfcmV2KSB7Ci0JY2FzZSAweGUxOiBpbmZvKCJkZXRlY3RlZCBDWDI0MTIzQ1xuIik7IGJyZWFrOwotCWNhc2UgMHhkMTogaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM1xuIik7IGJyZWFrOworCWNhc2UgMHhlMToKKwkJaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM0NcbiIpOworCQlicmVhazsKKwljYXNlIDB4ZDE6CisJCWluZm8oImRldGVjdGVkIENYMjQxMjNcbiIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIoIndyb25nIGRlbW9kIHJldmlzaW9uOiAleFxuIiwgc3RhdGUtPmRlbW9kX3Jldik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwotCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjQxMjNfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDI0MTIzX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CiAJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKIAotICAgIC8qIGNyZWF0ZSB0dW5lciBpMmMgYWRhcHRlciAqLwotICAgIGlmIChjb25maWctPmRvbnRfdXNlX3BsbCkKLQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOworCS8qIGNyZWF0ZSB0dW5lciBpMmMgYWRhcHRlciAqLworCWlmIChjb25maWctPmRvbnRfdXNlX3BsbCkKKwkJY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKIAogCXN0cmxjcHkoc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLm5hbWUsICJDWDI0MTIzIHR1bmVyIEkyQyBidXMiLAogCQlzaXplb2Yoc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLm5hbWUpKTsKQEAgLTEwNzksNyArMTExMyw3IEBACiAJc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLmFsZ29fZGF0YSA9IE5VTEw7CiAJaTJjX3NldF9hZGFwZGF0YSgmc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLCBzdGF0ZSk7CiAJaWYgKGkyY19hZGRfYWRhcHRlcigmc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyKSA8IDApIHsKLQllcnIoInR1bmVyIGkyYyBidXMgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iKTsKKwkJZXJyKCJ0dW5lciBpMmMgYnVzIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xMDkwLDYgKzExMjQsNyBAQAogCiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGN4MjQxMjNfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMjNfb3BzID0gewogCkBAIC0xMTI2LDE1ICsxMTYxLDggQEAKIAkuZ2V0X2Zyb250ZW5kX2FsZ28gPSBjeDI0MTIzX2dldF9hbGdvLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKLQotbW9kdWxlX3BhcmFtKGZvcmNlX2JhbmQsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2JhbmQsICJGb3JjZSBhIHNwZWNpZmljIGJhbmQgc2VsZWN0ICgxLTksIGRlZmF1bHQ6b2ZmKS4iKTsKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJEVkIgRnJvbnRlbmQgbW9kdWxlIGZvciBDb25leGFudCAiIFwKIAkiQ1gyNDEyMy9DWDI0MTA5L0NYMjQxMTMgaGFyZHdhcmUiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLUVYUE9SVF9TWU1CT0woY3gyNDEyM19hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKaW5kZXggY2M2YjQxMS4uNTFhZTg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCkBAIC0yMywxMyArMjMsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgY3gyNDEyM19jb25maWcKLXsKK3N0cnVjdCBjeDI0MTIzX2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCiAJLyogTmVlZCB0byBzZXQgZGV2aWNlIHBhcmFtIGZvciBzdGFydF9kbWEgKi8KLQlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGlzX3B1bmN0dXJlZCk7CisJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpc19wdW5jdHVyZWQpOwogCiAJLyogMCA9IExOQiB2b2x0YWdlIG5vcm1hbCwgMSA9IExOQiB2b2x0YWdlIGludmVydGVkICovCiAJaW50IGxuYl9wb2xhcml0eTsKQEAgLTM5LDcgKzM4LDggQEAKIAl2b2lkICgqYWdjX2NhbGxiYWNrKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyMykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKSBcCisJJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyAqY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiBleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICpjeDI0MTIzX2dldF90dW5lcl9pMmNfYWRhcHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOwpAQCAtNTYsNiArNTYsNiBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfQ1gyNDEyMworI2VuZGlmCiAKICNlbmRpZiAvKiBDWDI0MTIzX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCmluZGV4IDc1MDBhMWMuLmNmNGQ4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYwpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIHN0cnVjdCBzNWgxNDA5X3N0YXRlIHsKIAotCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwogCiAJLyogY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLwotCWNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnOworCWNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnOwogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIApAQCAtNDgsNiArNDgsOSBAQAogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOworCiAjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKIAogLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGluaXRpYWxpc2UgdGhlIGRlbW9kLCB0aGlzIHdpbGwgc2V0IFZTQiBieSBkZWZhdWx0ICovCkBAIC0yOTksMTAgKzMwMiwxMCBAQAogfTsKIAogLyogOCBiaXQgcmVnaXN0ZXJzLCAxNiBiaXQgdmFsdWVzICovCi1zdGF0aWMgaW50IHM1aDE0MDlfd3JpdGVyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHUxNiBkYXRhKQorc3RhdGljIGludCBzNWgxNDA5X3dyaXRlcmVnKHN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1MTYgZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgPj4gOCwgIGRhdGEgJiAweGZmIH07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKIAkJCSAgICAgICAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMyB9OwpAQCAtMzEwLDE5ICszMTMsMTkgQEAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CiAKIAlpZiAocmV0ICE9IDEpCi0JCXByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDR4LCAiCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDR4LCAiCiAJCSAgICAgICAicmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJlZywgZGF0YSwgcmV0KTsKIAogCXJldHVybiAocmV0ICE9IDEpID8gLTEgOiAwOwogfQogCi1zdGF0aWMgdTE2IHM1aDE0MDlfcmVhZHJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUsIHU4IHJlZykKK3N0YXRpYyB1MTYgczVoMTQwOV9yZWFkcmVnKHN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSwgdTggcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyB9OwotCXU4IGIxIFtdID0geyAwLCAwIH07CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCwgMCB9OwogCi0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0geworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKIAkJICAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwKQEAgLTMzNSw5ICszMzgsOSBAQAogCXJldHVybiAoYjFbMF0gPDwgOCkgfCBiMVsxXTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3NvZnRyZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9zb2Z0cmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTM0OSwxMSArMzUyLDExIEBACiB9CiAKICNkZWZpbmUgUzVIMTQwOV9WU0JfSUZfRlJFUSA1MzgwCi0jZGVmaW5lIFM1SDE0MDlfUUFNX0lGX0ZSRVEgc3RhdGUtPmNvbmZpZy0+cWFtX2lmCisjZGVmaW5lIFM1SDE0MDlfUUFNX0lGX0ZSRVEgKHN0YXRlLT5jb25maWctPnFhbV9pZikKIAotc3RhdGljIGludCBzNWgxNDA5X3NldF9pZl9mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgS0h6KQorc3RhdGljIGludCBzNWgxNDA5X3NldF9pZl9mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgS0h6KQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQgS0h6KVxuIiwgX19mdW5jX18sIEtIeik7CiAKQEAgLTM3NiwyNiArMzc5LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfc3BlY3RyYWxpbnZlcnNpb24oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpbnZlcnRlZCkKK3N0YXRpYyBpbnQgczVoMTQwOV9zZXRfc3BlY3RyYWxpbnZlcnNpb24oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpbnZlcnRlZCkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGludmVydGVkKTsKIAotCWlmKGludmVydGVkID09IDEpCisJaWYgKGludmVydGVkID09IDEpCiAJCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDFiLCAweDExMDEpOyAvKiBJbnZlcnRlZCAqLwogCWVsc2UKIAkJcmV0dXJuIHM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4MWIsIDB4MDExMCk7IC8qIE5vcm1hbCAqLwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfZW5hYmxlX21vZHVsYXRpb24oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCitzdGF0aWMgaW50IHM1aDE0MDlfZW5hYmxlX21vZHVsYXRpb24oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJICAgICBmZV9tb2R1bGF0aW9uX3QgbSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKDB4JTA4eClcbiIsIF9fZnVuY19fLCBtKTsKIAotCXN3aXRjaChtKSB7CisJc3dpdGNoIChtKSB7CiAJY2FzZSBWU0JfODoKIAkJZHByaW50aygiJXMoKSBWU0JfOFxuIiwgX19mdW5jX18pOwogCQlpZiAoc3RhdGUtPmlmX2ZyZXEgIT0gUzVIMTQwOV9WU0JfSUZfRlJFUSkKQEAgLTQyMiw5ICs0MjUsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKIApAQCAtNDM0LDkgKzQzNyw5IEBACiAJCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGYzLCAwKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzNWgxNDA5X3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKIApAQCAtNDQ4LDE4ICs0NTEsMTggQEAKIAkJCXM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhlMykgJiAweGZlZmYpOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IHM1aDE0MDlfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCiAJcmV0dXJuIHM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4ZjIsIGVuYWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIApAQCAtNDgzLDcgKzQ4Niw3IEBACiAJCXJlZyAmPSAweGZmOwogCiAJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OTYsIDB4MDBjKTsKLQkJaWYgKChyZWcgPCAweDM4KSB8fCAocmVnID4gMHg2OCkgKSB7CisJCWlmICgocmVnIDwgMHgzOCkgfHwgKHJlZyA+IDB4NjgpKSB7CiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDkzLCAweDMzMzIpOwogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5ZSwgMHgyYzM3KTsKIAkJfSBlbHNlIHsKQEAgLTUxNCw3ICs1MTcsNyBAQAogCiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDk2LCAweDIwKTsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4YWQsCi0JCQkJKCAoKHJlZzEgJiAweGYwMDApID4+IDQpIHwgKHJlZzIgJiAweGYwZmYpKSApOworCQkJCSgoKHJlZzEgJiAweGYwMDApID4+IDQpIHwgKHJlZzIgJiAweGYwZmYpKSk7CiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGFiLAogCQkJCXM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhhYikgJiAweGVmZmUpOwogCQl9CkBAIC01MjksMTAgKzUzMiwxMCBAQAogfQogCiAvKiBUYWxrIHRvIHRoZSBkZW1vZCwgc2V0IHRoZSBGRUMsIEdVQVJELCBRQU0gc2V0dGluZ3MgZXRjICovCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X2Zyb250ZW5kIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKGZyZXF1ZW5jeT0lZClcbiIsIF9fZnVuY19fLCBwLT5mcmVxdWVuY3kpOwogCkBAIC01NDYsOSArNTQ5LDExIEBACiAJbXNsZWVwKDEwMCk7CiAKIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykgewotCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcCk7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCX0KIAogCS8qIE9wdGltaXplIHRoZSBkZW1vZCBmb3IgUUFNICovCkBAIC01OTIsMTcgKzU5NywxNyBAQAogCiAvKiBSZXNldCB0aGUgZGVtb2QgaGFyZHdhcmUgYW5kIHJlc2V0IGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKICAgIHRvIGEgZGVmYXVsdCBzdGF0ZS4gKi8KLXN0YXRpYyBpbnQgczVoMTQwOV9pbml0IChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCWludCBpOwogCi0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJczVoMTQwOV9zbGVlcChmZSwgMCk7CiAJczVoMTQwOV9yZWdpc3Rlcl9yZXNldChmZSk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUoaW5pdF90YWIpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF90YWIpOyBpKyspCiAJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIGluaXRfdGFiW2ldLnJlZywgaW5pdF90YWJbaV0uZGF0YSk7CiAKIAkvKiBUaGUgZGF0YXNoZWV0IHNheXMgdGhhdCBhZnRlciBpbml0aWFsaXNhdGlvbiwgVlNCIGlzIGRlZmF1bHQgKi8KQEAgLTYyNyw5ICs2MzIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTE2IHJlZzsKIAl1MzIgdHVuZXJfc3RhdHVzID0gMDsKIApAQCAtNjM3LDEyICs2NDIsMTIgQEAKIAogCS8qIEdldCB0aGUgZGVtb2R1bGF0b3Igc3RhdHVzICovCiAJcmVnID0gczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGYxKTsKLQlpZihyZWcgJiAweDEwMDApCisJaWYgKHJlZyAmIDB4MTAwMCkKIAkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKLQlpZihyZWcgJiAweDgwMDApCisJaWYgKHJlZyAmIDB4ODAwMCkKIAkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSyB8IEZFX0hBU19TWU5DOwogCi0Jc3dpdGNoKHN0YXRlLT5jb25maWctPnN0YXR1c19tb2RlKSB7CisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLT5zdGF0dXNfbW9kZSkgewogCWNhc2UgUzVIMTQwOV9ERU1PRExPQ0tJTkc6CiAJCWlmICgqc3RhdHVzICYgRkVfSEFTX1ZJVEVSQkkpCiAJCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1NJR05BTDsKQEAgLTY2OCwxMiArNjczLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9xYW0yNTZfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIsIHUxNiB2KQorc3RhdGljIGludCBzNWgxNDA5X3FhbTI1Nl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNuciwgdTE2IHYpCiB7CiAJaW50IGksIHJldCA9IC1FSU5WQUw7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHFhbTI1Nl9zbnJfdGFiKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocWFtMjU2X3Nucl90YWIpOyBpKyspIHsKIAkJaWYgKHYgPCBxYW0yNTZfc25yX3RhYltpXS52YWwpIHsKIAkJCSpzbnIgPSBxYW0yNTZfc25yX3RhYltpXS5kYXRhOwogCQkJcmV0ID0gMDsKQEAgLTY4MywxMiArNjg4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3FhbTY0X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yLCB1MTYgdikKK3N0YXRpYyBpbnQgczVoMTQwOV9xYW02NF9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNuciwgdTE2IHYpCiB7CiAJaW50IGksIHJldCA9IC1FSU5WQUw7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHFhbTY0X3Nucl90YWIpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxYW02NF9zbnJfdGFiKTsgaSsrKSB7CiAJCWlmICh2IDwgcWFtNjRfc25yX3RhYltpXS52YWwpIHsKIAkJCSpzbnIgPSBxYW02NF9zbnJfdGFiW2ldLmRhdGE7CiAJCQlyZXQgPSAwOwpAQCAtNjk4LDEyICs3MDMsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfdnNiX2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yLCB1MTYgdikKK3N0YXRpYyBpbnQgczVoMTQwOV92c2JfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIsIHUxNiB2KQogewogCWludCBpLCByZXQgPSAtRUlOVkFMOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRSh2c2Jfc25yX3RhYik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZzYl9zbnJfdGFiKTsgaSsrKSB7CiAJCWlmICh2ID4gdnNiX3Nucl90YWJbaV0udmFsKSB7CiAJCQkqc25yID0gdnNiX3Nucl90YWJbaV0uZGF0YTsKIAkJCXJldCA9IDA7CkBAIC03MTQsMTMgKzcxOSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXUxNiByZWc7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKKwlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKIAljYXNlIFFBTV82NDoKIAkJcmVnID0gczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGYwKSAmIDB4ZmY7CiAJCXJldHVybiBzNWgxNDA5X3FhbTY0X2xvb2t1cF9zbnIoZmUsIHNuciwgcmVnKTsKQEAgLTczNywzMCArNzQyLDMwIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJCQkJdTE2KiBzaWduYWxfc3RyZW5ndGgpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXUxNiAqc2lnbmFsX3N0cmVuZ3RoKQogewogCXJldHVybiBzNWgxNDA5X3JlYWRfc25yKGZlLCBzaWduYWxfc3RyZW5ndGgpOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiB1Y2Jsb2NrcykKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJKnVjYmxvY2tzID0gczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGI1KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKIAlyZXR1cm4gczVoMTQwOV9yZWFkX3VjYmxvY2tzKGZlLCBiZXIpOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlwLT5mcmVxdWVuY3kgPSBzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3k7CiAJcC0+dS52c2IubW9kdWxhdGlvbiA9IHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb247CkBAIC03NjgsMjUgKzc3MywyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCitzdGF0aWMgaW50IHM1aDE0MDlfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCiB7CiAJdHVuZS0+bWluX2RlbGF5X21zID0gMTAwMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgczVoMTQwOV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgczVoMTQwOV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWtmcmVlKHN0YXRlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHM1aDE0MDlfb3BzOwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZywKLQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBOVUxMOwogCXUxNiByZWc7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwpAQCAtODI1LDYgKzgzMCw3IEBACiAJa2ZyZWUoc3RhdGUpOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzNWgxNDA5X2F0dGFjaCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzNWgxNDA5X29wcyA9IHsKIApAQCAtODUwLDE0ICs4NTYsMTAgQEAKIAkucmVsZWFzZSAgICAgICAgICAgICAgPSBzNWgxNDA5X3JlbGVhc2UsCiB9OwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFM1SDE0MDkgUUFNLUIvQVRTQyBEZW1vZHVsYXRvciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLUVYUE9SVF9TWU1CT0woczVoMTQwOV9hdHRhY2gpOwogCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmgKaW5kZXggZDFhMWQyZS4uMDcwZDk3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oCkBAIC0yNCw4ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KIAotc3RydWN0IHM1aDE0MDlfY29uZmlnCi17CitzdHJ1Y3QgczVoMTQwOV9jb25maWcgewogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIApAQCAtNjAsMTIgKzU5LDE0IEBACiAJdTE2IG1wZWdfdGltaW5nOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDA5KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDlfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDA5X01PRFVMRSkgXAorCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnKiBjb25maWcsCi0JCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzNWgxNDA5X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCmluZGV4IDJkYTFhMzcuLjJmZWJmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJdTggYWRkciwgdTggcmVnLCB1MTYgZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgPj4gOCwgIGRhdGEgJiAweGZmIH07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMgfTsKIApAQCAtMzU5LDEwICszNTksMTAgQEAKIHN0YXRpYyB1MTYgczVoMTQxMV9yZWFkcmVnKHN0cnVjdCBzNWgxNDExX3N0YXRlICpzdGF0ZSwgdTggYWRkciwgdTggcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyB9OwotCXU4IGIxIFtdID0geyAwLCAwIH07CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCwgMCB9OwogCi0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0geworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDIgfSB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCmluZGV4IDA0ZTdmMWMuLjJhOGJiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIHN0YXRpYyBpbnQgdGRhMTAwNDhfd3JpdGVyZWcoc3RydWN0IHRkYTEwMDQ4X3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewogCQkuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCS5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CkBAIC0yMTMsOSArMjEzLDkgQEAKIHN0YXRpYyB1OCB0ZGExMDA0OF9yZWFkcmVnKHN0cnVjdCB0ZGExMDA0OF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkJLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKQEAgLTM5Myw0MyArMzkzLDg5IEBACiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjIpOwogCXN3aXRjaCAoKHZhbCAmIDB4NjApID4+IDUpIHsKLQljYXNlIDA6IHAtPmNvbnN0ZWxsYXRpb24gPSAgIFFQU0s7IGJyZWFrOwotCWNhc2UgMTogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRUFNLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwkJYnJlYWs7CiAJfQogCXN3aXRjaCAoKHZhbCAmIDB4MTgpID4+IDMpIHsKLQljYXNlIDA6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOyBicmVhazsKLQljYXNlIDE6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8xOyBicmVhazsKLQljYXNlIDI6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8yOyBicmVhazsKLQljYXNlIDM6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV80OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV80OworCQlicmVhazsKIAl9CiAJc3dpdGNoICh2YWwgJiAweDA3KSB7Ci0JY2FzZSAwOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOyBicmVhazsKLQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7IGJyZWFrOwotCWNhc2UgMjogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzNfNDsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OyBicmVhazsKLQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OworCQlicmVhazsKIAl9CiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjMpOwogCXN3aXRjaCAodmFsICYgMHgwNykgewotCWNhc2UgMDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOyBicmVhazsKLQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7IGJyZWFrOwotCWNhc2UgMzogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsgYnJlYWs7Ci0JY2FzZSA0OiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQogCiAJdmFsID0gdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfT1VUX0NPTkYxKTsKIAlzd2l0Y2ggKCh2YWwgJiAweDBjKSA+PiAyKSB7Ci0JY2FzZSAwOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7IGJyZWFrOwotCWNhc2UgMTogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OyBicmVhazsKLQljYXNlIDI6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfODsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzQ7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKIAl9CiAJc3dpdGNoICh2YWwgJiAweDAyKSB7Ci0JY2FzZSAwOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOyBicmVhazsKLQljYXNlIDE6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96MDE5NGEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96MDE5NGEuaAppbmRleCBkMjg3NmQyLi4wN2YzZmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvejAxOTRhLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaWZuZGVmIFowMTk0QQogI2RlZmluZSBaMDE5NEEKIAotc3RhdGljIGludCBzaGFycF96MDE5NGFfX3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK3N0YXRpYyBpbnQgc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJIHUzMiBzcmF0ZSwgdTMyIHJhdGlvKQogewogCXU4IGFjbGsgPSAwOwpAQCAtNDAsNyArNDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggc2hhcnBfejAxOTRhX19pbml0dGFiW10gPSB7CitzdGF0aWMgdTggc2hhcnBfejAxOTRhX2luaXR0YWJbXSA9IHsKIAkweDAxLCAweDE1LAogCTB4MDIsIDB4MDAsCiAJMHgwMywgMHgwMCwKQEAgLTgyLDE2ICs4Miw0IEBACiAJMHhmZiwgMHhmZgogfTsKIAotc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBzaGFycF96MDE5NGFfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKLQkuaW5pdHRhYiA9IHNoYXJwX3owMTk0YV9faW5pdHRhYiwKLQkubWNsayA9IDg4MDAwMDAwVUwsCi0JLmludmVydCA9IDEsCi0JLnNraXBfcmVpbml0ID0gMCwKLQkubG9ja19vdXRwdXQgPSBTVFYwMjk5X0xPQ0tPVVRQVVRfMSwKLQkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCi0JLm1pbl9kZWxheV9tcyA9IDEwMCwKLQkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX19zZXRfc3ltYm9sX3JhdGUsCi19OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKaW5kZXggOWRhMjYwZi4uNmY5Yjc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKQEAgLTQyLDYgKzQyLDEwIEBACiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MTApLAogCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTIwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUzMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1ODApLAogCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTkwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggYzdjNzcwYy4uYWExZmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUyLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCmluZGV4IGU1MWQ3MDcuLjA0Y2Q3YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKQEAgLTM1OSw3ICszNTksNyBAQAogCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkaW8tc2lsYWJzLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLXNpNDcweC4KIAogY29uZmlnIFVTQl9NUjgwMAogCXRyaXN0YXRlICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSByYWRpbyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwppbmRleCA2Njc4M2ZmLi43OGY1Njk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAKIAlyYWRpby0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAlpZiAoZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk9PS0xKQotCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LCAiU2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0zNjEsMTIgKzM2MSwxNCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKSB7CiAJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKSA9PSAtMSkgewotCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsCisJCQkJCSAiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5XG4iKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pID09IC0xKSB7Ci0JCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCQkJICJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHlcbiIpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0KQEAgLTQxNiw3ICs0MTgsOCBAQAogCXJhZGlvLT5tdXRlZCA9IDE7CiAKIAlpZiAoZHNicjEwMF9zdGFydChyYWRpbyk8MCkgewotCQl3YXJuKCJSYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5Iik7CisJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsCisJCQkgIlJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHlcbiIpOwogCQlyYWRpby0+dXNlcnMgPSAwOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwpAQCAtNTAxLDcgKzUwNCw3IEBACiAJcmFkaW8tPmN1cmZyZXEgPSBGUkVRX01JTipGUkVRX01VTDsKIAl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJd2FybigiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZSIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHJhZGlvLT52aWRlb2Rldik7CiAJCWtmcmVlKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpOwogCQlrZnJlZShyYWRpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwppbmRleCBmNmNlZGNkLi41OTIwY2QzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCkBAIC0xMDQsNiArMTA0LDcgQEAKICAqCQktIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrIHN1cHBvcnQKICAqCQktIGFmYyBpbmRpY2F0aW9uCiAgKgkJLSBtb3JlIHNhZmV0eSBjaGVja3MsIGxldCBzaTQ3MHhfZ2V0X2ZyZXEgcmV0dXJuIGVycm5vCisgKgkJLSB2aWRpb2MgYmVoYXZpb3IgY29ycmVjdGVkIGFjY29yZGluZyB0byB2NGwyIHNwZWMKICAqCiAgKiBUb0RvOgogICogLSBhZGQgZmlybXdhcmUgZG93bmxvYWQvdXBkYXRlIHN1cHBvcnQKQEAgLTE0MSw5ICsxNDIsOSBAQAogLyogVVNCIERldmljZSBJRCBMaXN0ICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2k0NzB4X3VzYl9kcml2ZXJfaWRfdGFibGVbXSA9IHsKIAkvKiBTaWxpY29uIExhYnMgVVNCIEZNIFJhZGlvIFJlZmVyZW5jZSBEZXNpZ24gKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTBjNCwgMHg4MThhLAlVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM0LCAweDgxOGEsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpICovCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA2ZTEsIDB4YTE1NSwJVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CiB9OwpAQCAtMTU3LDcgKzE1OCw3IEBACiAKIC8qIFJhZGlvIE5yICovCiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiUmFkaW8gTnIiKTsKIAogLyogU3BhY2luZyAoa0h6KSAqLwpAQCAtMTY1LDQyICsxNjYsNDIgQEAKIC8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCiAvKiAyOiAgNTAga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3BhY2UgPSAyOwotbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOworbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzcGFjZSwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOwogCiAvKiBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwogLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSovCiAvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwogLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGJhbmQgPSAxOwotbW9kdWxlX3BhcmFtKGJhbmQsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiQmFuZDogMD04Ny41Li4xMDhNSHogKjE9NzYuLjEwOE1IeiogMj03Ni4uOTBNSHoiKTsKK21vZHVsZV9wYXJhbShiYW5kLCB1c2hvcnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhiYW5kLCAiQmFuZDogMD04Ny41Li4xMDhNSHogKjE9NzYuLjEwOE1IeiogMj03Ni4uOTBNSHoiKTsKIAogLyogRGUtZW1waGFzaXMgKi8KIC8qIDA6IDc1IHVzIChVU0EpICovCiAvKiAxOiA1MCB1cyAoRXVyb3BlLCBBdXN0cmFsaWEsIEphcGFuKSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlID0gMTsKLW1vZHVsZV9wYXJhbShkZSwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJEZS1lbXBoYXNpczogMD03NXVzICoxPTUwdXMqIik7Cittb2R1bGVfcGFyYW0oZGUsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlLCAiRGUtZW1waGFzaXM6IDA9NzV1cyAqMT01MHVzKiIpOwogCiAvKiBVU0IgdGltZW91dCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1c2JfdGltZW91dCA9IDUwMDsKLW1vZHVsZV9wYXJhbSh1c2JfdGltZW91dCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0odXNiX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2JfdGltZW91dCwgIlVTQiB0aW1lb3V0IChtcyk6ICo1MDAqIik7CiAKIC8qIFR1bmUgdGltZW91dCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0dW5lX3RpbWVvdXQgPSAzMDAwOwotbW9kdWxlX3BhcmFtKHR1bmVfdGltZW91dCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0odHVuZV90aW1lb3V0LCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModHVuZV90aW1lb3V0LCAiVHVuZSB0aW1lb3V0OiAqMzAwMCoiKTsKIAogLyogU2VlayB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlZWtfdGltZW91dCA9IDUwMDA7Ci1tb2R1bGVfcGFyYW0oc2Vla190aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShzZWVrX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzZWVrX3RpbWVvdXQsICJTZWVrIHRpbWVvdXQ6ICo1MDAwKiIpOwogCiAvKiBSRFMgYnVmZmVyIGJsb2NrcyAqLwogc3RhdGljIHVuc2lnbmVkIGludCByZHNfYnVmID0gMTAwOwotbW9kdWxlX3BhcmFtKHJkc19idWYsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHJkc19idWYsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZHNfYnVmLCAiUkRTIGJ1ZmZlciBlbnRyaWVzOiAqMTAwKiIpOwogCiAvKiBSRFMgbWF4aW11bSBibG9jayBlcnJvcnMgKi8KQEAgLTIwOSw3ICsyMTAsNyBAQAogLyogMSBtZWFucyAxLTIgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAodXNlZCBieSBvcmlnaW5hbCBVU0JSYWRpby5leGUpICovCiAvKiAyIG1lYW5zIDMtNSAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICovCiAvKiAzIG1lYW5zICAgNisgZXJyb3JzIG9yIGVycm9ycyBpbiBjaGVja3dvcmQsIGNvcnJlY3Rpb24gbm90IHBvc3NpYmxlICovCi1tb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMCk7Cittb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9yZHNfZXJyb3JzLCAiUkRTIG1heGltdW0gYmxvY2sgZXJyb3JzOiAqMSoiKTsKIAogLyogUkRTIHBvbGwgZnJlcXVlbmN5ICovCkBAIC0yMTgsNyArMjE5LDcgQEAKIC8qIDUwIGlzIHVzZWQgYnkgcmFkaW8tY2FkZXQgKi8KIC8qIDc1IHNob3VsZCBiZSBva2F5ICovCiAvKiA4MCBpcyB0aGUgdXN1YWwgUkRTIHJlY2VpdmUgaW50ZXJ2YWwgKi8KLW1vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmRzX3BvbGxfdGltZSwgIlJEUyBwb2xsIHRpbWUgKG1zKTogKjQwKiIpOwogCiAKQEAgLTY2NywyMyArNjY4LDI5IEBACiAJaW50IHJldHZhbDsKIAogCS8qIFNwYWNpbmcgKGtIeikgKi8KLQlzd2l0Y2ggKHNwYWNlKSB7CisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfU1BBQ0UpID4+IDQpIHsKIAkvKiAwOiAyMDAga0h6IChVU0EsIEF1c3RyYWxpYSkgKi8KLQljYXNlIDAgOiBzcGFjaW5nID0gMC4yMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAwOgorCQlzcGFjaW5nID0gMC4yMDAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KLQljYXNlIDEgOiBzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAxOgorCQlzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogIDUwIGtIeiAqLwotCWRlZmF1bHQ6IHNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQlzcGFjaW5nID0gMC4wNTAgKiBGUkVRX01VTDsgYnJlYWs7CiAJfTsKIAogCS8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCi0Jc3dpdGNoIChiYW5kKSB7CisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewogCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSkgKi8KLQljYXNlIDAgOiBiYW5kX2JvdHRvbSA9IDg3LjUgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAwOgorCQliYW5kX2JvdHRvbSA9IDg3LjUgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMTogNzYgICAtIDEwOCBNSHogKEphcGFuIHdpZGUgYmFuZCkgKi8KLQlkZWZhdWx0OiBiYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CisJZGVmYXVsdDoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KLQljYXNlIDIgOiBiYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAyOgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJfTsKIAogCS8qIHJlYWQgY2hhbm5lbCAqLwpAQCAtNzA2LDIzICs3MTMsMjkgQEAKIAl1bnNpZ25lZCBzaG9ydCBjaGFuOwogCiAJLyogU3BhY2luZyAoa0h6KSAqLwotCXN3aXRjaCAoc3BhY2UpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgewogCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwotCWNhc2UgMCA6IHNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCXNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiAxMDAga0h6IChFdXJvcGUsIEphcGFuKSAqLwotCWNhc2UgMSA6IHNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDE6CisJCXNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiAgNTAga0h6ICovCi0JZGVmYXVsdDogc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KLQlzd2l0Y2ggKGJhbmQpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLwotCWNhc2UgMCA6IGJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCWJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotCWRlZmF1bHQ6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwotCWNhc2UgMiA6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQ2hhbiA9IFsgRnJlcSAoTWh6KSAtIEJvdHRvbSBvZiBCYW5kIChNSHopIF0gLyBTcGFjaW5nIChrSHopICovCkBAIC0xMTY0LDcgKzExNzcsNiBAQAogICogc2k0NzB4X3Y0bDJfcXVlcnljdHJsIC0gcXVlcnkgY29udHJvbAogICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHNpNDcweF92NGwyX3F1ZXJ5Y3RybFtdID0gewotLyogSElOVDogdGhlIGRpc2FibGVkIGNvbnRyb2xzIGFyZSBvbmx5IGhlcmUgdG8gc2F0aWZ5IGtyYWRpbyBhbmQgc3VjaCBhcHBzICovCiAJewogCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMTE3NSwxOCArMTE4Nyw2IEBACiAJCS5kZWZhdWx0X3ZhbHVlCT0gMTUsCiAJfSwKIAl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQVNTLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKIAkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX01VVEUsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lCQk9ICJNdXRlIiwKQEAgLTExOTUsMTAgKzExOTUsNiBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDEsCiAJfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19MT1VETkVTUywKLQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCX0sCiB9OwogCiAKQEAgLTEyMjAsNTYgKzEyMTYsMzQgQEAKIAogCiAvKgotICogc2k0NzB4X3ZpZGlvY19nX2lucHV0IC0gZ2V0IGlucHV0Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQl1bnNpZ25lZCBpbnQgKmkpCi17Ci0JKmkgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF92aWRpb2Nfc19pbnB1dCAtIHNldCBpbnB1dAotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGkgIT0gMCkKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzZXQgaW5wdXQgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgogICogc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwgLSBlbnVtZXJhdGUgY29udHJvbCBpdGVtcwogICovCiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXVuc2lnbmVkIGNoYXIgaTsKKwl1bnNpZ25lZCBjaGFyIGkgPSAwOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JLyogc2FmZXR5IGNoZWNrcyAqLwotCWlmICghcWMtPmlkKQorCS8qIGFib3J0IGlmIHFjLT5pZCBpcyBiZWxvdyBWNEwyX0NJRF9CQVNFICovCisJaWYgKHFjLT5pZCA8IFY0TDJfQ0lEX0JBU0UpCiAJCWdvdG8gZG9uZTsKIAorCS8qIHNlYXJjaCB2aWRlbyBjb250cm9sICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2k0NzB4X3Y0bDJfcXVlcnljdHJsKTsgaSsrKSB7CiAJCWlmIChxYy0+aWQgPT0gc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldLmlkKSB7CiAJCQltZW1jcHkocWMsICYoc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dmFsID0gMDsKKwkJCXJldHZhbCA9IDA7IC8qIGZvdW5kICovCiAJCQlicmVhazsKIAkJfQogCX0KIAorCS8qIGRpc2FibGUgdW5zdXBwb3J0ZWQgYmFzZSBjb250cm9scyAqLworCS8qIHRvIHNhdGlzZnkga3JhZGlvIGFuZCBzdWNoIGFwcHMgKi8KKwlpZiAoKHJldHZhbCA9PSAtRUlOVkFMKSAmJiAocWMtPmlkIDwgVjRMMl9DSURfTEFTVFAxKSkgeworCQlxYy0+ZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKKwkJcmV0dmFsID0gMDsKKwl9CisKIGRvbmU6CiAJaWYgKHJldHZhbCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKQEAgLTEzNjAsNDQgKzEzMzQsMTMgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCiB7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGF1ZGlvLT5pbmRleCAhPSAwKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KKwkvKiBkcml2ZXIgY29uc3RhbnRzICovCisJYXVkaW8tPmluZGV4ID0gMDsKIAlzdHJjcHkoYXVkaW8tPm5hbWUsICJSYWRpbyIpOwogCWF1ZGlvLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCWF1ZGlvLT5tb2RlID0gMDsKIAotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogZ2V0IGF1ZGlvIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF92aWRpb2Nfc19hdWRpbyAtIHNldCBhdWRpbyBhdHRyaWJ1dGVzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGF1ZGlvLT5pbmRleCAhPSAwKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLWRvbmU6Ci0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNldCBhdWRpbyBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAwOwogfQogCiAKQEAgLTE0MTUsNyArMTM1OCw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCh0dW5lci0+aW5kZXggIT0gMCkgJiYgKHR1bmVyLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKHR1bmVyLT5pbmRleCAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNDI0LDggKzEzNjcsMTMgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCisJLyogZHJpdmVyIGNvbnN0YW50cyAqLwogCXN0cmNweSh0dW5lci0+bmFtZSwgIkZNIik7Ci0Jc3dpdGNoIChiYW5kKSB7CisJdHVuZXItPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCisJLyogcmFuZ2UgbGltaXRzICovCisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewogCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSwgZGVmYXVsdCkgKi8KIAlkZWZhdWx0OgogCQl0dW5lci0+cmFuZ2Vsb3cgID0gIDg3LjUgKiBGUkVRX01VTDsKQEAgLTE0NDIsMTQgKzEzOTAsMTggQEAKIAkJdHVuZXItPnJhbmdlaGlnaCA9ICA5MCAgICogRlJFUV9NVUw7CiAJCWJyZWFrOwogCX07Ci0JdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCi0JLyogU3RlcmVvIGluZGljYXRvciA9PSBTdGVyZW8gKGluc3RlYWQgb2YgTW9ubykgKi8KKwkvKiBzdGVyZW8gaW5kaWNhdG9yID09IHN0ZXJlbyAoaW5zdGVhZCBvZiBtb25vKSAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1QpID09IDEpCi0JCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCWVsc2UKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICYgUE9XRVJDRkdfTU9OTykgPT0gMSkKIAkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwllbHNlCisJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAogCS8qIG1pbiBpcyB3b3JzdCwgbWF4IGlzIGJlc3Q7IHNpZ25hbDowLi4weGZmZmY7IHJzc2k6IDAuLjB4ZmYgKi8KIAl0dW5lci0+c2lnbmFsID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1JTU0kpCkBAIC0xNDc0LDIzICsxNDI2LDI4IEBACiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXR2YWwgPSAwOworCWludCByZXR2YWwgPSAtRUlOVkFMOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwogCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKSB7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCh0dW5lci0+aW5kZXggIT0gMCkgJiYgKHR1bmVyLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7CisJaWYgKHR1bmVyLT5pbmRleCAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBtb25vL3N0ZXJlbyBzZWxlY3RvciAqLworCXN3aXRjaCAodHVuZXItPmF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19NT05POyAgLyogZm9yY2UgbW9ubyAqLworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19NT05POyAvKiB0cnkgc3RlcmVvICovCisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodHVuZXItPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX01PTk8pCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX01PTk87ICAvKiBmb3JjZSBtb25vICovCi0JZWxzZQotCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfTU9OTzsgLyogdHJ5IHN0ZXJlbyAqLwotCiAJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwogCiBkb25lOgpAQCAtMTUxNSwxMSArMTQ3MiwxMiBAQAogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgoZnJlcS0+dHVuZXIgIT0gMCkgJiYgKGZyZXEtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAoZnJlcS0+dHVuZXIgIT0gMCkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQogCisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJcmV0dmFsID0gc2k0NzB4X2dldF9mcmVxKHJhZGlvLCAmZnJlcS0+ZnJlcXVlbmN5KTsKIAogZG9uZToKQEAgLTE1NDQsNyArMTUwMiw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChmcmVxLT50dW5lciAhPSAwKSAmJiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCWlmIChmcmVxLT50dW5lciAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNTczLDcgKzE1MzEsNyBAQAogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgoc2Vlay0+dHVuZXIgIT0gMCkgJiYgKHNlZWstPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAoc2Vlay0+dHVuZXIgIT0gMCkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTU4OCwxNSArMTU0NiwxNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKworLyoKKyAqIHNpNDcweF9pb2N0bF9vcHMgLSB2aWRlbyBkZXZpY2UgaW9jdGwgb3BlcmF0aW9ucworICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNpNDcweF9pb2N0bF9vcHMgPSB7CiAJLnZpZGlvY19xdWVyeWNhcAk9IHNpNDcweF92aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19nX2lucHV0CQk9IHNpNDcweF92aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQJCT0gc2k0NzB4X3ZpZGlvY19zX2lucHV0LAogCS52aWRpb2NfcXVlcnljdHJsCT0gc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwsCiAJLnZpZGlvY19nX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19nX2F1ZGlvCQk9IHNpNDcweF92aWRpb2NfZ19hdWRpbywKLQkudmlkaW9jX3NfYXVkaW8JCT0gc2k0NzB4X3ZpZGlvY19zX2F1ZGlvLAogCS52aWRpb2NfZ190dW5lcgkJPSBzaTQ3MHhfdmlkaW9jX2dfdHVuZXIsCiAJLnZpZGlvY19zX3R1bmVyCQk9IHNpNDcweF92aWRpb2Nfc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5CT0gc2k0NzB4X3ZpZGlvY19nX2ZyZXF1ZW5jeSwKQEAgLTE2MDQsMTQgKzE1NjMsMTUgQEAKIAkudmlkaW9jX3NfaHdfZnJlcV9zZWVrCT0gc2k0NzB4X3ZpZGlvY19zX2h3X2ZyZXFfc2VlaywKIH07CiAKKwogLyoKLSAqIHNpNDcweF92aWRkZXZfdGFtcGxlcyAtIHZpZGVvIGRldmljZSBpbnRlcmZhY2UKKyAqIHNpNDcweF92aWRkZXZfdGVtcGxhdGUgLSB2aWRlbyBkZXZpY2UgaW50ZXJmYWNlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNpNDcweF92aWRkZXZfdGVtcGxhdGUgPSB7CiAJLmZvcHMJCQk9ICZzaTQ3MHhfZm9wcywKLQkuaW9jdGxfb3BzIAkJPSAmc2k0NzB4X2lvY3RsX29wcywKIAkubmFtZQkJCT0gRFJJVkVSX05BTUUsCiAJLnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmlvY3RsX29wcwkJPSAmc2k0NzB4X2lvY3RsX29wcywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwppbmRleCBmNzk0ZjJkLi5lMGViNGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwpAQCAtMjksNDMgKzI5LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzAgewpAQCAtODAsMjEgKzYxLDEyIEBACiAJaW50IHNhdDsKIH07CiAKLSNkZWZpbmUgICBJMkNfQURWNzE3MCAgICAgICAgMHhkNAotI2RlZmluZSAgIEkyQ19BRFY3MTcxICAgICAgICAweDU0Ci0KLXN0YXRpYyBjaGFyIGFkdjcxNzBfbmFtZVtdID0gImFkdjcxNzAiOwotc3RhdGljIGNoYXIgYWR2NzE3MV9uYW1lW10gPSAiYWR2NzE3MSI7Ci0KIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgInBhc3NfdGhyb3VnaCIsICJwbGF5X2JhY2siIH07CiBzdGF0aWMgY2hhciAqbm9ybXNbXSA9IHsgIlBBTCIsICJOVFNDIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotYWR2NzE3MF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTEwMiwxNyArNzQsMTMgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYWR2NzE3MF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50Ci1hZHY3MTcwX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IGFkdjcxNzBfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTMzLDMzICsxMDEsMjUgQEAKIAkJCQkgICAgZW5jb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQogCX0KLQogCXJldHVybiByZXQ7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vLyBPdXRwdXQgZmlsdGVyOiAgUy1WaWRlbyAgQ29tcG9zaXRlCi0KLSNkZWZpbmUgTVIwNTAgICAgICAgMHgxMQkvLzB4MDkKLSNkZWZpbmUgTVIwNjAgICAgICAgMHgxNAkvLzB4MGMKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2RlZmluZSBUUjBNT0RFICAgICAweDRjCiAjZGVmaW5lIFRSMFJTVAkgICAgMHg4MApAQCAtMTY3LDcgKzEyNyw2IEBACiAjZGVmaW5lIFRSMUNBUFQJICAgIDB4MDAKICNkZWZpbmUgVFIxUExBWQkgICAgMHgwMAogCi0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfTlRTQ1tdID0gewogCTB4MDAsIDB4MTAsCQkvLyBNUjAKIAkweDAxLCAweDIwLAkJLy8gTVIxCkBAIC0yMjcsMTUgKzE4NiwxMSBAQAogfTsKIAogCi1zdGF0aWMgaW50Ci1hZHY3MTcwX2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAqICAgICAgICAgICAgIGFyZykKK3N0YXRpYyBpbnQgYWR2NzE3MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogI2lmIDAKIAkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCkBAIC0yNTQsMTggKzIwOSwxNiBAQAogCQkJICAgICBWSURFT19FTkNPREVSX05UU0M7CiAJCWNhcC0+aW5wdXRzID0gMjsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCBpYXJnID0gKihpbnQgKikgYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfY29tbWFuZDogc2V0IG5vcm0gJWQiLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCBpYXJnKTsKIAogCQlzd2l0Y2ggKGlhcmcpIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCWFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X05UU0MsCiAJCQkJCSAgICBzaXplb2YoaW5pdF9OVFNDKSk7CkBAIC0yODUsMTYgKzIzOCwxMyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIG5vcm06ICVkXG4iLAotCQkJICAgICAgIEkyQ19OQU1FKGNsaWVudCksIGlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBub3JtOiAlZFxuIiwgaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJbm9ybXNbaWFyZ10pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgbm9ybXNbaWFyZ10pOwogCQllbmNvZGVyLT5ub3JtID0gaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzA0LDE5ICsyNTQsMTcgQEAKIAkJICppYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwCiAJCSAqaWFyZyA9IDI6IGNvbG9yIGJhciAqLwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfY29tbWFuZDogc2V0IGlucHV0IGZyb20gJXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgZnJvbSAlc1xuIiwKIAkJCWlhcmcgPT0gMCA/ICJkZWNvZGVyIiA6ICJaUjM2MDYwIik7CiAKIAkJc3dpdGNoIChpYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDEsIDB4MjApOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDgsIFRSMUNBUFQpOwkvKiBUUjEgKi8KIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDBlKTsJLy8gRW5hYmxlIGdlbmxvY2sKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKKwkJCS8qIHVkZWxheSgxMCk7ICovCiAJCQlicmVhazsKIAogCQljYXNlIDE6CkBAIC0zMjUsMjAgKzI3MywxNyBAQAogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MDgpOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOworCQkJLyogdWRlbGF5KDEwKTsgKi8KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogaWxsZWdhbCBpbnB1dDogJWRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJaW5wdXRzW2lhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tpYXJnXSk7CiAJCWVuY29kZXItPmlucHV0ID0gaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgogCXsKQEAgLTM0OCwxNiArMjkzLDE2IEBACiAJCWlmICgqaWFyZyAhPSAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKIAkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY4LDE0OSArMzEzLDY3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19BRFY3MTcwID4+IDEsIChJMkNfQURWNzE3MCA+PiAxKSArIDEsCi0JSTJDX0FEVjcxNzEgPj4gMSwgKEkyQ19BRFY3MTcxID4+IDEpICsgMSwKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHhkNCA+PiAxLCAweGQ2ID4+IDEsCS8qIGFkdjcxNzAgSURzICovCisJMHg1NCA+PiAxLCAweDU2ID4+IDEsCS8qIGFkdjcxNzEgSURzICovCiAJSTJDX0NMSUVOVF9FTkQKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYWR2NzE3MDsKLQotc3RhdGljIGludAotYWR2NzE3MF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IGFkdjcxNzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyOwotCWNoYXIgKmRuYW1lOwotCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImFkdjcxNzAuYzogZGV0ZWN0aW5nIGFkdjcxNzAgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKKwlpbnQgaTsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX2FkdjcxNzA7Ci0JaWYgKChjbGllbnQtPmFkZHIgPT0gSTJDX0FEVjcxNzAgPj4gMSkgfHwKLQkgICAgKGNsaWVudC0+YWRkciA9PSAoSTJDX0FEVjcxNzAgPj4gMSkgKyAxKSkgewotCQlkbmFtZSA9IGFkdjcxNzBfbmFtZTsKLQl9IGVsc2UgaWYgKChjbGllbnQtPmFkZHIgPT0gSTJDX0FEVjcxNzEgPj4gMSkgfHwKLQkJICAgKGNsaWVudC0+YWRkciA9PSAoSTJDX0FEVjcxNzEgPj4gMSkgKyAxKSkgewotCQlkbmFtZSA9IGFkdjcxNzFfbmFtZTsKLQl9IGVsc2UgewotCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUhISEgKi8KLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgZG5hbWUsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHY3MTcwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWVuY29kZXItPmlucHV0ID0gMDsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9OVFNDLCBzaXplb2YoaW5pdF9OVFNDKSk7CiAJaWYgKGkgPj0gMCkgewogCQlpID0gYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQlpID0gYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwogCQlpID0gYWR2NzE3MF9yZWFkKGNsaWVudCwgMHgxMik7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IHJldi4gJWQgYXQgMHglMDJ4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSAmIDEsIGNsaWVudC0+YWRkciA8PCAxKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKIAl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBlcnJvciAweCV4XG4iLAotCQkgICAgICAgSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfQotCisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1hZHY3MTcwX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFkdjcxNzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImFkdjcxNzAuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmFkdjcxNzBfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFkdjcxNzBfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9hZHY3MTcwID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImFkdjcxNzAiLAkvKiBuYW1lICovCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYWR2NzE3MF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IGFkdjcxNzBfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IGFkdjcxNzBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHY3MTcwX2lkW10gPSB7CisJeyAiYWR2NzE3MCIsIDAgfSwKKwl7ICJhZHY3MTcxIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHY3MTcwX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLWFkdjcxNzBfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotYWR2NzE3MF9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2FkdjcxNzApOwotfQotCi1tb2R1bGVfaW5pdChhZHY3MTcwX2luaXQpOwotbW9kdWxlX2V4aXQoYWR2NzE3MF9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJhZHY3MTcwIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3MCwKKwkuY29tbWFuZCA9IGFkdjcxNzBfY29tbWFuZCwKKwkucHJvYmUgPSBhZHY3MTcwX3Byb2JlLAorCS5yZW1vdmUgPSBhZHY3MTcwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBhZHY3MTcwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKaW5kZXggOGVlMDdhNi4uNjAwOGU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKQEAgLTI1LDQzICsyNSwyNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzUgewpAQCAtNzcsMzMgKzU4LDIzIEBACiAjZGVmaW5lICAgSTJDX0FEVjcxNzUgICAgICAgIDB4ZDQKICNkZWZpbmUgICBJMkNfQURWNzE3NiAgICAgICAgMHg1NAogCi1zdGF0aWMgY2hhciBhZHY3MTc1X25hbWVbXSA9ICJhZHY3MTc1IjsKLXN0YXRpYyBjaGFyIGFkdjcxNzZfbmFtZVtdID0gImFkdjcxNzYiOwotCiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJwYXNzX3Rocm91Z2giLCAicGxheV9iYWNrIiwgImNvbG9yX2JhciIgfTsKIHN0YXRpYyBjaGFyICpub3Jtc1tdID0geyAiUEFMIiwgIk5UU0MiLCAiU0VDQU0tPlBBTCAobWF5IG5vdCB3b3JrISkiIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1hZHY3MTc1X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWFkdjcxNzVfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludAotYWR2NzE3NV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBhZHY3MTc1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEyMywxOCArOTQsMTcgQEAKIAkJCQlyZWcrKzsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gYWR2NzE3NV93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gYWR2NzE3NV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xNDMsMTMgKzExMywxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1zZXRfc3ViY2Fycmllcl9mcmVxIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGludCAgICAgICAgICAgICAgICBwYXNzX3Rocm91Z2gpCitzdGF0aWMgdm9pZCBzZXRfc3ViY2Fycmllcl9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYXNzX3Rocm91Z2gpCiB7CiAJLyogZm9yIHNvbWUgcmVhc29uIHBhc3NfdGhyb3VnaCBOVFNDIG5lZWRzCiAJICogYSBkaWZmZXJlbnQgc3ViLWNhcnJpZXIgZnJlcSB0byByZW1haW4gc3RhYmxlLiAqLwotCWlmKHBhc3NfdGhyb3VnaCkKKwlpZiAocGFzc190aHJvdWdoKQogCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwMCk7CiAJZWxzZQogCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHg1NSk7CkBAIC0xNjAsMTIgKzEyOCwxMiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLy8gT3V0cHV0IGZpbHRlcjogIFMtVmlkZW8gIENvbXBvc2l0ZQorLyogT3V0cHV0IGZpbHRlcjogIFMtVmlkZW8gIENvbXBvc2l0ZSAqLwogCi0jZGVmaW5lIE1SMDUwICAgICAgIDB4MTEJLy8weDA5Ci0jZGVmaW5lIE1SMDYwICAgICAgIDB4MTQJLy8weDBjCisjZGVmaW5lIE1SMDUwICAgICAgIDB4MTEJLyogMHgwOSAqLworI2RlZmluZSBNUjA2MCAgICAgICAweDE0CS8qIDB4MGMgKi8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgVFIwTU9ERSAgICAgMHg0NgogI2RlZmluZSBUUjBSU1QJICAgIDB4ODAKQEAgLTIxNiwxNSArMTg0LDExIEBACiAJMHgwNiwgMHgxYSwJCS8qIHN1YmMuIHBoYXNlICovCiB9OwogCi1zdGF0aWMgaW50Ci1hZHY3MTc1X2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgYWR2NzE3NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KIAkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLApAQCAtMjQyLDE1ICsyMDYsMTQgQEAKIAkJCSAgICAgVklERU9fRU5DT0RFUl9TRUNBTTsgLyogd2VsbCwgaGFja3kgKi8KIAkJY2FwLT5pbnB1dHMgPSAyOwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9OT1JNOgogCXsKIAkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7CiAKIAkJc3dpdGNoIChpYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwpAQCAtMjg0LDE2ICsyNDcsMTMgQEAKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGlsbGVnYWwgbm9ybTogJWRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIG5vcm06ICVkXG4iLCBpYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCW5vcm1zW2lhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIG5vcm1zW2lhcmddKTsKIAkJZW5jb2Rlci0+bm9ybSA9IGlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTMwNCw3ICsyNjQsNiBAQAogCQkgKmlhcmcgPSAyOiBjb2xvciBiYXIgKi8KIAogCQlzd2l0Y2ggKGlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMCk7CiAKQEAgLTMzMSw3ICsyOTAsNyBAQAogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOworCQkJLyogdWRlbGF5KDEwKTsgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgMjoKQEAgLTM0MywzOSArMzAyLDM1IEBACiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvL3VkZWxheSgxMCk7CisJCQkvKiB1ZGVsYXkoMTApOyAqLwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIGlucHV0OiAlZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCBpYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCWlucHV0c1tpYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbaWFyZ10pOwogCQllbmNvZGVyLT5pbnB1dCA9IGlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgeworCQlpZiAoKmlhcmcgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsMTQ1ICszNDUsNjcgQEAKICAqIEdlbmVyaWMgaTJjIHByb2JlCiAgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPQotICAgIHsgSTJDX0FEVjcxNzUgPj4gMSwgKEkyQ19BRFY3MTc1ID4+IDEpICsgMSwKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJSTJDX0FEVjcxNzUgPj4gMSwgKEkyQ19BRFY3MTc1ID4+IDEpICsgMSwKIAlJMkNfQURWNzE3NiA+PiAxLCAoSTJDX0FEVjcxNzYgPj4gMSkgKyAxLAogCUkyQ19DTElFTlRfRU5ECiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzU7Ci0KLXN0YXRpYyBpbnQKLWFkdjcxNzVfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBhZHY3MTc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlcjsKLQljaGFyICpkbmFtZTsKLQotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJhZHY3MTc1LmM6IGRldGVjdGluZyBhZHY3MTc1IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9hZHY3MTc1OwotCWlmICgoY2xpZW50LT5hZGRyID09IEkyQ19BRFY3MTc1ID4+IDEpIHx8Ci0JICAgIChjbGllbnQtPmFkZHIgPT0gKEkyQ19BRFY3MTc1ID4+IDEpICsgMSkpIHsKLQkJZG5hbWUgPSBhZHY3MTc1X25hbWU7Ci0JfSBlbHNlIGlmICgoY2xpZW50LT5hZGRyID09IEkyQ19BRFY3MTc2ID4+IDEpIHx8Ci0JCSAgIChjbGllbnQtPmFkZHIgPT0gKEkyQ19BRFY3MTc2ID4+IDEpICsgMSkpIHsKLQkJZG5hbWUgPSBhZHY3MTc2X25hbWU7Ci0JfSBlbHNlIHsKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlISEhICovCi0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAwOwotCX0KLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksIGRuYW1lLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR2NzE3NSksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOwogCWVuY29kZXItPmlucHV0ID0gMDsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCWlmIChpID49IDApIHsKIAkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKIAkJaSA9IGFkdjcxNzVfcmVhZChjbGllbnQsIDB4MTIpOwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiByZXYuICVkIGF0IDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpICYgMSwgY2xpZW50LT5hZGRyIDw8IDEpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KLQlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoOiBpbml0IGVycm9yIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzVfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYWR2NzE3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYWR2NzE3NS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYWR2NzE3NV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotYWR2NzE3NV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzUgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWR2NzE3NSIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBhZHY3MTc1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYWR2NzE3NV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdjcxNzVfaWRbXSA9IHsKKwl7ICJhZHY3MTc1IiwgMCB9LAorCXsgImFkdjcxNzYiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdjcxNzVfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYWR2NzE3NV9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9hZHY3MTc1KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1hZHY3MTc1X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3NSk7Ci19Ci0KLW1vZHVsZV9pbml0KGFkdjcxNzVfaW5pdCk7Ci1tb2R1bGVfZXhpdChhZHY3MTc1X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImFkdjcxNzUiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAorCS5wcm9iZSA9IGFkdjcxNzVfcHJvYmUsCisJLnJlbW92ZSA9IGFkdjcxNzVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGFkdjcxNzVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwppbmRleCA1ZjA3YThhLi5kNjAxMjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwpAQCAtOTAsNiArOTAsNyBAQAogCWNhc2UgNzIyMjE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMjMxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjI0MTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyNTE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMzAxOiAvKiBXaW5UVi1IVlI4NTAgKFJldGFpbCwgSVIsIEFUU0MgYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzI1MDA6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgTm8gSVIsIEFUU0MvUUFNICovCiAJCWJyZWFrOwpAQCAtMTg1LDcgKzE4Niw3IEBACiB9CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0cnVjdCB1c2JfZGV2aWNlX2lkIGF1MDgyOF91c2JfaWRfdGFibGUgW10gPSB7CitzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdTA4MjhfdXNiX2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg3MjAwKSwKIAkJLmRyaXZlcl9pbmZvID0gQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg3MjQwKSwKQEAgLTE5OCw2ICsxOTksOCBAQAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMWIpLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMWUpLAorCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMWYpLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyODApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKaW5kZXggZDg1NmRlOS4uNTc2NWU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCkBAIC05MSw3ICs5MSw4IEBACiAJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVzYmRldiwKIAkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51c2JkZXYsIDApLAogCQkJCXJlcXVlc3QsCi0JCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJCQkJVVNCX1JFQ0lQX0RFVklDRSwKIAkJCQl2YWx1ZSwgaW5kZXgsCiAJCQkJY3AsIHNpemUsIDEwMDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKaW5kZXggZjBmY2RiNC4uYTg4MmNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwpAQCAtMTczLDcgKzE3Myw4IEBACiAJCXB1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAkJdXNiX2ZpbGxfYnVsa191cmIocHVyYiwKIAkJCQkgIGRldi0+dXNiZGV2LAotCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dXNiZGV2LCBfQVUwODI4X0JVTEtQSVBFKSwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVzYmRldiwKKwkJCQkJX0FVMDgyOF9CVUxLUElQRSksCiAJCQkJICBwdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJICBVUkJfQlVGU0laRSwKIAkJCQkgIHVyYl9jb21wbGV0aW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCmluZGV4IGRkZDJhNzkuLmEwN2I3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKQEAgLTI5LDQ0ICsyOSwyNSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+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+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODE5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwpAQCAtNTQ1LDk3ICs0NzIsMzMgQEAKIAlkZWNvZGVyLT5pbml0aWFsaXplZCA9IDA7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQlpZCA9IGJ0ODE5X3JlYWQoY2xpZW50LCAweDE3KTsKLQlzd2l0Y2ggKGlkICYgMHhmMCkgewotCWNhc2UgMHg3MDoKLQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAiYnQ4MTlhIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDYwOgotCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJidDgxN2EiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQlicmVhazsKLQljYXNlIDB4MjA6Ci0JCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImJ0ODE1YSIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiYnQ4MTk6IHVua25vd24gY2hpcCB2ZXJzaW9uIDB4JXggKHZlciAweCV4KVxuIiwKLQkJCWlkICYgMHhmMCwgaWQgJiAweDBmKTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gYnQ4MTlfaW5pdChjbGllbnQpOwotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gMHgleCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpZCAmIDB4MGYsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7Ci0JfQotCisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWJ0ODE5X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGJ0ODE5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmJ0ODE5X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1idDgxOV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDgxOSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJidDgxOSIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9CVDgxOSwKLQotCS5hdHRhY2hfYWRhcHRlciA9IGJ0ODE5X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYnQ4MTlfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IGJ0ODE5X2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4MTlfaWRbXSA9IHsKKwl7ICJidDgxOWEiLCAwIH0sCisJeyAiYnQ4MTdhIiwgMCB9LAorCXsgImJ0ODE1YSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYnQ4MTlfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYnQ4MTlfaW5pdF9tb2R1bGUgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX2J0ODE5KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1idDgxOV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2J0ODE5KTsKLX0KLQotbW9kdWxlX2luaXQoYnQ4MTlfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYnQ4MTlfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYnQ4MTkiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDgxOSwKKwkuY29tbWFuZCA9IGJ0ODE5X2NvbW1hbmQsCisJLnByb2JlID0gYnQ4MTlfcHJvYmUsCisJLnJlbW92ZSA9IGJ0ODE5X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBidDgxOV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKaW5kZXggYWIyY2U0ZC4uNDIxMzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwpAQCAtMjksNDMgKzI5LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9va3RyZWUtODU2QSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgQlQ4NTZfUkVHX09GRlNFVAkweERBCkBAIC03OCwxNCArNTksOSBAQAogCWludCBlbmFibGU7CiB9OwogCi0jZGVmaW5lICAgSTJDX0JUODU2ICAgICAgICAweDg4Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDg1Nl93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDg1Nl93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC05Myw0NiArNjksMzYgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYnQ4NTZfc2V0Yml0IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIGJpdCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDg1Nl9zZXRiaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQogewogCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJcmV0dXJuIGJ0ODU2X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJICAgKGVuY29kZXItPgotCQkJICAgIHJlZ1tyZWcgLSBCVDg1Nl9SRUdfT0ZGU0VUXSAmIH4oMSA8PCBiaXQpKSB8Ci0JCQkgICAgKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKKwkJKGVuY29kZXItPnJlZ1tyZWcgLSBCVDg1Nl9SRUdfT0ZGU0VUXSAmIH4oMSA8PCBiaXQpKSB8CisJCQkJKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKIH0KIAotc3RhdGljIHZvaWQKLWJ0ODU2X2R1bXAgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBidDg1Nl9kdW1wKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IGk7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXIgZHVtcDoiLCBJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJyZWdpc3RlciBkdW1wOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IEJUODU2X05SX1JFRzsgaSArPSAyKQotCQlwcmludGsoIiAlMDJ4IiwgZW5jb2Rlci0+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+ZW5jb2Rlcl90eXBlID0gRU5DT0RFUl9UWVBFX1VOS05PV047Ci0KLQkvKiBpbml0aWFsaXplICovCi0KLQlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYnQ4NjZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjcpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgYnQ4NjZfZm91bmRfcHJvYyk7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0ODY2X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBidDg2Nl9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjc7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlyZXR1cm4gYnQ4NjZfZG9fY29tbWFuZChlbmNvZGVyLCBjbWQsIGFyZyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4NjZfaWRbXSA9IHsKKwl7ICJidDg2NiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYnQ4NjZfaWQpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBidDg2Nl9pbml0KHZvaWQpCi17Ci0JaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NjYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgYnQ4NjZfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2J0ODY2KTsKLX0KLQotbW9kdWxlX2luaXQoYnQ4NjZfaW5pdCk7Ci1tb2R1bGVfZXhpdChidDg2Nl9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJidDg2NiIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODY2LAorCS5jb21tYW5kID0gYnQ4NjZfY29tbWFuZCwKKwkucHJvYmUgPSBidDg2Nl9wcm9iZSwKKwkucmVtb3ZlID0gYnQ4NjZfcmVtb3ZlLAorCS5sZWdhY3lfcHJvYmUgPSBidDg2Nl9sZWdhY3lfcHJvYmUsCisJLmlkX3RhYmxlID0gYnQ4NjZfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCBmYThiZTA3Li5hNGIxNzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9hdWRpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMmNkYTE1Zi4uZGFjNWNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0zOSwxNiArMzksMTYgQEAKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUyLAogCQkJLnZtdXggICA9IDEsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTMsCiAJCQkudm11eCAgID0gMiwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFNCwKIAkJCS52bXV4ICAgPSAzLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBscF0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTgwMGxwIiwKQEAgLTU3LDE5ICs1NywxOSBAQAogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhmZjAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9ERUJVRywKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMSwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHhmZjAyLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjE4MDAiLApAQCAtODQsMjAgKzg0LDIwIEBACiAJCQkJCUNYMjU4NDBfVklONV9DSDIgfAogCQkJCQlDWDI1ODQwX1ZJTjJfQ0gxLAogCQkJLmdwaW8wICA9IDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0JQ1gyNTg0MF9WSU43X0NIMyB8CiAJCQkJCUNYMjU4NDBfVklONF9DSDIgfAogCQkJCQlDWDI1ODQwX1ZJTjZfQ0gxLAogCQkJLmdwaW8wICA9IDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPQlDWDI1ODQwX1ZJTjdfQ0gzIHwKIAkJCQkJQ1gyNTg0MF9WSU40X0NIMiB8CiAJCQkJCUNYMjU4NDBfVklOOF9DSDEgfAogCQkJCQlDWDI1ODQwX1NWSURFT19PTiwKIAkJCS5ncGlvMCAgPSAwLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjEyNTAiLApAQCAtMTA2LDE5ICsxMDYsMTkgQEAKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfREVCVUcsCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDEsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9FWFBdID0gewogCQkubmFtZQkJPSAiRFZpQ08gRnVzaW9uSERUVjUgRXhwcmVzcyIsCkBAIC0xNjksNDMgKzE2OSw0MyBAQAogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHgzNDAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9VTktOT1dOLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzYwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBscCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc4MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzgwMSwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3ODA5LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc5MTEsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKIAkJLnN1YmRldmljZSA9IDB4ZDUwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0VYUCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc3OTAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUSwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc3OTcsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUSwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc3MTAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzcxNywKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDAsCkBAIC0yMjUsMTEgKzIyNSwxMSBAQAogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg4MDEwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCiAJCS5zdWJkZXZpY2UgPSAweGQ2MTgsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCiAJCS5zdWJkZXZpY2UgPSAweGRiNzgsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFAsCkBAIC0yNDcsMjMgKzI0NywyNSBAQAogCiAJaWYgKDAgPT0gZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IgJiYKIAkgICAgMCA9PSBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgewotCQlwcmludGsoIiVzOiBZb3VyIGJvYXJkIGhhcyBubyB2YWxpZCBQQ0llIFN1YnN5c3RlbSBJRCBhbmQgdGh1cyBjYW4ndFxuIgotCQkgICAgICAgIiVzOiBiZSBhdXRvZGV0ZWN0ZWQuICBQbGVhc2UgcGFzcyBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uIHRvXG4iCi0JCSAgICAgICAiJXM6IHdvcmthcm91bmQgdGhhdC4gIFJlZGlyZWN0IGNvbXBsYWludHMgdG8gdGhlIHZlbmRvciBvZlxuIgotCQkgICAgICAgIiVzOiB0aGUgVFYgY2FyZC4gIEJlc3QgcmVnYXJkcyxcbiIKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIiVzOiBCb2FyZCBoYXMgbm8gdmFsaWQgUENJZSBTdWJzeXN0ZW0gSUQgYW5kIGNhbid0XG4iCisJCSAgICAgICAiJXM6IGJlIGF1dG9kZXRlY3RlZC4gUGFzcyBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uXG4iCisJCSAgICAgICAiJXM6IHRvIHdvcmthcm91bmQgdGhhdC4gUmVkaXJlY3QgY29tcGxhaW50cyB0byB0aGVcbiIKKwkJICAgICAgICIlczogdmVuZG9yIG9mIHRoZSBUViBjYXJkLiAgQmVzdCByZWdhcmRzLFxuIgogCQkgICAgICAgIiVzOiAgICAgICAgIC0tIHR1eFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lKTsKIAl9IGVsc2UgewotCQlwcmludGsoIiVzOiBZb3VyIGJvYXJkIGlzbid0IGtub3duICh5ZXQpIHRvIHRoZSBkcml2ZXIuICBZb3UgY2FuXG4iCi0JCSAgICAgICAiJXM6IHRyeSB0byBwaWNrIG9uZSBvZiB0aGUgZXhpc3RpbmcgY2FyZCBjb25maWdzIHZpYVxuIgorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiJXM6IFlvdXIgYm9hcmQgaXNuJ3Qga25vd24gKHlldCkgdG8gdGhlIGRyaXZlci5cbiIKKwkJICAgICAgICIlczogVHJ5IHRvIHBpY2sgb25lIG9mIHRoZSBleGlzdGluZyBjYXJkIGNvbmZpZ3MgdmlhXG4iCiAJCSAgICAgICAiJXM6IGNhcmQ9PG4+IGluc21vZCBvcHRpb24uICBVcGRhdGluZyB0byB0aGUgbGF0ZXN0XG4iCiAJCSAgICAgICAiJXM6IHZlcnNpb24gbWlnaHQgaGVscCBhcyB3ZWxsLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSk7CiAJfQotCXByaW50aygiJXM6IEhlcmUgaXMgYSBsaXN0IG9mIHZhbGlkIGNob2ljZXMgZm9yIHRoZSBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uOlxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogSGVyZSBpcyBhIGxpc3Qgb2YgdmFsaWQgY2hvaWNlcyBmb3IgdGhlIGNhcmQ9PG4+IGluc21vZCBvcHRpb246XG4iLAogCSAgICAgICBkZXYtPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBjeDIzODg1X2Jjb3VudDsgaSsrKQotCQlwcmludGsoIiVzOiAgICBjYXJkPSVkIC0+ICVzXG4iLAorCQlwcmludGsoS0VSTl9JTkZPICIlczogICAgY2FyZD0lZCAtPiAlc1xuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgaSwgY3gyMzg4NV9ib2FyZHNbaV0ubmFtZSk7CiB9CiAKQEAgLTI3MSwxMSArMjczLDExIEBACiB7CiAJc3RydWN0IHR2ZWVwcm9tIHR2OwogCi0JdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsICZ0diwgZWVwcm9tX2RhdGEpOworCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmRldi0+aTJjX2J1c1swXS5pMmNfY2xpZW50LCAmdHYsCisJCWVlcHJvbV9kYXRhKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBzdXBwb3J0IHRoZSBib2FyZCBtb2RlbCAqLwotCXN3aXRjaCAodHYubW9kZWwpCi0JeworCXN3aXRjaCAodHYubW9kZWwpIHsKIAljYXNlIDcxMDA5OgogCQkvKiBXaW5UVi1IVlIxMjAwIChQQ0llLCBSZXRhaWwsIGZ1bGwgaGVpZ2h0KQogCQkgKiBEVkItVCBhbmQgYmFzaWMgYW5hbG9nICovCkBAIC0zMDMsMjEgKzMwNSw1MSBAQAogCWNhc2UgNzE5OTk6CiAJCS8qIFdpblRWLUhWUjEyMDAgKFBDSWUsIE9FTSwgZnVsbCBoZWlnaHQpCiAJCSAqIERWQi1UIGFuZCBiYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc2NjAxOiAvKiBXaW5UVi1IVlIxODAwbHAgKFBDSWUsIFJldGFpbCwgTm8gSVIsIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3NzAwMTogLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBPRU0sIE5vIElSLCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc3MDExOiAvKiBXaW5UVi1IVlIxNTAwIChFeHByZXNzIENhcmQsIFJldGFpbCwgTm8gSVIsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzcwNDE6IC8qIFdpblRWLUhWUjE1MDBRIChFeHByZXNzIENhcmQsIE9FTSwgTm8gSVIsIEFUU0MvUUFNIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc3MDUxOiAvKiBXaW5UVi1IVlIxNTAwUSAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDL1FBTSBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3ODAxMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgUmV0YWlsLCAzLjVtbSBpbiwgSVIsIE5vIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzg1MDE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODUyMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NTMxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIE5vIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzg2MzE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgTm8gSVIsIE5vIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzkwMDE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGZ1bGwgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc5MTAxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBoYWxmIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTU2MTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzk1NzE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGZ1bGwgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc5NjcxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NjYwMToKKwkJLyogV2luVFYtSFZSMTgwMGxwIChQQ0llLCBSZXRhaWwsIE5vIElSLCBEdWFsCisJCQljaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc3MDAxOgorCQkvKiBXaW5UVi1IVlIxNTAwIChFeHByZXNzIENhcmQsIE9FTSwgTm8gSVIsIEFUU0MKKwkJCWFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc3MDExOgorCQkvKiBXaW5UVi1IVlIxNTAwIChFeHByZXNzIENhcmQsIFJldGFpbCwgTm8gSVIsIEFUU0MKKwkJCWFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc3MDQxOgorCQkvKiBXaW5UVi1IVlIxNTAwUSAoRXhwcmVzcyBDYXJkLCBPRU0sIE5vIElSLCBBVFNDL1FBTQorCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzcwNTE6CisJCS8qIFdpblRWLUhWUjE1MDBRIChFeHByZXNzIENhcmQsIFJldGFpbCwgTm8gSVIsIEFUU0MvUUFNCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3ODAxMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgUmV0YWlsLCAzLjVtbSBpbiwgSVIsIE5vIEZNLAorCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc4NTAxOgorCQkvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIEZNLAorCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc4NTIxOgorCQkvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIEZNLAorCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc4NTMxOgorCQkvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIE5vIEZNLAorCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc4NjMxOgorCQkvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIE5vIElSLCBObyBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3OTAwMToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgZnVsbCBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5MTAxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBoYWxmIGhlaWdodCwKKwkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzk1NjE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTU3MToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgZnVsbCBoZWlnaHQsCisJCSBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5NjcxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwKKwkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwogCWNhc2UgODAwMTk6CiAJCS8qIFdpblRWLUhWUjE0MDAgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBJUiwKIAkJICogRFZCLVQgYW5kIEJhc2ljIGFuYWxvZyAqLwpAQCAtMzI5LDcgKzM2MSw4IEBACiAJCSAqIERWQi1UIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IHdhcm5pbmc6IHVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwgZGV2LT5uYW1lLCB0di5tb2RlbCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3YXJuaW5nOiB1bmtub3duIGhhdXBwYXVnZSBtb2RlbCAjJWRcbiIsCisJCQlkZXYtPm5hbWUsIHR2Lm1vZGVsKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNTIsNyArMzg1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE0MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CkBAIC0zODMsNyArNDE2LDcgQEAKIAogdm9pZCBjeDIzODg1X2dwaW9fc2V0dXAoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0Jc3dpdGNoKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJCS8qIEdQSU8tMCBjeDI0MjI3IGRlbW9kdWxhdG9yIHJlc2V0ICovCiAJCWN4X3NldChHUDBfSU8sIDB4MDAwMTAwMDEpOyAvKiBCcmluZyB0aGUgcGFydCBvdXQgb2YgcmVzZXQgKi8KQEAgLTYxNywxMCArNjUwLDMgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICoga2F0ZTogZW9sICJ1bml4IjsgaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10cmFpbGluZy1zcGFjZS1zYXZlIG9uOyB0YWItd2lkdGggODsgcmVwbGFjZS10YWJzIG9mZjsgc3BhY2UtaW5kZW50IG9mZjsgbWl4ZWQtaW5kZW50IG9mZgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggYmViM2U2MS4uOGY2ZmIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtMzcsMTIgKzM3LDEyIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdICA9IHtbMCAuLi4gKENYMjM4ODVfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKIG1vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY2FyZCwiY2FyZCB0eXBlIik7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmQsICJjYXJkIHR5cGUiKTsKIAogI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLilcCiAJZG8geyBpZiAoZGVidWcgPj0gbGV2ZWwpXApAQCAtMzY0LDEzICszNjQsMTIgQEAKIAkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwogCX0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQogCQlkZWxfdGltZXIoJnEtPnRpbWVvdXQpOwotCX0gZWxzZSB7CisJZWxzZQogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7Ci0JfQogCWlmIChiYyAhPSAxKQotCQlwcmludGsoIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVkIGJ1ZmZlcnMgaGFuZGxlZCAoc2hvdWxkIGJlIDEpXG4iLAogCQkgICAgICAgX19mdW5jX18sIGJjKTsKIH0KIApAQCAtMzgxLDggKzM4MCw3IEBACiAJdW5zaWduZWQgaW50IGksIGxpbmVzOwogCXUzMiBjZHQ7CiAKLQlpZiAoY2gtPmNtZHNfc3RhcnQgPT0gMCkKLQl7CisJaWYgKGNoLT5jbWRzX3N0YXJ0ID09IDApIHsKIAkJZHByaW50aygxLCAiJXMoKSBFcmFzaW5nIGNoYW5uZWwgWyVzXVxuIiwgX19mdW5jX18sCiAJCQljaC0+bmFtZSk7CiAJCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgMCk7CkBAIC00MTgsMTUgKzQxNiwxNSBAQAogCiAJLyogd3JpdGUgQ01EUyAqLwogCWlmIChjaC0+anVtcG9ubHkpCi0JCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDAsIDgpOworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIDgpOwogCWVsc2UKLQkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgMCwgcmlzYyk7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgcmlzYyk7CiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgNCwgMCk7IC8qIDY0IGJpdHMgNjMtMzIgKi8KIAljeF93cml0ZShjaC0+Y21kc19zdGFydCArICA4LCBjZHQpOwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTIsIChsaW5lcyoxNikgPj4gMyk7CiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxNiwgY2gtPmN0cmxfc3RhcnQpOwogCWlmIChjaC0+anVtcG9ubHkpCi0JCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDB4ODAwMDAwMDAgfCAoNjQgPj4gMikgKTsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgMHg4MDAwMDAwMCB8ICg2NCA+PiAyKSk7CiAJZWxzZQogCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCA2NCA+PiAyKTsKIAlmb3IgKGkgPSAyNDsgaSA8IDgwOyBpICs9IDQpCkBAIC00MzYsOSArNDM0LDkgQEAKIAljeF93cml0ZShjaC0+cHRyMV9yZWcsIGNoLT5maWZvX3N0YXJ0KTsKIAljeF93cml0ZShjaC0+cHRyMl9yZWcsIGNkdCk7CiAJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAobGluZXMqMTYpID4+IDMpOwotCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgKGJwbCA+PiAzKSAtMSk7CisJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAoYnBsID4+IDMpIC0gMSk7CiAKLQlkcHJpbnRrKDIsIlticmlkZ2UgJWRdIHNyYW0gc2V0dXAgJXM6IGJwbD0lZCBsaW5lcz0lZFxuIiwKKwlkcHJpbnRrKDIsICJbYnJpZGdlICVkXSBzcmFtIHNldHVwICVzOiBicGw9JWQgbGluZXM9JWRcbiIsCiAJCWRldi0+YnJpZGdlLAogCQljaC0+bmFtZSwKIAkJYnBsLApAQCAtNDY5LDQzICs0NjcsNDMgQEAKIAl1MzIgcmlzYzsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKIAotCXByaW50aygiJXM6ICVzIC0gZG1hIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIC0gZG1hIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY2gtPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hbWUpOyBpKyspCi0JCXByaW50aygiJXM6ICAgY21kczogJS0xNXM6IDB4JTA4eFxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgY21kczogJS0xNXM6IDB4JTA4eFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgbmFtZVtpXSwKIAkJICAgICAgIGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0KmkpKTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJcmlzYyA9IGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogKGkgKyAxNCkpOwotCQlwcmludGsoIiVzOiAgIHJpc2MlZDogIiwgZGV2LT5uYW1lLCBpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgcmlzYyVkOiAiLCBkZXYtPm5hbWUsIGkpOwogCQljeDIzODg1X3Jpc2NfZGVjb2RlKHJpc2MpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgKDY0ID4+IDIpOyBpICs9IG4pIHsKIAkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogaSk7CiAJCS8qIE5vIGNvbnNpZGVyYXRpb24gZm9yIGJpdHMgNjMtMzIgKi8KIAotCQlwcmludGsoIiVzOiAgICgweCUwOHgpIGlxICV4OiAiLCBkZXYtPm5hbWUsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgICgweCUwOHgpIGlxICV4OiAiLCBkZXYtPm5hbWUsCiAJCSAgICAgICBjaC0+Y3RybF9zdGFydCArIDQgKiBpLCBpKTsKIAkJbiA9IGN4MjM4ODVfcmlzY19kZWNvZGUocmlzYyk7CiAJCWZvciAoaiA9IDE7IGogPCBuOyBqKyspIHsKIAkJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIChpICsgaikpOwotCQkJcHJpbnRrKCIlczogICBpcSAleDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgaXEgJXg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGkraiwgcmlzYywgaik7CiAJCX0KIAl9CiAKLQlwcmludGsoIiVzOiBmaWZvOiAweCUwOHggLT4gMHgleFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmlmbzogMHglMDh4IC0+IDB4JXhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY2gtPmZpZm9fc3RhcnQsIGNoLT5maWZvX3N0YXJ0K2NoLT5maWZvX3NpemUpOwotCXByaW50aygiJXM6IGN0cmw6IDB4JTA4eCAtPiAweCV4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjaC0+Y3RybF9zdGFydCwgY2gtPmN0cmxfc3RhcnQgKyA2KjE2KTsKLQlwcmludGsoIiVzOiAgIHB0cjFfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgcHRyMV9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5wdHIxX3JlZykpOwotCXByaW50aygiJXM6ICAgcHRyMl9yZWc6IDB4JTA4eFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBwdHIyX3JlZzogMHglMDh4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7Ci0JcHJpbnRrKCIlczogICBjbnQxX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGNudDFfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKLQlwcmludGsoIiVzOiAgIGNudDJfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgY250Ml9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5jbnQyX3JlZykpOwogfQogCkBAIC01MTUsMTMgKzUxMywxMyBAQAogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXVuc2lnbmVkIGludCBpLCBqLCBuOwogCi0JcHJpbnRrKCIlczogcmlzYyBkaXNhc206ICVwIFtkbWE9MHglMDhseF1cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJpc2MgZGlzYXNtOiAlcCBbZG1hPTB4JTA4bHhdXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKIAlmb3IgKGkgPSAwOyBpIDwgKHJpc2MtPnNpemUgPj4gMik7IGkgKz0gbikgewotCQlwcmludGsoIiVzOiAgICUwNGQ6ICIsIGRldi0+bmFtZSwgaSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICUwNGQ6ICIsIGRldi0+bmFtZSwgaSk7CiAJCW4gPSBjeDIzODg1X3Jpc2NfZGVjb2RlKGxlMzJfdG9fY3B1KHJpc2MtPmNwdVtpXSkpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKQotCQkJcHJpbnRrKCIlczogICAlMDRkOiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogICAlMDRkOiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBpICsgaiwgcmlzYy0+Y3B1W2kgKyBqXSwgaik7CiAJCWlmIChyaXNjLT5jcHVbaV0gPT0gY3B1X3RvX2xlMzIoUklTQ19KVU1QKSkKIAkJCWJyZWFrOwpAQCAtNjAwLDcgKzU5OCw3IEBACiAJICogd2hlbiBETUEgYmVnaW5zIGlmIFJEUl9UTENUTDAgYml0NCBpcyBub3QgY2xlYXJlZC4gSXQgZG9lcyBub3QKIAkgKiBvY2N1ciBvbiB0aGUgY3gyMzg4NyBicmlkZ2UuCiAJICovCi0JaWYoZGV2LT5icmlkZ2UgPT0gQ1gyMzg4NV9CUklER0VfODg1KQorCWlmIChkZXYtPmJyaWRnZSA9PSBDWDIzODg1X0JSSURHRV84ODUpCiAJCWN4X2NsZWFyKFJEUl9UTENUTDAsIDEgPDwgNCk7CiAKIAlyZXR1cm4gMDsKQEAgLTYwOCwxMyArNjA2LDEzIEBACiAKIHN0YXRpYyBpbnQgZ2V0X3Jlc291cmNlcyhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSwKLQkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLDApLAorCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSwKIAkJCSAgICAgICBkZXYtPm5hbWUpKQogCQlyZXR1cm4gMDsKIAogCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWxseFxuIiwKLQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSk7CisJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApKTsKIAogCXJldHVybiAtRUJVU1k7CiB9CkBAIC02MjMsNyArNjIxLDggQEAKIGludCBjeDIzODg1X3Jpc2Nfc3RvcHBlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAogCQkJCXUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwogCi1zdGF0aWMgaW50IGN4MjM4ODVfaW5pdF90c3BvcnQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCwgaW50IHBvcnRubykKK3N0YXRpYyBpbnQgY3gyMzg4NV9pbml0X3RzcG9ydChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQsIGludCBwb3J0bm8pCiB7CiAJZHByaW50aygxLCAiJXMocG9ydG5vPSVkKVxuIiwgX19mdW5jX18sIHBvcnRubyk7CiAKQEAgLTY0Myw3ICs2NDIsMTggQEAKIAlwb3J0LT5tcGVncS50aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZylwb3J0OwogCWluaXRfdGltZXIoJnBvcnQtPm1wZWdxLnRpbWVvdXQpOwogCi0Jc3dpdGNoKHBvcnRubykgeworCW11dGV4X2luaXQoJnBvcnQtPmZyb250ZW5kcy5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcG9ydC0+ZnJvbnRlbmRzLmZlbGlzdCk7CisJcG9ydC0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9IDA7CisKKwkvKiBUaGlzIHNob3VsZCBiZSBoYXJkY29kZWQgYWxsb3cgYSBzaW5nbGUgZnJvbnRlbmQKKwkgKiBhdHRhY2htZW50IHRvIHRoaXMgdHNwb3J0LCBrZWVwaW5nIHRoZSAtZHZiLmMKKwkgKiBjb2RlIGNsZWFuIGFuZCBzYWZlLgorCSAqLworCWlmICghcG9ydC0+bnVtX2Zyb250ZW5kcykKKwkJcG9ydC0+bnVtX2Zyb250ZW5kcyA9IDE7CisKKwlzd2l0Y2ggKHBvcnRubykgewogCWNhc2UgMToKIAkJcG9ydC0+cmVnX2dwY250ICAgICAgICAgID0gVklEX0JfR1BDTlQ7CiAJCXBvcnQtPnJlZ19ncGNudF9jdGwgICAgICA9IFZJRF9CX0dQQ05UX0NUTDsKQEAgLTc0NCwxMyArNzU0LDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCi0JaWYoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4ODApIHsKKwlpZiAoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4ODApIHsKIAkJZGV2LT5icmlkZ2UgPSBDWDIzODg1X0JSSURHRV84ODc7CiAJCS8qIEFwcGx5IGEgc2Vuc2libGUgY2xvY2sgZnJlcXVlbmN5IGZvciB0aGUgUENJZSBicmlkZ2UgKi8KIAkJZGV2LT5jbGtfZnJlcSA9IDI1MDAwMDAwOwogCQlkZXYtPnNyYW1fY2hhbm5lbHMgPSBjeDIzODg3X3NyYW1fY2hhbm5lbHM7CiAJfSBlbHNlCi0JaWYoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4NTIpIHsKKwlpZiAoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4NTIpIHsKIAkJZGV2LT5icmlkZ2UgPSBDWDIzODg1X0JSSURHRV84ODU7CiAJCS8qIEFwcGx5IGEgc2Vuc2libGUgY2xvY2sgZnJlcXVlbmN5IGZvciB0aGUgUENJZSBicmlkZ2UgKi8KIAkJZGV2LT5jbGtfZnJlcSA9IDI4MDAwMDAwOwpAQCAtODMxLDggKzg0MSw4IEBACiAJfQogCiAJLyogUENJZSBzdHVmZiAqLwotCWRldi0+bG1taW8gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSwKLQkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwwKSk7CisJZGV2LT5sbW1pbyA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCkpOwogCiAJZGV2LT5ibW1pbyA9ICh1OCBfX2lvbWVtICopZGV2LT5sbW1pbzsKIApAQCAtODYyLDcgKzg3Miw3IEBACiAJY3gyMzg4NV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1sxXSk7CiAJY3gyMzg4NV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1syXSk7CiAJY3gyMzg4NV9jYXJkX3NldHVwKGRldik7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzICgmZGV2LT5pMmNfYnVzWzBdLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMF0sIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAljeDIzODg1X2lyX2luaXQoZGV2KTsKIAogCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YSA9PSBDWDIzODg1X0FOQUxPR19WSURFTykgewpAQCAtOTA4LDggKzkxOCw4IEBACiAKIHN0YXRpYyB2b2lkIGN4MjM4ODVfZGV2X3VucmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSwKLQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksMCkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApLAorCQkJICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCkpOwogCiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnJlZmNvdW50KSkKIAkJcmV0dXJuOwpAQCAtOTM2LDcgKzk0Niw3IEBACiAJaW91bm1hcChkZXYtPmxtbWlvKTsKIH0KIAotc3RhdGljIF9fbGUzMiogY3gyMzg4NV9yaXNjX2ZpZWxkKF9fbGUzMiAqcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorc3RhdGljIF9fbGUzMiAqY3gyMzg4NV9yaXNjX2ZpZWxkKF9fbGUzMiAqcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQkJICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHUzMiBzeW5jX2xpbmUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGJwbCwgdW5zaWduZWQgaW50IHBhZGRpbmcsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGxpbmVzKQpAQCAtOTU3LDMxICs5NjcsMzEgQEAKIAkJfQogCQlpZiAoYnBsIDw9IHNnX2RtYV9sZW4oc2cpLW9mZnNldCkgewogCQkJLyogZml0cyBpbnRvIGN1cnJlbnQgY2h1bmsgKi8KLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHxSSVNDX0VPTHxicGwpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KLQkJCW9mZnNldCs9YnBsOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8UklTQ19FT0x8YnBsKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJb2Zmc2V0ICs9IGJwbDsKIAkJfSBlbHNlIHsKIAkJCS8qIHNjYW5saW5lIG5lZWRzIHRvIGJlIHNwbGl0ICovCiAJCQl0b2RvID0gYnBsOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAorCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8CiAJCQkJCSAgICAoc2dfZG1hX2xlbihzZyktb2Zmc2V0KSk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOwogCQkJb2Zmc2V0ID0gMDsKIAkJCXNnKys7CiAJCQl3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7Ci0JCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfAorCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfAogCQkJCQkJICAgIHNnX2RtYV9sZW4oc2cpKTsKLQkJCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCQkJKihycCsrKT1jcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwogCQkJCXRvZG8gLT0gc2dfZG1hX2xlbihzZyk7CiAJCQkJc2crKzsKIAkJCX0KLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX0VPTHx0b2RvKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfRU9MfHRvZG8pOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCW9mZnNldCArPSB0b2RvOwogCQl9CiAJCW9mZnNldCArPSBwYWRkaW5nOwpAQCAtMTAxMCw5ICsxMDIwLDExIEBACiAJICAgY2FuIGNhdXNlIG5leHQgYnBsIHRvIHN0YXJ0IGNsb3NlIHRvIGEgcGFnZSBib3JkZXIuICBGaXJzdCBETUEKIAkgICByZWdpb24gbWF5IGJlIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgKi8KIAkvKiB3cml0ZSBhbmQganVtcCBuZWVkIGFuZCBleHRyYSBkd29yZCAqLwotCWluc3RydWN0aW9ucyAgPSBmaWVsZHMgKiAoMSArICgoYnBsICsgcGFkZGluZykgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lcyk7CisJaW5zdHJ1Y3Rpb25zICA9IGZpZWxkcyAqICgxICsgKChicGwgKyBwYWRkaW5nKSAqIGxpbmVzKQorCQkvIFBBR0VfU0laRSArIGxpbmVzKTsKIAlpbnN0cnVjdGlvbnMgKz0gMjsKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSxyaXNjLGluc3RydWN0aW9ucyoxMikpIDwgMCkKKwlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyoxMik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KQEAgLTEwMjYsNyArMTAzOCw3IEBACiAKIAkvKiBzYXZlIHBvaW50ZXIgdG8gam1wIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KIAlyaXNjLT5qbXAgPSBycDsKLQlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mICgqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0OCw3ICsxMDYwLDggQEAKIAlpbnN0cnVjdGlvbnMgID0gMSArIChicGwgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lczsKIAlpbnN0cnVjdGlvbnMgKz0gMTsKIAotCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjEyKSkgPCAwKQorCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgaW5zdHJ1Y3Rpb25zKjEyKTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLwpAQCAtMTA1Nyw3ICsxMDcwLDcgQEAKIAogCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwogCXJpc2MtPmptcCA9IHJwOwotCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YgKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDY3LDcgKzEwODAsOCBAQAogCV9fbGUzMiAqcnA7CiAJaW50IHJjOwogCi0JaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIDQqMTYpKSA8IDApCisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCA0KjE2KTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLwpAQCAtMTE2MSwyMiArMTE3NSwyMyBAQAogCiAJLyogc2V0dXAgZmlmbyArIGZvcm1hdCAqLwogCWN4MjM4ODVfc3JhbV9jaGFubmVsX3NldHVwKGRldiwKLQkJCQkgICAmZGV2LT5zcmFtX2NoYW5uZWxzWyBwb3J0LT5zcmFtX2Nobm8gXSwKKwkJCQkgICAmZGV2LT5zcmFtX2NoYW5uZWxzW3BvcnQtPnNyYW1fY2hub10sCiAJCQkJICAgcG9ydC0+dHNfcGFja2V0X3NpemUsIGJ1Zi0+cmlzYy5kbWEpOwotCWlmKGRlYnVnID4gNSkgewotCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1sgcG9ydC0+c3JhbV9jaG5vIF0gKTsKKwlpZiAoZGVidWcgPiA1KSB7CisJCWN4MjM4ODVfc3JhbV9jaGFubmVsX2R1bXAoZGV2LAorCQkJJmRldi0+c3JhbV9jaGFubmVsc1twb3J0LT5zcmFtX2Nobm9dKTsKIAkJY3gyMzg4NV9yaXNjX2Rpc2FzbShwb3J0LCAmYnVmLT5yaXNjKTsKIAl9CiAKIAkvKiB3cml0ZSBUUyBsZW5ndGggdG8gY2hpcCAqLwogCWN4X3dyaXRlKHBvcnQtPnJlZ19sbmd0aCwgYnVmLT52Yi53aWR0aCk7CiAKLQlpZiAoICghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiICYgQ1gyMzg4NV9NUEVHX0RWQikpICYmCi0JCSghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjICYgQ1gyMzg4NV9NUEVHX0RWQikpICkgewotCQlwcmludGsoICIlcygpIEZhaWxlZC4gVW5zdXBwb3J0ZWQgdmFsdWUgaW4gLnBvcnRiL2MgKDB4JTA4eCkvKDB4JTA4eClcbiIsCisJaWYgKCghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiICYgQ1gyMzg4NV9NUEVHX0RWQikpICYmCisJCSghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjICYgQ1gyMzg4NV9NUEVHX0RWQikpKSB7CisJCXByaW50aygiJXMoKSBVbnN1cHBvcnRlZCAucG9ydGIvYyAoMHglMDh4KS8oMHglMDh4KVxuIiwKIAkJCV9fZnVuY19fLAogCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIsCi0JCQljeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyApOworCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExODYsNyArMTIwMSw3IEBACiAJdWRlbGF5KDEwMCk7CiAKIAkvKiBJZiB0aGUgcG9ydCBzdXBwb3J0cyBTUkMgU0VMRUNULCBjb25maWd1cmUgaXQgKi8KLQlpZihwb3J0LT5yZWdfc3JjX3NlbCkKKwlpZiAocG9ydC0+cmVnX3NyY19zZWwpCiAJCWN4X3dyaXRlKHBvcnQtPnJlZ19zcmNfc2VsLCBwb3J0LT5zcmNfc2VsX3ZhbCk7CiAKIAljeF93cml0ZShwb3J0LT5yZWdfaHdfc29wX2N0cmwsIHBvcnQtPmh3X3NvcF9jdHJsX3ZhbCk7CkBAIC0xMTk1LDcgKzEyMTAsNyBAQAogCWN4X3dyaXRlKHBvcnQtPnJlZ19nZW5fY3RybCwgcG9ydC0+Z2VuX2N0cmxfdmFsKTsKIAl1ZGVsYXkoMTAwKTsKIAotCS8vIE5PVEU6IHRoaXMgaXMgMiAocmVzZXJ2ZWQpIGZvciBwb3J0YiwgZG9lcyBpdCBtYXR0ZXI/CisJLyogTk9URTogdGhpcyBpcyAyIChyZXNlcnZlZCkgZm9yIHBvcnRiLCBkb2VzIGl0IG1hdHRlcj8gKi8KIAkvKiByZXNldCBjb3VudGVyIHRvIHplcm8gKi8KIAljeF93cml0ZShwb3J0LT5yZWdfZ3BjbnRfY3RsLCAzKTsKIAlxLT5jb3VudCA9IDE7CkBAIC0xMjI5LDExICsxMjQ0LDExIEBACiAJCWN4X3dyaXRlKEFMVF9QSU5fT1VUX1NFTCwgMHgxMDEwMDA0NSk7CiAJfQogCi0Jc3dpdGNoKGRldi0+YnJpZGdlKSB7CisJc3dpdGNoIChkZXYtPmJyaWRnZSkgewogCWNhc2UgQ1gyMzg4NV9CUklER0VfODg1OgogCWNhc2UgQ1gyMzg4NV9CUklER0VfODg3OgogCQkvKiBlbmFibGUgaXJxcyAqLwotCQlkcHJpbnRrKDEsICIlcygpIGVuYWJsaW5nIFRTIGludCdzIGFuZCBETUFcbiIsIF9fZnVuY19fICk7CisJCWRwcmludGsoMSwgIiVzKCkgZW5hYmxpbmcgVFMgaW50J3MgYW5kIERNQVxuIiwgX19mdW5jX18pOwogCQljeF9zZXQocG9ydC0+cmVnX3RzX2ludF9tc2ssICBwb3J0LT50c19pbnRfbXNrX3ZhbCk7CiAJCWN4X3NldChwb3J0LT5yZWdfZG1hX2N0bCwgcG9ydC0+ZG1hX2N0bF92YWwpOwogCQljeF9zZXQoUENJX0lOVF9NU0ssIGRldi0+cGNpX2lycW1hc2sgfCBwb3J0LT5wY2lfaXJxbWFzayk7CkBAIC0xMjkyLDggKzEzMDcsNyBAQAogCXN0cnVjdCBjeDIzODg1X2J1ZmZlciAqYnVmOwogCiAJZHByaW50ayg1LCAiJXMoKVxuIiwgX19mdW5jX18pOwotCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQotCXsKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewogCQlzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKnByZXY7CiAJCXByZXYgPSBOVUxMOwogCkBAIC0xMzExLDcgKzEzMjUsNyBAQAogCQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CiAJCQkJYnVmLT5jb3VudCAgICA9IHEtPmNvdW50Kys7CiAJCQkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzK0JVRkZFUl9USU1FT1VUKTsKLQkJCQlkcHJpbnRrKDUsICJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBmaXJzdCBhY3RpdmVcbiIsCisJCQkJZHByaW50ayg1LCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gZi9hY3RpdmVcbiIsCiAJCQkJCWJ1ZiwgYnVmLT52Yi5pKTsKIAogCQkJfSBlbHNlIGlmIChwcmV2LT52Yi53aWR0aCAgPT0gYnVmLT52Yi53aWR0aCAgJiYKQEAgLTEzMjIsOCArMTMzNiw5IEBACiAJCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJCQlidWYtPmNvdW50ICAgID0gcS0+Y291bnQrKzsKIAkJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCQkJZHByaW50ayg1LCJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBtb3ZlIHRvIGFjdGl2ZVxuIiwKKwkJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQkJZHByaW50ayg1LCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gbS9hY3RpdmVcbiIsCiAJCQkJCWJ1ZiwgYnVmLT52Yi5pKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dXJuIDA7CkBAIC0xMzYyLDcgKzEzNzcsOCBAQAogCQlidWYtPnZiLnNpemUgICA9IHNpemU7CiAJCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQgLypWNEwyX0ZJRUxEX1RPUCovOwogCi0JCWlmICgwICE9IChyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCkpKQorCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmICgwICE9IHJjKQogCQkJZ290byBmYWlsOwogCQljeDIzODg1X3Jpc2NfZGF0YWJ1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKIAkJCQkJdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKS0+c2dsaXN0LApAQCAtMTM4OCw3ICsxNDA0LDcgQEAKIAlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAogCWlmIChsaXN0X2VtcHR5KCZjeDg4cS0+YWN0aXZlKSkgewotCQlkcHJpbnRrKCAxLCAicXVldWUgaXMgZW1wdHkgLSBmaXJzdCBhY3RpdmVcbiIgKTsKKwkJZHByaW50aygxLCAicXVldWUgaXMgZW1wdHkgLSBmaXJzdCBhY3RpdmVcbiIpOwogCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmY3g4OHEtPmFjdGl2ZSk7CiAJCWN4MjM4ODVfc3RhcnRfZG1hKHBvcnQsIGN4ODhxLCBidWYpOwogCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwpAQCAtMTM5Nyw3ICsxNDEzLDcgQEAKIAkJZHByaW50aygxLCAiWyVwLyVkXSAlcyAtIGZpcnN0IGFjdGl2ZVxuIiwKIAkJCWJ1ZiwgYnVmLT52Yi5pLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKLQkJZHByaW50ayggMSwgInF1ZXVlIGlzIG5vdCBlbXB0eSAtIGFwcGVuZCB0byBhY3RpdmVcbiIgKTsKKwkJZHByaW50aygxLCAicXVldWUgaXMgbm90IGVtcHR5IC0gYXBwZW5kIHRvIGFjdGl2ZVxuIik7CiAJCXByZXYgPSBsaXN0X2VudHJ5KGN4ODhxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjM4ODVfYnVmZmVyLAogCQkJCSAgdmIucXVldWUpOwogCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmY3g4OHEtPmFjdGl2ZSk7CkBAIC0xNDA1LDcgKzE0MjEsNyBAQAogCQlidWYtPmNvdW50ICAgID0gY3g4OHEtPmNvdW50Kys7CiAJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CiAJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCWRwcmludGsoIDEsICJbJXAvJWRdICVzIC0gYXBwZW5kIHRvIGFjdGl2ZVxuIiwKKwkJZHByaW50aygxLCAiWyVwLyVkXSAlcyAtIGFwcGVuZCB0byBhY3RpdmVcbiIsCiAJCQkgYnVmLCBidWYtPnZiLmksIF9fZnVuY19fKTsKIAl9CiB9CkBAIC0xNDMxLDcgKzE0NDcsNyBAQAogCQkJYnVmLCBidWYtPnZiLmksIHJlYXNvbiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5yaXNjLmRtYSk7CiAJfQogCWlmIChyZXN0YXJ0KSB7Ci0JCWRwcmludGsoMSwgInJlc3RhcnRpbmcgcXVldWVcbiIgKTsKKwkJZHByaW50aygxLCAicmVzdGFydGluZyBxdWV1ZVxuIik7CiAJCWN4MjM4ODVfcmVzdGFydF9xdWV1ZShwb3J0LCBxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+c2xvY2ssIGZsYWdzKTsKQEAgLTE0NTMsMTAgKzE0NjksMTEgQEAKIAlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSAoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICopZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKIAotCWRwcmludGsoMSwgIiVzKClcbiIsX19mdW5jX18pOworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmIChkZWJ1ZyA+IDUpCi0JCWN4MjM4ODVfc3JhbV9jaGFubmVsX2R1bXAoZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzWyBwb3J0LT5zcmFtX2Nobm8gXSk7CisJCWN4MjM4ODVfc3JhbV9jaGFubmVsX2R1bXAoZGV2LAorCQkJJmRldi0+c3JhbV9jaGFubmVsc1twb3J0LT5zcmFtX2Nobm9dKTsKIAogCWN4MjM4ODVfc3RvcF9kbWEocG9ydCk7CiAJZG9fY2FuY2VsX2J1ZmZlcnMocG9ydCwgInRpbWVvdXQiLCAxKTsKQEAgLTE1MzIsMTYgKzE1NDksMjMgQEAKIAlpZiAoKHN0YXR1cyAmIFZJRF9CQ19NU0tfT1BDX0VSUikgfHwKIAkJKHN0YXR1cyAmIFZJRF9CQ19NU0tfQkFEX1BLVCkgfHwKIAkJKHN0YXR1cyAmIFZJRF9CQ19NU0tfU1lOQykgfHwKLQkJKHN0YXR1cyAmIFZJRF9CQ19NU0tfT0YpKQotCXsKKwkJKHN0YXR1cyAmIFZJRF9CQ19NU0tfT0YpKSB7CisKIAkJaWYgKHN0YXR1cyAmIFZJRF9CQ19NU0tfT1BDX0VSUikKLQkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19PUENfRVJSIDB4JTA4eClcbiIsIFZJRF9CQ19NU0tfT1BDX0VSUik7CisJCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfT1BDX0VSUiAweCUwOHgpXG4iLAorCQkJCVZJRF9CQ19NU0tfT1BDX0VSUik7CisKIAkJaWYgKHN0YXR1cyAmIFZJRF9CQ19NU0tfQkFEX1BLVCkKLQkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19CQURfUEtUIDB4JTA4eClcbiIsIFZJRF9CQ19NU0tfQkFEX1BLVCk7CisJCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfQkFEX1BLVCAweCUwOHgpXG4iLAorCQkJCVZJRF9CQ19NU0tfQkFEX1BLVCk7CisKIAkJaWYgKHN0YXR1cyAmIFZJRF9CQ19NU0tfU1lOQykKLQkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19TWU5DICAgIDB4JTA4eClcbiIsIFZJRF9CQ19NU0tfU1lOQyk7CisJCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfU1lOQyAgICAweCUwOHgpXG4iLAorCQkJCVZJRF9CQ19NU0tfU1lOQyk7CisKIAkJaWYgKHN0YXR1cyAmIFZJRF9CQ19NU0tfT0YpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfT0YgICAgICAweCUwOHgpXG4iLCBWSURfQkNfTVNLX09GKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19PRiAgICAgIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19PRik7CiAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbXBlZyByaXNjIG9wIGNvZGUgZXJyb3JcbiIsIGRldi0+bmFtZSk7CiAKQEAgLTE1OTUsNyArMTYxOSw3IEBACiAJdHMyX3N0YXR1cyA9IGN4X3JlYWQoVklEX0NfSU5UX1NUQVQpOwogCXRzMl9tYXNrID0gY3hfcmVhZChWSURfQ19JTlRfTVNLKTsKIAotCWlmICggKHBjaV9zdGF0dXMgPT0gMCkgJiYgKHRzMl9zdGF0dXMgPT0gMCkgJiYgKHRzMV9zdGF0dXMgPT0gMCkgKQorCWlmICgocGNpX3N0YXR1cyA9PSAwKSAmJiAodHMyX3N0YXR1cyA9PSAwKSAmJiAodHMxX3N0YXR1cyA9PSAwKSkKIAkJZ290byBvdXQ7CiAKIAl2aWRhX2NvdW50ID0gY3hfcmVhZChWSURfQV9HUENOVCk7CkBAIC0xNjEwLDM4ICsxNjM0LDU2IEBACiAJZHByaW50ayg3LCAidHMyX3N0YXR1czogMHglMDh4ICB0czJfbWFzazogMHglMDh4IGNvdW50OiAweCV4XG4iLAogCQl0czJfc3RhdHVzLCB0czJfbWFzaywgdHMyX2NvdW50KTsKIAotCWlmICggKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfUkQpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19XUikgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9SRCkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9XUikgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BUEJfRE1BKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9DKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9BKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9JTlQpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0VYVCkgKQotCXsKKwlpZiAoKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfUkQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1dSKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfUkQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9XUikgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FQQl9ETUEpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQykgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0VYVCkpIHsKIAogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19SRCkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1JEICAgMHglMDh4KVxuIiwgUENJX01TS19SSVNDX1JEKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1JEICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1JJU0NfUkQpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1dSKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfV1IgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1JJU0NfV1IpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfV1IgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfUklTQ19XUik7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1JEKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FMX1JEICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FMX1JEKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9SRCAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FMX1JEKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfV1IpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfV1IgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQUxfV1IpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FMX1dSICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQUxfV1IpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BUEJfRE1BKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FQQl9ETUEgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FQQl9ETUEpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FQQl9ETUEgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQVBCX0RNQSk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9DKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9DICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1ZJRF9DKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQyAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1ZJRF9DKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0IpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0IgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfVklEX0IpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9CICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfVklEX0IpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQSkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQSAgICAgMHglMDh4KVxuIiwgUENJX01TS19WSURfQSk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0EgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19WSURfQSk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9JTlQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0lOVCAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQVVEX0lOVCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0lOVCAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BVURfSU5UKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0VYVCkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BVURfRVhUICAgMHglMDh4KVxuIiwgUENJX01TS19BVURfRVhUKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BVURfRVhUICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FVRF9FWFQpOwogCiAJfQogCkBAIC0xNzUzLDEzICsxNzk1LDEzIEBACiAJCS5kZXZpY2UgICAgICAgPSAweDg4NTIsCiAJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAogCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKLQl9LHsKKwl9LCB7CiAJCS8qIENYMjM4ODcgUmV2IDIgKi8KIAkJLnZlbmRvciAgICAgICA9IDB4MTRmMSwKIAkJLmRldmljZSAgICAgICA9IDB4ODg4MCwKIAkJLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAotCX0seworCX0sIHsKIAkJLyogLS0tIGVuZCBvZiBsaXN0IC0tLSAqLwogCX0KIH07CkBAIC0xNzk3LDkgKzE4MzksMyBAQAogbW9kdWxlX2V4aXQoY3gyMzg4NV9maW5pKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICoga2F0ZTogZW9sICJ1bml4IjsgaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10cmFpbGluZy1zcGFjZS1zYXZlIG9uOyB0YWItd2lkdGggODsgcmVwbGFjZS10YWJzIG9mZjsgc3BhY2UtaW5kZW50IG9mZjsgbWl4ZWQtaW5kZW50IG9mZgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IDI0YmQxODMuLmUxYWFjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC03OCwxOSArNzgsMTkgQEAKIAkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gcS0+cHJpdl9kYXRhOwotCXJldHVybiBjeDIzODg1X2J1Zl9wcmVwYXJlKHEsIHBvcnQsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIqKXZiLCBmaWVsZCk7CisJcmV0dXJuIGN4MjM4ODVfYnVmX3ByZXBhcmUocSwgcG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciAqKXZiLCBmaWVsZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGR2Yl9idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBxLT5wcml2X2RhdGE7Ci0JY3gyMzg4NV9idWZfcXVldWUocG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciopdmIpOworCWN4MjM4ODVfYnVmX3F1ZXVlKHBvcnQsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKil2Yik7CiB9CiAKIHN0YXRpYyB2b2lkIGR2Yl9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7Ci0JY3gyMzg4NV9mcmVlX2J1ZmZlcihxLCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyKil2Yik7CisJY3gyMzg4NV9mcmVlX2J1ZmZlcihxLCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyICopdmIpOwogfQogCiBzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBkdmJfcW9wcyA9IHsKQEAgLTMxMiwxOSArMzEyLDI1IEBACiB7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAJc3RydWN0IGN4MjM4ODVfaTJjICppMmNfYnVzID0gTlVMTDsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KLQlwb3J0LT5kdmIubmFtZSA9IGRldi0+bmFtZTsKKwlmZTAtPmR2Yi5uYW1lID0gZGV2LT5uYW1lOwogCiAJLyogaW5pdCBmcm9udGVuZCAqLwogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZoYXVwcGF1Z2VfZ2VuZXJpY19jb25maWcsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX3R1bmVyY29uZmlnLCAwKTsKIAkJfQpAQCAtMzMzLDI3ICszMzksMjcgQEAKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CiAJCXN3aXRjaCAoYWx0X3R1bmVyKSB7CiAJCWNhc2UgMToKLQkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9CiAJCQkJZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgJmhhdXBwYXVnZV9lenFhbV9jb25maWcsCiAJCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkgICAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLCAweDQyLAogCQkJCQkgICAmdGRhODI5eF9ub19wcm9iZSk7Ci0JCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSAgIDB4NjAsICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCiAJCQkJCSAgICZoYXVwcGF1Z2VfdGRhMTgyNzFfY29uZmlnKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDA6CiAJCWRlZmF1bHQ6Ci0JCQlwb3J0LT5kdmIuZnJvbnRlbmQgPQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPQogCQkJCWR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY19jb25maWcsCiAJCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCi0JCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY190dW5lcmNvbmZpZywgMCk7CiAJCQlicmVhazsKQEAgLTM2MSw0MiArMzY3LDQyIEBACiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9odnIxODAwbHBfY29uZmlnLAogCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAogCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY190dW5lcmNvbmZpZywgMCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9FWFA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJCSZmdXNpb25oZHR2XzVfZXhwcmVzcywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkgICBUVU5FUl9MR19URFZTX0gwNlhGKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBROgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1sxXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9odnIxNTAwcV9jb25maWcsCiAJCQkJCQkmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQotCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJICAgJmhhdXBwYXVnZV9odnIxNTAwcV90dW5lcmNvbmZpZyk7CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMV07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZoYXVwcGF1Z2VfaHZyMTUwMF9jb25maWcsCiAJCQkJCQkmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmkyY19idXMtPmkyY19hZGFwLApAQCAtNDA5LDcgKzQxNSw3IEBACiAJCQl9OwogCiAJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwKLQkJCQkJcG9ydC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CkBAIC00MTcsMjQgKzQyMywyNCBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ4X2F0dGFjaCwKIAkJCSZoYXVwcGF1Z2VfaHZyMTIwMF9jb25maWcsCiAJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsIDB4NDIsCiAJCQkJJnRkYTgyOXhfbm9fcHJvYmUpOwotCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkweDYwLCAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAogCQkJCSZoYXVwcGF1Z2VfaHZyMTIwMF90dW5lcl9jb25maWcpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLAogCQkJJmkyY19idXMtPmkyY19hZGFwLAogCQkJMHgxMiwgJmhhdXBwYXVnZV9odnIxNDAwX2RpYjcwMDBfY29uZmlnKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKQEAgLTQ0NCwxMiArNDUwLDEzIEBACiAJCQkJLmZuYW1lICAgPSBYQzMwMjhMX0RFRkFVTFRfRklSTVdBUkUsCiAJCQkJLm1heF9sZW4gPSA2NCwKIAkJCQkuZGVtb2QgICA9IDUwMDAsCi0JCQkJLyogVGhpcyBpcyB0cnVlIGZvciBhbGwgZGVtb2RzIHdpdGggdjM2IGZpcm13YXJlPyAqLworCQkJCS8qIFRoaXMgaXMgdHJ1ZSBmb3IgYWxsIGRlbW9kcyB3aXRoCisJCQkJCXYzNiBmaXJtd2FyZT8gKi8KIAkJCQkudHlwZSAgICA9IFhDMjAyOF9EMjYzMywKIAkJCX07CiAKIAkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLAotCQkJCQlwb3J0LT5kdmIuZnJvbnRlbmQsICZjZmcpOworCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CiAJCX0KQEAgLTQ1NywyNSArNDY0LDI1IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbcG9ydC0+bnIgLSAxXTsKIAotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmZHZpY29fczVoMTQwOV9jb25maWcsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kID09IE5VTEwpCi0JCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKIAkJCQkJCQkmZHZpY29fczVoMTQxMV9jb25maWcsCiAJCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQotCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJICAgJmR2aWNvX3hjNTAwMF90dW5lcmNvbmZpZyk7CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQOiB7CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzW3BvcnQtPm5yIC0gMV07CiAKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAogCQkJCQkgICAgICAgJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAgICAgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcJICBjZmcgPSB7CiAJCQkJLmkyY19hZGFwICA9ICZpMmNfYnVzLT5pMmNfYWRhcCwKQEAgLTQ4Nyw3ICs0OTQsNyBAQAogCQkJCS5kZW1vZCAgICAgICA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2LAogCQkJfTsKIAotCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNmZyk7CiAJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CkBAIC00OTcsMTAgKzUwNCwxMCBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwogCi0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCSZkdmljb19mdXNpb25oZHR2X3hjMzAyOCwKIAkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAgICAgICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnCSAgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLApAQCAtNTEyLDczICs1MTksMTA4IEBACiAJCQkJLmRlbW9kICAgICAgID0gWEMzMDI4X0ZFX1pBUkxJTks0NTYsCiAJCQl9OwogCi0JCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgIgorCQkJIiBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJfQotCWlmIChOVUxMID09IHBvcnQtPmR2Yi5mcm9udGVuZCkgewotCQlwcmludGsoIiVzOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJaWYgKE5VTEwgPT0gZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KLQlwb3J0LT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKKwlmZTAtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBjeDIzODg1X3R1bmVyX2NhbGxiYWNrOwogCiAJLyogUHV0IHRoZSBhbmFsb2cgZGVjb2RlciBpbiBzdGFuZGJ5IHRvIGtlZXAgaXQgcXVpZXQgKi8KIAljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoaTJjX2J1cywgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOwogCi0JaWYgKHBvcnQtPmR2Yi5mcm9udGVuZC0+b3BzLmFuYWxvZ19vcHMuc3RhbmRieSkKLQkJcG9ydC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KHBvcnQtPmR2Yi5mcm9udGVuZCk7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KQorCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmFuYWxvZ19vcHMuc3RhbmRieShmZTAtPmR2Yi5mcm9udGVuZCk7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCi0JcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3RlcigmcG9ydC0+ZHZiLCBUSElTX01PRFVMRSwgcG9ydCwKLQkJCQkgICAgICZkZXYtPnBjaS0+ZGV2LCBhZGFwdGVyX25yKTsKKwlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgcG9ydCwKKwkJJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIsIDApOworCiB9CiAKIGludCBjeDIzODg1X2R2Yl9yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCiB7CisKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOwogCi0JZHByaW50aygxLCAiJXNcbiIsIF9fZnVuY19fKTsKLQlkcHJpbnRrKDEsICIgLT5iZWluZyBwcm9iZWQgYnkgQ2FyZD0lZCBOYW1lPSVzLCBQQ0kgJTAyeDolMDJ4XG4iLAotCQlkZXYtPmJvYXJkLAotCQlkZXYtPm5hbWUsCi0JCWRldi0+cGNpX2J1cywKLQkJZGV2LT5wY2lfc2xvdCk7CisJLyogSGVyZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBmcm9udGVuZHMsCisJICogYXMgcmVmbGVjdGVkIGluIHRoZSBjYXJkcyBzdHJ1Y3QuIFRoZSByZWFsaXR5IGlzIHRoYXQgY3VycnJlbnRseQorCSAqIG5vIGN4MjM4ODUgYm9hcmRzIHN1cHBvcnQgdGhpcyAtIHlldC4gQnV0LCBpZiB3ZSBkb24ndCBtb2RpZnkgdGhpcworCSAqIGNvZGUgdGhlbiB0aGUgc2Vjb25kIGZyb250ZW5kIHdvdWxkIG5ldmVyIGJlIGFsbG9jYXRlZCAobGF0ZXIpCisJICogYW5kIGZhaWwgd2l0aCBlcnJvciBiZWZvcmUgdGhlIGF0dGFjaCBpbiBkdmJfcmVnaXN0ZXIoKS4KKwkgKiBXaXRob3V0IHRoZXNlIGNoYW5nZXMgd2UgcmlzayBhbiBPT1BTIGxhdGVyLiBUaGUgY2hhbmdlcyBoZXJlCisJICogYXJlIGZvciBzYWZldHksIGFuZCBzaG91bGQgcHJvdmlkZSBhIGdvb2QgZm91bmRhdGlvbiBmb3IgdGhlCisJICogZnV0dXJlIGFkZGl0aW9uIG9mIGFueSBtdWx0aS1mcm9udGVuZCBjeDIzODg1IGJhc2VkIGJvYXJkcy4KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlcygpIGFsbG9jYXRpbmcgJWQgZnJvbnRlbmQocylcbiIsIF9fZnVuY19fLAorCQlwb3J0LT5udW1fZnJvbnRlbmRzKTsKIAotCWVyciA9IC1FTk9ERVY7CisJZm9yIChpID0gMTsgaSA8PSBwb3J0LT5udW1fZnJvbnRlbmRzOyBpKyspIHsKKwkJaWYgKHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgKKwkJCSZwb3J0LT5mcm9udGVuZHMsIGkpID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQgdG8gYWxsb2NcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKLQkvKiBkdmIgc3R1ZmYgKi8KLQlwcmludGsoIiVzOiBjeDIzODg1IGJhc2VkIGR2YiBjYXJkXG4iLCBkZXYtPm5hbWUpOwotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJnBvcnQtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsICZkZXYtPnBjaS0+ZGV2LCAmcG9ydC0+c2xvY2ssCisJCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJnBvcnQtPmZyb250ZW5kcywgaSk7CisJCWlmICghZmUwKQorCQkJZXJyID0gLUVJTlZBTDsKKworCQlkcHJpbnRrKDEsICIlc1xuIiwgX19mdW5jX18pOworCQlkcHJpbnRrKDEsICIgLT5wcm9iZWQgYnkgQ2FyZD0lZCBOYW1lPSVzLCBQQ0kgJTAyeDolMDJ4XG4iLAorCQkJZGV2LT5ib2FyZCwKKwkJCWRldi0+bmFtZSwKKwkJCWRldi0+cGNpX2J1cywKKwkJCWRldi0+cGNpX3Nsb3QpOworCisJCWVyciA9IC1FTk9ERVY7CisKKwkJLyogZHZiIHN0dWZmICovCisJCS8qIFdlIGhhdmUgdG8gaW5pdCB0aGUgcXVldWUgZm9yIGVhY2ggZnJvbnRlbmQgb24gYSBwb3J0LiAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogY3gyMzg4NSBiYXNlZCBkdmIgY2FyZFxuIiwgZGV2LT5uYW1lKTsKKwkJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUwLT5kdmIuZHZicSwgJmR2Yl9xb3BzLAorCQkJICAgICZkZXYtPnBjaS0+ZGV2LCAmcG9ydC0+c2xvY2ssCiAJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBWNEwyX0ZJRUxEX1RPUCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IGN4MjM4ODVfYnVmZmVyKSwgcG9ydCk7CisJfQogCWVyciA9IGR2Yl9yZWdpc3Rlcihwb3J0KTsKIAlpZiAoZXJyICE9IDApCi0JCXByaW50aygiJXMoKSBkdmJfcmVnaXN0ZXIgZmFpbGVkIGVyciA9ICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGR2Yl9yZWdpc3RlciBmYWlsZWQgZXJyID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIGludCBjeDIzODg1X2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKIHsKLQkvKiBkdmIgKi8KLQlpZihwb3J0LT5kdmIuZnJvbnRlbmQpCi0JCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKCZwb3J0LT5kdmIpOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEZJWE1FOiBpbiBhbiBlcnJvciBjb25kaXRpb24gd2hlcmUgdGhlIHdlIGhhdmUKKwkgKiBhbiBleHBlY3RlZCBudW1iZXIgb2YgZnJvbnRlbmRzIChhdHRhY2ggcHJvYmxlbSkKKwkgKiB0aGVuIHRoaXMgbWlnaHQgbm90IGNsZWFuIHVwIGNvcnJlY3RseSwgaWYgMQorCSAqIGlzIGludmFsaWQuCisJICogVGhpcyBjb21tZW50IG9ubHkgYXBwbGllcyB0byBmdXR1cmUgYm9hcmRzIElGIHRoZXkKKwkgKiBpbXBsZW1lbnQgTUZFIHN1cHBvcnQuCisJICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jCmluZGV4IGY5OGU0NzYuLmJiN2Y3MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJCXByaW50aygiID5cbiIpOwogCX0KIAotCWZvciAoY250ID0gMTsgY250IDwgbXNnLT5sZW47IGNudCsrICkgeworCWZvciAoY250ID0gMTsgY250IDwgbXNnLT5sZW47IGNudCsrKSB7CiAJCS8qIGZvbGxvd2luZyBieXRlcyAqLwogCQl3ZGF0YSA9IG1zZy0+YnVmW2NudF07CiAJCWN0cmwgPSBidXMtPmkyY19wZXJpb2QgfCAoMSA8PCAxMikgfCAoMSA8PCAyKTsKQEAgLTE1MSw5ICsxNTEsOSBAQAogCQlpZiAocmV0dmFsID09IDApCiAJCQlnb3RvIGVpbzsKIAkJaWYgKGkyY19kZWJ1ZykgewotCQkJcHJpbnRrKCIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOworCQkJZHByaW50aygxLCAiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKIAkJCWlmICghKGN0cmwgJiBJMkNfTk9TVE9QKSkKLQkJCQlwcmludGsoIiA+XG4iKTsKKwkJCQlkcHJpbnRrKDEsICIgPlxuIik7CiAJCX0KIAl9CiAJcmV0dXJuIG1zZy0+bGVuOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJcmV0dmFsID0gLUVJTzsKICBlcnI6CiAJaWYgKGkyY19kZWJ1ZykKLQkJcHJpbnRrKCIgRVJSOiAlZFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIgRVJSOiAlZFxuIiwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xOTQsMTIgKzE5NCwxMiBAQAogCiAJaWYgKGkyY19kZWJ1ZykgewogCQlpZiAoam9pbmVkKQotCQkJcHJpbnRrKCIgUiIpOworCQkJZHByaW50aygxLCAiIFIiKTsKIAkJZWxzZQotCQkJcHJpbnRrKCIgPFIgJTAyeCIsIChtc2ctPmFkZHIgPDwgMSkgKyAxKTsKKwkJCWRwcmludGsoMSwgIiA8UiAlMDJ4IiwgKG1zZy0+YWRkciA8PCAxKSArIDEpOwogCX0KIAotCWZvcihjbnQgPSAwOyBjbnQgPCBtc2ctPmxlbjsgY250KyspIHsKKwlmb3IgKGNudCA9IDA7IGNudCA8IG1zZy0+bGVuOyBjbnQrKykgewogCiAJCWN0cmwgPSBidXMtPmkyY19wZXJpb2QgfCAoMSA8PCAxMikgfCAoMSA8PCAyKSB8IDE7CiAKQEAgLTIxNiw5ICsyMTYsOSBAQAogCQkJZ290byBlaW87CiAJCW1zZy0+YnVmW2NudF0gPSBjeF9yZWFkKGJ1cy0+cmVnX3JkYXRhKSAmIDB4ZmY7CiAJCWlmIChpMmNfZGVidWcpIHsKLQkJCXByaW50aygiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKKwkJCWRwcmludGsoMSwgIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CiAJCQlpZiAoIShjdHJsICYgSTJDX05PU1RPUCkpCi0JCQkJcHJpbnRrKCIgPlxuIik7CisJCQkJZHByaW50aygxLCAiID5cbiIpOwogCQl9CiAJfQogCXJldHVybiBtc2ctPmxlbjsKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXJldHZhbCA9IC1FSU87CiAgZXJyOgogCWlmIChpMmNfZGVidWcpCi0JCXByaW50aygiIEVSUjogJWRcbiIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiAiIEVSUjogJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzUzLDE3ICszNTMsMTcgQEAKIH07CiAKIHN0YXRpYyBjaGFyICppMmNfZGV2c1sxMjhdID0gewotCVsweDEwID4+IDFdICAgPSAidGRhMTAwNDgiLAotCVsweDEyID4+IDFdICAgPSAiZGliNzAwMHBjIiwKLQlbIDB4MWMgPj4gMSBdID0gImxnZHQzMzAzIiwKLQlbIDB4ODYgPj4gMSBdID0gInRkYTk4ODciLAotCVsgMHgzMiA+PiAxIF0gPSAiY3gyNDIyNyIsCi0JWyAweDg4ID4+IDEgXSA9ICJjeDI1ODM3IiwKLQlbIDB4ODQgPj4gMSBdID0gInRkYTgyOTUiLAotCVsgMHhhMCA+PiAxIF0gPSAiZWVwcm9tIiwKLQlbIDB4YzAgPj4gMSBdID0gInR1bmVyL210MjEzMS90ZGE4Mjc1IiwKKwlbMHgxMCA+PiAxXSA9ICJ0ZGExMDA0OCIsCisJWzB4MTIgPj4gMV0gPSAiZGliNzAwMHBjIiwKKwlbMHgxYyA+PiAxXSA9ICJsZ2R0MzMwMyIsCisJWzB4ODYgPj4gMV0gPSAidGRhOTg4NyIsCisJWzB4MzIgPj4gMV0gPSAiY3gyNDIyNyIsCisJWzB4ODggPj4gMV0gPSAiY3gyNTgzNyIsCisJWzB4ODQgPj4gMV0gPSAidGRhODI5NSIsCisJWzB4YTAgPj4gMV0gPSAiZWVwcm9tIiwKKwlbMHhjMCA+PiAxXSA9ICJ0dW5lci9tdDIxMzEvdGRhODI3NSIsCiAJWzB4YzIgPj4gMV0gPSAidHVuZXIvbXQyMTMxL3RkYTgyNzUveGM1MDAwL3hjMzAyOCIsCi0JWzB4YzggPj4gMV0gICA9ICJ0dW5lci94YzMwMjhMIiwKKwlbMHhjOCA+PiAxXSA9ICJ0dW5lci94YzMwMjhMIiwKIH07CiAKIHN0YXRpYyB2b2lkIGRvX2kyY19zY2FuKGNoYXIgKm5hbWUsIHN0cnVjdCBpMmNfY2xpZW50ICpjKQpAQCAtMzc2LDcgKzM3Niw3IEBACiAJCXJjID0gaTJjX21hc3Rlcl9yZWN2KGMsICZidWYsIDApOwogCQlpZiAocmMgPCAwKQogCQkJY29udGludWU7Ci0JCXByaW50aygiJXM6IGkyYyBzY2FuOiBmb3VuZCBkZXZpY2UgQCAweCV4ICBbJXNdXG4iLAorCQlwcmludGsoS0VSTl9JTkZPICIlczogaTJjIHNjYW46IGZvdW5kIGRldmljZSBAIDB4JXggIFslc11cbiIsCiAJCSAgICAgICBuYW1lLCBpIDw8IDEsIGkyY19kZXZzW2ldID8gaTJjX2RldnNbaV0gOiAiPz8/Iik7CiAJfQogfQpAQCAtNDA4LDExICs0MDgsMTIgQEAKIAlidXMtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidXMtPmkyY19hZGFwOwogCiAJaWYgKDAgPT0gYnVzLT5pMmNfcmMpIHsKLQkJcHJpbnRrKCIlczogaTJjIGJ1cyAlZCByZWdpc3RlcmVkXG4iLCBkZXYtPm5hbWUsIGJ1cy0+bnIpOworCQlkcHJpbnRrKDEsICIlczogaTJjIGJ1cyAlZCByZWdpc3RlcmVkXG4iLCBkZXYtPm5hbWUsIGJ1cy0+bnIpOwogCQlpZiAoaTJjX3NjYW4pCiAJCQlkb19pMmNfc2NhbihkZXYtPm5hbWUsICZidXMtPmkyY19jbGllbnQpOwogCX0gZWxzZQotCQlwcmludGsoIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyIEZBSUxFRFxuIiwgZGV2LT5uYW1lLCBidXMtPm5yKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXIgRkFJTEVEXG4iLAorCQkJZGV2LT5uYW1lLCBidXMtPm5yKTsKIAogCXJldHVybiBidXMtPmkyY19yYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IGY3NWVkMWMuLmFiMzExMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMjg1LDExICsyODUsMTAgQEAKIAkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwogCX0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQogCQlkZWxfdGltZXIoJnEtPnRpbWVvdXQpOwotCX0gZWxzZSB7CisJZWxzZQogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwotCX0KIAlpZiAoYmMgIT0gMSkKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCiAJCQlfX2Z1bmNfXywgYmMpOwpAQCAtMzc5LDEyICszNzgsMTIgQEAKIAogc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGN4MjM4ODVfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQogewotCXJldHVybiAoZmgtPnJlc291cmNlcyAmIGJpdCk7CisJcmV0dXJuIGZoLT5yZXNvdXJjZXMgJiBiaXQ7CiB9CiAKIHN0YXRpYyBpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGJpdCkKIHsKLQlyZXR1cm4gKGRldi0+cmVzb3VyY2VzICYgYml0KTsKKwlyZXR1cm4gZGV2LT5yZXNvdXJjZXMgJiBiaXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJlc19mcmVlKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgY3gyMzg4NV9maCAqZmgsCkBAIC04ODcsMTQgKzg4NiwxNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBWSURFTyBDVFJMIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RhdGljIGludCBjeDIzODg1X2dldF9jb250cm9sKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCitzdGF0aWMgaW50IGN4MjM4ODVfZ2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCWRwcmludGsoMSwgIiVzKCkgY2FsbGluZyBjeDI1ODQwKFZJRElPQ19HX0NUUkwpXG4iLCBfX2Z1bmNfXyk7CiAJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19HX0NUUkwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMzg4NV9zZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQorc3RhdGljIGludCBjeDIzODg1X3NldF9jb250cm9sKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKIHsKIAlkcHJpbnRrKDEsICIlcygpIGNhbGxpbmcgY3gyNTg0MChWSURJT0NfU19DVFJMKSIKIAkJIiAoZGlzYWJsZWQgLSBubyBhY3Rpb24pXG4iLCBfX2Z1bmNfXyk7CkBAIC0xMDczLDI5ICsxMDc0LDI5IEBACiAJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgcCkpOworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKGdldF9xdWV1ZShmaCksIHApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX3F1ZXJ5YnVmKGdldF9xdWV1ZShmaCksIHApKTsKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoZ2V0X3F1ZXVlKGZoKSwgcCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBjeDIzODg1X2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuICh2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIHApKTsKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZihnZXRfcXVldWUoZmgpLCBwKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBjeDIzODg1X2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuICh2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLAotCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSk7CisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsCisJCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IGJhNGUwYWEuLjFkNTNmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jZGVmaW5lIENYMjM4ODVfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsMCwxKQorI2RlZmluZSBDWDIzODg1X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5yOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIHNyYW1fY2hubzsKIAotCXN0cnVjdCB2aWRlb2J1Zl9kdmIgICAgICAgIGR2YjsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyBmcm9udGVuZHM7CiAKIAkvKiBkbWEgcXVldWVzICovCiAJc3RydWN0IGN4MjM4ODVfZG1hcXVldWUgICAgbXBlZ3E7CkBAIC0yNjIsNiArMjYyLDkgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2VsX3ZhbDsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICB2bGRfbWlzY192YWw7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgaHdfc29wX2N0cmxfdmFsOworCisJLyogQWxsb3cgYSBzaW5nbGUgdHNwb3J0IHRvIGhhdmUgbXVsdGlwbGUgZnJvbnRlbmRzICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Zyb250ZW5kczsKIH07CiAKIHN0cnVjdCBjeDIzODg1X2RldiB7CkBAIC0zNjcsMTQgKzM3MCwxNCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBjeF9yZWFkKHJlZykgICAgICAgICAgICAgcmVhZGwoZGV2LT5sbW1pbyArICgocmVnKT4+MikpCi0jZGVmaW5lIGN4X3dyaXRlKHJlZyx2YWx1ZSkgICAgICB3cml0ZWwoKHZhbHVlKSwgZGV2LT5sbW1pbyArICgocmVnKT4+MikpCisjZGVmaW5lIGN4X3dyaXRlKHJlZywgdmFsdWUpICAgICB3cml0ZWwoKHZhbHVlKSwgZGV2LT5sbW1pbyArICgocmVnKT4+MikpCiAKLSNkZWZpbmUgY3hfYW5kb3IocmVnLG1hc2ssdmFsdWUpIFwKKyNkZWZpbmUgY3hfYW5kb3IocmVnLCBtYXNrLCB2YWx1ZSkgXAogICB3cml0ZWwoKHJlYWRsKGRldi0+bG1taW8rKChyZWcpPj4yKSkgJiB+KG1hc2spKSB8XAogICAoKHZhbHVlKSAmIChtYXNrKSksIGRldi0+bG1taW8rKChyZWcpPj4yKSkKIAotI2RlZmluZSBjeF9zZXQocmVnLGJpdCkgICAgICAgICAgY3hfYW5kb3IoKHJlZyksKGJpdCksKGJpdCkpCi0jZGVmaW5lIGN4X2NsZWFyKHJlZyxiaXQpICAgICAgICBjeF9hbmRvcigocmVnKSwoYml0KSwwKQorI2RlZmluZSBjeF9zZXQocmVnLCBiaXQpICAgICAgICAgIGN4X2FuZG9yKChyZWcpLCAoYml0KSwgKGJpdCkpCisjZGVmaW5lIGN4X2NsZWFyKHJlZywgYml0KSAgICAgICAgY3hfYW5kb3IoKHJlZyksIChiaXQpLCAwKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gyMzg4NS1jb3JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQxMSw3ICs0MTQsOCBAQAogZXh0ZXJuIHN0cnVjdCBjeDIzODg1X3N1YmlkIGN4MjM4ODVfc3ViaWRzW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudDsKIAotZXh0ZXJuIGludCBjeDIzODg1X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKK2V4dGVybiBpbnQgY3gyMzg4NV90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LAorCWludCBjb21tYW5kLCBpbnQgYXJnKTsKIGV4dGVybiB2b2lkIGN4MjM4ODVfY2FyZF9saXN0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKIGV4dGVybiBpbnQgIGN4MjM4ODVfaXJfaW5pdChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBjeDIzODg1X2dwaW9fc2V0dXAoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpOwpAQCAtNDc5LDExICs0ODMsMyBAQAogewogCXJldHVybiAobm9ybSAmIChWNEwyX1NURF9NTiAmIH5WNEwyX1NURF9QQUxfTmMpKSA/IDc1NCA6IDkyMjsKIH0KLQotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggNWRhMDRlODEuLmZiYzIyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTI3MCwyNyArMTI3MCw0MCBAQAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDBdID0gewotCQkvKiBGSVhNRTogQWRkIGR2YiAmIHJhZGlvIHN1cHBvcnQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlIzMDAwIFRyaU1vZGUgQW5hbG9nL0RWQi1TL0RWQi1UIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1dNODc3NSwKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJCS8qIDE6IFRWIEF1ZGlvIC8gRk0gTW9ubyAqLworCQkJLmF1ZGlvcm91dGUgPSAxLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wCT0gMHg4NGJmLAorCQkJLyogNDogRk0gU3RlcmVvICh1bnRlc3RlZCkgKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKKwkJfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwkJLm51bV9mcm9udGVuZHMJPSAyLAogCX0sCiAJW0NYODhfQk9BUkRfTk9SV09PRF9NSUNST10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJOb3J3b29kIE1pY3JvIFRWIFR1bmVyIiwKQEAgLTEzNTYsMjMgKzEzNjksMjcgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCiAJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sewogCQkJLnR5cGUJPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4CT0gMSwKIAkJCS5ncGlvMAk9IDB4ZWY4OCwKKwkJCS8qIDI6IExpbmUtSW4gKi8KIAkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSx7CiAJCQkudHlwZQk9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eAk9IDIsCiAJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiAyOiBMaW5lLUluICovCiAJCQkuYXVkaW9yb3V0ZSA9IDIsCiAJCX19LAotCQkvKiBmaXhtZTogQWRkIHJhZGlvIHN1cHBvcnQgKi8KIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiB8IENYODhfTVBFR19CTEFDS0JJUkQsCiAJCS5yYWRpbyA9IHsKIAkJCS50eXBlICAgPSBDWDg4X1JBRElPLAogCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogNDogRk0gU3RlcmVvICh1bnRlc3RlZCkgKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKIAkJfSwKIAl9LAogCVtDWDg4X0JPQVJEX0FEU1RFQ0hfUFRWXzM5MF0gPSB7CkBAIC0xNzE2LDYgKzE3MzMsNyBAQAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5hdWRpb19jaGlwICAgICA9IFY0TDJfSURFTlRfV004Nzc1LAogCQkvKgogCQkgKiBHUElPMCAoV0lOVFYyMDAwKQogCQkgKgpAQCAtMTcyOSw3ICsxNzQ3LDcgQEAKIAkJICogQklUICBWQUxVRSAgIEZVTkNUSU9OIEdQe3h9X0lPCiAJCSAqIDAgICAgMSAgICAgICBJOj8KIAkJICogMSAgICAxICAgICAgIEk6PwotCQkgKiAyICAgIDEgICAgICAgTzpEVkItVCBERU1PRCBFTkFCTEUgTE9XL0FOQUxPRyBERU1PRCBFTkFCTEUgSElHSAorCQkgKiAyICAgIDEgICAgICAgTzpNUEVHIFBPUlQgMD1EVkItVCAxPURWQi1TCiAJCSAqIDMgICAgMSAgICAgICBJOj8KIAkJICogNCAgICAxICAgICAgIEk6PwogCQkgKiA1ICAgIDEgICAgICAgSTo/CkBAIC0xNzQ1LDIyICsxNzYzLDQxIEBACiAJCSAqIGQgICAgMCAgICAgICBJCiAJCSAqIGUgICAgMSAgICAgICBPCiAJCSAqIGYgICAgMSAgICAgICBPCisJCSAqCisJCSAqIFdNODc3NSBBREMKKwkJICoKKwkJICogMTogVFYgQXVkaW8gLyBGTSBNb25vCisJCSAqIDI6IExpbmUtSW4KKwkJICogMzogTGluZS1JbiBFeHBhbnNpb24KKwkJICogNDogRk0gU3RlcmVvCiAJCSAqLwogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhjNGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sIHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4YzRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSwgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweGM0YmYsCisJCQkvKiAyOiBMaW5lLUluICovCisJCQkuYXVkaW9yb3V0ZSA9IDIsCiAJCX0gfSwKLQkJLyogZml4bWU6IEFkZCByYWRpbyBzdXBwb3J0ICovCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wCT0gMHhjNGJmLAorCQkJLyogNDogRk0gU3RlcmVvICovCisJCQkuYXVkaW9yb3V0ZSA9IDgsCisJCX0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJCS5udW1fZnJvbnRlbmRzCT0gMiwKIAl9LAogCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSNDAwMChMaXRlKSBEVkItUy9TMiIsCkBAIC0yNjYyLDEwICsyNjk5LDEzIEBACiAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6CiAJCS8qIEluaXQgR1BJTyAqLwogCQljeF93cml0ZShNT19HUDBfSU8sIGNvcmUtPmJvYXJkLmlucHV0WzBdLmdwaW8wKTsKIAkJdWRlbGF5KDEwMDApOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoNTApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsgLyogNzAyIG91dCBvZiByZXNldCAqLworCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTMwMDQsMTAgKzMwNDQsMTQgQEAKIAogCW1lbWNweSgmY29yZS0+Ym9hcmQsICZjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZG5yXSwgc2l6ZW9mKGNvcmUtPmJvYXJkKSk7CiAKLQlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJaWYgKCFjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKQorCQljb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzPTE7CisKKwlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc10sIGZyb250ZW5kKHMpOiAlZFxuIiwKIAkJcGNpLT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2ktPnN1YnN5c3RlbV9kZXZpY2UsIGNvcmUtPmJvYXJkLm5hbWUsCiAJCWNvcmUtPmJvYXJkbnIsIGNhcmRbY29yZS0+bnJdID09IGNvcmUtPmJvYXJkbnIgPwotCQkiaW5zbW9kIG9wdGlvbiIgOiAiYXV0b2RldGVjdGVkIik7CisJCSJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiLAorCQljb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKTsKIAogCWlmICh0dW5lcltjb3JlLT5ucl0gIT0gVU5TRVQpCiAJCWNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgPSB0dW5lcltjb3JlLT5ucl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggZDY1NmZlYy4uNjA3MDViMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTU0OSw3ICs1NDksOCBAQAogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwogCX0KIAlpZiAoYmMgIT0gMSkKLQkJcHJpbnRrKCIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsX19mdW5jX18sYmMpOworCQlkcHJpbnRrKDIsICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCisJCQlfX2Z1bmNfXywgYmMpOwogfQogCiB2b2lkIGN4ODhfc2h1dGRvd24oc3RydWN0IGN4ODhfY29yZSAqY29yZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggMzQ0ZWQyNi4uNjk2OGFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTExNiwxMyArMTE2LDIzIEBACiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKIAlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgZmVfaWQ7CisKKwlmZV9pZCA9IHZpZGVvYnVmX2R2Yl9maW5kX2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgZmUpOworCWlmICghZmVfaWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIE5vIGZyb250ZW5kIGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWRydiA9IGN4ODgwMl9nZXRfZHJpdmVyKGRldiwgQ1g4OF9NUEVHX0RWQik7CiAJaWYgKGRydikgewotCQlpZiAoYWNxdWlyZSkKKwkJaWYgKGFjcXVpcmUpeworCQkJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gZmVfaWQ7CiAJCQlyZXQgPSBkcnYtPnJlcXVlc3RfYWNxdWlyZShkcnYpOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyZXQgPSBkcnYtPnJlcXVlc3RfcmVsZWFzZShkcnYpOworCQkJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gMDsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zOTYsNyArNDA2LDcgQEAKIAkJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwNjA2MCk7CiAJCQlicmVhazsKIAkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6Ci0JCQlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CisJCSAgIAlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CiAJCQlicmVhazsKIAl9CiAKQEAgLTQ4Myw2ICs0OTMsNyBAQAogc3RhdGljIGludCBhdHRhY2hfeGMzMDI4KHU4IGFkZHIsIHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwID0gTlVMTDsKIAlzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsOwogCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJLmkyY19hZGFwICA9ICZkZXYtPmNvcmUtPmkyY19hZGFwLApAQCAtNDkwLDcgKzUwMSwxMiBAQAogCQkuY3RybCAgICAgID0gJmN0bCwKIAl9OwogCi0JaWYgKCFkZXYtPmR2Yi5mcm9udGVuZCkgeworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFmZTAtPmR2Yi5mcm9udGVuZCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IGR2YiBmcm9udGVuZCBub3QgYXR0YWNoZWQuICIKIAkJCQkiQ2FuJ3QgYXR0YWNoIHhjMzAyOFxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSk7CkBAIC01MDQsMTAgKzUyMCwxMyBAQAogCSAqLwogCWN4ODhfc2V0dXBfeGMzMDI4KGRldi0+Y29yZSwgJmN0bCk7CiAKLQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsICZjZmcpOworCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJaWYgKCFmZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IHhjMzAyOCBhdHRhY2ggZmFpbGVkXG4iLAogCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBOVUxMOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUzMiw4ICs1NTEsMTAgQEAKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwogCiAJLyogUmVzZXQgdGhlIHBhcnQgKi8KKwkvKiBQdXQgdGhlIGN4MjQxMTYgaW50byByZXNldCAqLwogCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDApOwogCW1zbGVlcCgxMCk7CisJLyogVGFrZSB0aGUgY3gyNDExNiBvdXQgb2YgcmVzZXQgKi8KIAljeF93cml0ZShNT19TUlNUX0lPLCAxKTsKIAltc2xlZXAoMTApOwogCkBAIC01NTQsMTQgKzU3NSwxNCBAQAogCiBzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHRldmlpX3R1bmVyX3NoYXJwX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCi0JLmluaXR0YWIgPSBzaGFycF96MDE5NGFfX2luaXR0YWIsCisJLmluaXR0YWIgPSBzaGFycF96MDE5NGFfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDEsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSAxLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKIAkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfX3NldF9zeW1ib2xfcmF0ZSwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKIAkuc2V0X3RzX3BhcmFtcyA9IGN4MjQxMTZfc2V0X3RzX3BhcmFtLAogfTsKIApAQCAtNTc0LDE5ICs1OTUsMjUgQEAKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTAsICpmZTEgPSBOVUxMOworCWludCBtZmVfc2hhcmVkID0gMDsgLyogYnVzIG5vdCBzaGFyZWQgYnkgZGVmYXVsdCAqLwogCi0JLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCi0JZGV2LT5kdmIubmFtZSA9IGNvcmUtPm5hbWU7Ci0JZGV2LT50c19nZW5fY250cmwgPSAweDBjOworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOwogCi0JLyogaW5pdCBmcm9udGVuZCAqLworCS8qIG11bHRpLWZyb250ZW5kIGdhdGUgY29udHJvbCBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdHMgdG8gZmUwICovCisJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDA7CisKKwkvKiBpbml0IGZyb250ZW5kKHMpICovCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9EVkJfVDE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsICZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJRFZCX1BMTF9USE9NU09OX0RUVDc1OVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNTk2LDExICs2MjMsMTEgQEAKIAljYXNlIENYODhfQk9BUkRfQ09ORVhBTlRfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1RfQ1gyMjcwMjoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKIAkJCQkJICAgICAgICZjb25uZXhhbnRfcmVmYm9hcmRfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCAmY29yZS0+aTJjX2FkYXAsCiAJCQkJCURWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTYxMCwzMyArNjM3LDY3IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMExQOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnJfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJCS8qIERWQi1TIGluaXQgKi8KKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQkJICAgICAgICZoYXVwcGF1Z2Vfbm92YXNfY29uZmlnLAorCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVMgTE5CIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItUyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJfQorCQkvKiBEVkItVCBpbml0ICovCisJCWZlMSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAyKTsKKwkJaWYgKGZlMSkgeworCQkJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDI7CisJCQltZmVfc2hhcmVkID0gMTsKKwkJCWZlMS0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJCQkmaGF1cHBhdWdlX2h2cl9jb25maWcsCisJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQkJaWYgKGZlMS0+ZHZiLmZyb250ZW5kKSB7CisJCQkJZmUxLT5kdmIuZnJvbnRlbmQtPmlkID0gMTsKKwkJCQlpZighZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTEtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDYxLAorCQkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkgeworCQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIG1pc2MgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItVCBJbml0OiBjYW4ndCBmaW5kIGZyb250ZW5kIDIuXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCQlicmVhazsKIAkJfQogCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTY0NCwzMSArNzA1LDMxIEBACiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTDoKIAkJLyogVGhlIHRpbiBib3ggc2F5cyBERUUxNjAxLCBidXQgaXQgc2VlbXMgdG8gYmUgRFRUNzU3OQogCQkgKiBjb21wYXRpYmxlLCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IE1UMzUyIEFHQyBnYWluLiAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfZHVhbCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogWkwxMDM1MyByZXBsYWNlcyBNVDM1MiBvbiBsYXRlciBjYXJkcyAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3BsdXNfdjFfMSwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX0xHX1oyMDEpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC02NzYsMTEgKzczNywxMSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1Q6CiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0k6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCSAgICAgICAmZG50dl9saXZlX2R2YnRfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1VOS05PV05fMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTY4OCwxMCArNzQ5LDEwIEBACiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk86CiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IChkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIAkJLyogTVQzNTIgaXMgb24gYSBzZWNvbmRhcnkgSTJDIGJ1cyBtYWRlIGZyb20gc29tZSBHUElPIGxpbmVzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmZG50dl9saXZlX2R2YnRfcHJvX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPnZwMzA1NC0+YWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTcwMiwyMiArNzYzLDIyIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfSFlCUklEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X2h5YnJpZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1RIT01TT05fRkU2NjAwKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kID09IE5VTEwpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmZHZpY29fZnVzaW9uaGR0dl9tdDM1Ml94YzMwMjgsCiAJCQkJCQkmY29yZS0+aTJjX2FkYXApOwogCQkvKgpAQCAtNzI1LDE2ICs3ODYsMTYgQEAKIAkJICogV2UgbXVzdCBub3QgcGVybWl0IGdhdGVfY3RybCB0byBiZSBwZXJmb3JtZWQsIG9yCiAJCSAqIHRoZSB4YzMwMjggY2Fubm90IGNvbW11bmljYXRlIG9uIHRoZSBidXMuCiAJCSAqLwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOwogCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG9yNTExMzJfYXR0YWNoLCAmcGNoZHR2X2hkMzAwMCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG9yNTExMzJfYXR0YWNoLCAmcGNoZHR2X2hkMzAwMCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfVEhPTVNPTl9EVFQ3NjFYKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTc1MSwxMSArODEyLDExIEBACiAKIAkJLyogU2VsZWN0IFJGIGNvbm5lY3RvciBjYWxsYmFjayAqLwogCQlmdXNpb25oZHR2XzNfZ29sZC5wbGxfcmZfc2V0ID0gbGdkdDMzMHhfcGxsX3JmX3NldDsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzNfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfTUlDUk9UVU5FXzQwNDJGSTUpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzY5LDExICs4MzAsMTEgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDkpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzNfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfVEhPTVNPTl9EVFQ3NjFYKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTc4NywxNSArODQ4LDE1IEBACiAJCW1kZWxheSgxMDApOwogCQljeF9zZXQoTU9fR1AwX0lPLCAxKTsKIAkJbWRlbGF5KDIwMCk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCiAJCQkJCSAgICAgICAmZnVzaW9uaGR0dl81X2dvbGQsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJCVRVTkVSX0xHX1REVlNfSDA2WEYpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDQzKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtODA4LDI1ICs4NjksMjUgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDEpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZwY2hkdHZfaGQ1NTAwLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9MR19URFZTX0gwNlhGKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKLQkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoIWR2Yl9hdHRhY2godGRhOTg4N19hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZjb3JlLT5pMmNfYWRhcCwgMHg0MykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0FUSV9IRFRWV09OREVSOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZhdGlfaGR0dndvbmRlciwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfUEhJTElQU19UVVYxMjM2RCkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC04MzQsNDkgKzg5NSw0OSBAQAogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTRTJfUzE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAogCQkJCQkgICAgICAgJmhhdXBwYXVnZV9ub3Zhc19jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWlmICghZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJTXzEwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAma3dvcmxkX2R2YnNfMTAwX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0ga3dvcmxkX2R2YnNfMTAwX3NldF92b2x0YWdlOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGt3b3JsZF9kdmJzXzEwMF9zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfR0VOSUFURUNIX0RWQlM6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAogCQkJCQkgICAgICAgJmdlbmlhdGVjaF9kdmJzX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gZ2VuaWF0ZWNoX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gZ2VuaWF0ZWNoX2R2YnNfc2V0X3ZvbHRhZ2U7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfODAwaToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCSAgICAgICAmcGlubmFjbGVfcGN0dl9oZF84MDBpX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJJnBpbm5hY2xlX3BjdHZfaGRfODAwaV90dW5lcl9jb25maWcpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmR2aWNvX2hkdHY1X3BjaV9uYW5vX2NvbmZpZywKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmNvcmUtPmkyY19hZGFwLApAQCAtODg5LDE3ICs5NTAsMTcgQEAKIAkJCX07CiAKIAkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLAotCQkJCQlkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQogCQlicmVhazsKIAkgY2FzZSBDWDg4X0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QQ1RWOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZjeDg4X3Bpbm5hY2xlX2h5YnJpZF9wY3R2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CiAJCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtOTA3LDg1ICs5NjgsMTE4IEBACiAJIGNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfWDgwMDBfTVQ6CiAJCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwMDsKIAotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZjeDg4X2dlbmlhdGVjaF94ODAwMF9tdCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQogCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCWJyZWFrOwogCSBjYXNlIENYODhfQk9BUkRfS1dPUkxEX0FUU0NfMTIwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgICAgICZrd29ybGRfYXRzY18xMjBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19HT0xEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2N19jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsCiAJCQkJCSZkdmljb19mdXNpb25oZHR2N190dW5lcl9jb25maWcpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgotCQkvKiBTdXBwb3J0IGZvciBEVkItUyBvbmx5LCBub3QgRFZCLVQgc3VwcG9ydCAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCS8qIERWQi1TL1MyIEluaXQgKi8KKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAogCQkJJmhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZywKIAkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZighZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVMgTE5CIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItUyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJfQorCQkvKiBEVkItVCBJbml0ICovCisJCWZlMSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAyKTsKKwkJaWYgKGZlMSkgeworCQkJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDI7CisJCQltZmVfc2hhcmVkID0gMTsKKwkJCWZlMS0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJCQkmaGF1cHBhdWdlX2h2cl9jb25maWcsCisJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQkJaWYgKGZlMS0+ZHZiLmZyb250ZW5kKSB7CisJCQkJZmUxLT5kdmIuZnJvbnRlbmQtPmlkID0gMTsKKwkJCQlpZighZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTEtPmR2Yi5mcm9udGVuZCwKKwkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4NjEsCisJCQkJCVRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMykpIHsKKwkJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItVCBtaXNjIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItVCBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVQgSW5pdDogY2FuJ3QgZmluZCBmcm9udGVuZCAyLlxuIiwgX19mdW5jX18pOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCisJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsCiAJCQkJMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9URVZJSV9TNDIwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwKIAkJCQkJCSZ0ZXZpaV90dW5lcl9zaGFycF9jb25maWcsCiAJCQkJCQkmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgRFZCX1BMTF9PUEVSQTEpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKKwkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CiAKIAkJfSBlbHNlIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjg4X2F0dGFjaCwKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjg4X2F0dGFjaCwKIAkJCQkJCQkgICAgJnRldmlpX3R1bmVyX2VhcmRhX2NvbmZpZywKIAkJCQkJCQkgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJCQlpZiAoIWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAorCQkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJCWlmICghZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjEsCiAJCQkJCQkmY29yZS0+aTJjX2FkYXApKQogCQkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKLQkJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKKwkJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAogCQkJfQogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9URVZJSV9TNDYwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKIAkJCQkJICAgICAgICZ0ZXZpaV9zNDYwX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0k6CiAJY2FzZSBDWDg4X0JPQVJEX1RCU184OTIwOgogCWNhc2UgQ1g4OF9CT0FSRF9QUk9GXzczMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAogCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTkzLDI5ICsxMDg3LDMyIEBACiAJCSAgICAgICBjb3JlLT5uYW1lKTsKIAkJYnJlYWs7CiAJfQotCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CisKKyAgICAgICAgaWYgKCAoTlVMTCA9PSBmZTAtPmR2Yi5mcm9udGVuZCkgfHwgKGZlMSAmJiBOVUxMID09IGZlMS0+ZHZiLmZyb250ZW5kKSApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiJXMvMjogZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkgICAgICAgY29yZS0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KLQlkZXYtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrOworCWZlMC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiBFbnN1cmUgYWxsIGZyb250ZW5kcyBuZWdvdGlhdGUgYnVzIGFjY2VzcyAqLwotCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKKwlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnRzX2J1c19jdHJsID0gY3g4OF9kdmJfYnVzX2N0cmw7CisJaWYgKGZlMSkKKwkJZmUxLT5kdmIuZnJvbnRlbmQtPm9wcy50c19idXNfY3RybCA9IGN4ODhfZHZiX2J1c19jdHJsOwogCiAJLyogUHV0IHRoZSBhbmFsb2cgZGVjb2RlciBpbiBzdGFuZGJ5IHRvIGtlZXAgaXQgcXVpZXQgKi8KIAljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwotCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoJmRldi0+ZHZiLCBUSElTX01PRFVMRSwgZGV2LAotCQkJCSAgICAgJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIpOworCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIGRldiwKKwkJJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIsIG1mZV9zaGFyZWQpOwogCiBmcm9udGVuZF9kZXRhY2g6Ci0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCWR2Yl9mcm9udGVuZF9kZXRhY2goZGV2LT5kdmIuZnJvbnRlbmQpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IE5VTEw7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUwLT5kdmIuZnJvbnRlbmQpOworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IE5VTEw7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTAzOSw2ICsxMTM2LDM4IEBACiAJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7CiAJCXVkZWxheSgxMDAwKTsKIAkJYnJlYWs7CisKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQlpZihjb3JlLT5kdmJkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPT0gMSkgeworCQkJLyogRFZCLVMvUzIgRW5hYmxlZCAqLworCisJCQkvKiBUb2dnbGUgcmVzZXQgb24gY3gyMjcwMiBsZWF2aW5nIGkyYyBhY3RpdmUgKi8KKwkJCWN4X3dyaXRlKE1PX0dQMF9JTywgKGNvcmUtPmJvYXJkLmlucHV0WzBdLmdwaW8wICYgMHgwMDAwZmYwMCkgfCAweDAwMDAwMDgwKTsKKwkJCXVkZWxheSgxMDAwKTsKKwkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7CisJCQl1ZGVsYXkoNTApOworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7IC8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0ICovCisJCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDA0KTsgLyogdHJpLXN0YXRlIHRoZSBjeDIyNzAyIHBpbnMgKi8KKwkJCXVkZWxheSgxMDAwKTsKKworCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMSk7IC8qIFRha2UgdGhlIGN4MjQxMTYvY3gyNDEyMyBvdXQgb2YgcmVzZXQgKi8KKwkJCWNvcmUtPmR2YmRldi0+dHNfZ2VuX2NudHJsID0gMHgwMjsgLyogUGFyYWxsZWwgSU8gKi8KKwkJfSBlbHNlCisJCWlmIChjb3JlLT5kdmJkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPT0gMikgeworCQkJLyogRFZCLVQgRW5hYmxlZCAqLworCisJCQkvKiBQdXQgdGhlIGN4MjQxMTYvY3gyNDEyMyBpbnRvIHJlc2V0ICovCisJCQljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKKworCQkJLyogY3gyMjcwMiBvdXQgb2YgcmVzZXQgYW5kIGVuYWJsZSBpdCAqLworCQkJY3hfc2V0KE1PX0dQMF9JTywgICAweDAwMDAwMDgwKTsKKwkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7CisJCQljb3JlLT5kdmJkZXYtPnRzX2dlbl9jbnRybCA9IDB4MGM7IC8qIFNlcmlhbCBJTyAqLworCQkJdWRlbGF5KDEwMDApOworCQl9CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC0xMDU2LDYgKzExODUsOSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKIAkJLyogRG8gTm90aGluZywgbGVhdmUgdGhlIGN4MjI3MDIgb24gdGhlIGJ1cy4gKi8KIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC0xMDY2LDcgKzExOTgsOCBAQAogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGRydi0+Y29yZS0+ZHZiZGV2OwotCWludCBlcnI7CisJaW50IGVyciwgaTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKIAogCWRwcmludGsoIDEsICIlc1xuIiwgX19mdW5jX18pOwogCWRwcmludGsoIDEsICIgLT5iZWluZyBwcm9iZWQgYnkgQ2FyZD0lZCBOYW1lPSVzLCBQQ0kgJTAyeDolMDJ4XG4iLApAQCAtMTA4NiwxOCArMTIxOSwyOCBAQAogCiAJLyogZHZiIHN0dWZmICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogY3gyMzg4eCBiYXNlZCBEVkIvQVRTQyBjYXJkXG4iLCBjb3JlLT5uYW1lKTsKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZkZXYtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCisJZGV2LT50c19nZW5fY250cmwgPSAweDBjOworCisJZm9yIChpID0gMTsgaSA8PSBjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzOyBpKyspIHsKKwkJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZjb3JlLT5kdmJkZXYtPmZyb250ZW5kcywgaSk7CisJCWlmICghZmUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQgdG8gZ2V0IGZyb250ZW5kKCVkKVxuIiwgX19mdW5jX18sIGkpOworCQkJY29udGludWU7CisJCX0KKwkJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCiAJCQkgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCSAgICBWNEwyX0ZJRUxEX1RPUCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IGN4ODhfYnVmZmVyKSwKIAkJCSAgICBkZXYpOworCQkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KKwkJZmUtPmR2Yi5uYW1lID0gZGV2LT5jb3JlLT5uYW1lOworCX0KIAllcnIgPSBkdmJfcmVnaXN0ZXIoZGV2KTsKIAlpZiAoZXJyICE9IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogZHZiX3JlZ2lzdGVyIGZhaWxlZCAoZXJyID0gJWQpXG4iLAogCQkgICAgICAgY29yZS0+bmFtZSwgZXJyKTsKLQotIGZhaWxfY29yZToKK2ZhaWxfY29yZToKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA1LDkgKzEyNDgsNyBAQAogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkcnYtPmNvcmUtPmR2YmRldjsKIAotCS8qIGR2YiAqLwotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJmRldi0+ZHZiKTsKKwl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKIAogCXZwMzA1NF9pMmNfcmVtb3ZlKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKaW5kZXggOGU3NGQ2NC4uMDFkZTIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKQEAgLTExNiwxOCArMTE2LDI1IEBACiAKIHZvaWQgY3g4OF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiA9ICZjb3JlLT5kdmJkZXYtPmZyb250ZW5kczsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSA9IE5VTEw7CiAJaWYgKDAgIT0gY29yZS0+aTJjX3JjKQogCQlyZXR1cm47CiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9EVkJfTU9EVUxFKQotCWlmICggKGNvcmUtPmR2YmRldikgJiYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kKSApIHsKLQkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMSk7CisJaWYgKGNvcmUtPmR2YmRldiAmJiBmKSB7CisJCWlmKGYtPmdhdGUgPD0gMSkgLyogdW5kZWZpbmVkIG9yIGZlMCAqLworCQkJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKGYsIDEpOworCQllbHNlCisJCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoZiwgZi0+Z2F0ZSk7CisKKwkJaWYgKGZlICYmIGZlLT5kdmIuZnJvbnRlbmQgJiYgZmUtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChmZS0+ZHZiLmZyb250ZW5kLCAxKTsKIAogCQlpMmNfY2xpZW50c19jb21tYW5kKCZjb3JlLT5pMmNfYWRhcCwgY21kLCBhcmcpOwogCi0JCWlmIChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCQljb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQsIDApOworCQlpZiAoZmUgJiYgZmUtPmR2Yi5mcm9udGVuZCAmJiBmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLT5kdmIuZnJvbnRlbmQsIDApOwogCX0gZWxzZQogI2VuZGlmCiAJCWkyY19jbGllbnRzX2NvbW1hbmQoJmNvcmUtPmkyY19hZGFwLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggYTZiMDYxYy4uNmRmNWNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtNzY4LDcgKzc2OCw4IEBACiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZTsKLQlpbnQgZXJyOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmRlbW9kOworCWludCBlcnIsaTsKIAogCS8qIGdlbmVyYWwgc2V0dXAgKi8KIAljb3JlID0gY3g4OF9jb3JlX2dldChwY2lfZGV2KTsKQEAgLTc4MSw2ICs3ODIsMTEgQEAKIAlpZiAoIWNvcmUtPmJvYXJkLm1wZWcpCiAJCWdvdG8gZmFpbF9jb3JlOwogCisJaWYgKCFjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSAubnVtX2Zyb250ZW5kcyBzaG91bGQgYmUgbm9uLXplcm8sIGVyciA9ICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBmYWlsX2NvcmU7CisJfQorCiAJZXJyID0gLUVOT01FTTsKIAlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSxHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBkZXYpCkBAIC03OTUsNiArODAxLDIwIEBACiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZHJ2bGlzdCk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCZjeDg4MDJfZGV2bGlzdCk7CiAKKwltdXRleF9pbml0KCZkZXYtPmZyb250ZW5kcy5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5mcm9udGVuZHMuZmVsaXN0KTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgYWxsb2NhdGluZyAlZCBmcm9udGVuZChzKVxuIiwgX19mdW5jX18sIGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHMpOworCisJZm9yIChpID0gMTsgaSA8PSBjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzOyBpKyspIHsKKwkJZGVtb2QgPSB2aWRlb2J1Zl9kdmJfYWxsb2NfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCBpKTsKKwkJaWYoZGVtb2QgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbF9mcmVlOworCQl9CisJfQorCiAJLyogTWFpbnRhaW4gYSByZWZlcmVuY2Ugc28gY3g4OC12aWRlbyBjYW4gcXVlcnkgdGhlIDg4MDIgZGV2aWNlLiAqLwogCWNvcmUtPmR2YmRldiA9IGRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCmluZGV4IDNhMTk3N2YuLjdkZDUwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKQEAgLTc2Nyw2ICs3NjcsMTQgQEAKIAljYXNlIFdXX0ZNOgogCQlzZXRfYXVkaW9fc3RhbmRhcmRfRk0oY29yZSwgcmFkaW9fZGVlbXBoYXNpcyk7CiAJCWJyZWFrOworCWNhc2UgV1dfSTJTQURDOgorCQlzZXRfYXVkaW9fc3RhcnQoY29yZSwgMHgwMSk7CisJCS8qIFNsYXZlL1BoaWxpcHMvQXV0b2JhdWQgKi8KKwkJY3hfd3JpdGUoQVVEX0kyU0lOUFVUQ05UTCwgMCk7CisJCS8qIFN3aXRjaCB0byAiSTJTIEFEQyBtb2RlIiAqLworCQljeF93cml0ZShBVURfSTJTQ05UTCwgMHgxKTsKKwkJc2V0X2F1ZGlvX2ZpbmlzaChjb3JlLCBFTl9JMlNJTl9FTkFCTEUpOworCQlicmVhazsKIAljYXNlIFdXX05PTkU6CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlcy8wOiB1bmtub3duIHR2IGF1ZGlvIG1vZGUgWyVkXVxuIiwKQEAgLTg5NSw2ICs5MDMsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBXV19JMlNBREM6CisJCS8qIERPIE5PVEhJTkcgKi8KKwkJYnJlYWs7CiAJfQogCiAJaWYgKFVOU0VUICE9IGN0bCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggYmU0NTk1NS4uMzkwNGI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC00MjYsMjQgKzQyNiw3IEBACiAKIAkvKiBpZiB0aGVyZSBhcmUgYXVkaW9yb3V0ZXMgZGVmaW5lZCwgd2UgaGF2ZSBhbiBleHRlcm5hbAogCSAgIEFEQyB0byBkZWFsIHdpdGggYXVkaW8gKi8KLQogCWlmIChJTlBVVChpbnB1dCkuYXVkaW9yb3V0ZSkgewotCi0JCS8qIGN4MjM4OCdzIEMtQURDIGlzIGNvbm5lY3RlZCB0byB0aGUgdHVuZXIgb25seS4KLQkJICAgV2hlbiB1c2VkIHdpdGggUy1WaWRlbywgdGhhdCBBREMgaXMgYnVzeSBkZWFsaW5nIHdpdGgKLQkJICAgY2hyb21hLCBzbyBhbiBleHRlcm5hbCBtdXN0IGJlIHVzZWQgZm9yIGJhc2ViYW5kIGF1ZGlvICovCi0KLQkJaWYgKElOUFVUKGlucHV0KS50eXBlICE9IENYODhfVk1VWF9URUxFVklTSU9OICYmCi0JCQlJTlBVVChpbnB1dCkudHlwZSAhPSBDWDg4X1JBRElPKSB7Ci0JCQkvKiAiQURDIG1vZGUiICovCi0JCQljeF93cml0ZShBVURfSTJTQ05UTCwgMHgxKTsKLQkJCWN4X3NldChBVURfQ1RMLCBFTl9JMlNJTl9FTkFCTEUpOwotCQl9IGVsc2UgewotCQkJLyogTm9ybWFsIG1vZGUgKi8KLQkJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDApOwotCQkJY3hfY2xlYXIoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKLQkJfQotCiAJCS8qIFRoZSB3bTg3NzUgbW9kdWxlIGhhcyB0aGUgIjIiIHJvdXRlIGhhcmR3aXJlZCBpbnRvCiAJCSAgIHRoZSBpbml0aWFsaXphdGlvbi4gU29tZSBib2FyZHMgbWF5IHVzZSBkaWZmZXJlbnQKIAkJICAgcm91dGVzIGZvciBkaWZmZXJlbnQgaW5wdXRzLiBIVlItMTMwMCBzdXJlbHkgZG9lcyAqLwpAQCAtNDU0LDkgKzQzNywxOSBAQAogCQkJcm91dGUuaW5wdXQgPSBJTlBVVChpbnB1dCkuYXVkaW9yb3V0ZTsKIAkJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLAogCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOwotCiAJCX0KLQorCQkvKiBjeDIzODgncyBDLUFEQyBpcyBjb25uZWN0ZWQgdG8gdGhlIHR1bmVyIG9ubHkuCisJCSAgIFdoZW4gdXNlZCB3aXRoIFMtVmlkZW8sIHRoYXQgQURDIGlzIGJ1c3kgZGVhbGluZyB3aXRoCisJCSAgIGNocm9tYSwgc28gYW4gZXh0ZXJuYWwgbXVzdCBiZSB1c2VkIGZvciBiYXNlYmFuZCBhdWRpbyAqLworCQlpZiAoSU5QVVQoaW5wdXQpLnR5cGUgIT0gQ1g4OF9WTVVYX1RFTEVWSVNJT04gKSB7CisJCQkvKiAiSTJTIEFEQyBtb2RlIiAqLworCQkJY29yZS0+dHZhdWRpbyA9IFdXX0kyU0FEQzsKKwkJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CisJCX0gZWxzZSB7CisJCQkvKiBOb3JtYWwgbW9kZSAqLworCQkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MCk7CisJCQljeF9jbGVhcihBVURfQ1RMLCBFTl9JMlNJTl9FTkFCTEUpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04MzIsOSArODI1LDI0IEBACiAJCWN4X3dyaXRlKE1PX0dQMF9JTywgY29yZS0+Ym9hcmQucmFkaW8uZ3BpbzApOwogCQljeF93cml0ZShNT19HUDFfSU8sIGNvcmUtPmJvYXJkLnJhZGlvLmdwaW8xKTsKIAkJY3hfd3JpdGUoTU9fR1AyX0lPLCBjb3JlLT5ib2FyZC5yYWRpby5ncGlvMik7Ci0JCWNvcmUtPnR2YXVkaW8gPSBXV19GTTsKLQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKLQkJY3g4OF9zZXRfc3RlcmVvKGNvcmUsVjRMMl9UVU5FUl9NT0RFX1NURVJFTywxKTsKKwkJaWYgKGNvcmUtPmJvYXJkLnJhZGlvLmF1ZGlvcm91dGUpIHsKKwkJCWlmKGNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgJiYKKwkJCQljb3JlLT5ib2FyZC5hdWRpb19jaGlwID09IFY0TDJfSURFTlRfV004Nzc1KSB7CisJCQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKworCQkJCXJvdXRlLmlucHV0ID0gY29yZS0+Ym9hcmQucmFkaW8uYXVkaW9yb3V0ZTsKKwkJCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwKKwkJCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCQl9CisJCQkvKiAiSTJTIEFEQyBtb2RlIiAqLworCQkJY29yZS0+dHZhdWRpbyA9IFdXX0kyU0FEQzsKKwkJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CisJCX0gZWxzZSB7CisJCQkvKiBGTSBNb2RlICovCisJCQljb3JlLT50dmF1ZGlvID0gV1dfRk07CisJCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOworCQkJY3g4OF9zZXRfc3RlcmVvKGNvcmUsVjRMMl9UVU5FUl9NT0RFX1NURVJFTywxKTsKKwkJfQogCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxBVURDX1NFVF9SQURJTyxOVUxMKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggZGJmMDFiOC4uNzYyMDdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAllbnVtIGN4ODhfaXR5cGUgdHlwZTsKIAl1MzIgICAgICAgICAgICAgZ3BpbzAsIGdwaW8xLCBncGlvMiwgZ3BpbzM7CiAJdW5zaWduZWQgaW50ICAgIHZtdXg6MjsKLQl1bnNpZ25lZCBpbnQgICAgYXVkaW9yb3V0ZToyOworCXVuc2lnbmVkIGludCAgICBhdWRpb3JvdXRlOjQ7CiB9OwogCiBzdHJ1Y3QgY3g4OF9ib2FyZCB7CkBAIC0yNjEsNiArMjYxLDcgQEAKIAlzdHJ1Y3QgY3g4OF9pbnB1dCAgICAgICByYWRpbzsKIAllbnVtIGN4ODhfYm9hcmRfdHlwZSAgICBtcGVnOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGF1ZGlvX2NoaXA7CisJaW50CQkJbnVtX2Zyb250ZW5kczsKIH07CiAKIHN0cnVjdCBjeDg4X3N1YmlkIHsKQEAgLTM1Niw2ICszNTcsNyBAQAogCXN0cnVjdCBjeDg4MDJfZGV2ICAgICAgICAgICpkdmJkZXY7CiAJZW51bSBjeDg4X2JvYXJkX3R5cGUgICAgICAgYWN0aXZlX3R5cGVfaWQ7CiAJaW50CQkJICAgYWN0aXZlX3JlZjsKKwlpbnQJCQkgICBhY3RpdmVfZmVfaWQ7CiB9OwogCiBzdHJ1Y3QgY3g4ODAwX2RldjsKQEAgLTQ5MCw3ICs0OTIsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCX01PRFVMRSkKIAkvKiBmb3IgZHZiIG9ubHkgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NCkgfHwgXApAQCAtNjI4LDYgKzYzMCw3IEBACiAjZGVmaW5lIFdXX0VJQUoJCSA3CiAjZGVmaW5lIFdXX0kyU1BUCSA4CiAjZGVmaW5lIFdXX0ZNCQkgOQorI2RlZmluZSBXV19JMlNBREMJIDEwCiAKIHZvaWQgY3g4OF9zZXRfdHZhdWRpbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKTsKIHZvaWQgY3g4OF9uZXdzdGF0aW9uKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKaW5kZXggM2FhNTM4YS4uMjk4ODEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJCQkJZXJyKCJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBpbnZhbGlkIGxlbiAlZCIsIGxlbik7CiAJCQl9CiAJCQllbHNlCi0JCQkJd2FybigiZGFidXNiX2lzb19jb21wbGV0ZTogY29ycnVwdGVkIHBhY2tldCBzdGF0dXM6ICVkIiwgcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKKwkJCQlkZXZfd2FybigmcHVyYi0+ZGV2LT5kZXYsICJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBjb3JydXB0ZWQgcGFja2V0IHN0YXR1czogJWRcbiIsIHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CiAJCWlmIChkc3QgIT0gcHVyYi0+YWN0dWFsX2xlbmd0aCkKIAkJCWVycigiZHN0IT1wdXJiLT5hY3R1YWxfbGVuZ3RoOiVkIT0lZCIsIGRzdCwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQpAQCAtMjg5LDcgKzI4OSw3IEBACiAJfQogCiAJaWYoIHJldCA9PSAtRVBJUEUgKSB7Ci0JCXdhcm4oIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLiIpOworCQlkZXZfd2Fybigmcy0+dXNiZGV2LT5kZXYsICJDTEVBUl9GRUFUVVJFIHJlcXVlc3QgdG8gcmVtb3ZlIFNUQUxMIGNvbmRpdGlvbi5cbiIpOwogCQlpZih1c2JfY2xlYXJfaGFsdChzLT51c2JkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSkpKQogCQkJZXJyKCJyZXF1ZXN0IGZhaWxlZCIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCBjMjFhZjMxLi5lNDhmYmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIE1PRFVMRV9OQU1FICJnc3BjYSIKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQwMyw3ICs0MDQsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJUERFQlVHKERfU1RSRUFNLCAia2lsbCB0cmFuc2ZlciIpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVSQlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVSQlM7IGkrKykgewogCQl1cmIgPSBnc3BjYV9kZXYtPnVyYltpXTsKIAkJaWYgKHVyYiA9PSBOVUxMKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggNDc3OWRkMC4uMWQ5ZGM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgR1NQQ0FWMl9ICiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaAppbmRleCBjNzg2ZDdkLi4xYTM3YWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogVVNCIERyaXZlciBmb3IgQUxpIG01NjAyIGJhc2VkIHdlYmNhbXMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTI1LDMzICsyNSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI3VuZGVmIFBERUJVRwotI3VuZGVmIGluZm8KLSN1bmRlZiBlcnIKLQotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiIFwKLQlmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIFwKLQlmb3JtYXQgIlxuIiAsICMjIGFyZykKLQotLyogRGVidWcgcGFyYW1ldGVycyAqLwotI2RlZmluZSBEQkdfSU5JVCAweDEKLSNkZWZpbmUgREJHX1BST0JFIDB4MgotI2RlZmluZSBEQkdfVjRMMiAweDQKLSNkZWZpbmUgREJHX1RSQUNFIDB4OAotI2RlZmluZSBEQkdfREFUQSAweDEwCi0jZGVmaW5lIERCR19WNEwyX0NJRCAweDIwCi0jZGVmaW5lIERCR19HU1BDQSAweDQwCi0KLSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKG01NjAyX2RlYnVnICYgbGV2ZWwpICAgICBcCi0JCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18gLCBcCi0JCQkjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogI2RlZmluZSBNNTYwMl9YQl9TRU5TT1JfVFlQRSAweDAwCiAjZGVmaW5lIE01NjAyX1hCX1NFTlNPUl9DVFJMIDB4MDEKICNkZWZpbmUgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9IIDB4MDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggMTlkNWUzNS4uZmQ2Y2UzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKQEAgLTEsNyArMSw3IEBACi0vKgorIC8qCiAgKiBVU0IgRHJpdmVyIGZvciBBTGkgbTU2MDIgYmFzZWQgd2ViY2FtcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMjYsNyArMjYsNiBAQAogaW50IGZvcmNlX3NlbnNvcjsKIGludCBkdW1wX2JyaWRnZTsKIGludCBkdW1wX3NlbnNvcjsKLXVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbTU2MDJfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0MDIsIDB4NTYwMil9LApAQCAtNDgsNyArNDcsNyBAQAogCQkJICAgICAgMSwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKIAkqaTJjX2RhdGEgPSBidWZbMF07CiAKLQlQREVCVUcoREJHX1RSQUNFLCAiUmVhZGluZyBicmlkZ2UgcmVnaXN0ZXIgMHgleCBjb250YWluaW5nIDB4JXgiLAorCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIGJyaWRnZSByZWdpc3RlciAweCV4IGNvbnRhaW5pbmcgMHgleCIsCiAJICAgICAgIGFkZHJlc3MsICppMmNfZGF0YSk7CiAKIAkvKiB1c2JfY29udHJvbF9tc2coLi4uKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCB1cG9uIHN1Y2Nlc3MsCkBAIC02Myw3ICs2Miw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKIAlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CiAKLQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBicmlkZ2UgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIGJyaWRnZSByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCiAJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhKTsKIAogCW1lbWNweShidWYsIGJyaWRnZV91cmJfc2tlbGV0b24sCkBAIC05MSw3ICs5MCw4IEBACiAJCW01NjAyX3JlYWRfYnJpZGdlKHNkLCBpLCAmdmFsKTsKIAkJaW5mbygiQUxpIG01NjAyIGFkZHJlc3MgMHgleCBjb250YWlucyAweCV4IiwgaSwgdmFsKTsKIAl9Ci0JaW5mbygiV2FybmluZzogVGhlIGNhbWVyYSBwcm9iYWJseSB3b24ndCB3b3JrIHVudGlsIGl0J3MgcG93ZXIgY3ljbGVkIik7CisJaW5mbygiV2FybmluZzogVGhlIEFMaSBtNTYwMiB3ZWJjYW0gcHJvYmFibHkgd29uJ3Qgd29yayAiCisJCSJ1bnRpbCBpdCdzIHBvd2VyIGN5Y2xlZCIpOwogfQogCiBzdGF0aWMgaW50IG01NjAyX3Byb2JlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkKQpAQCAtMTM1LDcgKzEzNSw3IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX1RSQUNFLCAiSW5pdGlhbGl6aW5nIEFMaSBtNTYwMiB3ZWJjYW0iKTsKKwlQREVCVUcoRF9DT05GLCAiSW5pdGlhbGl6aW5nIEFMaSBtNTYwMiB3ZWJjYW0iKTsKIAkvKiBSdW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KIAllcnIgPSBzZC0+c2Vuc29yLT5pbml0KHNkKTsKIApAQCAtMTQ2LDE2ICsxNDYsMTggQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCWludCBlcnI7CiAKIAkvKiBTZW5kIHN0YXJ0IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLwogCWNvbnN0IHU4IGJ1ZmZlcls0XSA9IHsweDEzLCAweGY5LCAweDBmLCAweDAxfTsKIAltZW1jcHkoYnVmLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQkweDA0LCAweDQwLCAweDE5LCAweDAwMDAsIGJ1ZiwKLQkJCTQsIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7CisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksIDB4MDAwMCwgYnVmLAorCQkJICAgICAgNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKIAotCVBERUJVRyhEQkdfVjRMMiwgIlRyYW5zZmVyIHN0YXJ0ZWQiKTsKLQlyZXR1cm4gMDsKKwlQREVCVUcoRF9TVFJFQU0sICJUcmFuc2ZlciBzdGFydGVkIik7CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIG01NjAyX3VyYl9jb21wbGV0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC0xNjUsMTQgKzE2NywxNCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWlmIChsZW4gPCA2KSB7Ci0JCVBERUJVRyhEQkdfREFUQSwgIlBhY2tldCBpcyBsZXNzIHRoYW4gNiBieXRlcyIpOworCQlQREVCVUcoRF9QQUNLLCAiUGFja2V0IGlzIGxlc3MgdGhhbiA2IGJ5dGVzIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBGcmFtZSBkZWxpbWl0ZXI6IGZmIHh4IHh4IHh4IGZmIGZmICovCiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzRdID09IDB4ZmYgJiYgZGF0YVs1XSA9PSAweGZmICYmCiAJICAgIGRhdGFbMl0gIT0gc2QtPmZyYW1lX2lkKSB7Ci0JCVBERUJVRyhEQkdfREFUQSwgIkZyYW1lIGRlbGltaXRlciBkZXRlY3RlZCIpOworCQlQREVCVUcoRF9GUkFNLCAiRnJhbWUgZGVsaW1pdGVyIGRldGVjdGVkIik7CiAJCXNkLT5mcmFtZV9pZCA9IGRhdGFbMl07CiAKIAkJLyogUmVtb3ZlIHRoZSBleHRyYSBmbHVmZiBhcHBlbmRlZCBvbiBlYWNoIGhlYWRlciAqLwpAQCAtMTg3LDcgKzE4OSw3IEBACiAJCS8qIENyZWF0ZSBhIG5ldyBmcmFtZSAqLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwogCi0JCVBERUJVRyhEQkdfVjRMMiwgIlN0YXJ0aW5nIG5ldyBmcmFtZSAlZCIsCisJCVBERUJVRyhEX0ZSQU0sICJTdGFydGluZyBuZXcgZnJhbWUgJWQiLAogCQkgICAgICAgc2QtPmZyYW1lX2NvdW50KTsKIAogCX0gZWxzZSB7CkBAIC0xOTgsNyArMjAwLDcgQEAKIAkJbGVuIC09IDQ7CiAKIAkJaWYgKGN1cl9mcmFtZV9sZW4gKyBsZW4gPD0gZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCkgewotCQkJUERFQlVHKERCR19EQVRBLCAiQ29udGludWluZyBmcmFtZSAlZCBjb3B5aW5nICVkIGJ5dGVzIiwKKwkJCVBERUJVRyhEX0ZSQU0sICJDb250aW51aW5nIGZyYW1lICVkIGNvcHlpbmcgJWQgYnl0ZXMiLAogCQkJICAgICAgIHNkLT5mcmFtZV9jb3VudCwgbGVuKTsKIAogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKQEAgLTIzNCw4ICsyMzYsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19HU1BDQSwgIm01NjAyX2NvbmZpZ3VyZSBzdGFydCIpOwotCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCWNhbS0+ZXBhZGRyID0gTTU2MDJfSVNPQ19FTkRQT0lOVF9BRERSOwogCXNkLT5kZXNjID0gJnNkX2Rlc2M7CkBAIC0yNDgsMTEgKzI0OCwxMCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKIAotCVBERUJVRyhEQkdfR1NQQ0EsICJtNTYwMl9jb25maWd1cmUgZW5kIik7CiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JUERFQlVHKERCR19HU1BDQSwgIm01NjAyX2NvbmZpZ3VyZSBmYWlsZWQiKTsKKwlQREVCVUcoRF9FUlIsICJBTGkgbTU2MDIgd2ViY2FtIGZhaWxlZCIpOwogCWNhbS0+Y2FtX21vZGUgPSBOVUxMOwogCWNhbS0+bm1vZGVzID0gMDsKIApAQCAtMjgyLDEzICsyODEsMTMgQEAKIHsKIAlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKIAkJcmV0dXJuIC0xOwotCVBERUJVRyhEX1BST0JFLCAibTU2MDIgbW9kdWxlIHJlZ2lzdGVyZWQiKTsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyB2b2lkIF9fZXhpdCBtb2RfbTU2MDJfZXhpdCh2b2lkKQogewogCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOwotCVBERUJVRyhEX1BST0JFLCAibTU2MDIgbW9kdWxlIGRlcmVnaXN0ZXJlZCIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7CiB9CiAKIG1vZHVsZV9pbml0KG1vZF9tNTYwMl9pbml0KTsKQEAgLTI5Nyw5ICsyOTYsNiBAQAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIG01NjAyX2RlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJ0b2dnbGVzIGRlYnVnIG9uL29mZiIpOwotCiBtb2R1bGVfcGFyYW0oZm9yY2Vfc2Vuc29yLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc2Vuc29yLAogCQkiZm9yY2UgZGV0ZWN0aW9uIG9mIHNlbnNvciwgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwppbmRleCA1NjZkNDkyLi5mYjcwMGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBtdDltMTExIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMTA3LDcgKzEwNyw3IEBACiAJZXJyID0gbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLAogCQkJCSAgZGF0YSwgMik7CiAJKnZhbCA9IGRhdGFbMF0gJiBNVDlNMTExX1JNQl9NSVJST1JfUk9XUzsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0xMTgsNyArMTE4LDcgQEAKIAl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKIAogCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLwogCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKIAkJCQkgIGRhdGEsIDIpOwogCSp2YWwgPSBkYXRhWzBdICYgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFM7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTE1Niw3ICsxNTYsNyBAQAogCXU4IGRhdGFbMl0gPSB7MHgwMCwgMHgwMH07CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwgdmFsKTsKIAogCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLwogCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCSAgICAgICgodG1wICYgKDEgPDwgIDgpKSAqIDIpIHwKIAkgICAgICAgKHRtcCAmIDB4N2YpOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMjIyLDcgKzIyMiw3IEBACiAKIAlkYXRhWzFdID0gKHRtcCAmIDB4ZmYwMCkgPj4gODsKIAlkYXRhWzBdID0gKHRtcCAmIDB4ZmYpOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJ0bXA9JWQsIGRhdGFbMV09JWQsIGRhdGFbMF09JWQiLCB0bXAsCisJUERFQlVHKERfVjRMMiwgInRtcD0lZCwgZGF0YVsxXT0lZCwgZGF0YVswXT0lZCIsIHRtcCwKIAkgICAgICAgZGF0YVsxXSwgZGF0YVswXSk7CiAKIAllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW4gJiYgIWVycjsgaSsrKSB7CiAJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOwogCi0JCVBERUJVRyhEQkdfVFJBQ0UsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCisJCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCiAJCSAgICAgICAiMHgleCBjb250YWlucyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CiAJfQogb3V0OgpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOwogCQlwWzNdID0gaTJjX2RhdGFbaV07CiAJCXAgKz0gNDsKLQkJUERFQlVHKERCR19UUkFDRSwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKaW5kZXggNzlhNWQ4OC4uMzE1MjA5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIG10OW0xMTEgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC04Miw3ICs4Miw2IEBACiAvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOwogZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbTU2MDJfZGVidWc7CiAKIGludCBtdDltMTExX3Byb2JlKHN0cnVjdCBzZCAqc2QpOwogaW50IG10OW0xMTFfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKQEAgLTE1Miw4ICsxNTEsOCBAQAogCQkJLmRlZmF1bHRfdmFsdWUgID0gREVGQVVMVF9HQUlOLAogCQkJLmZsYWdzICAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCiAJCX0sCi0JCS5zZXQgPSBtdDltMTExX3NldF9oZmxpcCwKLQkJLmdldCA9IG10OW0xMTFfZ2V0X2hmbGlwCisJCS5zZXQgPSBtdDltMTExX3NldF9nYWluLAorCQkuZ2V0ID0gbXQ5bTExMV9nZXRfZ2FpbgogCX0KIAl9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwppbmRleCAzMWM1ODk2Li44MzdjN2U0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIG92OTY1MCBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTQwLDcgKzQwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CiAKLQkJUERFQlVHKERCR19UUkFDRSwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKIAkJCQkiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKIAl9CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC03Miw3ICs3Miw3IEBACiAJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOwogCQlwWzNdID0gaTJjX2RhdGFbaV07CiAJCXAgKz0gNDsKLQkJUERFQlVHKERCR19UUkFDRSwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKIAl9CiAKQEAgLTE5OSw3ICsxOTksNyBAQAogCQlnb3RvIG91dDsKIAkqdmFsIHw9IChpMmNfZGF0YSAmIDB4M2YpIDw8IDEwOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZXhwb3N1cmUgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOwogb3V0OgogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMjEwLDcgKzIxMCw3IEBACiAJdTggaTJjX2RhdGE7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgZXhwb3N1cmUgdG8gJWQiLAorCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWQiLAogCSAgICAgICB2YWwgJiAweGZmZmYpOwogCiAJLyogVGhlIDYgTVNCcyAqLwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgfD0gaTJjX2RhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfUkVELCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIHJlZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMjkxLDcgKzI5MSw3IEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCByZWQgZ2FpbiB0byAlZCIsCisJUERFQlVHKERfVjRMMiwgIlNldCByZWQgZ2FpbiB0byAlZCIsCiAJCQkgICAgIHZhbCAmIDB4ZmYpOwogCiAJaTJjX2RhdGEgPSB2YWwgJiAweGZmOwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQkxVRSwgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMzIwLDcgKzMyMCw3IEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBibHVlIGdhaW4gdG8gJWQiLAorCVBERUJVRyhEX1Y0TDIsICJTZXQgYmx1ZSBnYWluIHRvICVkIiwKIAkgICAgICAgdmFsICYgMHhmZik7CiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CkBAIC0zNDAsNyArMzQwLDcgQEAKIAkJKnZhbCA9ICgoaTJjX2RhdGEgJiBPVjk2NTBfSEZMSVApID4+IDUpID8gMCA6IDE7CiAJZWxzZQogCQkqdmFsID0gKGkyY19kYXRhICYgT1Y5NjUwX0hGTElQKSA+PiA1OwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0zNTEsNyArMzUxLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOwogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJCSp2YWwgPSAoKGkyY19kYXRhICYgMHgxMCkgPj4gNCkgPyAwIDogMTsKIAllbHNlCiAJCSp2YWwgPSAoaTJjX2RhdGEgJiAweDEwKSA+PiA0OwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTM5MCw3ICszOTAsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTQyMCw3ICs0MjAsNyBAQAogCiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfR0FJTiwgJmkyY19kYXRhLCAxKTsKIAkqdmFsIHw9IGkyY19kYXRhOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC00MzEsNyArNDMxLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwgJiAweDNmZik7CisJUERFQlVHKERfVjRMMiwgIlNldCBnYWluIHRvICVkIiwgdmFsICYgMHgzZmYpOwogCiAJLyogUmVhZCB0aGUgT1Y5NjUwX1ZSRUYgcmVnaXN0ZXIgZmlyc3QgdG8gYXZvaWQKIAkJY29ycnVwdGluZyB0aGUgVlJFRiBoaWdoIGFuZCBsb3cgYml0cyAqLwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSAoaTJjX2RhdGEgJiBPVjk2NTBfQVdCX0VOKSA+PiAxOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGF1dG8gd2hpdGUgYmFsYW5jZSAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGF1dG8gd2hpdGUgYmFsYW5jZSAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC00NzIsNyArNDcyLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGF1dG8gd2hpdGUgYmFsYW5jZSB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBhdXRvIHdoaXRlIGJhbGFuY2UgdG8gJWQiLCB2YWwpOwogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSAoaTJjX2RhdGEgJiBPVjk2NTBfQUdDX0VOKSA+PiAyOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGF1dG8gZ2FpbiBjb250cm9sICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byBnYWluIGNvbnRyb2wgJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtNTAyLDcgKzUwMiw3IEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBhdXRvIGdhaW4gY29udHJvbCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBhdXRvIGdhaW4gY29udHJvbCB0byAlZCIsIHZhbCk7CiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaAppbmRleCAyZjI5Y2IwLi4wNjU2MzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgb3Y5NjUwIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMTIxLDcgKzEyMSw2IEBACiAvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOwogZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbTU2MDJfZGVidWc7CiAKIGludCBvdjk2NTBfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgb3Y5NjUwX2luaXQoc3RydWN0IHNkICpzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwppbmRleCAwOGMwMTViZC4uZDE3YWM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIHBvMTAzMCBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoYykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTgyLDcgKzgyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CiAKLQkJUERFQlVHKERCR19UUkFDRSwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKIAkJCQkiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKIAl9CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApAQCAtMTg1LDcgKzE4NSw3IEBACiAJCQkJICZpMmNfZGF0YSwgMSk7CiAJKnZhbCB8PSBpMmNfZGF0YTsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJFeHBvc3VyZSByZWFkIGFzICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIkV4cG9zdXJlIHJlYWQgYXMgJWQiLCAqdmFsKTsKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTE5NiwxMCArMTk2LDEwIEBACiAJdTggaTJjX2RhdGE7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCAmIDB4ZmZmZik7CisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCAmIDB4ZmZmZik7CiAKIAlpMmNfZGF0YSA9ICgodmFsICYgMHhmZjAwKSA+PiA4KTsKLQlQREVCVUcoREJHX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gaGlnaCBieXRlIHRvIDB4JXgiLAorCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gaGlnaCBieXRlIHRvIDB4JXgiLAogCSAgICAgICBpMmNfZGF0YSk7CiAKIAllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfSCwKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQlnb3RvIG91dDsKIAogCWkyY19kYXRhID0gKHZhbCAmIDB4ZmYpOwotCVBERUJVRyhEQkdfVjRMMiwgIlNldCBleHBvc3VyZSB0byBsb3cgYnl0ZSB0byAweCV4IiwKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvIGxvdyBieXRlIHRvIDB4JXgiLAogCSAgICAgICBpMmNfZGF0YSk7CiAJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX00sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwpAQCAtMjI2LDcgKzIyNiw3MSBAQAogCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBnbG9iYWwgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdsb2JhbCBnYWluICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAorCQkJCSAmaTJjX2RhdGEsIDEpOworCisJKnZhbCA9IChpMmNfZGF0YSA+PiA3KSAmIDB4MDEgOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgaGZsaXAgJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgaGZsaXAgJWQiLCB2YWwpOworCisJaTJjX2RhdGEgPSAodmFsICYgMHgwMSkgPDwgNzsKKworCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCisJCQkJICAmaTJjX2RhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAorCQkJCSAmaTJjX2RhdGEsIDEpOworCisJKnZhbCA9IChpMmNfZGF0YSA+PiA2KSAmIDB4MDE7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJUERFQlVHKERfVjRMMiwgIlNldCB2ZmxpcCAlZCIsIHZhbCk7CisKKwlpMmNfZGF0YSA9ICh2YWwgJiAweDAxKSA8PCA2OworCisJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19DT05UUk9MMiwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTIzOCw3ICszMDIsNyBAQAogCWludCBlcnI7CiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7Ci0JUERFQlVHKERCR19WNEwyLCAiU2V0IGdsb2JhbCBnYWluIHRvICVkIiwgaTJjX2RhdGEpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZ2xvYmFsIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CiAJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAogCQkJCSAgJmkyY19kYXRhLCAxKTsKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTI1Myw3ICszMTcsNyBAQAogCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19SRURfR0FJTiwKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCByZWQgZ2FpbiAlZCIsICp2YWwpOwogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCkBAIC0yNjQsNyArMzI4LDcgQEAKIAlpbnQgZXJyOwogCiAJaTJjX2RhdGEgPSB2YWwgJiAweGZmOwotCVBERUJVRyhEQkdfVjRMMiwgIlNldCByZWQgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHJlZCBnYWluIHRvICVkIiwgaTJjX2RhdGEpOwogCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfUkVEX0dBSU4sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpAQCAtMjc5LDcgKzM0Myw3IEBACiAJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0JMVUVfR0FJTiwKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgYmx1ZSBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYmx1ZSBnYWluICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTI5MCw3ICszNTQsNyBAQAogCXU4IGkyY19kYXRhOwogCWludCBlcnI7CiAJaTJjX2RhdGEgPSB2YWwgJiAweGZmOwotCVBERUJVRyhEQkdfVjRMMiwgIlNldCBibHVlIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CisJUERFQlVHKERfVjRMMiwgIlNldCBibHVlIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CiAJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19CTFVFX0dBSU4sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaAppbmRleCA2OGYzNGM5Li5hMGI3NWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmgKQEAgLTEsOCArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgcG8xMDMwIHNlbnNvci4KLSAqIFRoaXMgaXMgcHJvYmFibHkgYSBwaXhlbCBwbHVzIHNlbnNvciBidXQgd2UgaGF2ZW4ndCBpZGVudGlmaWVkIGl0IHlldAogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChjKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChjKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMTA5LDEwICsxMDgsMTMgQEAKICNkZWZpbmUgUE8xMDMwX1JFR19ZQ09OVFJBU1QJCTB4NzQKICNkZWZpbmUgUE8xMDMwX1JFR19ZU0FUVVJBVElPTgkJMHg3NQogCisjZGVmaW5lIFBPMTAzMF9IRkxJUAkJCSgxIDw8IDcpCisjZGVmaW5lIFBPMTAzMF9WRkxJUAkJCSgxIDw8IDYpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBQTzEwMzBfR0xPQkFMX0dBSU5fREVGQVVMVAkweDEyCi0jZGVmaW5lIFBPMTAzMF9FWFBPU1VSRV9ERUZBVUxUCQkweGYwZmYKKyNkZWZpbmUgUE8xMDMwX0VYUE9TVVJFX0RFRkFVTFQJCTB4MDA4NQogI2RlZmluZSBQTzEwMzBfQkxVRV9HQUlOX0RFRkFVTFQgCTB4NDAKICNkZWZpbmUgUE8xMDMwX1JFRF9HQUlOX0RFRkFVTFQgCTB4NDAKIApAQCAtMTIxLDcgKzEyMyw2IEBACiAvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIGV4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOwogZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbTU2MDJfZGVidWc7CiAKIGludCBwbzEwMzBfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgcG8xMDMwX2luaXQoc3RydWN0IHNkICpzZCk7CkBAIC0xNDIsNiArMTQzLDEwIEBACiBpbnQgcG8xMDMwX3NldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBpbnQgcG8xMDMwX2dldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIGludCBwbzEwMzBfc2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgcG8xMDMwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHBvMTAzMF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHBvMTAzMF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIAogc3RhdGljIHN0cnVjdCBtNTYwMl9zZW5zb3IgcG8xMDMwID0gewogCS5uYW1lID0gIlBPMTAzMCIsCkBAIC0xNTIsNyArMTU3LDcgQEAKIAkuaW5pdCA9IHBvMTAzMF9pbml0LAogCS5wb3dlcl9kb3duID0gcG8xMDMwX3Bvd2VyX2Rvd24sCiAKLQkubmN0cmxzID0gNCwKKwkubmN0cmxzID0gNiwKIAkuY3RybHMgPSB7CiAJewogCQl7CkBAIC0xNjAsNyArMTY1LDcgQEAKIAkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkJLm5hbWUgCQk9ICJnYWluIiwKIAkJCS5taW5pbXVtIAk9IDB4MDAsCi0JCQkubWF4aW11bSAJPSAweGZmLAorCQkJLm1heGltdW0gCT0gMHg0ZiwKIAkJCS5zdGVwIAkJPSAweDEsCiAJCQkuZGVmYXVsdF92YWx1ZSAJPSBQTzEwMzBfR0xPQkFMX0dBSU5fREVGQVVMVCwKIAkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgpAQCAtMTczLDcgKzE3OCw3IEBACiAJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJCS5uYW1lIAkJPSAiZXhwb3N1cmUiLAogCQkJLm1pbmltdW0gCT0gMHgwMCwKLQkJCS5tYXhpbXVtIAk9IDB4ZmZmZiwKKwkJCS5tYXhpbXVtIAk9IDB4MDJmZiwKIAkJCS5zdGVwIAkJPSAweDEsCiAJCQkuZGVmYXVsdF92YWx1ZSAJPSBQTzEwMzBfRVhQT1NVUkVfREVGQVVMVCwKIAkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgpAQCAtMjA2LDggKzIxMSwzMyBAQAogCQl9LAogCQkuc2V0ID0gcG8xMDMwX3NldF9ibHVlX2JhbGFuY2UsCiAJCS5nZXQgPSBwbzEwMzBfZ2V0X2JsdWVfYmFsYW5jZQorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAsCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X2hmbGlwLAorCQkuZ2V0ID0gcG8xMDMwX2dldF9oZmxpcAorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwLAorCQl9LAorCQkuc2V0ID0gcG8xMDMwX3NldF92ZmxpcCwKKwkJLmdldCA9IHBvMTAzMF9nZXRfdmZsaXAKIAl9CiAJfSwKKwogCS5ubW9kZXMgPSAxLAogCS5tb2RlcyA9IHsKIAl7CkBAIC0zODEsNyArNDExLDcgQEAKIAogCS8qIFNldCB0aGUgeSB3aW5kb3cgdG8gMSAqLwogCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XWV9ILCAweDAwfSwKLQl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1hfTCwgMHgwMX0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dZX0wsIDB4MDF9LAogCiAJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dXSURUSF9ILCAweDAyfSwKIAl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1dJRFRIX0wsIDB4ODd9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKaW5kZXggNjgyMDI1Ni4uMTRiMWVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIHM1azRhYSBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTExNyw3ICsxMTcsNyBAQAogCWZvciAoaSA9IDA7IChpIDwgbGVuKSAmICFlcnI7IGkrKykgewogCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKIAotCQlQREVCVUcoREJHX1RSQUNFLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgogCQkJCSAgIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CiAJfQogb3V0OgpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOwogCQlwWzNdID0gaTJjX2RhdGFbaV07CiAJCXAgKz0gNDsKLQkJUERFQlVHKERCR19UUkFDRSwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKIAl9CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCSp2YWwgPSBkYXRhIDw8IDg7CiAJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfRVhQT1NVUkVfTE8sICZkYXRhLCAxKTsKIAkqdmFsIHw9IGRhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZXhwb3N1cmUgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOwogb3V0OgogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMjU5LDcgKzI1OSw3IEBACiAJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGV4cG9zdXJlIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvICVkIiwgdmFsKTsKIAllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0yODUsNyArMjg1LDcgQEAKIAogCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJKnZhbCA9IChkYXRhICYgUzVLNEFBX1JNX1ZfRkxJUCkgPj4gNzsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOwogCiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKIAllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAogCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJKnZhbCA9IChkYXRhICYgUzVLNEFBX1JNX0hfRkxJUCkgPj4gNjsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTM1Miw3ICszNTIsNyBAQAogCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLAorCVBERUJVRyhEX1Y0TDIsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwKIAkgICAgICAgdmFsKTsKIAllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTM5Nyw3ICszOTcsNyBAQAogCiAJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfR0FJTl8yLCAmZGF0YSwgMSk7CiAJKnZhbCA9IGRhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKIAogb3V0OgogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZ2FpbiB0byAlZCIsIHZhbCk7CiAJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmgKaW5kZXggYmI3ZjdlMy4uZWFlZjY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIHM1azRhYSBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTYzLDcgKzYzLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogaW50IHM1azRhYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKIGludCBzNWs0YWFfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IGI0YjMzYzIuLjg5ODhhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBzNWs4M2Egc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMDEsNyArMTAxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuICYmICFsZW47IGkrKykgewogCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKIAotCQlQREVCVUcoREJHX1RSQUNFLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgogCQkJCSAgIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CiAJfQogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmgKaW5kZXggODMzNzA4ZS4uZWUzZWU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIHM1azgzYSBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTQxLDggKzQxLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKLQogCiBpbnQgczVrODNhX3Byb2JlKHN0cnVjdCBzZCAqc2QpOwogaW50IHM1azgzYV9pbml0KHN0cnVjdCBzZCAqc2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmgKaW5kZXggOTMwZmNhYS4uNjBjOWE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3NlbnNvci5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFVTQiBEcml2ZXIgZm9yIEFMaSBtNTYwMiBiYXNlZCB3ZWJjYW1zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCmluZGV4IGI1NjFmN2MuLmVhYzI0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCkBAIC01MCw3ICs1MCw3IEBACiAKIAlfX3U4IHNlbnNvcjsKICNkZWZpbmUgU0VOU09SX1RBUzUxMzBBIDAKLSNkZWZpbmUgU0VOU09SX09USEVSIDEKKyNkZWZpbmUgU0VOU09SX09NNjgwMiAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0xODgsNyArMTg4LDcgQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXR3aGl0ZWJhbGFuY2UsCiAJIC5nZXQgPSBzZF9nZXR3aGl0ZWJhbGFuY2UKQEAgLTI2MSw2ICsyNjEsNTkgQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKKy8qIHNlbnNvciBzcGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSB7CisJY29uc3QgX191OCBkYXRhMVsyMF07CisJY29uc3QgX191OCBkYXRhMlsxOF07CisJY29uc3QgX191OCBkYXRhM1sxOF07CisJY29uc3QgX191OCBkYXRhNFs0XTsKKwljb25zdCBfX3U4IGRhdGE1WzZdOworCWNvbnN0IF9fdTggc3RyZWFtWzRdOworfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CisgICAgewkJCQkvKiBUQVM1MTMwQSAqLworCS5kYXRhMSA9CisJCXsweGQwLCAweGJiLCAweGQxLCAweDI4LCAweGQyLCAweDEwLCAweGQzLCAweDEwLAorCQkgMHhkNCwgMHhiYiwgMHhkNSwgMHgyOCwgMHhkNiwgMHgxZSwgMHhkNywgMHgyNywKKwkJIDB4ZDgsIDB4YzgsIDB4ZDksIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweGUwLCAweDYwLCAweGUxLCAweGE4LCAweGUyLCAweGUwLCAweGUzLCAweDYwLAorCQkgMHhlNCwgMHhhOCwgMHhlNSwgMHhlMCwgMHhlNiwgMHg2MCwgMHhlNywgMHhhOCwKKwkJIDB4ZTgsIDB4ZTB9LAorCS5kYXRhMyA9CisJCXsweGM3LCAweDYwLCAweGM4LCAweGE4LCAweGM5LCAweGUwLCAweGNhLCAweDYwLAorCQkgMHhjYiwgMHhhOCwgMHhjYywgMHhlMCwgMHhjZCwgMHg2MCwgMHhjZSwgMHhhOCwKKwkJIDB4Y2YsIDB4ZTB9LAorCS5kYXRhNCA9CS8qIEZyZXEgKDUwLzYwSHopLiBTcGxpdHRlZCBmb3IgdGVzdCBwdXJwb3NlICovCisJCXsweDY2LCAweDAwLCAweGE4LCAweGU4fSwKKwkuZGF0YTUgPQorCQl7MHgwYywgMHgwMywgMHhhYiwgMHgxMCwgMHg4MSwgMHgyMH0sCisJLnN0cmVhbSA9CisJCXsweDBiLCAweDA0LCAweDBhLCAweDQwfSwKKyAgICB9LAorICAgIHsJCQkJLyogT002ODAyICovCisJLmRhdGExID0KKwkJezB4ZDAsIDB4YzIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MGYsIDB4ZDMsIDB4MjIsCisJCSAweGQ0LCAweGNkLCAweGQ1LCAweDI3LCAweGQ2LCAweDJjLCAweGQ3LCAweDA2LAorCQkgMHhkOCwgMHhiMywgMHhkOSwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4ZTAsIDB4ODAsIDB4ZTEsIDB4ZmYsIDB4ZTIsIDB4ZmYsIDB4ZTMsIDB4ODAsCisJCSAweGU0LCAweGZmLCAweGU1LCAweGZmLCAweGU2LCAweDgwLCAweGU3LCAweGZmLAorCQkgMHhlOCwgMHhmZn0sCisJLmRhdGEzID0KKwkJezB4YzcsIDB4ODAsIDB4YzgsIDB4ZmYsIDB4YzksIDB4ZmYsIDB4Y2EsIDB4ODAsCisJCSAweGNiLCAweGZmLCAweGNjLCAweGZmLCAweGNkLCAweDgwLCAweGNlLCAweGZmLAorCQkgMHhjZiwgMHhmZn0sCisJLmRhdGE0ID0JLypGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLworCQl7MHg2NiwgMHhjYSwgMHhhOCwgMHhmMCB9LAorCS5kYXRhNSA9CS8qIHRoaXMgY291bGQgYmUgcmVtb3ZlZCBsYXRlciAqLworCQl7MHgwYywgMHgwMywgMHhhYiwgMHgxMywgMHg4MSwgMHgyM30sCisJLnN0cmVhbSA9CisJCXsweDBiLCAweDA0LCAweDBhLCAweDc4fSwKKyAgICB9Cit9OworCiAjZGVmaW5lIE1BWF9FRkZFQ1RTIDcKIC8qIGVhc2lseSBkb25lIGJ5IHNvZnQsIHRoaXMgdGFibGUgY291bGQgYmUgcmVtb3ZlZCwKICAqIGkga2VlcCBpdCBoZXJlIGp1c3QgaW4gY2FzZSAqLwpAQCAtMzY1LDYgKzQxOCw4IEBACiAJe30sCiB9OwogCitzdGF0aWMgX191OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKKwogLyogcmVhZCAxIGJ5dGUgKi8KIHN0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgICBfX3UxNiBpbmRleCkKQEAgLTM4NSwxMiArNDQwLDEyIEBACiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCTAsCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLCBpbmRleCwKIAkJCU5VTEwsIDAsIDUwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X2J1ZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgY29uc3QgX191OCAqYnVmZmVyLCBfX3UxNiBsZW4pCiB7CiAJaWYgKGxlbiA8PSBVU0JfQlVGX1NaKSB7CkBAIC0zOTgsNyArNDUzLDcgQEAKIAkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQkJMCwKLQkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCQkweDAxLCAwLAogCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLCA1MDApOwogCX0gZWxzZSB7CkBAIC00MDksMTQgKzQ2NCwxNSBAQAogCQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCQkwLAotCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJCTB4MDEsIDAsCiAJCQkJdG1wYnVmLCBsZW4sIDUwMCk7CiAJCWtmcmVlKHRtcGJ1Zik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBvdGhlcl9zZW5zb3JfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCisvKiBSZXBvcnRlZCBhcyBPTTY4MDIqLworc3RhdGljIHZvaWQgb202ODAyX3NlbnNvcl9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaTsKIAljb25zdCBfX3U4ICpwOwpAQCAtNDM2LDE5ICs0OTIsMzIgQEAKIAkJMHg5MCwgMHgyNCwKIAkJMHg5MSwgMHhiMiwKIAkJMHg4MiwgMHgzMiwKLQkJMHhmZCwgMHgwMCwKLQkJMHhmZCwgMHgwMSwKIAkJMHhmZCwgMHg0MSwKIAkJMHgwMAkJCS8qIHRhYmxlIGVuZCAqLwogCX07CiAKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfcmVzZXQsIHNpemVvZiBzZW5zb3JfcmVzZXQpOworCW1zbGVlcCg1KTsKKwlpID0gNDsKKwl3aGlsZSAoLS1pIDwgMCkgeworCQlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjApOworCQlpZiAoIShieXRlICYgMHgwMSkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2Myk7CisJaWYgKGJ5dGUgIT0gMHgxNykgeworCQllcnIoIkJhZCBzZW5zb3IgcmVzZXQgJTAyeCIsIGJ5dGUpOworCQkvKiBjb250aW51ZT8gKi8KKwl9CisKIAlwID0gc2Vuc29yX2luaXQ7CiAJd2hpbGUgKCpwICE9IDApIHsKIAkJdmFsWzFdID0gKnArKzsKIAkJdmFsWzNdID0gKnArKzsKIAkJaWYgKCpwID09IDApCiAJCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7Ci0JCWkyY193KGdzcGNhX2RldiwgdmFsLCBzaXplb2YgdmFsKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdmFsLCBzaXplb2YgdmFsKTsKIAkJaSA9IDQ7CiAJCXdoaWxlICgtLWkgPj0gMCkgewogCQkJbXNsZWVwKDE1KTsKQEAgLTQ1Nyw3ICs1MjYsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQotCQkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOworCW1zbGVlcCgxNSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC00ODUsMTIgKzU1NSw3NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdW5zaWduZWQgaW50IGJyaWdodG5lc3M7CisJX191OCBzZXQ2WzRdID0geyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CisKKwlicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CisJaWYgKGJyaWdodG5lc3MgPCA3KSB7CisJCXNldDZbMV0gPSAweDI2OworCQlzZXQ2WzNdID0gMHg3MCAtIGJyaWdodG5lc3MgKiAweDEwOworCX0gZWxzZSB7CisJCXNldDZbM10gPSAweDAwICsgKChicmlnaHRuZXNzIC0gNykgKiAweDEwKTsKKwl9CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZXQ2LCBzaXplb2Ygc2V0Nik7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdW5zaWduZWQgaW50IGNvbnRyYXN0ID0gc2QtPmNvbnRyYXN0OworCV9fdTE2IHJlZ190b193cml0ZTsKKworCWlmIChjb250cmFzdCA8IDcpCisJCXJlZ190b193cml0ZSA9IDB4OGVhOSAtIGNvbnRyYXN0ICogMHgyMDA7CisJZWxzZQorCQlyZWdfdG9fd3JpdGUgPSAweDAwYTkgKyAoY29udHJhc3QgLSA3KSAqIDB4MjAwOworCisJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UxNiByZWdfdG9fd3JpdGU7CisKKwlyZWdfdG9fd3JpdGUgPSAweDgwYmIgKyBzZC0+Y29sb3JzICogMHgxMDA7CS8qIHdhcyAweGMwICovCisJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOworfQorCiBzdGF0aWMgdm9pZCBzZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJUERFQlVHKERfQ09ORiwgIkdhbW1hOiAlZCIsIHNkLT5nYW1tYSk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBnYW1tYV90YWJsZVtzZC0+Z2FtbWFdLCBzaXplb2YgZ2FtbWFfdGFibGVbMF0pOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGdhbW1hX3RhYmxlW3NkLT5nYW1tYV0sIHNpemVvZiBnYW1tYV90YWJsZVswXSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJX191OCB3aGl0ZV9iYWxhbmNlWzhdID0KKwkJezB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4Mzh9OworCisJaWYgKHNkLT53aGl0ZWJhbGFuY2UpCisJCXdoaXRlX2JhbGFuY2VbN10gPSAweDNjOworCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgd2hpdGVfYmFsYW5jZSwgc2l6ZW9mIHdoaXRlX2JhbGFuY2UpOworfQorCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UxNiByZWdfdG9fd3JpdGU7CisKKwlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOworCisJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KQEAgLTUxMSw4ICs2NDQsNiBAQAogCQkJezB4MDgsIDB4MDMsIDB4MDksIDB4MDMsIDB4MTIsIDB4MDR9OwogCXN0YXRpYyBjb25zdCBfX3U4IG4yW10gPQogCQkJezB4MDgsIDB4MDB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXRbXSA9Ci0JCQl7IDB4NjEsIDB4NjgsIDB4NjIsIDB4ZmYsIDB4NjAsIDB4MDcgfTsKIAlzdGF0aWMgY29uc3QgX191OCBuM1tdID0KIAkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKIAlzdGF0aWMgY29uc3QgX191OCBuNFtdID0KQEAgLTUyNSw1MSArNjU2LDI5IEBACiAJCSAweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAogCQkgMHg4NywgMHg0MCwgMHg4OSwgMHgyYiwgMHg4ZCwgMHhmZiwgMHg4MywgMHg0MCwKIAkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODYsIDB4YWYsIDB4NDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ0W10gPSB7Ci0JCTB4ZTAsIDB4NjAsIDB4ZTEsIDB4YTgsIDB4ZTIsIDB4ZTAsIDB4ZTMsIDB4NjAsIDB4ZTQsIDB4YTgsCi0JCTB4ZTUsIDB4ZTAsIDB4ZTYsIDB4NjAsIDB4ZTcsIDB4YTgsCi0JCTB4ZTgsIDB4ZTAKLQl9OwotCS8qIG9qbyBwdWVkZSBzZXIgMHhlNiBlbiB2ZXogZGUgMHhlOSAqLwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQyW10gPSB7Ci0JCTB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsIDB4ZDQsIDB4YmIsCi0JCTB4ZDUsIDB4MjgsIDB4ZDYsIDB4MWUsIDB4ZDcsIDB4MjcsCi0JCTB4ZDgsIDB4YzgsIDB4ZDksIDB4ZmMKLQl9OwotCXN0YXRpYyBjb25zdCBfX3U4IG1pc3NpbmdbXSA9Ci0JCXsgMHg4NywgMHgyMCwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyMCwgMHg4MCwgMHgzOCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQzW10gPSB7Ci0JCTB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsIDB4Y2IsIDB4YTgsCi0JCTB4Y2MsIDB4ZTAsIDB4Y2QsIDB4NjAsIDB4Y2UsIDB4YTgsCi0JCTB4Y2YsIDB4ZTAKLQl9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ1W10gPQotCQkJeyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CS8qIGJyaWdodCAqLwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ3WzRdID0KLQkJCXsgMHg2NiwgMHhjYSwgMHhhOCwgMHhmOCB9OwkvKiA1MC82MCBIeiAqLwogCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ5WzRdID0KIAkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHg3OCB9OwogCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ4WzZdID0KIAkJCXsgMHhhOCwgMHhmMCwgMHhjNiwgMHg4OCwgMHhjMCwgMHgwMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQxMFs2XSA9Ci0JCQl7IDB4MGMsIDB4MDMsIDB4YWIsIDB4MTAsIDB4ODEsIDB4MjAgfTsKIAogCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDYpOwogCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNyk7CiAJaWYgKGJ5dGUgPT0gMHgwOCAmJiB0ZXN0X2J5dGUgPT0gMHgwNykgewotCQlQREVCVUcoRF9DT05GLCAib3RoZXIgc2Vuc29yIik7Ci0JCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1RIRVI7CisJCVBERUJVRyhEX0NPTkYsICJzZW5zb3Igb202ODAyIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT002ODAyOworCX0gZWxzZSBpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDAxKSB7CisJCVBERUJVRyhEX0NPTkYsICJzZW5zb3IgdGFzNTEzMGEiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKIAl9IGVsc2UgewotCQlQREVCVUcoRF9DT05GLCAic2Vuc29yICUwMnggJTAyeCIsIGJ5dGUsIHRlc3RfYnl0ZSk7CisJCVBERUJVRyhEX0NPTkYsICJ1bmtub3duIHNlbnNvciAlMDJ4ICUwMngiLCBieXRlLCB0ZXN0X2J5dGUpOwogCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOwogCX0KIAotCWkyY193KGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7CiAJdGVzdF9ieXRlID0gMDsKIAlpID0gNTsKIAl3aGlsZSAoLS1pID49IDApIHsKLQkJaTJjX3coZ3NwY2FfZGV2LCBuc2V0LCBzaXplb2YgbnNldCk7Ci0JCW1zbGVlcCg1KTsKKwkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKIAkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjMpOwogCQltc2xlZXAoMTAwKTsKIAkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQpAQCAtNTgwLDcgKzY4OSw3IEBACiAvKgkJcmV0dXJuIC1FSU87ICovCiAvKmZpeG1lOiB0ZXN0IC0gY29udGludWUgKi8KIAl9Ci0JaTJjX3coZ3NwY2FfZGV2LCBuMiwgc2l6ZW9mIG4yKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMiwgc2l6ZW9mIG4yKTsKIAogCWkgPSAwOwogCXdoaWxlIChyZWFkX2luZGV4c1tpXSAhPSAweDAwKSB7CkBAIC01OTAsNTggKzY5OSw1MiBAQAogCQlpKys7CiAJfQogCi0JaTJjX3coZ3NwY2FfZGV2LCBuMywgc2l6ZW9mIG4zKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOwogCXJlZ19yKGdzcGNhX2RldiwgMHgwMDgwKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0Miwgc2l6ZW9mIG5zZXQyKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQzLCBzaXplb2YgbnNldDMpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDQsIHNpemVvZiBuc2V0NCk7CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKKwogCXJlZ193KGdzcGNhX2RldiwgMHgzODgwKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDMzOGUpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDUsIHNpemVvZiBuc2V0NSk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwYTkpOworCisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4ODZiYik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDRhYTYpOworCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOwogCi0JaTJjX3coZ3NwY2FfZGV2LCBtaXNzaW5nLCBzaXplb2YgbWlzc2luZyk7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4Nyk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIwODcpOwkvKiB0aWVkIHRvIHdoaXRlIGJhbGFuY2U/ICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDIwODgpOwogCXJlZ193KGdzcGNhX2RldiwgMHgyMDg5KTsKIAotCWkyY193KGdzcGNhX2RldiwgbnNldDcsIHNpemVvZiBuc2V0Nyk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0MTAsIHNpemVvZiBuc2V0MTApOwotCWkyY193KGdzcGNhX2RldiwgbnNldDgsIHNpemVvZiBuc2V0OCk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0OSwgc2l6ZW9mIG5zZXQ5KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ4LCBzaXplb2YgbnNldDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ5LCBzaXplb2YgbnNldDkpOwogCiAJcmVnX3coZ3NwY2FfZGV2LCAweDI4ODApOwotCWkyY193KGdzcGNhX2RldiwgbnNldDIsIHNpemVvZiBuc2V0Mik7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0Mywgc2l6ZW9mIG5zZXQzKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQ0LCBzaXplb2YgbnNldDQpOworCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwotCV9fdTggc2V0Nls0XSA9IHsgMHg4ZiwgMHgyNiwgMHhjMywgMHgwMCB9OwotCi0JYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOwotCWlmIChicmlnaHRuZXNzIDwgNykgewotCQlzZXQ2WzNdID0gMHg3MCAtIGJyaWdodG5lc3MgKiAweDEwOwotCX0gZWxzZSB7Ci0JCXNldDZbMV0gPSAweDI0OwotCQlzZXQ2WzNdID0gMHgwMCArICgoYnJpZ2h0bmVzcyAtIDcpICogMHgxMCk7Ci0JfQotCi0JaTJjX3coZ3NwY2FfZGV2LCBzZXQ2LCBzaXplb2Ygc2V0Nik7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTY1MSwxNCArNzU0LDE1IEBACiAJaWYgKHNkLT5taXJyb3IpCiAJCWZsaXBjbWRbM10gPSAweDAxOwogCi0JaTJjX3coZ3NwY2FfZGV2LCBmbGlwY21kLCBzaXplb2YgZmxpcGNtZCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgZmxpcGNtZCwgc2l6ZW9mIGZsaXBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWkyY193KGdzcGNhX2RldiwgZWZmZWN0c190YWJsZVtzZC0+ZWZmZWN0XSwgc2l6ZW9mIGVmZmVjdHNfdGFibGVbMF0pOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGVmZmVjdHNfdGFibGVbc2QtPmVmZmVjdF0sCisJCQkJc2l6ZW9mIGVmZmVjdHNfdGFibGVbMF0pOwogCWlmIChzZC0+ZWZmZWN0ID09IDEgfHwgc2QtPmVmZmVjdCA9PSA1KSB7CiAJCVBERUJVRyhEX0NPTkYsCiAJCSAgICAgICAiVGhpcyBlZmZlY3QgaGF2ZSBiZWVuIGRpc2FibGVkIGZvciB3ZWJjYW0gXCJzYWZldHlcIiIpOwpAQCAtNjcxLDE5ICs3NzUsNiBAQAogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZmFhNik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JX191OCB3aGl0ZV9iYWxhbmNlWzhdID0KLQkgICAgeyAweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4IH07Ci0KLQlpZiAoc2QtPndoaXRlYmFsYW5jZSA9PSAxKQotCQl3aGl0ZV9iYWxhbmNlWzddID0gMHgzYzsKLQotCWkyY193KGdzcGNhX2Rldiwgd2hpdGVfYmFsYW5jZSwgc2l6ZW9mIHdoaXRlX2JhbGFuY2UpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRsaWdodGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTY5Miw1MiArNzgzLDQ2IEBACiAJaWYgKHNkLT5mcmVxID09IDIpCS8qIDYwaHogKi8KIAkJZnJlcVsxXSA9IDB4MDA7CiAKLQlpMmNfdyhnc3BjYV9kZXYsIGZyZXEsIHNpemVvZiBmcmVxKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBmcmVxLCBzaXplb2YgZnJlcSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKKy8qIElzIHRoaXMgcmVhbGx5IG5lZWRlZD8KKyAqIGkgYWRkZWQgc29tZSBtb2R1bGUgcGFyYW1ldGVycyBmb3IgdGVzdCB3aXRoIHNvbWUgdXNlcnMgKi8KK3N0YXRpYyB2b2lkIHBvbGxfc2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdW5zaWduZWQgaW50IGNvbnRyYXN0ID0gc2QtPmNvbnRyYXN0OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwlzdGF0aWMgY29uc3QgX191OCBwb2xsMVtdID0KKwkJezB4NjcsIDB4MDUsIDB4NjgsIDB4ODEsIDB4NjksIDB4ODAsIDB4NmEsIDB4ODIsCisJCSAweDZiLCAweDY4LCAweDZjLCAweDY5LCAweDcyLCAweGQ5LCAweDczLCAweDM0LAorCQkgMHg3NCwgMHgzMiwgMHg3NSwgMHg5MiwgMHg3NiwgMHgwMCwgMHgwOSwgMHgwMSwKKwkJIDB4NjAsIDB4MTR9OworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwyW10gPQorCQl7MHg2NywgMHgwMiwgMHg2OCwgMHg3MSwgMHg2OSwgMHg3MiwgMHg3MiwgMHhhOSwKKwkJIDB4NzMsIDB4MDIsIDB4NzMsIDB4MDIsIDB4NjAsIDB4MTR9OworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwzW10gPQorCQl7MHg4NywgMHgzZiwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyZH07CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDRbXSA9CisJCXsweGE2LCAweDBhLCAweGVhLCAweGNmLCAweGJlLCAweDI2LCAweGIxLCAweDVmLAorCQkgMHhhMSwgMHhiMSwgMHhkYSwgMHg2YiwgMHhkYiwgMHg5OCwgMHhkZiwgMHgwYywKKwkJIDB4YzIsIDB4ODAsIDB4YzMsIDB4MTB9OwogCi0JaWYgKGNvbnRyYXN0IDwgNykKLQkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gKDB4MjAwICogY29udHJhc3QpOwotCWVsc2UKLQkJcmVnX3RvX3dyaXRlID0gKDB4MDBhOSArICgoY29udHJhc3QgLSA3KSAqIDB4MjAwKSk7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IHJlZ190b193cml0ZTsKLQotCXJlZ190b193cml0ZSA9IDB4YzBiYiArIHNkLT5jb2xvcnMgKiAweDEwMDsKLQlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IHJlZ190b193cml0ZTsKLQotCXJlZ190b193cml0ZSA9IDB4MGFhNiArIDB4MTAwMCAqIHNkLT5zaGFycG5lc3M7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1RBUzUxMzBBKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgIltTZW5zb3IgcmVxdWlyZXMgcG9sbGluZ10iKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDEsIHNpemVvZiBwb2xsMSk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwyLCBzaXplb2YgcG9sbDIpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMywgc2l6ZW9mIHBvbGwzKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDQsIHNpemVvZiBwb2xsNCk7CisJfQogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIG1vZGU7Ci0Jc3RhdGljIGNvbnN0IF9fdTggdDFbXSA9IHsgMHg2NiwgMHgwMCwgMHhhOCwgMHhlOCB9OwogCV9fdTggdDJbXSA9IHsgMHgwNywgMHgwMCwgMHgwZCwgMHg2MCwgMHgwZSwgMHg4MCB9OwogCXN0YXRpYyBjb25zdCBfX3U4IHQzW10gPQogCQl7IDB4YjMsIDB4MDcsIDB4YjQsIDB4MDAsIDB4YjUsIDB4ODgsIDB4YjYsIDB4MDIsIDB4YjcsIDB4MDYsCiAJCSAgMHhiOCwgMHgwMCwgMHhiOSwgMHhlNywgMHhiYSwgMHgwMSB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHQ0W10gPSB7IDB4MGIsIDB4MDQsIDB4MGEsIDB4NDAgfTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0uIHByaXY7CiAJc3dpdGNoIChtb2RlKSB7CkBAIC03NjAsMjUgKzg0NSwyOSBAQAogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9UQVM1MTMwQSkgewogCQlpID0gMDsKIAkJd2hpbGUgKHRhczUxMzBhX3NlbnNvcl9pbml0W2ldWzBdICE9IDApIHsKLQkJCWkyY193KGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbaV0sCisJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKIAkJCQkJIHNpemVvZiB0YXM1MTMwYV9zZW5zb3JfaW5pdFswXSk7CiAJCQlpKys7CiAJCX0KIAkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOwogCQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgKGZvciBtaW5lKSAqLwotCQlpMmNfdyhnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLAorCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFszXSwKIAkJCQkgc2l6ZW9mIHRhczUxMzBhX3NlbnNvcl9pbml0WzBdKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOwogCX0gZWxzZSB7Ci0JCW90aGVyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CisJCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOwogCX0KLQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgIChmb3IgbWluZSkgKi8KLQlpMmNfdyhnc3BjYV9kZXYsIHQxLCBzaXplb2YgdDEpOwotCWkyY193KGdzcGNhX2RldiwgdDIsIHNpemVvZiB0Mik7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQpOwogCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEyKTsKLQlpMmNfdyhnc3BjYV9kZXYsIHQzLCBzaXplb2YgdDMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQyLCBzaXplb2YgdDIpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQzLCBzaXplb2YgdDMpOwogCXJlZ193KGdzcGNhX2RldiwgMHgwMDEzKTsKLQlpMmNfdyhnc3BjYV9kZXYsIHQ0LCBzaXplb2YgdDQpOworCW1zbGVlcCgxNSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSk7CisJcG9sbF9zZW5zb3IoZ3NwY2FfZGV2KTsKKwogCS8qIHJlc3RhcnQgb24gZWFjaCBzdGFydCwganVzdCBpbiBjYXNlLCBzb21ldGltZXMgcmVncyBnb2VzIHdyb25nCiAJICogd2hlbiB1c2luZyBjb250cm9scyBmcm9tIGFwcCAqLwogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKQEAgLTc4Nyw2ICs4NzYsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOworCW1zbGVlcCgyMCk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSk7CisJbXNsZWVwKDIwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDMwOSk7Cit9CisKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwogCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwpAQCAtMTAzNiw2ICsxMTM4LDcgQEAKIAkuY29uZmlnID0gc2RfY29uZmlnLAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKaW5kZXggYmMyOTQzNi4uMzczM2IyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9hdWRpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCmluZGV4IGI3NDU3ZmMuLjFjNDA0ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKQEAgLTYwMCwxMyArNjAwLDE0IEBACiAJc2luY2Ugd2UgbWF5IGdldCBoZXJlIGJlZm9yZSB0aGUgc3RyZWFtIGhhcyBiZWVuIGZ1bGx5IHNldC11cCAqLwogCWlmIChtb2RlID09IE9VVF9ZVVYgJiYgcy0+cV9mdWxsLmxlbmd0aCA9PSAwICYmIGl0di0+ZG1hX2RhdGFfcmVxX3NpemUpIHsKIAkJd2hpbGUgKGNvdW50ID49IGl0di0+ZG1hX2RhdGFfcmVxX3NpemUpIHsKLQkJCWlmICghaXZ0dl95dXZfdWRtYV9zdHJlYW1fZnJhbWUgKGl0diwgKHZvaWQgX191c2VyICopdXNlcl9idWYpKSB7Ci0JCQkJYnl0ZXNfd3JpdHRlbiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOwotCQkJCXVzZXJfYnVmICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7Ci0JCQkJY291bnQgLT0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlyYyA9IGl2dHZfeXV2X3VkbWFfc3RyZWFtX2ZyYW1lKGl0diwgKHZvaWQgX191c2VyICopdXNlcl9idWYpOworCisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKworCQkJYnl0ZXNfd3JpdHRlbiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOworCQkJdXNlcl9idWYgKz0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKKwkJCWNvdW50IC09IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7CiAJCX0KIAkJaWYgKGNvdW50ID09IDApIHsKIAkJCUlWVFZfREVCVUdfSElfRklMRSgiV3JvdGUgJWQgYnl0ZXMgdG8gJXMgKCVkKVxuIiwgYnl0ZXNfd3JpdHRlbiwgcy0+bmFtZSwgcy0+cV9mdWxsLmJ5dGVzdXNlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCA4Njk2NTI3Li4yMDhmYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTUwOSw3ICs1MDksNiBAQAogc3RhdGljIGludCBpdnR2X3RyeV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CiAJczMyIHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CiAJczMyIGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OwogCWludCBmaWVsZCA9IGZtdC0+Zm10LnBpeC5maWVsZDsKQEAgLTUxNyw3ICs1MTYsMjIgQEAKIAogCXcgPSBtaW4odywgNzIwKTsKIAl3ID0gbWF4KHcsIDIpOwotCWggPSBtaW4oaCwgaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MCk7CisJLyogV2h5IGNhbiB0aGUgaGVpZ2h0IGJlIDU3NiBldmVuIHdoZW4gdGhlIG91dHB1dCBpcyBOVFNDPworCisJICAgSW50ZXJuYWxseSB0aGUgYnVmZmVycyBvZiB0aGUgUFZSMzUwIGFyZSBhbHdheXMgc2V0IHRvIDcyMHg1NzYuIFRoZQorCSAgIGRlY29kZWQgdmlkZW8gZnJhbWUgd2lsbCBhbHdheXMgYmUgcGxhY2VkIGluIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YKKwkgICB0aGlzIGJ1ZmZlci4gRm9yIGFueSB2aWRlbyB3aGljaCBpcyBub3QgNzIweDU3NiwgdGhlIGJ1ZmZlciB3aWxsCisJICAgdGhlbiBiZSBjcm9wcGVkIHRvIHJlbW92ZSB0aGUgdW51c2VkIHJpZ2h0IGFuZCBsb3dlciBhcmVhcywgd2l0aAorCSAgIHRoZSByZW1haW5pbmcgaW1hZ2UgYmVpbmcgc2NhbGVkIGJ5IHRoZSBoYXJkd2FyZSB0byBmaXQgdGhlIGRpc3BsYXkKKwkgICBhcmVhLiBUaGUgdmlkZW8gY2FuIGJlIHNjYWxlZCBib3RoIHVwIGFuZCBkb3duLCBzbyBhIDcyMHg0ODAgdmlkZW8KKwkgICBjYW4gYmUgZGlzcGxheWVkIGZ1bGwtc2NyZWVuIG9uIFBBTCBhbmQgYSA3MjB4NTc2IHZpZGVvIGNhbiBiZQorCSAgIGRpc3BsYXllZCB3aXRob3V0IGNyb3BwaW5nIG9uIE5UU0MuCisKKwkgICBOb3RlIHRoYXQgdGhlIHNjYWxpbmcgb25seSBvY2N1cnMgb24gdGhlIHZpZGVvIHN0cmVhbSwgdGhlIG9zZAorCSAgIHJlc29sdXRpb24gaXMgbG9ja2VkIHRvIHRoZSBicm9hZGNhc3Qgc3RhbmRhcmQgYW5kIG5vdCBzY2FsZWQuCisKKwkgICBUaGFua3MgdG8gSWFuIEFybXN0cm9uZyBmb3IgdGhpcyBleHBsYW5hdGlvbi4gKi8KKwloID0gbWluKGgsIDU3Nik7CiAJaCA9IG1heChoLCAyKTsKIAlpZiAoaWQtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKQogCQlmbXQtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCmluZGV4IDJmZDRiNGEuLmJhZTJkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYwpAQCAtMzMsMjcgKzMzLDIwIEBACiAgKiBWMS4xIEdlcmFyZCB2LmQuIEhvcnN0ICBBZGRlZCBzb21lIGRlYnVnb3V0cHV0LCByZXNldCB0aGUgdmlkZW8tc3RhbmRhcmQKICAqLwogCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19LRVJORUxfXwotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSAia3MwMTI3LmgiCi0KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSAia3MwMTI3LmgiCiAKLSNkZWZpbmUgZHByaW50ayAgICAgaWYgKGRlYnVnKSBwcmludGsKLQotLyogaTJjIGlkZW50aWZpY2F0aW9uICovCi0jZGVmaW5lIEkyQ19LUzAxMjdfQURET04gICAweEQ4Ci0jZGVmaW5lIEkyQ19LUzAxMjdfT05CT0FSRCAweERBCitNT0RVTEVfREVTQ1JJUFRJT04oIktTMDEyNyB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiUnlhbiBEcmFrZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjZGVmaW5lIEtTX1RZUEVfVU5LTk9XTgkwCiAjZGVmaW5lIEtTX1RZUEVfMDEyMlMJMQpAQCAtMjA0LDggKzE5Nyw2IEBACiB9OwogCiBzdHJ1Y3Qga3MwMTI3IHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXVuc2lnbmVkIGNoYXIJYWRkcjsKIAlpbnQJCWZvcm1hdF93aWR0aDsKIAlpbnQJCWZvcm1hdF9oZWlnaHQ7CiAJaW50CQljYXBfd2lkdGg7CkBAIC0yMjAsMTYgKzIxMSwxOCBAQAogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgb3V0cHV0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyB1OCByZWdfZGVmYXVsdHNbNjRdOwogCi0KLQogc3RhdGljIHZvaWQgaW5pdF9yZWdfZGVmYXVsdHModm9pZCkKIHsKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkOwogCXU4ICp0YWJsZSA9IHJlZ19kZWZhdWx0czsKIAorCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuOworCWluaXRpYWxpemVkID0gMTsKKwogCXRhYmxlW0tTX0NNREFdICAgICA9IDB4MmM7ICAvKiBWU0U9MCwgQ0NJUiA2MDEsIGF1dG9kZXRlY3Qgc3RhbmRhcmQgKi8KIAl0YWJsZVtLU19DTURCXSAgICAgPSAweDEyOyAgLyogVkFMSUdOPTAsIEFHQyBjb250cm9sIGFuZCBpbnB1dCAqLwogCXRhYmxlW0tTX0NNRENdICAgICA9IDB4MDA7ICAvKiBUZXN0IG9wdGlvbnMgKi8KQEAgLTMwOCw1MCArMzAxLDUzIEBACiAgKiBBbiBleHBsYW5hdGlvbiBmcm9tIGtheW9ya0BtYWlsLnV0ZXhhcy5lZHU6CiAgKgogICogRHVyaW5nIEkyQyByZWFkcywgdGhlIEtTMDEyNyBvbmx5IHNhbXBsZXMgZm9yIGEgc3RvcCBjb25kaXRpb24KLSAqIGR1cmluZyB0aGUgcGxhY2Ugd2hlcmUgdGhlIGFja25vbGVkZ2UgYml0IHNob3VsZCBiZS4gQW55IHN0YW5kYXJkCisgKiBkdXJpbmcgdGhlIHBsYWNlIHdoZXJlIHRoZSBhY2tub3dsZWRnZSBiaXQgc2hvdWxkIGJlLiBBbnkgc3RhbmRhcmQKICAqIEkyQyBpbXBsZW1lbnRhdGlvbiAoY29ycmVjdGx5KSB0aHJvd3MgaW4gYW5vdGhlciBjbG9jayB0cmFuc2l0aW9uCiAgKiBhdCB0aGUgOXRoIGJpdCwgYW5kIHRoZSBLUzAxMjcgd2lsbCBub3QgcmVjb2duaXplIHRoZSBzdG9wIGNvbmRpdGlvbgogICogYW5kIHdpbGwgY29udGludWUgdG8gY2xvY2sgb3V0IGRhdGEuCiAgKgogICogU28gd2UgaGF2ZSB0byBkbyB0aGUgcmVhZCBvdXJzZWxmLiAgQmlnIGRlYWwuCi0JICAgd29ya2Fyb3VuZCBpbiBpMmMtYWxnby1iaXQKKyAqCSAgIHdvcmthcm91bmQgaW4gaTJjLWFsZ28tYml0CiAgKi8KIAogCi1zdGF0aWMgdTgga3MwMTI3X3JlYWQoc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZykKK3N0YXRpYyB1OCBrczAxMjdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggcmVnKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjID0ga3MtPmNsaWVudDsKIAljaGFyIHZhbCA9IDA7CiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7Yy0+YWRkciwgMCwgc2l6ZW9mKHJlZyksICZyZWd9LAotCQl7Yy0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsfX07CisJCXsgYy0+YWRkciwgMCwgc2l6ZW9mKHJlZyksICZyZWcgfSwKKwkJeyBjLT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWwgfQorCX07CiAJaW50IHJldDsKIAogCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKIAlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpCi0JCWRwcmludGsoImtzMDEyN193cml0ZSBlcnJvclxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZWFkIGVycm9yXG4iKTsKIAogCXJldHVybiB2YWw7CiB9CiAKIAotc3RhdGljIHZvaWQga3MwMTI3X3dyaXRlKHN0cnVjdCBrczAxMjcgKmtzLCB1OCByZWcsIHU4IHZhbCkKK3N0YXRpYyB2b2lkIGtzMDEyN193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggcmVnLCB1OCB2YWwpCiB7Ci0JY2hhciBtc2dbXSA9IHtyZWcsIHZhbH07CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJY2hhciBtc2dbXSA9IHsgcmVnLCB2YWwgfTsKIAotCWlmIChpMmNfbWFzdGVyX3NlbmQoa3MtPmNsaWVudCwgbXNnLCBzaXplb2YobXNnKSkgIT0gc2l6ZW9mKG1zZykpCi0JCWRwcmludGsoImtzMDEyN193cml0ZSBlcnJvclxuIik7CisJaWYgKGkyY19tYXN0ZXJfc2VuZChjLCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIndyaXRlIGVycm9yXG4iKTsKIAogCWtzLT5yZWdzW3JlZ10gPSB2YWw7CiB9CiAKIAogLyogZ2VuZXJpYyBiaXQtdHdpZGRsaW5nICovCi1zdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBrczAxMjcgKmtzLCB1OCByZWcsIHU4IGFuZF92LCB1OCBvcl92KQorc3RhdGljIHZvaWQga3MwMTI3X2FuZF9vcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGFuZF92LCB1OCBvcl92KQogeworCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKIAl1OCB2YWwgPSBrcy0+cmVnc1tyZWddOwogCXZhbCA9ICh2YWwgJiBhbmRfdikgfCBvcl92OwotCWtzMDEyN193cml0ZShrcywgcmVnLCB2YWwpOworCWtzMDEyN193cml0ZShjbGllbnQsIHJlZywgdmFsKTsKIH0KIAogCkBAIC0zNTksNzMgKzM1NSw2OSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoga3MwMTI3IHByaXZhdGUgYXBpCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQga3MwMTI3X3Jlc2V0KHN0cnVjdCBrczAxMjcqIGtzKQorc3RhdGljIHZvaWQga3MwMTI3X3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCWludCBpOworCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCXU4ICp0YWJsZSA9IHJlZ19kZWZhdWx0czsKKwlpbnQgaTsKIAogCWtzLT5rc190eXBlID0gS1NfVFlQRV9VTktOT1dOOwogCi0JZHByaW50aygia3MwMTI3OiByZXNldFxuIik7CisJdjRsX2RiZygxLCBkZWJ1ZywgYywgInJlc2V0XG4iKTsKIAltc2xlZXAoMSk7CiAKIAkvKiBpbml0aWFsaXplIGFsbCByZWdpc3RlcnMgdG8ga25vd24gdmFsdWVzICovCiAJLyogKGV4Y2VwdCBTVEFULCAweDIxLCAweDIyLCBURVNUIGFuZCAweDM4LDB4MzkpICovCiAKLQlmb3IoaSA9IDE7IGkgPCAzMzsgaSsrKQotCQlrczAxMjdfd3JpdGUoa3MsIGksIHRhYmxlW2ldKTsKKwlmb3IgKGkgPSAxOyBpIDwgMzM7IGkrKykKKwkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKIAotCWZvcihpID0gMzU7IGkgPCA0MDsgaSsrKQotCQlrczAxMjdfd3JpdGUoa3MsIGksIHRhYmxlW2ldKTsKKwlmb3IgKGkgPSAzNTsgaSA8IDQwOyBpKyspCisJCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CiAKLQlmb3IoaSA9IDQxOyBpIDwgNTY7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGtzLCBpLCB0YWJsZVtpXSk7CisJZm9yIChpID0gNDE7IGkgPCA1NjsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCi0JZm9yKGkgPSA1ODsgaSA8IDY0OyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDU4OyBpIDwgNjQ7IGkrKykKKwkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKIAogCi0JaWYgKChrczAxMjdfcmVhZChrcywgS1NfU1RBVCkgJiAweDgwKSA9PSAwKSB7CisJaWYgKChrczAxMjdfcmVhZChjLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKIAkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjJTOwotCQlkcHJpbnRrKCJrczAxMjc6IGtzMDEyMnMgRm91bmRcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTIycyBmb3VuZFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2goa3MwMTI3X3JlYWQoa3MsIEtTX0NNREUpICYgMHgwZikgewotCisJc3dpdGNoIChrczAxMjdfcmVhZChjLCBLU19DTURFKSAmIDB4MGYpIHsKIAljYXNlIDA6CiAJCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTI3OwotCQlkcHJpbnRrKCJrczAxMjc6IGtzMDEyNyBmb3VuZFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjcgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWNhc2UgOToKIAkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjdCOwotCQlkcHJpbnRrKCJrczAxMjc6IGtzMDEyN0IgUmV2aXNpb24gQSBmb3VuZFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjdCIFJldmlzaW9uIEEgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRwcmludGsoImtzMDEyNzogdW5rbm93biByZXZpc2lvblxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duIHJldmlzaW9uXG4iKTsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgaW50IGtzMDEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQga3MwMTI3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpbnQJCSppYXJnID0gKGludCopYXJnOwotCisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJaW50CQkqaWFyZyA9IChpbnQgKilhcmc7CiAJaW50CQlzdGF0dXM7CiAKIAlpZiAoIWtzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIERFQ09ERVJfSU5JVDoKLQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfSU5JVFxuIik7Ci0JCWtzMDEyN19yZXNldChrcyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0lOSVRcbiIpOworCQlrczAxMjdfcmVzZXQoYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKQEAgLTQzNiwxNjEgKzQyOCwxNjAgQEAKIAkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNDoKIAkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNToKIAkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVCAlZDogIgotCQkJCSJDb21wb3NpdGVcbiIsICppYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX0lOUFVUICVkOiBDb21wb3NpdGVcbiIsICppYXJnKTsKIAkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CiAJCQkvKiBWU0U9MCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwogCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKIAkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwogCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDApOwogCQkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7CiAJCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgICAweDAwLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsCiAJCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfTFVNQV0pfDB4MGMpOwogCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKIAkJCS8qIG1hbnVhbCBjaHJvbWEgY29tYiAuMjUgLjUgLjI1ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUMsIDB4MGYsIDB4OTApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsIDB4OTApOwogCiAJCQkvKiBjaHJvbWEgcGF0aCBkZWxheSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01CLCAweDBmLCAweDkwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLCAweDkwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX0lOUFVUX1NWSURFT18xOgogCQljYXNlIEtTX0lOUFVUX1NWSURFT18yOgogCQljYXNlIEtTX0lOUFVUX1NWSURFT18zOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUICVkOiAiCi0JCQkJIlMtVmlkZW9cbiIsICppYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX0lOUFVUICVkOiBTLVZpZGVvXG4iLCAqaWFyZyk7CiAJCQkvKiBhdXRvZGV0ZWN0IDUwLzYwIEh6ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwogCQkJLyogVlNFPTAgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKIAkJCS8qIHNldCBpbnB1dCBsaW5lICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CiAJCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKIAkJCS8qIGFuYWxvZyBpbnB1dCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKIAkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgMHgwMCwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgMHgwMCwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0xVTUFdKTsKIAkJCS8qIGRpc2FibGUgbHVtYSBjb21iICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwKIAkJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19WRVJUSUFdJjB4ZjApfDB4MDEpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElDLCAweDBmLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUIsIDB4MGYsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7CiAKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBLU19JTlBVVF9ZVVY2NTY6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQgMTU6ICIKLQkJCQkiWVVWNjU2XG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX0lOUFVUIDE1OiBZVVY2NTZcbiIpOwogCQkJaWYgKGtzLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAogCQkJICAgIGtzLT5ub3JtID09IEtTX1NURF9QQUxfTSkKIAkJCQkvKiBmb3JjZSA2MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CisJCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDMpOwogCQkJZWxzZQogCQkJCS8qIGZvcmNlIDUwIEh6ICovCi0JCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKKwkJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMik7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmZiwgMHg0MCk7IC8qIFZTRT0xICovCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmZiwgMHg0MCk7IC8qIFZTRT0xICovCiAJCQkvKiBzZXQgaW5wdXQgbGluZSBhbmQgVkFMSUdOICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAoKmlhcmcgfCAweDQwKSk7CiAJCQkvKiBmcmVlcnVubmluZyBtb2RlLCAqLwogCQkJLyogVFNUR0VOID0gMSBUU1RHRlI9MTEgVFNUR1BIPTAgVFNUR1BLPTAgIFZNRU09MSovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURDLCAgIDB4NzAsIDB4ODcpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4ODcpOwogCQkJLyogZGlnaXRhbCBpbnB1dCwgU1lORElSID0gMCBJTlBTTD0wMSBDTEtESVI9MCBFQVY9MCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01ERCwgICAweDAzLCAweDA4KTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDA4KTsKIAkJCS8qIGRpc2FibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ1RSQUNLLCAweGNmLCAweDMwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDMwKTsKIAkJCS8qIEhZUEsgPTAxIENUUkFQID0gMCBIWUJXUj0wIFBFRD0xIFJHQkg9MSBVTklUPTEgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0xVTUEsICAgMHgwMCwgMHg3MSk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUMsIDB4MGYsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0xVTUEsICAgMHgwMCwgMHg3MSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKIAkJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ09OLCAweDAwLCAweDAwKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0JSVCwgMHgwMCwgMzIpOwkvKiBzcGVjOiAzNCAqLworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DT04sIDB4MDAsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KIAkJCQkvKiBzcGVjOiAyMjkgKGU1KSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfU0FULCAweDAwLCAweGU4KTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0hVRSwgMHgwMCwgMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1NBVCwgMHgwMCwgMHhlOCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0hVRSwgMHgwMCwgMCk7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1VHQUlOLCAweDAwLCAyMzgpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkdBSU4sIDB4MDAsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19VR0FJTiwgMHgwMCwgMjM4KTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkdBSU4sIDB4MDAsIDB4MDApOwogCiAJCQkvKlVPRkY6MHgzMCwgVk9GRjoweDMwLCBUU1RDR049MSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVVZPRkZILCAweDAwLCAweDRmKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1VWT0ZGTCwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGSCwgMHgwMCwgMHg0Zik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGTCwgMHgwMCwgMHgwMCk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUOiAiCi0JCQkJIlVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX0lOUFVUOiBVbmtub3duIGlucHV0ICVkXG4iLCAqaWFyZyk7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIGhhY2s6IENETUxQRiBzb21ldGltZXMgc3BvbnRhbmVvdXNseSBzd2l0Y2hlcyBvbjsgKi8KIAkJLyogZm9yY2UgYmFjayBvZmYgKi8KLQkJa3MwMTI3X3dyaXRlKGtzLCBLU19ERU1PRCwgcmVnX2RlZmF1bHRzW0tTX0RFTU9EXSk7CisJCWtzMDEyN193cml0ZShjLCBLU19ERU1PRCwgcmVnX2RlZmF1bHRzW0tTX0RFTU9EXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJCXN3aXRjaCgqaWFyZykgewogCQljYXNlIEtTX09VVFBVVF9ZVVY2NTZFOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX09VVFBVVDogIgotCQkJCSJPVVRQVVRfWVVWNjU2RSAoTWlzc2luZylcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfT1VUUFVUOiBPVVRQVVRfWVVWNjU2RSAoTWlzc2luZylcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKIAogCQljYXNlIEtTX09VVFBVVF9FWFY6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfT1VUUFVUOiAiCi0JCQkJIk9VVFBVVF9FWFZcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfT0ZNVEEsIDB4ZjAsIDB4MDkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfT1VUUFVUOiBPVVRQVVRfRVhWXG4iKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfT0ZNVEEsIDB4ZjAsIDB4MDkpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIERFQ09ERVJfU0VUX05PUk06IC8vc2FtIFRoaXMgYmxvY2sgbWl4ZXMgb2xkIGFuZCBuZXcgbm9ybSBuYW1lcy4uLgorCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLyogc2FtIFRoaXMgYmxvY2sgbWl4ZXMgb2xkIGFuZCBuZXcgbm9ybSBuYW1lcy4uLiAqLwogCQkvKiBTZXQgdG8gYXV0b21hdGljIFNFQ0FNL0ZzYyBtb2RlICovCi0JCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKKwkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CiAKIAkJa3MtPm5vcm0gPSAqaWFyZzsKLQkJc3dpdGNoKCppYXJnKQotCQl7CisJCXN3aXRjaCAoKmlhcmcpIHsKIAkJLyogdGhpcyBpcyB1bnRlc3RlZCAhISAqLwogCQkvKiBJdCBqdXN0IGRldGVjdHMgUEFMX04vTlRTQ19NIChubyBzcGVjaWFsIGZyZXF1ZW5jaWVzKSAqLwogCQkvKiBBbmQgeW91IGhhdmUgdG8gc2V0IHRoZSBzdGFuZGFyZCBhIHNlY29uZCB0aW1lIGFmdGVyd2FyZHMgKi8KIAkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfTk9STTogQVVUT1xuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKIAogCQkJLyogVGhlIGNoaXAgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0ICovCiAJCQkvKiBiYXNlZCBvbiB0aGUgY3VycmVudCBmaWVsZCByYXRlICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKIAkJCS8qIFRoaXMgaXMgd3JvbmcgZm9yIFBBTCAhIEFzIEkgc2FpZCwgKi8KIAkJCS8qIHlvdSBuZWVkIHRvIHNldCB0aGUgc3RhbmRhcmQgb25jZSBhZ2FpbiAhISAqLwogCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7CkBAIC01OTgsODQgKzU4OSw4NiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfTk9STTogTlRTQ19NXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBOVFNDX01cbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOwogCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7CiAJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBLU19TVERfTlRTQ19OOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIEtTMDEyN19TRVRfU1RBTkRBUkQ6ICIKLQkJCQkiTlRTQ19OIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIktTMDEyN19TRVRfTk9STTogTlRTQ19OIChmaXhtZSlcbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOwogCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7CiAJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBQQUxfTlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfTk9STTogUEFMX05cbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOwogCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7CiAJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBLU19TVERfUEFMX006Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJQQUxfTSAoZml4bWUpXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJLUzAxMjdfU0VUX05PUk06IFBBTF9NIChmaXhtZSlcbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOwogCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7CiAJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIEtTMDEyN19TRVRfU1RBTkRBUkQ6ICIKLQkJCQkiU0VDQU1cbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiS1MwMTI3X1NFVF9OT1JNOiBTRUNBTVxuIik7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAKIAkJCS8qIHNldCB0byBzZWNhbSBhdXRvZGV0ZWN0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CiAJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTArMSk7CiAKIAkJCS8qIGRpZCBpdCBhdXRvZGV0ZWN0PyAqLwotCQkJaWYgKGtzMDEyN19yZWFkKGtzLCBLU19ERU1PRCkgJiAweDQwKQorCQkJaWYgKGtzMDEyN19yZWFkKGMsIEtTX0RFTU9EKSAmIDB4NDApCiAJCQkJYnJlYWs7CiAKIAkJCS8qIGZvcmNlIHRvIHNlY2FtIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0RFTU9ELCAweGYwLCAweDBmKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiAiCi0JCQkJIlVua25vd24gbm9ybSAlZFxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfTk9STTogVW5rbm93biBub3JtICVkXG4iLCAqaWFyZyk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX1BJQ1RVUkUgIgotCQkJIm5vdCB5ZXQgc3VwcG9ydGVkIChmaXhtZSlcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJIkRFQ09ERVJfU0VUX1BJQ1RVUkU6IG5vdCB5ZXQgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0JSSUdIVE5FU1M6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQ09OVFJBU1Q6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSFVFOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkU/Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9TQVRVUkFUSU9OOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQ19NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQ0hST01BX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9QSVhDTEtfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0dBTU1BX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VR0FJTjoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1ZHQUlOOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxZOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxVOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxWOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VZOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VVOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VWOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVlNBTElHTl9NT0RFOgorCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0JSSUdIVE5FU1M6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0NPTlRSQVNUOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8gKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9TQVRVUkFUSU9OOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0NfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ0hST01BX01PREU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfUElYQ0xLX01PREU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VR0FJTjogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WR0FJTjogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxVOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVjogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VVOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVjogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6ICovCiAKIAljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CkBAIC02ODQsMzQgKzY3NywzMiBAQAogCQlpYXJnID0gYXJnOwogCQllbmFibGUgPSAoKmlhcmcgIT0gMCk7CiAJCWlmIChlbmFibGUpIHsKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCAiCi0JCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb24gIgotCQkJCQkiKCVkKVxuIiwgZW5hYmxlKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvblxuIik7CiAJCQkvKiBBbGwgb3V0cHV0IHBpbnMgb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX09GTVRBLCAweGNmLCAweDMwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfT0ZNVEEsIDB4Y2YsIDB4MzApOwogCQkJLyogT2JleSB0aGUgT0VOIHBpbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NERU0sIDB4N2YsIDB4MDApOwogCQl9IGVsc2UgewotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kICIKLQkJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvZmYgIgotCQkJCQkiKCVkKVxuIiwgZW5hYmxlKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvZmZcbiIpOwogCQkJLyogVmlkZW8gb3V0cHV0IHBpbnMgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKIAkJCS8qIElnbm9yZSB0aGUgT0VOIHBpbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NERU0sIDB4N2YsIDB4ODApOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX09VVFBVVF9NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfV0lEVEg6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9IU0NBTEU6CisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfT1VUUFVUX01PREU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfV0lEVEg6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSEVJR0hUOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0hTQ0FMRTogKi8KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIkRFQ09ERVJfR0VUX1NUQVRVU1xuIik7CiAJCSppYXJnID0gMDsKLQkJc3RhdHVzID0ga3MwMTI3X3JlYWQoa3MsIEtTX1NUQVQpOworCQlzdGF0dXMgPSBrczAxMjdfcmVhZChjLCBLU19TVEFUKTsKIAkJaWYgKCEoc3RhdHVzICYgMHgyMCkpCQkgLyogTk9WSUQgbm90IHNldCAqLwogCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19HT09EKTsKIAkJaWYgKChzdGF0dXMgJiAweDAxKSkJCSAgICAgIC8qIENMT0NLIHNldCAqLwpAQCAtNzIyLDEyNCArNzEzLDgxIEBACiAJCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX05UU0MpOwogCQlicmVhazsKIAotCS8vQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZAorCS8qIENhdGNoIGFueSB1bmtub3duIGNvbW1hbmQgKi8KIAlkZWZhdWx0OgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgdW5rbm93bjogJTA0WFxuIiwgY21kKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInVua25vd246IDB4JTA4eFxuIiwgY21kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCiAKLQotCi1zdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBrczAxMjdfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotCi0KLQogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7STJDX0tTMDEyN19BRERPTj4+MSwKLQkJCQkgICAgICAgSTJDX0tTMDEyN19PTkJPQVJEPj4xLCBJMkNfQ0xJRU5UX0VORH07Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcHJvYmVbMl0gPQl7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmVbMl0gPSAJe0kyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORH07Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQlub3JtYWxfaTJjLAotCXByb2JlLAotCWlnbm9yZSwKKyNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKKyNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwlJMkNfS1MwMTI3X0FERE9OID4+IDEsCisJSTJDX0tTMDEyN19PTkJPQVJEID4+IDEsCisJSTJDX0NMSUVOVF9FTkQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2tzMDEyNyA9IHsKLQkuZHJpdmVyLm5hbWUgPSAia3MwMTI3IiwKLQkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfS1MwMTI3LAotCS5hdHRhY2hfYWRhcHRlciA9IGtzMDEyN19wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCAgPSBrczAxMjdfZGV0YWNoLAotCS5jb21tYW5kICAgICAgICA9IGtzMDEyN19jb21tYW5kCi19OworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBrczAxMjdfY2xpZW50X3RtcGwgPQotewotCS5uYW1lID0gIihrczAxMjcgdW5zZXQpIiwKLQkuYWRkciA9IDAsCi0JLmFkYXB0ZXIgPSBOVUxMLAotCS5kcml2ZXIgPSAmaTJjX2RyaXZlcl9rczAxMjcsCi19OwotCi1zdGF0aWMgaW50IGtzMDEyN19mb3VuZF9wcm9jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmMsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qga3MwMTI3ICprczsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGNsaWVudCwgJmtzMDEyN19jbGllbnRfdG1wbCwgc2l6ZW9mKCpjbGllbnQpKTsKKwl2NGxfaW5mbyhjLCAiJXMgY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJYy0+YWRkciA9PSAoSTJDX0tTMDEyN19BRERPTiA+PiAxKSA/ICJhZGRvbiIgOiAib24tYm9hcmQiLAorCQljLT5hZGRyIDw8IDEsIGMtPmFkYXB0ZXItPm5hbWUpOwogCiAJa3MgPSBremFsbG9jKHNpemVvZigqa3MpLCBHRlBfS0VSTkVMKTsKLQlpZiAoa3MgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChrcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBrcyk7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmFkZHIgPSBhZGRyOwotCXNwcmludGYoY2xpZW50LT5uYW1lLCAia3MwMTI3LSUwMngiLCBhZGFwdGVyLT5pZCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGMsIGtzKTsKIAotCWtzLT5jbGllbnQgPSBjbGllbnQ7Ci0Ja3MtPmFkZHIgPSBhZGRyOwogCWtzLT5rc190eXBlID0gS1NfVFlQRV9VTktOT1dOOwogCiAJLyogcG93ZXIgdXAgKi8KLQlrczAxMjdfd3JpdGUoa3MsIEtTX0NNREEsIDB4MmMpOworCWluaXRfcmVnX2RlZmF1bHRzKCk7CisJa3MwMTI3X3dyaXRlKGMsIEtTX0NNREEsIDB4MmMpOwogCW1kZWxheSgxMCk7CiAKIAkvKiByZXNldCB0aGUgZGV2aWNlICovCi0Ja3MwMTI3X3Jlc2V0KGtzKTsKLQlwcmludGsoS0VSTl9JTkZPICJrczAxMjc6IGF0dGFjaDogJXMgdmlkZW8gZGVjb2RlclxuIiwKLQkgICAgICAga3MtPmFkZHI9PShJMkNfS1MwMTI3X0FERE9OPj4xKSA/ICJhZGRvbiIgOiAib24tYm9hcmQiKTsKLQotCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJa3MwMTI3X3Jlc2V0KGMpOwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQga3MwMTI3X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKIHsKLQlpZiAoYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBrczAxMjdfZm91bmRfcHJvYyk7Ci0JcmV0dXJuIDA7Ci19CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAKLXN0YXRpYyBpbnQga3MwMTI3X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJa3MwMTI3X3dyaXRlKGMsIEtTX09GTVRBLCAweDIwKTsgLyogdHJpc3RhdGUgKi8KKwlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyB8IDB4ODApOyAvKiBwb3dlciBkb3duICovCiAKLQlrczAxMjdfd3JpdGUoa3MsIEtTX09GTVRBLCAweDIwKTsgLyp0cmlzdGF0ZSovCi0Ja3MwMTI3X3dyaXRlKGtzLCBLU19DTURBLCAweDJjIHwgMHg4MCk7IC8qIHBvd2VyIGRvd24gKi8KLQotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CiAJa2ZyZWUoa3MpOwotCWtmcmVlKGNsaWVudCk7Ci0KLQlkcHJpbnRrKCJrczAxMjc6IGRldGFjaFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBfX2RldmluaXQga3MwMTI3X2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IGtzMDEyN19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWluaXRfcmVnX2RlZmF1bHRzKCk7Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX2tzMDEyNyk7CisJcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjc7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBrczAxMjdfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9rczAxMjcpOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGtzMDEyN19pZFtdID0geworCXsgImtzMDEyNyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywga3MwMTI3X2lkKTsKIAotCi1tb2R1bGVfaW5pdChrczAxMjdfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoa3MwMTI3X2NsZWFudXBfbW9kdWxlKTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJrczAxMjciLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9LUzAxMjcsCisJLmNvbW1hbmQgPSBrczAxMjdfY29tbWFuZCwKKwkucHJvYmUgPSBrczAxMjdfcHJvYmUsCisJLnJlbW92ZSA9IGtzMDEyN19yZW1vdmUsCisJLmxlZ2FjeV9wcm9iZSA9IGtzMDEyN19sZWdhY3lfcHJvYmUsCisJLmlkX3RhYmxlID0ga3MwMTI3X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYwppbmRleCA5MzVkNzNkLi4yMTBmMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCkBAIC0xMDk4LDkgKzEwOTgsMTAgQEAKIAkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDIpOwogCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMCk7CiAJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQl3YXJuKCJzbmFwc2hvdCByZXNldCBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJzbmFwc2hvdCByZXNldCBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKVxuIik7CiAJfSBlbHNlIHsKLQkJZXJyKCJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCWRldl9lcnIoJm92LT5kZXYtPmRldiwgImNsZWFyIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGVcbiIpOwogCX0KIH0KIApAQCAtMTExNSwxNCArMTExNiwxNiBAQAogCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkgewogCQlyZXQgPSByZWdfcihvdiwgUjUxeF9TWVNfU05BUCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQllcnIoIkVycm9yIGNoZWNraW5nIHNuc3BzaG90IHN0YXR1cyAoJWQpIiwgcmV0KTsKKwkJCWRldl9lcnIoJm92LT5kZXYtPmRldiwKKwkJCQkiRXJyb3IgY2hlY2tpbmcgc25zcHNob3Qgc3RhdHVzICglZClcbiIsIHJldCk7CiAJCX0gZWxzZSBpZiAocmV0ICYgMHgwOCkgewogCQkJc3RhdHVzID0gMTsKIAkJfQogCX0gZWxzZSBpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKLQkJd2Fybigic25hcHNob3QgY2hlY2sgbm90IHN1cHBvcnRlZCB5ZXQgb24gT1Y1MTgoKykiKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAic25hcHNob3QgY2hlY2sgbm90IHN1cHBvcnRlZCB5ZXQgb24gT1Y1MTgoKylcbiIpOwogCX0gZWxzZSB7Ci0JCWVycigiY2hlY2sgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCQlkZXZfZXJyKCZvdi0+ZGV2LT5kZXYsICJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlXG4iKTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTIxNyw3ICs1MjIwLDggQEAKIAlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCiAJCXJlZ193KG92LCAweDExLCAweDAwKTsKIAllbHNlCi0JCXdhcm4oIlNBQTcxMTFBIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggT1Y1MTgvT1Y1MTgrIik7CisJCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCisJCQkgIlNBQTcxMTFBIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggT1Y1MTgvT1Y1MTgrXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTQ1Niw3ICs1NDYwLDggQEAKIAkgKiByZXF1aXJlZC4gT1Y1MTggaGFzIG5vIHVuY29tcHJlc3NlZCBtb2RlLCB0byBzYXZlIFJBTS4gKi8KIAlpZiAoIWR1bXBwaXggJiYgIW92LT5jb21wcmVzcykgewogCQlvdi0+Y29tcHJlc3MgPSAxOwotCQl3YXJuKCJDb21wcmVzc2lvbiByZXF1aXJlZCB3aXRoIE9WNTE4Li4uZW5hYmxpbmciKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAiQ29tcHJlc3Npb24gcmVxdWlyZWQgd2l0aCBPVjUxOC4uLmVuYWJsaW5nXG4iKTsKIAl9CiAKIAlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKaW5kZXggNGFhODJiMy4uYWRmMmJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKQEAgLTMxLDM2ICszMSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiUGF1bGluZSBNaWRkZWxpbmsiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCi0jZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUgU0FBNzExMF9NQVhfSU5QVVQJOQkvKiA2IENWQlMsIDMgU1ZIUyAqLwogI2RlZmluZSBTQUE3MTEwX01BWF9PVVRQVVQJMAkvKiBpdHMgYSBkZWNvZGVyIG9ubHkgKi8KIAotI2RlZmluZQlJMkNfU0FBNzExMAkJMHg5QwkvKiBvciAweDlFICovCi0KICNkZWZpbmUgU0FBNzExMF9OUl9SRUcJCTB4MzUKIAogc3RydWN0IHNhYTcxMTAgewpAQCAtODEsMTAgKzY5LDcgQEAKIC8qIEkyQyBzdXBwb3J0IGZ1bmN0aW9ucwkJCQkJCSAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50Ci1zYWE3MTEwX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW50IHNhYTcxMTBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC05MiwxMCArNzcsNyBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnID0gKmRhdGE7CQkvKiBmaXJzdCByZWdpc3RlciB0byB3cml0ZSB0byAqLwpAQCAtMTE1LDggKzk3LDggQEAKIAkJbWVtY3B5KGRlY29kZXItPnJlZyArIHJlZywgZGF0YSArIDEsIGxlbiAtIDEpOwogCX0gZWxzZSB7CiAJCWZvciAoKytkYXRhLCAtLWxlbjsgbGVuOyBsZW4tLSkgewotCQkJaWYgKChyZXQgPSBzYWE3MTEwX3dyaXRlKGNsaWVudCwgcmVnKyssCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxMTBfd3JpdGUoY2xpZW50LCByZWcrKywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0KQEAgLTEyNCw4ICsxMDYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTEwX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTEwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogfQpAQCAtMTM4LDkgKzExOSw3IEBACiAjZGVmaW5lIEZSRVNQXzA2SF9TVklERU8gMHg4MwkvLzB4QzAKIAogCi1zdGF0aWMgaW50Ci1zYWE3MTEwX3NlbG11eCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJaW50ICAgICAgICAgICAgICAgIGNoYW4pCitzdGF0aWMgaW50IHNhYTcxMTBfc2VsbXV4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBjaGFuKQogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVzWzldWzhdID0gewogCQkvKiBtb2RlIDAgKi8KQEAgLTE5Nyw4ICsxNzYsNyBAQAogCS8qIDB4MzAgKi8gMHg0NCwgMHg3MSwgMHgwMiwgMHg4QywgMHgwMgogfTsKIAotc3RhdGljIGludAotZGV0ZXJtaW5lX25vcm0gKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGRldGVybWluZV9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKQEAgLTIxMiwyOSArMTkwLDIzIEBACiAJZmluaXNoX3dhaXQoJmRlY29kZXItPndxLCAmd2FpdCk7CiAJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7CiAJaWYgKHN0YXR1cyAmIDB4NDApIHsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChubyBzaWduYWwpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuIGRlY29kZXItPm5vcm07CS8vIG5vIGNoYW5nZQogCX0KIAlpZiAoKHN0YXR1cyAmIDMpID09IDApIHsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MDYsIDB4ODMpOwogCQlpZiAoc3RhdHVzICYgMHgyMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogc3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKE5UU0Mvbm8gY29sb3IpXG4iLCBzdGF0dXMpOwogCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4ODEpOwogCQkJcmV0dXJuIFZJREVPX01PREVfTlRTQzsKIAkJfQotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKFBBTC9ubyBjb2xvcilcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwvbm8gY29sb3IpXG4iLCBzdGF0dXMpOwogCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg5QSk7CiAJCXJldHVybiBWSURFT19NT0RFX1BBTDsKIAl9CiAJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDA2LDB4MDMpOwogCWlmIChzdGF0dXMgJiAweDIwKSB7CS8qIDYwSHogKi8KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKE5UU0MpXG4iLCBzdGF0dXMpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDUwKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4MkMpOwpAQCAtMjU0LDEzICsyMjYsMTEgQEAKIAogCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwogCWlmICgoc3RhdHVzICYgMHgwMykgPT0gMHgwMSkgewotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKFNFQ0FNKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFNFQ0FNKVxuIiwgc3RhdHVzKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODcpOwogCQlyZXR1cm4gVklERU9fTU9ERV9TRUNBTTsKIAl9Ci0JZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQlzdGF0dXMpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFBBTClcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIFZJREVPX01PREVfUEFMOwogfQogCkBAIC0yODYsOCArMjU2LDggQEAKIAkJICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfCBWSURFT19ERUNPREVSX0FVVE87CiAJCWRjLT5pbnB1dHMgPSBTQUE3MTEwX01BWF9JTlBVVDsKIAkJZGMtPm91dHB1dHMgPSBTQUE3MTEwX01BWF9PVVRQVVQ7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CkBAIC0yOTUsOCArMjY1LDggQEAKIAkJaW50IHJlcyA9IDA7CiAKIAkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCBub3JtPSVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzLCBkZWNvZGVyLT5ub3JtKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCBub3JtPSVkXG4iLAorCQkJICAgICAgIHN0YXR1cywgZGVjb2Rlci0+bm9ybSk7CiAJCWlmICghKHN0YXR1cyAmIDB4NDApKQogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CiAJCWlmIChzdGF0dXMgJiAweDAzKQpAQCAtMzE0LDggKzI4NCw4IEBACiAJCQlicmVhazsKIAkJfQogCQkqKGludCAqKSBhcmcgPSByZXM7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX05PUk06CiAJCXYgPSAqKGludCAqKSBhcmc7CkBAIC0zMjgsMzQgKzI5OCwyNCBAQAogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDUwKTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7CiAJCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg4MSk7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byBOVFNDXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBOVFNDXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVklERU9fTU9ERV9QQUw6CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7CiAJCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg5QSk7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byBQQUxcbiIsCi0JCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFBBTFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFZJREVPX01PREVfU0VDQU06CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODcpOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7CiAJCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg5QSk7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0lORk8KLQkJCQkJIiVzOiBzd2l0Y2hlZCB0byBTRUNBTVxuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gU0VDQU1cbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0lORk8KLQkJCQkJIiVzOiBUViBzdGFuZGFyZCBkZXRlY3Rpb24uLi5cbiIsCi0JCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIEFVVE9cbiIpOwogCQkJCWRlY29kZXItPm5vcm0gPSBkZXRlcm1pbmVfbm9ybShjbGllbnQpOwogCQkJCSooaW50ICopIGFyZyA9IGRlY29kZXItPm5vcm07CiAJCQkJYnJlYWs7CkBAIC0zNjgsMTUgKzMyOCwxMiBAQAogCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CiAJCXYgPSAqKGludCAqKSBhcmc7CiAJCWlmICh2IDwgMCB8fCB2ID4gU0FBNzExMF9NQVhfSU5QVVQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8gIiVzOiBpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIHYpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwgdik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gdikgewogCQkJc2FhNzExMF9zZWxtdXgoY2xpZW50LCB2KTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gaW5wdXQ9JWRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgdik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBpbnB1dD0lZFxuIiwgdik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTM5Miw4ICszNDksNyBAQAogCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IHYpIHsKIAkJCWRlY29kZXItPmVuYWJsZSA9IHY7CiAJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRSwgdiA/IDB4MTggOiAweDgwKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogWVVWICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJCXYgPyAib24iIDogIm9mZiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiWVVWICVzXG4iLCB2ID8gIm9uIiA6ICJvZmYiKTsKIAkJfQogCQlicmVhazsKIApAQCAtNDIzLDIzICszNzksMjMgQEAKIAkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA3LAogCQkJCSAgICAgIChkZWNvZGVyLT5odWUgPj4gOCkgLSAxMjgpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRFVNUDoKKwkJaWYgKCFkZWJ1ZykKKwkJCWJyZWFrOwogCQlmb3IgKHYgPSAwOyB2IDwgU0FBNzExMF9OUl9SRUc7IHYgKz0gMTYpIHsKIAkJCWludCBqOwotCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogJTAyeDoiLCBJMkNfTkFNRShjbGllbnQpLAotCQkJCXYpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJTAyeDoiLCB2KTsKIAkJCWZvciAoaiA9IDA7IGogPCAxNiAmJiB2ICsgaiA8IFNBQTcxMTBfTlJfUkVHOyBqKyspCi0JCQkJZHByaW50aygxLCAiICUwMngiLCBkZWNvZGVyLT5yZWdbdiArIGpdKTsKLQkJCWRwcmludGsoMSwgIlxuIik7CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBkZWNvZGVyLT5yZWdbdiArIGpdKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAidW5rbm93biBzYWE3MTEwX2NvbW1hbmQ/PyglZClcbiIsCi0JCQljbWQpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ1bmtub3duIGNvbW1hbmQgJTA4eFxuIiwgY21kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtNDUxLDU1ICs0MDcsMjggQEAKICAqIEdlbmVyaWMgaTJjIHByb2JlCiAgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JSTJDX1NBQTcxMTAgPj4gMSwKLQkoSTJDX1NBQTcxMTAgPj4gMSkgKyAxLAotCUkyQ19DTElFTlRfRU5ECi19OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDljID4+IDEsIDB4OWUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExMDsKLQotc3RhdGljIGludAotc2FhNzExMF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IHNhYTcxMTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyOwogCWludCBydjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTEwLmM6IGRldGVjdGluZyBzYWE3MTEwIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eQotCSAgICAoYWRhcHRlciwKLQkgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMTA7Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAic2FhNzExMCIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTEwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZWNvZGVyKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKCFkZWNvZGVyKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwpAQCAtNTEwLDE4ICs0MzksMTAgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZWNvZGVyLT53cSk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQlydiA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKHJ2KSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gcnY7Ci0JfQotCiAJcnYgPSBzYWE3MTEwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKLQlpZiAocnYgPCAwKQotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgcnYpOwotCWVsc2UgeworCWlmIChydiA8IDApIHsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBzdGF0dXMgJWRcbiIsIHJ2KTsKKwl9IGVsc2UgewogCQlpbnQgdmVyLCBzdGF0dXM7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCAweDEwKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MGUsIDB4MTgpOwpAQCAtNTMwLDEwICs0NTEsOCBAQAogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHgwNik7CiAJCS8vbWRlbGF5KDE1MCk7CiAJCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IFNBQTcxMTBBIHZlcnNpb24gJXggYXQgMHglMDJ4LCBzdGF0dXM9MHglMDJ4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgdmVyLCBjbGllbnQtPmFkZHIgPDwgMSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAidmVyc2lvbiAleCwgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCSAgICAgICB2ZXIsIHN0YXR1cyk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7CkBAIC01NDcsNTggKzQ2NiwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTEwX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHNhYTcxMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTAuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMTBfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTBfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTEwID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNhYTcxMTAiLAotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKLQotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxMTBfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE3MTEwX2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSBzYWE3MTEwX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzExMF9pZFtdID0geworCXsgInNhYTcxMTAiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTBfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotc2FhNzExMF9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTEwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1zYWE3MTEwX2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExMCk7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTcxMTBfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYWE3MTEwX2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTcxMTAiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAorCS5jb21tYW5kID0gc2FhNzExMF9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxMTBfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxMTBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxMTBfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYwppbmRleCA5NmMzZDQzLi5hNDczOGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYwpAQCAtMjgsNDMgKzI4LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgU0FBNzExMV9OUl9SRUcJCTB4MTgKQEAgLTc3LDE0ICs1OCw5IEBACiAJaW50IGVuYWJsZTsKIH07CiAKLSNkZWZpbmUgICBJMkNfU0FBNzExMSAgICAgICAgMHg0OAotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExMV93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTkyLDggKzY4LDcgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNhYTcxMTFfd3JpdGVfaWZfY2hhbmdlZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIHNhYTcxMTFfd3JpdGVfaWZfY2hhbmdlZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTEwMywxMCArNzgsNyBAQAogCX0KIH0KIAotc3RhdGljIGludAotc2FhNzExMV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTExX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xMjcsMTggKzk5LDE3IEBACiAJCQkJICAgIGRlY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBzYWE3MTExX3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTExX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTE0NywxNiArMTE4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMV9pbml0X2RlY29kZXIgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCkKK3N0YXRpYyBpbnQgc2FhNzExMV9pbml0X2RlY29kZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCkKIHsKIAlyZXR1cm4gc2FhNzExMV93cml0ZV9ibG9jayhjbGllbnQsIGluaXQtPmRhdGEsIGluaXQtPmxlbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTExX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CkBAIC0yMDMsMjggKzE3MSwyMyBAQAogCTB4MTcsIDB4MDAsCQkvKiAxNyAtIFZCSSAqLwogfTsKIAotc3RhdGljIGludAotc2FhNzExMV9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxMTFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJYnJlYWs7CiAJY2FzZSBERUNPREVSX0lOSVQ6CiAJewogCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0ID0gYXJnOworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKKwogCQlpZiAoTlVMTCAhPSBpbml0KQogCQkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgaW5pdCk7Ci0JCWVsc2UgewotCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7Ci0JCQl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7Ci0JCQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMTFfaTJjX2luaXQpOwotCQkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7Ci0JCX0KKwkJdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OworCQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMTFfaTJjX2luaXQpOworCQlyZXR1cm4gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKIAl9CiAKIAljYXNlIERFQ09ERVJfRFVNUDoKQEAgLTIzNCwxNSArMTk3LDE1IEBACiAJCWZvciAoaSA9IDA7IGkgPCBTQUE3MTExX05SX1JFRzsgaSArPSAxNikgewogCQkJaW50IGo7CiAKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJTAzeCIsIEkyQ19OQU1FKGNsaWVudCksIGkpOworCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwogCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIGkgKyBqIDwgU0FBNzExMV9OUl9SRUc7ICsraikgewotCQkJCXByaW50aygiICUwMngiLAorCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwKIAkJCQkgICAgICAgc2FhNzExMV9yZWFkKGNsaWVudCwgaSArIGopKTsKIAkJCX0KLQkJCXByaW50aygiXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgogCXsKQEAgLTI1NSw4ICsyMTgsOCBAQAogCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gODsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTI2NSw4ICsyMjgsNyBAQAogCQlpbnQgcmVzOwogCiAJCXN0YXR1cyA9IHNhYTcxMTFfcmVhZChjbGllbnQsIDB4MWYpOwotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzIHN0YXR1czogMHglMDJ4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7CiAJCXJlcyA9IDA7CiAJCWlmICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApIHsKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwpAQCAtMjk0LDggKzI1Niw4IEBACiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7CiAJCX0KIAkJKmlhcmcgPSByZXM7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0dQSU86CiAJewpAQCAtMzYyLDggKzMyNCw4IEBACiAKIAkJfQogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTM4Nyw4ICszNDksOCBAQAogCQkJCQkJCSAgICAgMykgPyAweDgwIDoKIAkJCQkJCQkgICAgMCkpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAl7CkBAIC0zOTgsOCArMzYwLDggQEAKIAkJaWYgKCppYXJnICE9IDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CkBAIC00MzksOCArNDAxLDggQEAKIAkJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDExXSAmIDB4ZjMpKTsKIAkJCX0KIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgogCXsKQEAgLTQ1NCw4ICs0MTYsOCBAQAogCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwYywgcGljLT5jb2xvdXIgPj4gOSk7CiAJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KIAkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGQsIChwaWMtPmh1ZSAtIDMyNzY4KSA+PiA4KTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDY2LDQ4ICs0MjgsMjMgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19TQUE3MTExID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExMTsKLQotc3RhdGljIGludAotc2FhNzExMV9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IHNhYTcxMTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyOwogCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTEuYzogZGV0ZWN0aW5nIHNhYTcxMTEgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMTE7Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAic2FhNzExMSIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTExKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRlY29kZXIgPT0gTlVMTCkgewpAQCAtNTE5LDgyICs0NTYsMzcgQEAKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKIAl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMTFfaTJjX2luaXQpOwogCWkgPSBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwogCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2ggZXJyb3I6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKIAl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAleCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTExX3JlYWQoY2xpZW50LCAweDAwKSA+PiA0LAotCQkJY2xpZW50LT5hZGRyIDw8IDEpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAleFxuIiwKKwkJCXNhYTcxMTFfcmVhZChjbGllbnQsIDB4MDApID4+IDQpOwogCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTExX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHNhYTcxMTFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTEuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMTFfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTFfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTExID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNhYTcxMTEiLAotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTExX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExMV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzExMV9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTFfaWRbXSA9IHsKKwl7ICJzYWE3MTExX29sZCIsIDAgfSwJLyogInNhYTcxMTEiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTFfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotc2FhNzExMV9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTExKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1zYWE3MTExX2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExMSk7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTcxMTFfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYWE3MTExX2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTcxMTEiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKKwkuY29tbWFuZCA9IHNhYTcxMTFfY29tbWFuZCwKKwkucHJvYmUgPSBzYWE3MTExX3Byb2JlLAorCS5yZW1vdmUgPSBzYWE3MTExX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE3MTExX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKaW5kZXggZTc5MDc1NS4uN2NhNzA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKQEAgLTI5LDQzICsyOSwyNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTRIIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUoeCkgKHgpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzYWE3MTE0IHsKQEAgLTgxLDkgKzYyLDYgQEAKIAlpbnQgcGxheWJhY2s7CiB9OwogCi0jZGVmaW5lICAgSTJDX1NBQTcxMTQgICAgICAgIDB4NDIKLSNkZWZpbmUgICBJMkNfU0FBNzExNEEgICAgICAgMHg0MAotCiAjZGVmaW5lICAgSTJDX0RFTEFZICAgMTAKIAogCkBAIC0xMjksMTggKzEwNywxMiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExNF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExNF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTRfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgc2FhNzExNF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTYwLDE4ICsxMzIsMTcgQEAKIAkJCQlyZWcrKzsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gc2FhNzExNF93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gc2FhNzExNF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xODAsOSArMTUxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExNF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTE0X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQpAQCAtNDUyLDE1ICs0MjEsMTEgQEAKIAkweGVmLCAweDAwCiB9OwogCi1zdGF0aWMgaW50Ci1zYWE3MTE0X2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgc2FhNzExNF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQkvL2RwcmludGsoMSwgS0VSTl9JTkZPICIlczogd3JpdGluZyBpbml0XG4iLCBJMkNfTkFNRShjbGllbnQpKTsKIAkJLy9zYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKQEAgLTQ3MCwyNyArNDM1LDI4IEBACiAJewogCQlpbnQgaTsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGRlY29kZXIgZHVtcFxuIiwgSTJDX05BTUUoY2xpZW50KSk7CisJCWlmICghZGVidWcpCisJCQlicmVhazsKKwkJdjRsX2luZm8oY2xpZW50LCAiZGVjb2RlciBkdW1wXG4iKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkgKz0gMTYpIHsKIAkJCWludCBqOwogCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICUwM3giLCBJMkNfTkFNRShjbGllbnQpLCBpKTsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIiUwM3giLCBpKTsKIAkJCWZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7Ci0JCQkJcHJpbnRrKCIgJTAyeCIsCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAogCQkJCSAgICAgICBzYWE3MTE0X3JlYWQoY2xpZW50LCBpICsgaikpOwogCQkJfQotCQkJcHJpbnRrKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewogCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogZGVjb2RlciBnZXQgY2FwYWJpbGl0aWVzXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwogCiAJCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8CiAJCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8CkBAIC00OTgsOCArNDY0LDggQEAKIAkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDg7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CkBAIC01MDksOCArNDc1LDcgQEAKIAogCQlzdGF0dXMgPSBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDFmKTsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzIHN0YXR1czogMHglMDJ4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7CiAJCXJlcyA9IDA7CiAJCWlmICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApIHsKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwpAQCAtNTM4LDggKzUwMyw4IEBACiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7CiAJCX0KIAkJKmlhcmcgPSByZXM7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX05PUk06CiAJewpAQCAtNTQ3LDEyICs1MTIsMTEgQEAKIAogCQlzaG9ydCBpbnQgaG9mZiA9IDAsIHZvZmYgPSAwLCB3ID0gMCwgaCA9IDA7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogZGVjb2RlciBzZXQgbm9ybSAiLAotCQkJSTJDX05BTUUoY2xpZW50KSk7Ci0JCXN3aXRjaCAoKmlhcmcpIHsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm1cbiIpOwogCisJCXN3aXRjaCAoKmlhcmcpIHsKIAkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlkcHJpbnRrKDEsICJOVFNDXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIk5UU0NcbiIpOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDYpXSA9CiAJCQkgICAgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVDsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQpAQCAtNTcxLDcgKzUzNSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJZHByaW50aygxLCAiUEFMXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlBBTFxuIik7CiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KIAkJCSAgICBTQUFfNzExNF9QQUxfSFNZTkNfU1RBUlQ7CiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNyldID0KQEAgLTU5MCw5ICs1NTQsOCBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgIiBVbmtub3duIHZpZGVvIG1vZGUhISFcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVW5rbm93biB2aWRlbyBtb2RlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KIAogCkBAIC02NDQsMjIgKzYwNywyMCBAQAogCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgzNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2sgZW5kIGNsb2NrIHNlbGVjdGlvbgogCiAJCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogZGVjb2RlciBzZXQgaW5wdXQgKCVkKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICglZClcbiIsICppYXJnKTsKIAkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDcpIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKGRlY29kZXItPmlucHV0ICE9ICppYXJnKSB7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBub3cgc2V0dGluZyAlcyBpbnB1dFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLAorCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm93IHNldHRpbmcgJXMgaW5wdXRcbiIsCiAJCQkJKmlhcmcgPj0gNiA/ICJTLVZpZGVvIiA6ICJDb21wb3NpdGUiKTsKIAkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7CiAKQEAgLTY5MCwzMCArNjUxLDI5IEBACiAJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZSwKIAkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogZGVjb2RlciBzZXQgb3V0cHV0XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBvdXRwdXRcbiIpOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCiAJCWlmICgqaWFyZyAhPSAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAJCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogZGVjb2RlciAlcyBvdXRwdXRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzIG91dHB1dFxuIiwKKwkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKIAogCQlkZWNvZGVyLT5wbGF5YmFjayA9ICFlbmFibGU7CiAKQEAgLTc1NCwxOCArNzE0LDE2IEBACiAJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgzNik7CiAKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgogCXsKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IGRlY29kZXIgc2V0IHBpY3R1cmUgYnJpZ2h0PSVkIGNvbnRyYXN0PSVkIHNhdHVyYXRpb249JWQgaHVlPSVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LAotCQkJcGljLT5jb2xvdXIsIHBpYy0+aHVlKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJImRlY29kZXIgc2V0IHBpY3R1cmUgYnJpZ2h0PSVkIGNvbnRyYXN0PSVkIHNhdHVyYXRpb249JWQgaHVlPSVkXG4iLAorCQkJcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LCBwaWMtPmNvbG91ciwgcGljLT5odWUpOwogCiAJCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7CiAJCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCkBAIC03ODksOCArNzQ3LDggQEAKIAkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBkLAogCQkJCSAgICAgIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAxLDU4ICs3NTksMzAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPQotICAgIHsgSTJDX1NBQTcxMTQgPj4gMSwgSTJDX1NBQTcxMTRBID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQyID4+IDEsIDB4NDAgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTE0OwotCi1zdGF0aWMgaW50Ci1zYWE3MTE0X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzExNF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpLCBlcnJbMzBdOwogCXNob3J0IGludCBob2ZmID0gU0FBXzcxMTRfTlRTQ19IT0ZGU0VUOwogCXNob3J0IGludCB2b2ZmID0gU0FBXzcxMTRfTlRTQ19WT0ZGU0VUOwogCXNob3J0IGludCB3ID0gU0FBXzcxMTRfTlRTQ19XSURUSDsKIAlzaG9ydCBpbnQgaCA9IFNBQV83MTE0X05UU0NfSEVJR0hUOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxMTQgKmRlY29kZXI7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExNC5jOiBkZXRlY3Rpbmcgc2FhNzExNCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExNDsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTE0Iiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZGVjb2Rlci0+aW5wdXQgPSAtMTsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwpAQCAtOTM3LDggKzg2Nyw3IEBACiAJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSB8PSAxOwkvLyBjb21iZmlsdGVyIG9uCiAKIAotCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfYXR0YWNoOiBzdGFydGluZyBkZWNvZGVyIGluaXRcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCkpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXJ0aW5nIGluaXRcbiIpOwogCiAJZXJyWzBdID0KIAkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDIwIDw8IDEpLApAQCAtOTYyLDI4ICs4OTEsMjMgQEAKIAogCWZvciAoaSA9IDA7IGkgPD0gNTsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCiAJZm9yIChpID0gNjsgaSA8IDg7IGkrKykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXNfYXR0YWNoOiByZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCisJCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwogCX0KIAotCWRwcmludGsoMSwKLQkJS0VSTl9ERUJVRwotCQkiJXNfYXR0YWNoOiBwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCkpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJInBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIik7CiAKIAllcnJbNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgwNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2tlbmQgY2xvY2sgc2VsZWN0aW9uLCB0YXNrIEEmQiBvZmYKIAllcnJbN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgpAQCAtOTkxLDE5ICs5MTUsMTUgQEAKIAogCWZvciAoaSA9IDY7IGkgPD0gODsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCi0JZHByaW50aygxLCBLRVJOX0lORk8gIiVzX2F0dGFjaDogcGVyZm9ybWluZyB0aGUgcmVzdCBvZiBpbml0XG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKLQorCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInBlcmZvcm1pbmcgdGhlIHJlc3Qgb2YgaW5pdFxuIik7CiAKIAllcnJbOV0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMSwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDEpXSk7CiAJZXJyWzEwXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwMyA8PCAxKSwgKDB4MWUgKyAxIC0gMHgwMykgPDwgMSk7CS8vIGJpZyBzZXEKQEAgLTEwMzksMzcgKzk1OSwzMiBAQAogCiAJZm9yIChpID0gOTsgaSA8PSAxODsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCiAKIAlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCiAKIAlmb3IgKGkgPSAweDExOyBpIDw9IDB4MTM7IGkrKykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXNfYXR0YWNoOiByZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCisJCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwogCX0KIAogCi0JZHByaW50aygxLCBLRVJOX0RFQlVHICIlc19hdHRhY2g6IHNldHRpbmcgdmlkZW8gaW5wdXRcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCkpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldHRpbmcgdmlkZW8gaW5wdXRcbiIpOwogCiAJZXJyWzE5XSA9CiAJICAgIHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAyLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildKTsKQEAgLTEwODAsMjAgKzk5NSwxNSBAQAogCiAJZm9yIChpID0gMTk7IGkgPD0gMjE7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAotCWRwcmludGsoMSwKLQkJS0VSTl9ERUJVRwotCQkiJXNfYXR0YWNoOiBwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCkpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIik7CiAKIAllcnJbMjJdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKIAllcnJbMjNdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQpAQCAtMTEwMiwxMyArMTAxMiwxMSBAQAogCiAJZm9yIChpID0gMjI7IGkgPD0gMjQ7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIApAQCAtMTExNiwxMDEgKzEwMjQsNDUgQEAKIAllcnJbMjZdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDcsIGluaXRbUkVHX0FERFIoMHgwNyldKTsKIAllcnJbMjddID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4MTAsIGluaXRbUkVHX0FERFIoMHgxMCldKTsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAleCwgZGVjb2RlciBzdGF0dXMgMHglMDJ4XG4iLAotCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDAwKSA+PiA0LAorCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNoaXAgdmVyc2lvbiAleCwgZGVjb2RlciBzdGF0dXMgMHglMDJ4XG4iLAorCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDAwKSA+PiA0LAogCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDFmKSk7Ci0JZHByaW50aygxLAotCQlLRVJOX0RFQlVHCi0JCSIlc19hdHRhY2g6IHBvd2VyIHNhdmUgY29udHJvbDogMHglMDJ4LCBzY2FsZXIgc3RhdHVzOiAweCUwMnhcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTRfcmVhZChjbGllbnQsIDB4ODgpLAorCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJInBvd2VyIHNhdmUgY29udHJvbDogMHglMDJ4LCBzY2FsZXIgc3RhdHVzOiAweCUwMnhcbiIsCisJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4ODgpLAogCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDhmKSk7CiAKIAogCWZvciAoaSA9IDB4OTQ7IGkgPCAweDk2OyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJLy9pID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7Ci0JaSA9IDA7Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaCBlcnJvcjogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAleCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDAwKSA+PiA0LAotCQkJY2xpZW50LT5hZGRyIDw8IDEpOwotCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTE0X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHNhYTcxMTRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTQuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMTRfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTRfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTE0ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNhYTcxMTQiLAotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKLQotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxMTRfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE3MTE0X2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSBzYWE3MTE0X2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzExNF9pZFtdID0geworCXsgInNhYTcxMTRfb2xkIiwgMCB9LAkvKiAic2FhNzExNCIgbWFwcyB0byB0aGUgc2FhNzExNSBkcml2ZXIgKi8KKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzExNF9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTE0X2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxMTRfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTE0KTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzExNF9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxMTRfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzExNCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCisJLmNvbW1hbmQgPSBzYWE3MTE0X2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzExNF9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzExNF9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzExNF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCmluZGV4IGQwZTgzZmUuLmNjMDJmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgKiBOb3RlOiB0aGUgc2FhNzEyNiBpcyBpZGVudGljYWwgdG8gdGhlIHNhYTcxMjcsIGFuZCB0aGUgc2FhNzEyOCBpcwogICogaWRlbnRpY2FsIHRvIHRoZSBzYWE3MTI5LCBleGNlcHQgdGhhdCB0aGUgc2FhNzEyNiBhbmQgc2FhNzEyOCBoYXZlCiAgKiBtYWNyb3Zpc2lvbiBhbnRpLXRhcGluZyBzdXBwb3J0LiBUaGlzIGRyaXZlciB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKLSAqIHdvcmsgZmluZCBmb3IgdGhvc2UgY2hpcHMsIGV4Y2VwdCBvZiBjb3Vyc2UgZm9yIHRoZSBtaXNzaW5nIGFudGktdGFwaW5nCisgKiB3b3JrIGZpbmUgZm9yIHRob3NlIGNoaXBzLCBleGNlcHQgb2YgY291cnNlIGZvciB0aGUgbWlzc2luZyBhbnRpLXRhcGluZwogICogc3VwcG9ydC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCA4N2MxMDk4Li44YzQ2MTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtNTM1LDExICs1MzUsMTYgQEAKIAkJCQlzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnICpjZGVjX2NvbmYsCiAJCQkJc3RydWN0IHRkYTgyN3hfY29uZmlnICp0dW5lcl9jb25mKQogewotCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsIGNkZWNfY29uZiwgJmRldi0+aTJjX2FkYXApOwotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisKKwlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCBjZGVjX2NvbmYsICZkZXYtPmkyY19hZGFwKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJaWYgKGNkZWNfY29uZi0+aTJjX2dhdGUpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSB0ZGE4MjkwX2kyY19nYXRlX2N0cmw7Ci0JCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKKwkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJICAgICAgIGNkZWNfY29uZi0+dHVuZXJfYWRkcmVzcywKIAkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCwgdHVuZXJfY29uZikpCiAJCQlyZXR1cm4gMDsKQEAgLTk0NCwxMiArOTQ5LDMwIEBACiB7CiAJaW50IHJldDsKIAlpbnQgYXR0YWNoX3hjMzAyOCA9IDA7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogRklYTUU6IGFkZCBzdXBwb3J0IGZvciBtdWx0aS1mcm9udGVuZCAqLworCW11dGV4X2luaXQoJmRldi0+ZnJvbnRlbmRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZyb250ZW5kcy5mZWxpc3QpOworCWRldi0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpIGFsbG9jYXRpbmcgMSBmcm9udGVuZFxuIiwgX19mdW5jX18pOworCisJaWYgKHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwogCWRldi0+dHMubnJfYnVmcyAgICA9IDMyOwogCWRldi0+dHMubnJfcGFja2V0cyA9IDMyKjQ7Ci0JZGV2LT5kdmIubmFtZSA9IGRldi0+bmFtZTsKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZkZXYtPmR2Yi5kdmJxLCAmc2FhNzEzNF90c19xb3BzLAorCWZlMC0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7CisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUwLT5kdmIuZHZicSwgJnNhYTcxMzRfdHNfcW9wcywKIAkJCSAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCiAJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJICAgIFY0TDJfRklFTERfQUxURVJOQVRFLApAQCAtOTU5LDQ3ICs5ODIsNDcgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfMzAwSV9EVkJUX1BBTDoKIAkJZHByaW50aygicGlubmFjbGUgMzAwaSBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmcGlubmFjbGVfMzAwaSwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnBpbm5hY2xlXzMwMGksCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83Nzc6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZBUjoKIAkJZHByaW50aygiYXZlcnR2IDc3NyBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmYXZlcm1lZGlhXzc3NywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmF2ZXJtZWRpYV83NzcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZkZXYtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1BISUxJUFNfVEQxMzE2KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkQ6CiAJCWRwcmludGsoIkF2ZXJNZWRpYSBBMTZEIGR2YiBzZXR1cFxuIik7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmYXZlcm1lZGlhX3hjMzAyOF9tdDM1Ml9kZXYsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CiAJCWF0dGFjaF94YzMwMjggPSAxOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ3MTM0OgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgbWVkaW9uX2NhcmRidXMudHVuZXJfYWRkcmVzcywKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RPVUdIOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYwX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKQEAgLTEwMTAsMjQgKzEwMzMsMjQgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfRVVST1BBOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmcGhpbGlwc19ldXJvcGFfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQ7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYxX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0RWQlRfMjEwOgpAQCAtMTA2NiwxNCArMTA4OSwxNCBAQAogCQkJCQkJICZ0ZGE4Mjd4X2NmZ18wKSA8IDApCiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQl9IGVsc2UgeyAgCQkvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjMsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywgJmRldi0+aTJjX2FkYXApOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYzLAogCQkJCQkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIHRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCQl9Ci0JCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAmZGV2LT5pMmNfYWRhcCwKKwkJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsICZkZXYtPmkyY19hZGFwLAogCQkJCQkJCQkJCTB4MDgsIDAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKQEAgLTEwODMsMTEgKzExMDYsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVM6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmYWRzX3RlY2hfZHVvX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCxkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCxmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICBhZHNfdGVjaF9kdW9fY29uZmlnLnR1bmVyX2FkZHJlc3MsICZkZXYtPmkyY19hZGFwLAogCQkJCQkJCQkmYWRzX2R1b19jZmcpID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCJubyB0ZGE4Mjd4IHR1bmVyIGZvdW5kIGF0IGFkZHI6ICUwMnhcbiIsCkBAIC0xMTA4LDE1ICsxMTMxLDE1IEBACiAJCQkJCQkgJnRkYTgyN3hfY2ZnXzApIDwgMCkKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCX0gZWxzZSB7ICAgICAgICAvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAogCQkJCQkJCSZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGRldi0+ZHZiLmZyb250ZW5kOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBmZTAtPmR2Yi5mcm9udGVuZDsKIAkJCQl1OCBkZXZfaWQgPSBkZXYtPmVlZGF0YVsyXTsKIAkJCQl1OCBkYXRhID0gMHhjNDsKIAkJCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLCAubGVuID0gMX07CiAKLQkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkJMHg2MCwgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IE1lZGlvbiBRdWFkcm8sIG5vIHRkYTgyNnggIgogCQkJCQkJImZvdW5kICFcbiIsIF9fZnVuY19fKTsKQEAgLTExNTAsMzEgKzExNzMsMzEgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0FWRVJUVkhEX0ExODA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmF2ZXJ0dmhkYTE4MCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAmYXZlcnR2aGRhMTgwLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjEsCiAJCQkJICAgTlVMTCwgRFZCX1BMTF9UREhVMik7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSToKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmt3b3JsZGF0c2MxMTAsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmt3b3JsZGF0c2MxMTAsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19UVVYxMjM2RCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJTX0xSMzAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9Ci0JCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgICAgICZkZXYtPmkyY19hZGFwLCAweDA4LCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTE4MiwyNSArMTIwNSwyNSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTX0VVUk9QQTJfSFlCUklEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwogCi0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgbWVkaW9uX2NhcmRidXMudHVuZXJfYWRkcmVzcywKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCSZwaGlsaXBzX2V1cm9wYV9jb25maWcsCiAJCQkJJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9pbml0OwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUE6CkBAIC0xMjM5LDE1ICsxMjYyLDE1IEBACiAJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1NOQUtFOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9Ci0JCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCwgMCkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBObyBsbmJwMjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTI2OSwyNCArMTI5MiwyNCBAQAogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDApOwogCQltc2xlZXAoMTApOwogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDEpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkJJmF2ZXJtZWRpYV94YzMwMjhfbXQzNTJfZGV2LAogCQkJCQkJJmRldi0+aTJjX2FkYXApOwogCQlhdHRhY2hfeGMzMDI4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMjoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKIAkJCQkJCSZzZDE4NzhfNG0sICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7Ci0JCQlpZiAoZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjAsCisJCQlpZiAoZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJICAmZGV2LT5pMmNfYWRhcCwgRFZCX1BMTF9QSElMSVBTX1NEMTg3OF9UREE4MjYxKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE1ENzEzNCBEVkItUywgbm8gU0QxODc4ICIKIAkJCQkJImZvdW5kICFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9CiAJCQkvKiB3ZSBuZWVkIHRvIG9wZW4gdGhlIGkyYyBnYXRlICh3ZSBrbm93IGl0IGV4aXN0cykgKi8KLQkJCWZlID0gZGV2LT5kdmIuZnJvbnRlbmQ7CisJCQlmZSA9IGZlMC0+ZHZiLmZyb250ZW5kOwogCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MDVfYXR0YWNoLCBmZSwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDB4MDgsIDAsIDApID09IE5VTEwpIHsKQEAgLTEzMDUsNyArMTMyOCw3IEBACiAJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNSwgMCk7CiAJCW1zbGVlcCgxMCk7CiAJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNSwgMSk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmYXZlcm1lZGlhX3hjMzAyOF9tdDM1Ml9kZXYsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CiAJCWF0dGFjaF94YzMwMjggPSAxOwpAQCAtMTMxNiwxNyArMTMzOSwxNyBAQAogCQkJCQkJCSZ0ZGE4Mjd4X2NmZ18yKSA8IDApCiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQl9IGVsc2UgeyAgCQkvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAogCQkJCQkJJmZseWR2YnMsICZkZXYtPmkyY19hZGFwKTsKLQkJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsCi0JCQkJCQlkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAogCQkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IEFzdXMgVGlnZXIgM2luMSwgbm8gIgogCQkJCQkJInRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCQl9Ci0JCQkJaWYgKGR2Yl9hdHRhY2gobG5icDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQkJaWYgKGR2Yl9hdHRhY2gobG5icDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCwgMCkgPT0gTlVMTCkgewogCQkJCQl3cHJpbnRrKCIlczogQXN1cyBUaWdlciAzaW4xLCBubyBsbmJwMjEiCiAJCQkJCQkiIGZvdW5kIVxuIiwgX19mdW5jX18pOwpAQCAtMTM1MiwxMCArMTM3NSwxMCBAQAogCQkJLmkyY19hZGRyICA9IDB4NjEsCiAJCX07CiAKLQkJaWYgKCFkZXYtPmR2Yi5mcm9udGVuZCkKKwkJaWYgKCFmZTAtPmR2Yi5mcm9udGVuZCkKIAkJCXJldHVybiAtMTsKIAotCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsICZjZmcpOworCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQlpZiAoIWZlKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IHhjMzAyOCBhdHRhY2ggZmFpbGVkXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CkBAIC0xMzYzLDQwICsxMzg2LDQ3IEBACiAJCX0KIAl9CiAKLQlpZiAoTlVMTCA9PSBkZXYtPmR2Yi5mcm9udGVuZCkgeworCWlmIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvZHZiOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiAJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCi0JZGV2LT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gc2FhNzEzNF90dW5lcl9jYWxsYmFjazsKKwlmZTAtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyBlbHNlICovCi0JcmV0ID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZkZXYtPmR2YiwgVEhJU19NT0RVTEUsIGRldiwgJmRldi0+cGNpLT5kZXYsCi0JCQkJICAgIGFkYXB0ZXJfbnIpOworCXJldCA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgZGV2LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CiAKIAkvKiB0aGlzIHNlcXVlbmNlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHRoZSB0ZGExMDA0eCBsb2FkIGl0cyBmaXJtd2FyZQogCSAqIGFuZCB0byBlbnRlciBhbmFsb2cgbW9kZSBvZiBoeWJyaWQgYm9hcmRzCiAJICovCiAJaWYgKCFyZXQpIHsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKQotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKGRldi0+ZHZiLmZyb250ZW5kKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKGZlMC0+ZHZiLmZyb250ZW5kKTsKIAl9CiAJcmV0dXJuIHJldDsKIAogZGV0dGFjaF9mcm9udGVuZDoKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCWR2Yl9mcm9udGVuZF9kZXRhY2goZGV2LT5kdmIuZnJvbnRlbmQpOwotCWRldi0+ZHZiLmZyb250ZW5kID0gTlVMTDsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUwLT5kdmIuZnJvbnRlbmQpOworCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKIAogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBkdmJfZmluaShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIEZJWE1FOiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNvZGUgaXMgYm9ndXMsIHNpbmNlIHRoZSBlbnRyeSBmb3IKIAkgICBQaW5uYWNsZSAzMDBJIERWQi1UIFBBTCBhbHJlYWR5IGRlZmluZXMgdGhlIHByb3BlciBpbml0IHRvIGFsbG93CiAJICAgdGhlIGRldGVjdGlvbiBvZiBtdDIwMzIgKFREQTk4ODdfUE9SVDJfSU5BQ1RJVkUpCkBAIC0xNDE2LDcgKzE0NDYsNyBAQAogCQkJdTggZGF0YSA9IDB4ODA7CiAJCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDA4LCAuYnVmID0gJmRhdGEsIC5mbGFncyA9IDAsIC5sZW4gPSAxfTsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwotCQkJZmUgPSBkZXYtPmR2Yi5mcm9udGVuZDsKKwkJCWZlID0gZmUwLT5kdmIuZnJvbnRlbmQ7CiAJCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSB7CiAJCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwpAQCAtMTQyNCw4ICsxNDU0LDggQEAKIAkJCX0KIAkJfQogCX0KLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKCZkZXYtPmR2Yik7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggNDkxYWIxZi4uMjQwOTZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC01ODEsNyArNTgxLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19TQUE3MTM0X0RWQl9NT0RVTEUpCiAJLyogU0FBNzEzNF9NUEVHX0RWQiBvbmx5ICovCi0Jc3RydWN0IHZpZGVvYnVmX2R2YiAgICAgICAgZHZiOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzIGZyb250ZW5kczsKIAlpbnQgKCpvcmlnaW5hbF9kZW1vZF9zbGVlcCkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwogCWludCAoKm9yaWdpbmFsX3NldF92b2x0YWdlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKTsKIAlpbnQgKCpvcmlnaW5hbF9zZXRfaGlnaF92b2x0YWdlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYwppbmRleCAwMmZkYTRlLi42ZGViYjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYwpAQCAtMjUsNDMgKzI1LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAKLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzYWE3MTg1IHsKQEAgLTc1LDMyICs1NywyNCBAQAogCWludCBzYXQ7CiB9OwogCi0jZGVmaW5lICAgSTJDX1NBQTcxODUgICAgICAgIDB4ODgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxODVfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxODVfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlNBQTcxODU6ICUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOwogCWVuY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xMjEsMTggKzk1LDE3IEBACiAJCQkJICAgIGVuY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTI0MCwxNSArMjEzLDExIEBACiAJMHg2NiwgMHgyMSwJCS8qIEZTQzMgKi8KIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTg1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKIAkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7CkBAIC0yNjQsNyArMjMzLDYgQEAKIAkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwogCQkJYnJlYWs7CiAJCX0KLQogCQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgpAQCAtMjc2LDggKzI0NCw4IEBACiAJCSAgICBWSURFT19FTkNPREVSX1NFQ0FNIHwgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDE7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewpAQCAtMjg2LDcgKzI1NCw2IEBACiAJCS8vc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwpAQCAtMzAwLDExICsyNjcsMTAgQEAKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTMxNCw3ICsyODAsNiBAQAogCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJLyogU3dpdGNoIFJUQ0UgdG8gMSAqLwogCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCkBAIC0zMzIsMjEgKzI5NywxOSBAQAogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgeworCQlpZiAoKmlhcmcgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CkBAIC0zNTYsOCArMzE5LDggQEAKIAkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCiAJCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhiZikgfAogCQkJICAgICAgKGVuY29kZXItPmVuYWJsZSA/IDB4MDAgOiAweDQwKSk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OCwxMzggKzMzMSw2NSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1NBQTcxODUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTg1OwotCi1zdGF0aWMgaW50Ci1zYWE3MTg1X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzE4NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXI7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzE4NS5jOiBkZXRlY3Rpbmcgc2FhNzE4NSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzE4NTsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTg1Iiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxODUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZW5jb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZW5jb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGVuY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKLQlpZiAoaSA+PSAwKSB7Ci0JCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQlzaXplb2YoaW5pdF9udHNjKSk7Ci0JfQotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAlZCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTg1X3JlYWQoY2xpZW50KSA+PiA1LAotCQkJY2xpZW50LT5hZGRyIDw8IDEpOwotCX0KLQorCWlmIChpID49IDApCisJCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yICVkXG4iLCBpKTsKKwllbHNlCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uIDB4JXhcbiIsCisJCQkJc2FhNzE4NV9yZWFkKGNsaWVudCkgPj4gNSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzE4NS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzE4NV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzE4NV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdKSB8IDB4NDApOwkvKiBTVzogb3V0cHV0IG9mZiBpcyBhY3RpdmUgKi8KIAkvL3NhYTcxODVfd3JpdGUoY2xpZW50LCAweDNhLCAoZW5jb2Rlci0+cmVnWzB4M2FdKSB8IDB4ODApOyAvKiBTVzogY29sb3IgYmFyICovCiAKIAlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxODUgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzE4NSIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzE4NV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxODVfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxODVfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTg1X2lkW10gPSB7CisJeyAic2FhNzE4NSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzE4NV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTg1X2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxODUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxODVfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTg1KTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzE4NV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxODVfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzE4NSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAorCS5jb21tYW5kID0gc2FhNzE4NV9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxODVfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxODVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxODVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDc2ODM4MDkuLjI0MDc2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTQwLDM5ICs0MCwzOSBAQAogCiAvKiByZWdpc3RlciBvZmZzZXRzIGZvciBzaDc3MjIgLyBzaDc3MjMgKi8KIAotI2RlZmluZSBDQVBTUiAgMHgwMAotI2RlZmluZSBDQVBDUiAgMHgwNAotI2RlZmluZSBDQU1DUiAgMHgwOAotI2RlZmluZSBDTUNZUiAgMHgwYwotI2RlZmluZSBDQU1PUiAgMHgxMAotI2RlZmluZSBDQVBXUiAgMHgxNAotI2RlZmluZSBDQUlGUiAgMHgxOAotI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBub3Qgb24gc2g3NzIzICovCi0jZGVmaW5lIENTRUNSICAweDI0IC8qIG5vdCBvbiBzaDc3MjMgKi8KLSNkZWZpbmUgQ1JDTlRSIDB4MjgKLSNkZWZpbmUgQ1JDTVBSIDB4MmMKLSNkZWZpbmUgQ0ZMQ1IgIDB4MzAKLSNkZWZpbmUgQ0ZTWlIgIDB4MzQKLSNkZWZpbmUgQ0RXRFIgIDB4MzgKLSNkZWZpbmUgQ0RBWVIgIDB4M2MKLSNkZWZpbmUgQ0RBQ1IgIDB4NDAKLSNkZWZpbmUgQ0RCWVIgIDB4NDQKLSNkZWZpbmUgQ0RCQ1IgIDB4NDgKLSNkZWZpbmUgQ0JEU1IgIDB4NGMKLSNkZWZpbmUgQ0ZXQ1IgIDB4NWMKLSNkZWZpbmUgQ0xGQ1IgIDB4NjAKLSNkZWZpbmUgQ0RPQ1IgIDB4NjQKLSNkZWZpbmUgQ0REQ1IgIDB4NjgKLSNkZWZpbmUgQ0REQVIgIDB4NmMKLSNkZWZpbmUgQ0VJRVIgIDB4NzAKLSNkZWZpbmUgQ0VUQ1IgIDB4NzQKLSNkZWZpbmUgQ1NUU1IgIDB4N2MKLSNkZWZpbmUgQ1NSVFIgIDB4ODAKLSNkZWZpbmUgQ0RTU1IgIDB4ODQKLSNkZWZpbmUgQ0RBWVIyIDB4OTAKLSNkZWZpbmUgQ0RBQ1IyIDB4OTQKLSNkZWZpbmUgQ0RCWVIyIDB4OTgKLSNkZWZpbmUgQ0RCQ1IyIDB4OWMKKyNkZWZpbmUgQ0FQU1IgIDB4MDAgLyogQ2FwdHVyZSBzdGFydCByZWdpc3RlciAqLworI2RlZmluZSBDQVBDUiAgMHgwNCAvKiBDYXB0dXJlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNQ1IgIDB4MDggLyogQ2FwdHVyZSBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNZUiAgMHgwYyAvKiBDYXB0dXJlIGludGVyZmFjZSBjeWNsZSAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNT1IgIDB4MTAgLyogQ2FwdHVyZSBpbnRlcmZhY2Ugb2Zmc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENBUFdSICAweDE0IC8qIENhcHR1cmUgaW50ZXJmYWNlIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENBSUZSICAweDE4IC8qIENhcHR1cmUgaW50ZXJmYWNlIGlucHV0IGZvcm1hdCByZWdpc3RlciAqLworI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBDYW1lcmEgc3Ryb2JlIGNvbnRyb2wgcmVnaXN0ZXIgKDw9IHNoNzcyMikgKi8KKyNkZWZpbmUgQ1NFQ1IgIDB4MjQgLyogQ2FtZXJhIHN0cm9iZSBlbWlzc2lvbiBjb3VudCByZWdpc3RlciAoPD0gc2g3NzIyKSAqLworI2RlZmluZSBDUkNOVFIgMHgyOCAvKiBDRVUgcmVnaXN0ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDUkNNUFIgMHgyYyAvKiBDRVUgcmVnaXN0ZXIgZm9yY2libGUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDRkxDUiAgMHgzMCAvKiBDYXB0dXJlIGZpbHRlciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENGU1pSICAweDM0IC8qIENhcHR1cmUgZmlsdGVyIHNpemUgY2xpcCByZWdpc3RlciAqLworI2RlZmluZSBDRFdEUiAgMHgzOCAvKiBDYXB0dXJlIGRlc3RpbmF0aW9uIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSICAweDNjIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RBQ1IgIDB4NDAgLyogQ2FwdHVyZSBkYXRhIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDREJZUiAgMHg0NCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAqLworI2RlZmluZSBDREJDUiAgMHg0OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDQkRTUiAgMHg0YyAvKiBDYXB0dXJlIGJ1bmRsZSBkZXN0aW5hdGlvbiBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENGV0NSICAweDVjIC8qIEZpcmV3YWxsIG9wZXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENMRkNSICAweDYwIC8qIENhcHR1cmUgbG93LXBhc3MgZmlsdGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RPQ1IgIDB4NjQgLyogQ2FwdHVyZSBkYXRhIG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENERENSICAweDY4IC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENEREFSICAweDZjIC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0VJRVIgIDB4NzAgLyogQ2FwdHVyZSBldmVudCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIENFVENSICAweDc0IC8qIENhcHR1cmUgZXZlbnQgZmxhZyBjbGVhciByZWdpc3RlciAqLworI2RlZmluZSBDU1RTUiAgMHg3YyAvKiBDYXB0dXJlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBDU1JUUiAgMHg4MCAvKiBDYXB0dXJlIHNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENEU1NSICAweDg0IC8qIENhcHR1cmUgZGF0YSBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSMiAweDkwIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREFDUjIgMHg5NCAvKiBDYXB0dXJlIGRhdGEgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQ0RCWVIyIDB4OTggLyogQ2FwdHVyZSBkYXRhIGJvdHRvbS1maWVsZCBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREJDUjIgMHg5YyAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAyICovCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2FtZXJhX2xvY2spOwogCkBAIC0xNjUsNiArMTY1LDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENFVENSLCAweDAzMTdmMzEzIF4gMHgxMCk7CiAKIAlpZiAocGNkZXYtPmFjdGl2ZSkgeworCQlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKSk7CiAJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDB4MSk7IC8qIHN0YXJ0IGNhcHR1cmUgKi8KIAl9CkBAIC0yMzYsNyArMjM3LDcgQEAKIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKLQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKIApAQCAtMzIzLDEyICszMjQsMjQgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlCVUdfT04oaWNkICE9IHBjZGV2LT5pY2QpOwogCiAJLyogZGlzYWJsZSBjYXB0dXJlLCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAljZXVfd3JpdGUocGNkZXYsIENFSUVSLCAwKTsKIAljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KKworCS8qIG1ha2Ugc3VyZSBhY3RpdmUgYnVmZmVyIGlzIGNhbmNlbGVkICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHBjZGV2LT5hY3RpdmUpIHsKKwkJbGlzdF9kZWwoJnBjZGV2LT5hY3RpdmUtPnF1ZXVlKTsKKwkJcGNkZXYtPmFjdGl2ZS0+c3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJd2FrZV91cF9hbGwoJnBjZGV2LT5hY3RpdmUtPmRvbmUpOworCQlwY2Rldi0+YWN0aXZlID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKwogCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7CiAKIAlkZXZfaW5mbygmaWNkLT5kZXYsCkBAIC0zOTEsNyArNDA0LDIwIEBACiAJY2V1X3dyaXRlKHBjZGV2LCBDRkxDUiwgMCk7IC8qIGRhdGEgZmV0Y2ggbW9kZSAtIG5vIHNjYWxpbmcgKi8KIAljZXVfd3JpdGUocGNkZXYsIENGU1pSLCAoaWNkLT5oZWlnaHQgPDwgMTYpIHwgY2ZzenJfd2lkdGgpOwogCWNldV93cml0ZShwY2RldiwgQ0xGQ1IsIDApOyAvKiBkYXRhIGZldGNoIG1vZGUgLSBubyBsb3dwYXNzIGZpbHRlciAqLwotCWNldV93cml0ZShwY2RldiwgQ0RPQ1IsIDB4MDAwMDAwMTYpOworCisJLyogQSBmZXcgd29yZHMgYWJvdXQgYnl0ZSBvcmRlciAob2JzZXJ2ZWQgaW4gQmlnIEVuZGlhbiBtb2RlKQorCSAqCisJICogSW4gZGF0YSBmZXRjaCBtb2RlIGJ5dGVzIGFyZSByZWNlaXZlZCBpbiBjaHVua3Mgb2YgOCBieXRlcy4KKwkgKiBEMCwgRDEsIEQyLCBEMywgRDQsIEQ1LCBENiwgRDcgKEQwIHJlY2VpdmVkIGZpcnN0KQorCSAqCisJICogVGhlIGRhdGEgaXMgaG93ZXZlciBieSBkZWZhdWx0IHdyaXR0ZW4gdG8gbWVtb3J5IGluIHJldmVyc2Ugb3JkZXI6CisJICogRDcsIEQ2LCBENSwgRDQsIEQzLCBEMiwgRDEsIEQwIChENyB3cml0dGVuIHRvIGxvd2VzdCBieXRlKQorCSAqCisJICogVGhlIGxvd2VzdCB0aHJlZSBiaXRzIG9mIENET0NSIGFsbG93cyB1cyB0byBkbyBzd2FwcGluZywKKwkgKiB1c2luZyA3IHdlIHN3YXAgdGhlIGRhdGEgYnl0ZXMgdG8gbWF0Y2ggdGhlIGluY29taW5nIG9yZGVyOgorCSAqIEQwLCBEMSwgRDIsIEQzLCBENCwgRDUsIEQ2LCBENworCSAqLworCWNldV93cml0ZShwY2RldiwgQ0RPQ1IsIDB4MDAwMDAwMTcpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDRFdEUiwgY2R3ZHJfd2lkdGgpOwogCWNldV93cml0ZShwY2RldiwgQ0ZXQ1IsIDApOyAvKiBrZWVwICJkYXRhZmV0Y2ggZmlyZXdhbGwiIGRpc2FibGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCmluZGV4IDFhZGMyNTcuLmJiN2E5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC0xOCwxNSArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgotCi1zdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvIHsKLQlpbnQgaWZhY2U7Ci0JY2hhciAqZm9ybWF0X25hbWU7Ci0JdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmb3JtYXQ7Ci0JdW5zaWduZWQgbG9uZyBidXNfcGFyYW07Ci0JaW50ICgqc2V0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sIGludCBlbmFibGUpOwotfTsKKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAKIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgewogCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm87CkBAIC00NCwxMSArMzYsMjEgQEAKIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKworCWlmIChwLT5wb3dlcikKKwkJcC0+cG93ZXIoMSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKworCWlmIChwLT5wb3dlcikKKwkJcC0+cG93ZXIoMCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwppbmRleCBkYjY5YmM1Li5lZGFlYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC01NjAsNyArNTU5LDcgQEAKIAogCQl1cmIgPSBkZXYtPmlzb2J1ZnNbaV0udXJiOwogCQlpZiAodXJiKSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dXJic191c2VkKSkKKwkJCWlmIChhdG9taWNfcmVhZCgmZGV2LT51cmJzX3VzZWQpICYmIGlzX3ByZXNlbnQoZGV2KSkKIAkJCQl1c2Jfa2lsbF91cmIodXJiKTsKIAkJCXVzYl9mcmVlX3VyYih1cmIpOwogCQl9CkBAIC02ODksMTggKzY4OCwxNCBAQAogewogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGRldi0+b3duZXIgIT0gZnApIHsKLQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKLQkJcmV0dXJuIDA7CisJaWYgKGRldi0+b3duZXIgPT0gZnApIHsKKwkJc3RrX3N0b3Bfc3RyZWFtKGRldik7CisJCXN0a19mcmVlX2J1ZmZlcnMoZGV2KTsKKwkJZGV2LT5vd25lciA9IE5VTEw7CiAJfQogCi0Jc3RrX3N0b3Bfc3RyZWFtKGRldik7Ci0KLQlzdGtfZnJlZV9idWZmZXJzKGRldik7Ci0KLQlkZXYtPm93bmVyID0gTlVMTDsKLQotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGVyZmFjZSk7CisJaWYoaXNfcHJlc2VudChkZXYpKQorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRlcmZhY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MTQsOSArNzA5LDYgQEAKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7CiAJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IGZwLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlPOwotCiAJaWYgKCFpc19wcmVzZW50KGRldikpCiAJCXJldHVybiAtRUlPOwogCWlmIChkZXYtPm93bmVyICYmIGRldi0+b3duZXIgIT0gZnApCkBAIC03NzMsOSArNzY1LDYgQEAKIHsKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAotCWlmIChkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlwb2xsX3dhaXQoZnAsICZkZXYtPndhaXRfZnJhbWUsIHdhaXQpOwogCiAJaWYgKCFpc19wcmVzZW50KGRldikpCkBAIC0xNDM2LDcgKzE0MjUsNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKIAlzdGtfcmVtb3ZlX3N5c2ZzX2ZpbGVzKCZkZXYtPnZkZXYpOwogCi0JU1RLX0lORk8oIlN5bnRlayBVU0IyLjAgQ2FtZXJhIHJlbGVhc2UgcmVzb3VyY2VzIgorCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSByZWxlYXNlIHJlc291cmNlcyAiCiAJCSJ2aWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkXG4iLCBkZXYtPnZkZXYubWlub3IpOwogCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCmluZGV4IDA4NGE4NWIuLjlmNjczNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCkBAIC0xMjIsNyArMTIyLDYgQEAKIAogI2RlZmluZSB2ZGV2X3RvX2NhbWVyYShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHN0a19jYW1lcmEsIHZkZXYpCiAKLXZvaWQgc3RrX2NhbWVyYV9kZWxldGUoc3RydWN0IGtyZWYgKik7CiBpbnQgc3RrX2NhbWVyYV93cml0ZV9yZWcoc3RydWN0IHN0a19jYW1lcmEgKiwgdTE2LCB1OCk7CiBpbnQgc3RrX2NhbWVyYV9yZWFkX3JlZyhzdHJ1Y3Qgc3RrX2NhbWVyYSAqLCB1MTYsIGludCAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IGJjYzMyZmEuLjNiMGI4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE0yNTIzXzNEQkhfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE0yNTIzXzNESUhfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE1GUEUwNV8yX1UifSwKLQl7IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAorCXsgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGhpbGlwcyBGUkgyMDM2QiJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGFuYXNvbmljIEVOR0Y3NV8wMUdGIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJNYXhMaW5lYXIgTVhMNTAwNSJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCmluZGV4IGU5ODZjMjguLmRhMjdhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKQEAgLTIyOSw3ICsyMjksOCBAQAogCiAJY2FtLT5pbnB1dCA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KSB7Ci0JCXdhcm4oIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDMsOCArMjQ0LDkgQEAKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOwogCWlmIChlcnJvcikgewotCQl3YXJuKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAotCQkgICAgIGVycm9yKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAorCQkJIGVycm9yKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJCWNhbS0+aW5wdXQgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCmluZGV4IDA1YzYxYjUuLjQ0NTliOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwpAQCAtOTMsNyArOTMsNyBAQAogCiAJY2FtLT5pbnB1dCA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KSB7Ci0JCXdhcm4oImluc3VmZmljaWVudCBtZW0gZm9yIGNhbSBpbnB1dCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiaW5zdWZmaWNpZW50IG1lbSBmb3IgY2FtIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNyw4ICsxMDcsOSBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJaWYgKGVycm9yKSB7Ci0JCXdhcm4oIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCi0JCSAgICAgZXJyb3IpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCisJCQkgZXJyb3IpOwogCQlpbnB1dF9mcmVlX2RldmljZShjYW0tPmlucHV0KTsKIAkJY2FtLT5pbnB1dCA9IE5VTEw7CiAJfQpAQCAtNTg3LDggKzU4OCw5IEBACiAJCQlkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CiAKIAkJaWYgKHN0IDwgMCkgewotCQkJd2FybigiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC4iLAotCQkJICAgICAgaSwgbiwgc3QpOworCQkJZGV2X3dhcm4oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJEYXRhIGVycm9yOiBwYWNrZXQ9JWQuIGxlbj0lZC4gc3RhdHVzPSVkLlxuIiwKKwkJCQkgaSwgbiwgc3QpOwogCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjk5LDcgKzcwMSw3IEBACiAKIAlyZXQgPSBxY21fY2FtZXJhX29mZih1dmQpOwogCWlmIChyZXQpCi0JCXdhcm4oImNvdWxkbid0IHR1cm4gdGhlIGNhbSBvZmYuIik7CisJCWRldl93YXJuKCZ1dmQtPmRldi0+ZGV2LCAiY291bGRuJ3QgdHVybiB0aGUgY2FtIG9mZi5cbiIpOwogCiAJdXZkLT5zdHJlYW1pbmcgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYwppbmRleCBiNTZjZmZjLi45MTcyNzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMKQEAgLTEyNiw3ICsxMjYsNiBAQAogCW11dGV4X2xvY2soJmR2Yi0+bG9jayk7CiAJZHZiLT5uZmVlZHMtLTsKIAlpZiAoMCA9PSBkdmItPm5mZWVkcyAgJiYgIE5VTEwgIT0gZHZiLT50aHJlYWQpIHsKLQkJLy8gRklYTUU6IGN4ODgwMl9jYW5jZWxfYnVmZmVycyhkZXYpOwogCQllcnIgPSBrdGhyZWFkX3N0b3AoZHZiLT50aHJlYWQpOwogCQlkdmItPnRocmVhZCA9IE5VTEw7CiAJfQpAQCAtMTM0LDMwICsxMzMsMzggQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3RlcihzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIsCitzdGF0aWMgaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmZSwKIAkJCSAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLAogCQkJICB2b2lkICphZGFwdGVyX3ByaXYsCiAJCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIpCisJCQkgIGNoYXIgKmFkYXB0ZXJfbmFtZSwKKwkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIsCisJCQkgIGludCBtZmVfc2hhcmVkKQogewogCWludCByZXN1bHQ7CiAKLQltdXRleF9pbml0KCZkdmItPmxvY2spOworCW11dGV4X2luaXQoJmZlLT5sb2NrKTsKIAogCS8qIHJlZ2lzdGVyIGFkYXB0ZXIgKi8KLQlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyLCBkdmItPm5hbWUsIG1vZHVsZSwgZGV2aWNlLAotCQkJCSAgICAgIGFkYXB0ZXJfbnIpOworCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZmZS0+YWRhcHRlciwgYWRhcHRlcl9uYW1lLCBtb2R1bGUsCisJCWRldmljZSwgYWRhcHRlcl9ucik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCi0JCSAgICAgICBkdmItPm5hbWUsIHJlc3VsdCk7Ci0JCWdvdG8gZmFpbF9hZGFwdGVyOworCQkgICAgICAgYWRhcHRlcl9uYW1lLCByZXN1bHQpOwogCX0KLQlkdmItPmFkYXB0ZXIucHJpdiA9IGFkYXB0ZXJfcHJpdjsKKwlmZS0+YWRhcHRlci5wcml2ID0gYWRhcHRlcl9wcml2OworCWZlLT5hZGFwdGVyLm1mZV9zaGFyZWQgPSBtZmVfc2hhcmVkOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YikKK3sKKwlpbnQgcmVzdWx0OwogCiAJLyogcmVnaXN0ZXIgZnJvbnRlbmQgKi8KLQlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmR2Yi0+YWRhcHRlciwgZHZiLT5mcm9udGVuZCk7CisJcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGFkYXB0ZXIsIGR2Yi0+ZnJvbnRlbmQpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKIAkJICAgICAgIGR2Yi0+bmFtZSwgcmVzdWx0KTsKQEAgLTE4Myw3ICsxOTAsOCBAQAogCWR2Yi0+ZG14ZGV2LmZpbHRlcm51bSAgICA9IDI1NjsKIAlkdmItPmRteGRldi5kZW11eCAgICAgICAgPSAmZHZiLT5kZW11eC5kbXg7CiAJZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKLQlyZXN1bHQgPSBkdmJfZG14ZGV2X2luaXQoJmR2Yi0+ZG14ZGV2LCAmZHZiLT5hZGFwdGVyKTsKKwlyZXN1bHQgPSBkdmJfZG14ZGV2X2luaXQoJmR2Yi0+ZG14ZGV2LCBhZGFwdGVyKTsKKwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkdmJfZG14ZGV2X2luaXQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKIAkJICAgICAgIGR2Yi0+bmFtZSwgcmVzdWx0KTsKQEAgLTIxNCw3ICsyMjIsMTEgQEAKIAl9CiAKIAkvKiByZWdpc3RlciBuZXR3b3JrIGFkYXB0ZXIgKi8KLQlkdmJfbmV0X2luaXQoJmR2Yi0+YWRhcHRlciwgJmR2Yi0+bmV0LCAmZHZiLT5kZW11eC5kbXgpOworCWR2Yl9uZXRfaW5pdChhZGFwdGVyLCAmZHZiLT5uZXQsICZkdmItPmRlbXV4LmRteCk7CisJaWYgKGR2Yi0+bmV0LmR2YmRldiA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9mZV9jb25uOworCX0KIAlyZXR1cm4gMDsKIAogZmFpbF9mZV9jb25uOgpAQCAtMjI5LDMwICsyNDEsMTUxIEBACiAJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7CiBmYWlsX2Zyb250ZW5kOgogCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7Ci0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKLWZhaWxfYWRhcHRlcjoKKwlkdmItPmZyb250ZW5kID0gTlVMTDsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiKQotewotCWR2Yl9uZXRfcmVsZWFzZSgmZHZiLT5uZXQpOwotCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX21lbSk7Ci0JZHZiLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfaHcpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZHZiLT5kbXhkZXYpOwotCWR2Yl9kbXhfcmVsZWFzZSgmZHZiLT5kZW11eCk7Ci0JZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7Ci0JZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZyb250ZW5kKTsKLQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIpOwotfQotCi1FWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIGNvbXBpbGUtY29tbWFuZDogIm1ha2UgRFZCPTEiCi0gKiBFbmQ6Ci0gKi8KKy8qIFJlZ2lzdGVyIGEgc2luZ2xlIGFkYXB0ZXIgYW5kIG9uZSBvciBtb3JlIGZyb250ZW5kcyAqLworaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCisJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKKwkJCSAgdm9pZCAqYWRhcHRlcl9wcml2LAorCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKKwlpbnQgcmVzOworCisJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKGYsIDEpOworCWlmICghZmUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBhZGFwdGVyIHdoaWNoIGhhcyBubyBmcm9udGVuZHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBCcmluZyB1cCB0aGUgYWRhcHRlciAqLworCXJlcyA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9hZGFwdGVyKGYsIG1vZHVsZSwgYWRhcHRlcl9wcml2LCBkZXZpY2UsCisJCWZlLT5kdmIubmFtZSwgYWRhcHRlcl9uciwgbWZlX3NoYXJlZCk7CisJaWYgKHJlcyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlkZW9idWZfZHZiX3JlZ2lzdGVyX2FkYXB0ZXIgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwgcmVzKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBBdHRhY2ggYWxsIG9mIHRoZSBmcm9udGVuZHMgdG8gdGhlIGFkYXB0ZXIgKi8KKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgcSwgJmYtPmZlbGlzdCkgeworCQlmZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCwgZmVsaXN0KTsKKwkJcmVzID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZmLT5hZGFwdGVyLCAmZmUtPmR2Yik7CisJCWlmIChyZXMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2Zyb250ZW5kIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCisJCQkJZmUtPmR2Yi5uYW1lLCByZXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKGYpOworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMpOworCit2b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyhzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKKworCW11dGV4X2xvY2soJmYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmR2Yi5uZXQuZHZiZGV2KSB7CisJCQlkdmJfbmV0X3JlbGVhc2UoJmZlLT5kdmIubmV0KTsKKwkJCWZlLT5kdmIuZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmUtPmR2Yi5kZW11eC5kbXgsCisJCQkJJmZlLT5kdmIuZmVfbWVtKTsKKwkJCWZlLT5kdmIuZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmUtPmR2Yi5kZW11eC5kbXgsCisJCQkJJmZlLT5kdmIuZmVfaHcpOworCQkJZHZiX2RteGRldl9yZWxlYXNlKCZmZS0+ZHZiLmRteGRldik7CisJCQlkdmJfZG14X3JlbGVhc2UoJmZlLT5kdmIuZGVtdXgpOworCQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZmUtPmR2Yi5mcm9udGVuZCk7CisJCX0KKwkJaWYgKGZlLT5kdmIuZnJvbnRlbmQpCisJCQkvKiBhbHdheXMgYWxsb2NhdGVkLCBtYXkgaGF2ZSBiZWVuIHJlc2V0ICovCisJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGZlLT5kdmIuZnJvbnRlbmQpOworCQlsaXN0X2RlbChsaXN0KTsKKwkJa2ZyZWUoZmUpOworCX0KKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZi0+YWRhcHRlcik7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyk7CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKnZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoCisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSwgKnJldCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmlkID09IGlkKSB7CisJCQlyZXQgPSBmZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQpOworCitpbnQgdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCisJc3RydWN0IGR2Yl9mcm9udGVuZCAqcCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmR2Yi5mcm9udGVuZCA9PSBwKSB7CisJCQlyZXQgPSBmZS0+aWQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZCk7CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKnZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKQoreworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOworCisJZmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZlID09IE5VTEwpCisJCWdvdG8gZmFpbF9hbGxvYzsKKworCWZlLT5pZCA9IGlkOworCW11dGV4X2luaXQoJmZlLT5kdmIubG9jayk7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZmZS0+ZmVsaXN0LCAmZi0+ZmVsaXN0KTsKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCitmYWlsX2FsbG9jOgorCXJldHVybiBmZTsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggNjVjOGFmMS4uN2Q3ZTUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTEyOCwxMiArMTI4LDU2IEBACiAJaW50ICAgZGVwdGg7CiB9OwogCi1zdGF0aWMgc3RydWN0IHZpdmlfZm10IGZvcm1hdCA9IHsKLQkubmFtZSAgICAgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCi0JLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1lVWVYsCi0JLmRlcHRoICAgID0gMTYsCitzdGF0aWMgc3RydWN0IHZpdmlfZm10IGZvcm1hdHNbXSA9IHsKKwl7CisJCS5uYW1lICAgICA9ICI0OjI6MiwgcGFja2VkLCBZVVlWIiwKKwkJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1lVWVYsCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiNDoyOjIsIHBhY2tlZCwgVVlWWSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIlJHQjU2NSAoTEUpIiwKKwkJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1JHQjU2NSwgLyogZ2dnYmJiYmIgcnJycnJnZ2cgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NjUgKEJFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NjVYLCAvKiBycnJycmdnZyBnZ2diYmJiYiAqLworCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIlJHQjU1NSAoTEUpIiwKKwkJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1JHQjU1NSwgLyogZ2dnYmJiYmIgYXJycnJyZ2cgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NTUgKEJFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NTVYLCAvKiBhcnJycnJnZyBnZ2diYmJiYiAqLworCQkuZGVwdGggICAgPSAxNiwKKwl9LAogfTsKIAorc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCAqZ2V0X2Zvcm1hdChzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHZpdmlfZm10ICpmbXQ7CisJdW5zaWduZWQgaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShmb3JtYXRzKTsgaysrKSB7CisJCWZtdCA9ICZmb3JtYXRzW2tdOworCQlpZiAoZm10LT5mb3VyY2MgPT0gZi0+Zm10LnBpeC5waXhlbGZvcm1hdCkKKwkJCWJyZWFrOworCX0KKworCWlmIChrID09IEFSUkFZX1NJWkUoZm9ybWF0cykpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICZmb3JtYXRzW2tdOworfQorCiBzdHJ1Y3Qgc2dfdG9fYWRkciB7CiAJaW50IHBvczsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwpAQCAtMTkwLDYgKzIzNCw3IEBACiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgdmJfdmlkcTsKIAogCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgIHR5cGU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgYmFyc1s4XVszXTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM0LDEzICsyNzksMTA3IEBACiAjZGVmaW5lIFRTVEFNUF9NQVhfWSBUU1RBTVBfTUlOX1krMTUKICNkZWZpbmUgVFNUQU1QX01JTl9YIDY0CiAKLXN0YXRpYyB2b2lkIGdlbl9saW5lKGNoYXIgKmJhc2VwLCBpbnQgaW5pcG9zLCBpbnQgd21heCwKK3N0YXRpYyB2b2lkIGdlbl90d29waXgoc3RydWN0IHZpdmlfZmggKmZoLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb2xvcnBvcykKK3sKKwl1bnNpZ25lZCBjaGFyIHJfeSwgZ191LCBiX3Y7CisJdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgY29sb3I7CisKKwlyX3kgPSBmaC0+YmFyc1tjb2xvcnBvc11bMF07IC8qIFIgb3IgcHJlY2FsY3VsYXRlZCBZICovCisJZ191ID0gZmgtPmJhcnNbY29sb3Jwb3NdWzFdOyAvKiBHIG9yIHByZWNhbGN1bGF0ZWQgVSAqLworCWJfdiA9IGZoLT5iYXJzW2NvbG9ycG9zXVsyXTsgLyogQiBvciBwcmVjYWxjdWxhdGVkIFYgKi8KKworCWZvciAoY29sb3IgPSAwOyBjb2xvciA8IDQ7IGNvbG9yKyspIHsKKwkJcCA9IGJ1ZiArIGNvbG9yOworCisJCXN3aXRjaCAoZmgtPmZtdC0+Zm91cmNjKSB7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSByX3k7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJKnAgPSBnX3U7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJKnAgPSBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IHJfeTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQkqcCA9IGdfdTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQkqcCA9IGJfdjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAoZ191IDw8IDUpIHwgYl92OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJY2FzZSAzOgorCQkJCSpwID0gKHJfeSA8PCAzKSB8IChnX3UgPj4gMyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1WDoKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMjoKKwkJCQkqcCA9IChyX3kgPDwgMykgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJY2FzZSAzOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAoZ191IDw8IDUpIHwgYl92OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJY2FzZSAzOgorCQkJCSpwID0gKHJfeSA8PCAyKSB8IChnX3UgPj4gMyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1WDoKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMjoKKwkJCQkqcCA9IChyX3kgPDwgMikgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJY2FzZSAzOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnZW5fbGluZShzdHJ1Y3Qgdml2aV9maCAqZmgsIGNoYXIgKmJhc2VwLCBpbnQgaW5pcG9zLCBpbnQgd21heCwKIAkJaW50IGhtYXgsIGludCBsaW5lLCBpbnQgY291bnQsIGNoYXIgKnRpbWVzdHIpCiB7Ci0JaW50ICB3LCBpLCBqLCB5OworCWludCAgdywgaSwgajsKIAlpbnQgcG9zID0gaW5pcG9zOwotCWNoYXIgKnAsICpzOwotCXU4ICAgY2hyLCByLCBnLCBiLCBjb2xvcjsKKwljaGFyICpzOworCXU4IGNocjsKIAogCS8qIFdlIHdpbGwganVzdCBkdXBsaWNhdGUgdGhlIHNlY29uZCBwaXhlbCBhdCB0aGUgcGFja2V0ICovCiAJd21heCAvPSAyOwpAQCAtMjQ4LDI3ICszODcsOSBAQAogCS8qIEdlbmVyYXRlIGEgc3RhbmRhcmQgY29sb3IgYmFyIHBhdHRlcm4gKi8KIAlmb3IgKHcgPSAwOyB3IDwgd21heDsgdysrKSB7CiAJCWludCBjb2xvcnBvcyA9ICgodyArIGNvdW50KSAqIDgvKHdtYXggKyAxKSkgJSA4OwotCQlyID0gYmFyc1tjb2xvcnBvc11bMF07Ci0JCWcgPSBiYXJzW2NvbG9ycG9zXVsxXTsKLQkJYiA9IGJhcnNbY29sb3Jwb3NdWzJdOwogCi0JCWZvciAoY29sb3IgPSAwOyBjb2xvciA8IDQ7IGNvbG9yKyspIHsKLQkJCXAgPSBiYXNlcCArIHBvczsKLQotCQkJc3dpdGNoIChjb2xvcikgewotCQkJY2FzZSAwOgotCQkJY2FzZSAyOgotCQkJCSpwID0gVE9fWShyLCBnLCBiKTsJLyogTHVtYSAqLwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCSpwID0gVE9fVShyLCBnLCBiKTsJLyogQ2IgKi8KLQkJCQlicmVhazsKLQkJCWNhc2UgMzoKLQkJCQkqcCA9IFRPX1YociwgZywgYik7CS8qIENyICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlwb3MrKzsKLQkJfQorCQlnZW5fdHdvcGl4KGZoLCBiYXNlcCArIHBvcywgY29sb3Jwb3MpOworCQlwb3MgKz0gNDsgLyogb25seSAxNiBicHAgc3VwcG9ydGVkIGZvciBub3cgKi8KIAl9CiAKIAkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aW1lc3RhbXAgKi8KQEAgLTI4MywzOCArNDA0LDEyIEBACiAJCWZvciAocyA9IHRpbWVzdHI7ICpzOyBzKyspIHsKIAkJCWNociA9IHJvbTh4MTZfYml0c1soKnMtMHgzMCkqMTYrbGluZS1UU1RBTVBfTUlOX1ldOwogCQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJCWlmIChjaHIgJiAxIDw8ICg3IC0gaSkpIHsKLQkJCQkJLyogRm9udCBjb2xvciovCi0JCQkJCXIgPSAwOwotCQkJCQlnID0gMTk4OwotCQkJCQliID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBCYWNrZ3JvdW5kIGNvbG9yICovCi0JCQkJCXIgPSBiYXJzW0JMQUNLXVswXTsKLQkJCQkJZyA9IGJhcnNbQkxBQ0tdWzFdOwotCQkJCQliID0gYmFyc1tCTEFDS11bMl07Ci0JCQkJfQotCiAJCQkJcG9zID0gaW5pcG9zICsgaiAqIDI7Ci0JCQkJZm9yIChjb2xvciA9IDA7IGNvbG9yIDwgNDsgY29sb3IrKykgewotCQkJCQlwID0gYmFzZXAgKyBwb3M7Ci0KLQkJCQkJeSA9IFRPX1kociwgZywgYik7Ci0KLQkJCQkJc3dpdGNoIChjb2xvcikgewotCQkJCQljYXNlIDA6Ci0JCQkJCWNhc2UgMjoKLQkJCQkJCSpwID0gVE9fWShyLCBnLCBiKTsgLyogTHVtYSAqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMToKLQkJCQkJCSpwID0gVE9fVShyLCBnLCBiKTsgLyogQ2IgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDM6Ci0JCQkJCQkqcCA9IFRPX1YociwgZywgYik7IC8qIENyICovCi0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlwb3MrKzsKLQkJCQl9CisJCQkJLyogRHJhdyB3aGl0ZSBmb250IG9uIGJsYWNrIGJhY2tncm91bmQgKi8KKwkJCQlpZiAoY2hyICYgMSA8PCAoNyAtIGkpKQorCQkJCQlnZW5fdHdvcGl4KGZoLCBiYXNlcCArIHBvcywgV0hJVEUpOworCQkJCWVsc2UKKwkJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIEJMQUNLKTsKIAkJCQlqKys7CiAJCQl9CiAJCX0KQEAgLTMyNCw4ICs0MTksOSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgdml2aV9maWxsYnVmZihzdHJ1Y3Qgdml2aV9kZXYgKmRldiwgc3RydWN0IHZpdmlfYnVmZmVyICpidWYpCitzdGF0aWMgdm9pZCB2aXZpX2ZpbGxidWZmKHN0cnVjdCB2aXZpX2ZoICpmaCwgc3RydWN0IHZpdmlfYnVmZmVyICpidWYpCiB7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCWludCBoICwgcG9zID0gMDsKIAlpbnQgaG1heCAgPSBidWYtPnZiLmhlaWdodDsKIAlpbnQgd21heCAgPSBidWYtPnZiLndpZHRoOwpAQCAtMzQxLDcgKzQzNyw3IEBACiAJCXJldHVybjsKIAogCWZvciAoaCA9IDA7IGggPCBobWF4OyBoKyspIHsKLQkJZ2VuX2xpbmUodG1wYnVmLCAwLCB3bWF4LCBobWF4LCBoLCBkZXYtPm12X2NvdW50LAorCQlnZW5fbGluZShmaCwgdG1wYnVmLCAwLCB3bWF4LCBobWF4LCBoLCBkZXYtPm12X2NvdW50LAogCQkJIGRldi0+dGltZXN0cik7CiAJCW1lbWNweSh2YnVmICsgcG9zLCB0bXBidWYsIHdtYXggKiAyKTsKIAkJcG9zICs9IHdtYXgqMjsKQEAgLTQxMCw3ICs1MDYsNyBAQAogCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CiAKIAkvKiBGaWxsIGJ1ZmZlciAqLwotCXZpdmlfZmlsbGJ1ZmYoZGV2LCBidWYpOworCXZpdmlfZmlsbGJ1ZmYoZmgsIGJ1Zik7CiAJZHByaW50ayhkZXYsIDEsICJmaWxsZWQgYnVmZmVyICVwXG4iLCBidWYpOwogCiAJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKQEAgLTYzNiwxMSArNzMyLDE1IEBACiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKLQlpZiAoZi0+aW5kZXggPiAwKQorCXN0cnVjdCB2aXZpX2ZtdCAqZm10OworCisJaWYgKGYtPmluZGV4ID49IEFSUkFZX1NJWkUoZm9ybWF0cykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm9ybWF0Lm5hbWUsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOwotCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0LmZvdXJjYzsKKwlmbXQgPSAmZm9ybWF0c1tmLT5pbmRleF07CisKKwlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCBmbXQtPm5hbWUsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOworCWYtPnBpeGVsZm9ybWF0ID0gZm10LT5mb3VyY2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3MCwxMyArNzcwLDEyIEBACiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwogCXVuc2lnbmVkIGludCBtYXh3LCBtYXhoOwogCi0JaWYgKGZvcm1hdC5mb3VyY2MgIT0gZi0+Zm10LnBpeC5waXhlbGZvcm1hdCkgewotCQlkcHJpbnRrKGRldiwgMSwgIkZvdXJjYyBmb3JtYXQgKDB4JTA4eCkgaW52YWxpZC4gIgotCQkJIkRyaXZlciBhY2NlcHRzIG9ubHkgMHglMDh4XG4iLAotCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCwgZm9ybWF0LmZvdXJjYyk7CisJZm10ID0gZ2V0X2Zvcm1hdChmKTsKKwlpZiAoIWZtdCkgeworCQlkcHJpbnRrKGRldiwgMSwgIkZvdXJjYyBmb3JtYXQgKDB4JTA4eCkgaW52YWxpZC5cbiIsCisJCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWZtdCA9ICZmb3JtYXQ7CiAKIAlmaWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAKQEAgLTcxNCw2ICs4MTMsOCBAQAogewogCXN0cnVjdCB2aXZpX2ZoICAqZmggPSBwcml2OwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZmaC0+dmJfdmlkcTsKKwl1bnNpZ25lZCBjaGFyIHIsIGcsIGI7CisJaW50IGssIGlzX3l1djsKIAogCWludCByZXQgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKIAlpZiAocmV0IDwgMCkKQEAgLTcyNywxMiArODI4LDQ5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZoLT5mbXQgICAgICAgICAgID0gJmZvcm1hdDsKKwlmaC0+Zm10ICAgICAgICAgICA9IGdldF9mb3JtYXQoZik7CiAJZmgtPndpZHRoICAgICAgICAgPSBmLT5mbXQucGl4LndpZHRoOwogCWZoLT5oZWlnaHQgICAgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7CiAJZmgtPnZiX3ZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwogCWZoLT50eXBlICAgICAgICAgID0gZi0+dHlwZTsKIAorCS8qIHByZWNhbGN1bGF0ZSBjb2xvciBiYXIgdmFsdWVzIHRvIHNwZWVkIHVwIHJlbmRlcmluZyAqLworCWZvciAoayA9IDA7IGsgPCA4OyBrKyspIHsKKwkJciA9IGJhcnNba11bMF07CisJCWcgPSBiYXJzW2tdWzFdOworCQliID0gYmFyc1trXVsyXTsKKwkJaXNfeXV2ID0gMDsKKworCQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgeworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCQkJaXNfeXV2ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6CisJCQlyID4+PSAzOworCQkJZyA+Pj0gMjsKKwkJCWIgPj49IDM7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTVYOgorCQkJciA+Pj0gMzsKKwkJCWcgPj49IDM7CisJCQliID4+PSAzOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXNfeXV2KSB7CisJCQlmaC0+YmFyc1trXVswXSA9IFRPX1kociwgZywgYik7CS8qIEx1bWEgKi8KKwkJCWZoLT5iYXJzW2tdWzFdID0gVE9fVShyLCBnLCBiKTsJLyogQ2IgKi8KKwkJCWZoLT5iYXJzW2tdWzJdID0gVE9fVihyLCBnLCBiKTsJLyogQ3IgKi8KKwkJfSBlbHNlIHsKKwkJCWZoLT5iYXJzW2tdWzBdID0gcjsKKwkJCWZoLT5iYXJzW2tdWzFdID0gZzsKKwkJCWZoLT5iYXJzW2tdWzJdID0gYjsKKwkJfQorCX0KKwogCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKQEAgLTg4Niw4ICsxMDI0LDYgQEAKIAlGaWxlIG9wZXJhdGlvbnMgZm9yIHRoZSBkZXZpY2UKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgbGluZV9idWZfc2l6ZShub3JtKSAobm9ybV9tYXh3KG5vcm0pKihmb3JtYXQuZGVwdGgrNykvOCkKLQogc3RhdGljIGludCB2aXZpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKQEAgLTkzNiw3ICsxMDcyLDcgQEAKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CiAKIAlmaC0+dHlwZSAgICAgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZmgtPmZtdCAgICAgID0gJmZvcm1hdDsKKwlmaC0+Zm10ICAgICAgPSAmZm9ybWF0c1swXTsKIAlmaC0+d2lkdGggICAgPSA2NDA7CiAJZmgtPmhlaWdodCAgID0gNDgwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCmluZGV4IDQ1YmU5ZWMuLjY3YWEwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCkBAIC0yMiwzMiArMjIsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAKLSNkZWZpbmUgSTJDX1ZQWDMyMjAgICAgICAgIDB4ODYKLSNkZWZpbmUgVlBYMzIyMF9ERUJVRwlLRVJOX0RFQlVHICJ2cHgzMjIwOiAiCitNT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAjZGVmaW5lIFZQWF9USU1FT1VUX0NPVU5UICAxMAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjcsMTAgKzU2LDggQEAKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgImludGVybmFsIiwgImNvbXBvc2l0ZSIsICJzdmlkZW8iIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW5saW5lIGludAotdnB4MzIyMF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorCitzdGF0aWMgaW5saW5lIGludCB2cHgzMjIwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtNzgsMTUgKzY1LDEyIEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXZweDMyMjBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9mcF9zdGF0dXMgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHZweDMyMjBfZnBfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xMDYsMTQgKzkwLDExIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2ZwX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgIHU4ICAgICAgICAgICAgICAgICBmcGFkZHIsCi0JCSAgdTE2ICAgICAgICAgICAgICAgIGRhdGEpCitzdGF0aWMgaW50IHZweDMyMjBfZnBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggZnBhZGRyLCB1MTYgZGF0YSkKIHsKIAkvKiBXcml0ZSB0aGUgMTYtYml0IGFkZHJlc3MgdG8gdGhlIEZQV1IgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjcsIHN3YWIxNihmcGFkZHIpKSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjIsMjIgKzEwMywyMCBAQAogCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBkYXRhIHRvIHRoZSBGUERBVCByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyOCwgc3dhYjE2KGRhdGEpKSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYKLXZweDMyMjBfZnBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHUxNiAgICAgICAgICAgICAgICBmcGFkZHIpCitzdGF0aWMgdTE2IHZweDMyMjBfZnBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgZnBhZGRyKQogewogCXMxNiBkYXRhOwogCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFJEIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI2LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTQ3LDI1ICsxMjYsMjIgQEAKIAkvKiBSZWFkIHRoZSAxNi1iaXQgZGF0YSBmcm9tIHRoZSBGUERBVCByZWdpc3RlciAqLwogCWRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAweDI4KTsKIAlpZiAoZGF0YSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIHN3YWIxNihkYXRhKTsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gLTE7CiAKIAl3aGlsZSAobGVuID49IDIpIHsKIAkJcmVnID0gKmRhdGErKzsKLQkJaWYgKChyZXQgPQotCQkgICAgIHZweDMyMjBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspKSA8IDApCisJCXJldCA9IHZweDMyMjBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCQlsZW4gLT0gMjsKIAl9CkBAIC0xNzMsMTAgKzE0OSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF93cml0ZV9mcF9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHUxNiAgICAgICAgICpkYXRhLAotCQkJdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQljb25zdCB1MTYgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwpAQCAtMjg1LDI1ICsyNTksMjAgQEAKIAkweDRiLCAweDI5OCwJCS8qIFBMTCBnYWluICovCiB9OwogCi1zdGF0aWMgdm9pZAotdnB4MzIyMF9kdW1wX2kyYyAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIHZweDMyMjBfZHVtcF9pMmMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpbnQgbGVuID0gc2l6ZW9mKGluaXRfY29tbW9uKTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW5pdF9jb21tb247CiAKIAl3aGlsZSAobGVuID4gMSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHICJ2cHgzMjE2YiBpMmMgcmVnIDB4JTAyeCBkYXRhIDB4JTAyeFxuIiwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaTJjIHJlZyAweCUwMnggZGF0YSAweCUwMnhcbiIsCiAJCQkqZGF0YSwgdnB4MzIyMF9yZWFkKGNsaWVudCwgKmRhdGEpKTsKIAkJZGF0YSArPSAyOwogCQlsZW4gLT0gMjsKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCB2cHgzMjIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMzE1LDcgKzI4NCw2IEBACiAJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X2ZwLAogCQkJCSAgICAgICBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CiAJCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKIAkJCQkJICAgICAgIHNpemVvZihpbml0X250c2MpID4+IDEpOwpAQCAtMzM0LDIxICszMDIsMjAgQEAKIAkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CiAJCQlicmVhazsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0RVTVA6CiAJewogCQl2cHgzMjIwX2R1bXBfaTJjKGNsaWVudCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKIAl7CiAJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBERUNPREVSX0dFVF9DQVBBQklMSVRJRVNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTXG4iKTsKIAogCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAogCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfApAQCAtMzU3LDIwICszMjQsMTggQEAKIAkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDM7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CiAJCWludCByZXMgPSAwLCBzdGF0dXM7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBERUNPREVSX0dFVF9TVEFUVVNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKIAogCQlzdGF0dXMgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweDBmMyk7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM6IDB4JTA0eFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCXN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDR4XG4iLCBzdGF0dXMpOwogCiAJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuIHN0YXR1czsKQEAgLTM3OSw3ICszNDQsNiBAQAogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0QgfCBERUNPREVSX1NUQVRVU19DT0xPUjsKIAogCQkJc3dpdGNoIChzdGF0dXMgJiAweDE4KSB7Ci0KIAkJCWNhc2UgMHgwMDoKIAkJCWNhc2UgMHgxMDoKIAkJCWNhc2UgMHgxNDoKQEAgLTQwMCw4ICszNjQsOCBAQAogCQl9CiAKIAkJKihpbnQgKikgYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCXsKQEAgLTQxMyw1MCArMzc3LDQzIEBACiAJCSAgIGNob29zZW4gdmlkZW8gbm9ybSAqLwogCQl0ZW1wX2lucHV0ID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMik7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogREVDT0RFUl9TRVRfTk9STSAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9TRVRfTk9STSAlZFxuIiwgKmlhcmcpOwogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfUEFMOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfcGFsLAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFBBTFxuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfU0VDQU06CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9zZWNhbSwKIAkJCQkJICAgICAgIHNpemVvZihpbml0X3NlY2FtKSA+PiAxKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gU0VDQU1cbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX0FVVE86CiAJCQkvKiBGSVhNRSBUaGlzIGlzIG9ubHkgcHJlbGltaW5hcnkgc3VwcG9ydCAqLwogCQkJZGF0YSA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpICYgMHgyMDsKIAkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweGYyLCAweDAwYzAgfCBkYXRhKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBBdXRvXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBBVVRPXG4iKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9CiAJCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKIAogCQkvKiBBbmQgaGVyZSB3ZSBzZXQgdGhlIGJhY2tlZCB1cCB2aWRlbyBpbnB1dCBhZ2FpbiAqLwogCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgdGVtcF9pbnB1dCB8IDB4MDAxMCk7CiAJCXVkZWxheSgxMCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTQ3NSw4ICs0MzIsNyBAQAogCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gMikKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogaW5wdXQgc3dpdGNoZWQgdG8gJXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpbnB1dHNbKmlhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5wdXQgc3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1sqaWFyZ10pOwogCiAJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweDMzLCBpbnB1dFsqaWFyZ11bMF0pOwogCkBAIC00ODgsOCArNDQ0LDggQEAKIAkJCQkgZGF0YSB8IChpbnB1dFsqaWFyZ11bMV0gPDwgNSkgfCAweDAwMTApOwogCiAJCXVkZWxheSgxMCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAl7CkBAIC00OTksMTkgKzQ1NSwxOCBAQAogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfRU5BQkxFX09VVFBVVCAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9FTkFCTEVfT1VUUFVUICVkXG4iLCAqaWFyZyk7CiAKIAkJdnB4MzIyMF93cml0ZShjbGllbnQsIDB4ZjIsICgqaWFyZyA/IDB4MWIgOiAweDAwKSk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewpAQCAtNTQyLDggKzQ5Nyw4IEBACiAJCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHgxYywKIAkJCQkJICgoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDYpICYgMHhGRkYpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU1Miw4ICs1MDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2luaXRfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJdnB4MzIyMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9mcCwgc2l6ZW9mKGluaXRfZnApID4+IDEpOwpAQCAtNTY3LDExNSArNTIxLDI2IEBACiAgKiBDbGllbnQgbWFuYWdlbWVudCBjb2RlCiAgKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPQotICAgIHsgSTJDX1ZQWDMyMjAgPj4gMSwgKEkyQ19WUFgzMjIwID4+IDEpICsgNCwKLQlJMkNfQ0xJRU5UX0VORAotfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODYgPj4gMSwgMHg4ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2cHgzMjIwX2kyY19kcml2ZXI7Ci0KLXN0YXRpYyBpbnQKLXZweDMyMjBfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdnB4MzIyMF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyOwotCi0JZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlc1xuIiwgX19mdW5jX18pOworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCXU4IHZlcjsKKwl1MTYgcG47CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eQotCSAgICAoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKLQkJcmV0dXJuIDA7Ci0KLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gTlVMTCkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmdnB4MzIyMF9pMmNfZHJpdmVyOwotCi0JLyogQ2hlY2sgZm9yIG1hbnVmYWN0dXJlIElEIGFuZCBwYXJ0IG51bWJlciAqLwotCWlmIChraW5kIDwgMCkgewotCQl1OCBpZDsKLQkJdTE2IHBuOwotCi0JCWlkID0gdnB4MzIyMF9yZWFkKGNsaWVudCwgMHgwMCk7Ci0JCWlmIChpZCAhPSAweGVjKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJInZweDMyMjBfYXR0YWNoOiBXcm9uZyBtYW51ZmFjdHVyZXIgSUQgKDB4JTAyeClcbiIsCi0JCQkJaWQpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcG4gPSAodnB4MzIyMF9yZWFkKGNsaWVudCwgMHgwMikgPDwgOCkgKwotCQkgICAgdnB4MzIyMF9yZWFkKGNsaWVudCwgMHgwMSk7Ci0JCXN3aXRjaCAocG4pIHsKLQkJY2FzZSAweDQ2ODA6Ci0JCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJ2cHgzMjIwYSIsCi0JCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4NDI2MDoKLQkJCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInZweDMyMTZiIiwKLQkJCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0MjgwOgotCQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAidnB4MzIxNGMiLAotCQkJCXNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IFdyb25nIHBhcnQgbnVtYmVyICgweCUwNHgpXG4iLAotCQkJCV9fZnVuY19fLCBwbik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJmb3JjZWQgdnB4MzJ4eCIsCi0JCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCX0KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZweDMyMjApLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKQEAgLTY4NSw2MyArNTUwLDUyIEBACiAJZGVjb2Rlci0+c2F0ID0gMzI3Njg7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBlcnI7CisJdmVyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMCk7CisJcG4gPSAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMikgPDwgOCkgKworCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAxKTsKKwlpZiAodmVyID09IDB4ZWMpIHsKKwkJc3dpdGNoIChwbikgeworCQljYXNlIDB4NDY4MDoKKwkJCW5hbWUgPSAidnB4MzIyMGEiOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MjYwOgorCQkJbmFtZSA9ICJ2cHgzMjE2YiI7CisJCQlicmVhazsKKwkJY2FzZSAweDQyODA6CisJCQluYW1lID0gInZweDMyMTRjIjsKKwkJCWJyZWFrOworCQl9CiAJfQotCi0JZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB2cHgzMnh4IGNsaWVudCBmb3VuZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSwgY2xpZW50LT5hZGRyIDw8IDEpOworCWlmIChuYW1lKQorCQl2NGxfaW5mbyhjbGllbnQsICIlcyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgbmFtZSwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCWVsc2UKKwkJdjRsX2luZm8oY2xpZW50LCAiY2hpcCAoJTAyeDolMDR4KSBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCXZlciwgcG4sIGNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJdnB4MzIyMF9pbml0X2NsaWVudChjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgdnB4MzIyMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZ2cHgzMjIwX2RldGVjdF9jbGllbnQpOwotCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGkyY19wcm9iZSByZXR1cm5lZCAlZFxuIiwKLQkJX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgY29kZQotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2cHgzMjIwX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidnB4MzIyMCIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gdnB4MzIyMF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHZweDMyMjBfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHZweDMyMjBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB2cHgzMjIwX2lkW10gPSB7CisJeyAidnB4MzIyMGEiLCAwIH0sCisJeyAidnB4MzIxNmIiLCAwIH0sCisJeyAidnB4MzIxNGMiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHZweDMyMjBfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotdnB4MzIyMF9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdnB4MzIyMF9pMmNfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci12cHgzMjIwX2NsZWFudXAgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnZweDMyMjBfaTJjX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHZweDMyMjBfaW5pdCk7Ci1tb2R1bGVfZXhpdCh2cHgzMjIwX2NsZWFudXApOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAidnB4MzIyMCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCisJLmNvbW1hbmQgPSB2cHgzMjIwX2NvbW1hbmQsCisJLnByb2JlID0gdnB4MzIyMF9wcm9iZSwKKwkucmVtb3ZlID0gdnB4MzIyMF9yZW1vdmUsCisJLmlkX3RhYmxlID0gdnB4MzIyMF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCmluZGV4IDMyODJiZTcuLmZhNWYyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCkBAIC04MTcsNiArODE3LDcgQEAKIAltZW1jcHkoJnpyLT5pMmNfYWxnbywgJnpvcmFuX2kyY19iaXRfZGF0YV90ZW1wbGF0ZSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSkpOwogCXpyLT5pMmNfYWxnby5kYXRhID0genI7CisJenItPmkyY19hZGFwdGVyLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKIAl6ci0+aTJjX2FkYXB0ZXIuaWQgPSBJMkNfSFdfQl9aUjM2MDY3OwogCXpyLT5pMmNfYWRhcHRlci5jbGllbnRfcmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyOwogCXpyLT5pMmNfYWRhcHRlci5jbGllbnRfdW5yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfdW5yZWdpc3RlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDI1ZGU3NjMuLmRiMTFhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtMjk5Niw3ICsyOTk2LDYgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDMsICJ1bnN1cHBvcnRlZFxuIik7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKIAkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCmluZGV4IDZlMjkxYmYuLjUyNjM5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCkBAIC0xMDQ0LDcgKzEwNDQsNiBAQAogCiAJCXNfYXR0ci0+ZGV2X2F0dHIuYXR0ci5uYW1lID0gc19hdHRyLT5uYW1lOwogCQlzX2F0dHItPmRldl9hdHRyLmF0dHIubW9kZSA9IFNfSVJVR087Ci0JCXNfYXR0ci0+ZGV2X2F0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCQlzX2F0dHItPmRldl9hdHRyLnNob3cgPSBtc3Byb19ibG9ja19hdHRyX3Nob3coc19hdHRyLT5pZCk7CiAKIAkJaWYgKCFyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IDVlZmY4YWQuLjVhNzlkMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtNTIsNiArNTIsOCBAQAogCiBjb25maWcgVUNCMTQwMF9DT1JFCiAJdHJpc3RhdGUgIlBoaWxpcHMgVUNCMTQwMCBDb3JlIGRyaXZlciIKKwlkZXBlbmRzIG9uIEFDOTdfQlVTCisJZGVwZW5kcyBvbiBHUElPTElCCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFVDQjE0MDAgY29yZSBmdW5jdGlvbnMuCiAJICBUaGUgVUNCMTQwMCBpcyBhbiBBQzk3IGF1ZGlvIGNvZGVjLgpAQCAtNTksNiArNjEsMjAgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVjYjE0MDBfY29yZS4KIAorY29uZmlnIFRXTDQwMzBfQ09SRQorCWJvb2wgIlRleGFzIEluc3RydW1lbnRzIFRXTDQwMzAvVFBTNjU5eDAgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEkyQz15ICYmIEdFTkVSSUNfSEFSRElSUVMgJiYgKEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMykKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgaWYgeW91IGhhdmUgVFdMNDAzMCBmYW1pbHkgY2hpcCBvbiB5b3VyIGJvYXJkLgorCSAgVGhpcyBjb3JlIGRyaXZlciBwcm92aWRlcyByZWdpc3RlciBhY2Nlc3MgYW5kIElSUSBoYW5kbGluZworCSAgZmFjaWxpdGllcywgYW5kIHJlZ2lzdGVycyBkZXZpY2VzIGZvciB0aGUgdmFyaW91cyBmdW5jdGlvbnMKKwkgIHNvIHRoYXQgZnVuY3Rpb24tc3BlY2lmaWMgZHJpdmVycyBjYW4gYmluZCB0byB0aGVtLgorCisJICBUaGVzZSBtdWx0aS1mdW5jdGlvbiBjaGlwcyBhcmUgZm91bmQgb24gbWFueSBPTUFQMiBhbmQgT01BUDMKKwkgIGJvYXJkcywgcHJvdmlkaW5nIHBvd2VyIG1hbmFnZW1lbnQsIFJUQywgR1BJTywga2V5cGFkLCBhCisJICBoaWdoIHNwZWVkIFVTQiBPVEcgdHJhbnNjZWl2ZXIsIGFuIGF1ZGlvIGNvZGVjIChvbiBtb3N0CisJICB2ZXJzaW9ucykgYW5kIG1hbnkgb3RoZXIgZmVhdHVyZXMuCisKIGNvbmZpZyBNRkRfVE1JTwogCWJvb2wKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggNzU5YjFmZS4uNjhlMjM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDggQEAKIG9iai0kKENPTkZJR19NRkRfV004MzUwKQkrPSB3bTgzNTAubwogb2JqLSQoQ09ORklHX01GRF9XTTgzNTBfSTJDKQkrPSB3bTgzNTAtaTJjLm8KIAorb2JqLSQoQ09ORklHX1RXTDQwMzBfQ09SRSkJKz0gdHdsNDAzMC1jb3JlLm8KKwogb2JqLSQoQ09ORklHX01GRF9DT1JFKQkJKz0gbWZkLWNvcmUubwogCiBvYmotJChDT05GSUdfTUNQKQkJKz0gbWNwLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggYmE1YWEyMC4uZTRjMGRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXNpYzMuYworKysgYi9kcml2ZXJzL21mZC9hc2ljMy5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJCQkJaXJxbnIgPSBhc2ljLT5pcnFfYmFzZSArCiAJCQkJCQkoQVNJQzNfR1BJT1NfUEVSX0JBTksgKiBiYW5rKQogCQkJCQkJKyBpOwotCQkJCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnFucjsKKwkJCQkJZGVzYyA9IGlycV90b19kZXNjKGlycW5yKTsKIAkJCQkJZGVzYy0+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+bnVtX3Jlc291cmNlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCWdvdG8gZmFpbF9kZXZpY2U7CisKIAlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsCiAJCQljZWxsLT5wbGF0Zm9ybV9kYXRhLCBjZWxsLT5kYXRhX3NpemUpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9kZXZpY2U7CisJCWdvdG8gZmFpbF9yZXM7CiAKLQltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CiAJZm9yIChyID0gMDsgciA8IGNlbGwtPm51bV9yZXNvdXJjZXM7IHIrKykgewogCQlyZXNbcl0ubmFtZSA9IGNlbGwtPnJlc291cmNlc1tyXS5uYW1lOwogCQlyZXNbcl0uZmxhZ3MgPSBjZWxsLT5yZXNvdXJjZXNbcl0uZmxhZ3M7CkBAIC02NCwxMSArNjcsMTUgQEAKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsX2RldmljZTsKKwkJZ290byBmYWlsX3JlczsKKworCWtmcmVlKHJlcyk7CiAKIAlyZXR1cm4gMDsKIAogLyoJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsgKi8KK2ZhaWxfcmVzOgorCWtmcmVlKHJlcyk7CiBmYWlsX2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZmFpbF9hbGxvYzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NtNTAxLmMgYi9kcml2ZXJzL21mZC9zbTUwMS5jCmluZGV4IDdhZWJhZDQuLjIyMGU0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NtNTAxLmMKKysrIGIvZHJpdmVycy9tZmQvc201MDEuYwpAQCAtNjIzLDggKzYyMyw4IEBACiAKIAlzbTUwMV9zeW5jX3JlZ3Moc20pOwogCi0JZGV2X2luZm8oc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAotCQkgZ2F0ZSwgY2xvY2ssIG1vZGUpOworCWRldl9kYmcoc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAorCQlnYXRlLCBjbG9jaywgbW9kZSk7CiAKIAlzbTUwMV9tZGVsYXkoc20sIDE2KTsKIAltdXRleF91bmxvY2soJnNtLT5jbG9ja19sb2NrKTsKQEAgLTc0Miw3ICs3NDIsNyBAQAogCWludCByZXQ7CiAKIAlmb3IgKHB0ciA9IDA7IHB0ciA8IHBkZXYtPm51bV9yZXNvdXJjZXM7IHB0cisrKSB7Ci0JCXByaW50aygiJXNbJWRdIGZsYWdzICUwOGx4OiAlMDhsbHguLiUwOGxseFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzWyVkXSBmbGFncyAlMDhseDogJTA4bGx4Li4lMDhsbHhcbiIsCiAJCSAgICAgICBwZGV2LT5uYW1lLCBwdHIsCiAJCSAgICAgICBwZGV2LT5yZXNvdXJjZVtwdHJdLmZsYWdzLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVtwdHJdLnN0YXJ0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCmluZGV4IDQ5YTBmZmYuLjlmNzAyNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90N2w2NnhiLmMKKysrIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC01Niw2ICs1OCw4IEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCXN0cnVjdCByZXNvdXJjZQkJcnNjcjsKKwlzdHJ1Y3QgY2xrCQkqY2xrNDhtOworCXN0cnVjdCBjbGsJCSpjbGszMms7CiAJaW50CQkJaXJxOwogCWludAkJCWlycV9iYXNlOwogfTsKQEAgLTY1LDEzICs2OSwxMSBAQAogc3RhdGljIGludCB0N2w2NnhiX21tY19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbW1jKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgICAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CiAKLQlpZiAocGRhdGEtPmVuYWJsZV9jbGszMmspCi0JCXBkYXRhLT5lbmFibGVfY2xrMzJrKGRldik7CisJY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIApAQCAtODcsNyArODksNiBAQAogc3RhdGljIGludCB0N2w2NnhiX21tY19kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICAgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdDdsNjZ4YiAqdDdsNjZ4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBkZXZfY3RsOwpAQCAtMTAwLDggKzEwMSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0N2w2NnhiLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocGRhdGEtPmRpc2FibGVfY2xrMzJrKQotCQlwZGF0YS0+ZGlzYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTgsMTggKzI1OCwyMiBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB0N2w2NnhiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKKwljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGs0OG0pOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdDdsNjZ4Yl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtMzA5LDYgKzMxMywxOSBAQAogCiAJdDdsNjZ4Yi0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAKKwl0N2w2NnhiLT5jbGszMmsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgIkNMS19DSzMySyIpOworCWlmIChJU19FUlIodDdsNjZ4Yi0+Y2xrMzJrKSkgeworCQlyZXQgPSBQVFJfRVJSKHQ3bDY2eGItPmNsazMyayk7CisJCWdvdG8gZXJyX2NsazMya19nZXQ7CisJfQorCisJdDdsNjZ4Yi0+Y2xrNDhtID0gY2xrX2dldCgmZGV2LT5kZXYsICJDTEtfQ0s0OE0iKTsKKwlpZiAoSVNfRVJSKHQ3bDY2eGItPmNsazQ4bSkpIHsKKwkJcmV0ID0gUFRSX0VSUih0N2w2NnhiLT5jbGs0OG0pOworCQljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CisJCWdvdG8gZXJyX2NsazQ4bV9nZXQ7CisJfQorCiAJcnNjciA9ICZ0N2w2NnhiLT5yc2NyOwogCXJzY3ItPm5hbWUgPSAidDdsNjZ4Yi1jb3JlIjsKIAlyc2NyLT5zdGFydCA9IGlvbWVtLT5zdGFydDsKQEAgLTMyNSw2ICszNDIsOCBAQAogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAorCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwogCWlmIChwZGF0YSAmJiBwZGF0YS0+ZW5hYmxlKQogCQlwZGF0YS0+ZW5hYmxlKGRldik7CiAKQEAgLTM1OSw5ICszNzgsMTMgQEAKIAlpb3VubWFwKHQ3bDY2eGItPnNjcik7CiBlcnJfaW9yZW1hcDoKIAlyZWxlYXNlX3Jlc291cmNlKCZ0N2w2NnhiLT5yc2NyKTsKLWVycl9ub2lycToKIGVycl9yZXF1ZXN0X3NjcjoKIAlrZnJlZSh0N2w2NnhiKTsKKwljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7CitlcnJfY2xrNDhtX2dldDoKKwljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CitlcnJfY2xrMzJrX2dldDoKK2Vycl9ub2lycToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzIsNyArMzk1LDggQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcGRhdGEtPmRpc2FibGUoZGV2KTsKLQorCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX3B1dCh0N2w2NnhiLT5jbGs0OG0pOwogCXQ3bDY2eGJfZGV0YWNoX2lycShkZXYpOwogCWlvdW5tYXAodDdsNjZ4Yi0+c2NyKTsKIAlyZWxlYXNlX3Jlc291cmNlKCZ0N2w2NnhiLT5yc2NyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMgYi9kcml2ZXJzL21mZC90YzYzODd4Yi5jCmluZGV4IGEyMmIyMWEuLjQzMjIyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKKysrIGIvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYwpAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtMjQsMTggKzI1LDIyIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHRjNjM4N3hiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnN1c3BlbmQpCiAJCXBkYXRhLT5zdXNwZW5kKGRldik7CisJY2xrX2Rpc2FibGUoY2xrMzJrKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwljbGtfZW5hYmxlKGNsazMyayk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtNTEsMTAgKzU2LDkgQEAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfbW1jX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqdGM2Mzg3eGIgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAodGM2Mzg3eGItPmVuYWJsZV9jbGszMmspCi0JCXRjNjM4N3hiLT5lbmFibGVfY2xrMzJrKGRldik7CisJY2xrX2VuYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MiwxMCArNjYsOSBAQAogc3RhdGljIGludCB0YzYzODd4Yl9tbWNfZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqdGM2Mzg3eGIgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAodGM2Mzg3eGItPmRpc2FibGVfY2xrMzJrKQotCQl0YzYzODd4Yi0+ZGlzYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDIsMTQgKzEwNSwxNCBAQAogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtOworCXN0cnVjdCBjbGsgKmNsazMyazsKIAlpbnQgaXJxLCByZXQ7CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWlvbWVtKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3Jlc291cmNlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwpAQCAtMTE4LDggKzEyMSwxNSBAQAogCWVsc2UKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAKLQlpZiAoZGF0YSAmJiBkYXRhLT5lbmFibGUpCi0JCWRhdGEtPmVuYWJsZShkZXYpOworCWNsazMyayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQ0xLX0NLMzJLIik7CisJaWYgKElTX0VSUihjbGszMmspKSB7CisJCXJldCA9IFBUUl9FUlIoY2xrMzJrKTsKKwkJZ290byBlcnJfcmVzb3VyY2U7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgY2xrMzJrKTsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+ZW5hYmxlKQorCQlwZGF0YS0+ZW5hYmxlKGRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3NoaWJhIHRjNjM4N3hiIGluaXRpYWxpc2VkXG4iKTsKIApAQCAtMTM0LDE4ICsxNDQsMTkgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwljbGtfcHV0KGNsazMyayk7CiBlcnJfcmVzb3VyY2U6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0YzYzODd4Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGRhdGEgJiYgZGF0YS0+ZGlzYWJsZSkKLQkJZGF0YS0+ZGlzYWJsZShkZXYpOwotCi0JLyogRklYTUUgLSBmcmVlIHRoZSByZXNvdXJjZXMhICovCisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CisJY2xrX2Rpc2FibGUoY2xrMzJrKTsKKwljbGtfcHV0KGNsazMyayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggZTRjMWM3OC4uZjg1NmU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC0xMTMsNiArMTEzLDggQEAKIGVudW0gewogCVRDNjM5M1hCX0NFTExfTkFORCwKIAlUQzYzOTNYQl9DRUxMX01NQywKKwlUQzYzOTNYQl9DRUxMX09IQ0ksCisJVEM2MzkzWEJfQ0VMTF9GQiwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTcwLDYgKzE3MiwxNzYgQEAKIAl9LAogfTsKIAorY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgzMDAwLAorCQkuZW5kCT0gMHgzMWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMzAwLAorCQkuZW5kCT0gMHgwM2ZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMTAwMDAsCisJCS5lbmQJPSAweDAxN2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MDE4MDAwLAorCQkuZW5kCT0gMHgwMWZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVEM2MzkzX09IQ0ksCisJCS5lbmQJPSBJUlFfVEM2MzkzX09IQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIF9fZGV2aW5pdGRhdGEgdGM2MzkzeGJfZmJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDUwMDAsCisJCS5lbmQJPSAweDUxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDA1MDAsCisJCS5lbmQJPSAweDA1ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDEwMDAwMCwKKwkJLmVuZAk9IDB4MWZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RDNjM5M19GQiwKKwkJLmVuZAk9IElSUV9UQzYzOTNfRkIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgaW50IHRjNjM5M3hiX29oY2lfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCXU4IGZlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyIHw9IFNDUl9DQ1JfVVNCQ0s7CisJdG1pb19pb3dyaXRlMTYoY2NyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisKKwlmZXIgPSB0bWlvX2lvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWZlciB8PSBTQ1JfRkVSX1VTQkVOOworCXRtaW9faW93cml0ZTgoZmVyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfb2hjaV9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCXU4IGZlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJZmVyID0gdG1pb19pb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlmZXIgJj0gflNDUl9GRVJfVVNCRU47CisJdG1pb19pb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9VU0JDSzsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9mYl9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9NQ0xLX01BU0s7CisJY2NyIHw9IFNDUl9DQ1JfTUNMS180ODsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9mYl9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwljY3IgPSB0bWlvX2lvcmVhZDE2KHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwljY3IgJj0gflNDUl9DQ1JfTUNMS19NQVNLOworCWNjciB8PSBTQ1JfQ0NSX01DTEtfT0ZGOworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGM2MzkzeGJfbGNkX3NldF9wb3dlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwgYm9vbCBvbikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmItPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IGZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlmZXIgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpZiAob24pCisJCWZlciB8PSBTQ1JfRkVSX1NMQ0RFTjsKKwllbHNlCisJCWZlciAmPSB+U0NSX0ZFUl9TTENERU47CisJaW93cml0ZTgoZmVyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRjNjM5M3hiX2xjZF9zZXRfcG93ZXIpOworCitpbnQgdGM2MzkzeGJfbGNkX21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsCisJCQkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmItPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWlvd3JpdGUxNihtb2RlLT5waXhjbG9jaywgdGM2MzkzeGItPnNjciArIFNDUl9QTEwxQ1IgKyAwKTsKKwlpb3dyaXRlMTYobW9kZS0+cGl4Y2xvY2sgPj4gMTYsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMUNSICsgMik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRjNjM5M3hiX2xjZF9tb2RlKTsKKwogc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBfX2RldmluaXRkYXRhIHRjNjM5M3hiX2NlbGxzW10gPSB7CiAJW1RDNjM5M1hCX0NFTExfTkFORF0gPSB7CiAJCS5uYW1lID0gInRtaW8tbmFuZCIsCkBAIC0xODIsNiArMzU0LDI0IEBACiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0YzYzOTN4Yl9tbWNfcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHRjNjM5M3hiX21tY19yZXNvdXJjZXMsCiAJfSwKKwlbVEM2MzkzWEJfQ0VMTF9PSENJXSA9IHsKKwkJLm5hbWUgPSAidG1pby1vaGNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzLAorCQkuZW5hYmxlID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCisJCS5zdXNwZW5kID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCQkucmVzdW1lID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCisJCS5kaXNhYmxlID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCX0sCisJW1RDNjM5M1hCX0NFTExfRkJdID0geworCQkubmFtZSA9ICJ0bWlvLWZiIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX2ZiX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0YzYzOTN4Yl9mYl9yZXNvdXJjZXMsCisJCS5lbmFibGUgPSB0YzYzOTN4Yl9mYl9lbmFibGUsCisJCS5zdXNwZW5kID0gdGM2MzkzeGJfZmJfZGlzYWJsZSwKKwkJLnJlc3VtZSA9IHRjNjM5M3hiX2ZiX2VuYWJsZSwKKwkJLmRpc2FibGUgPSB0YzYzOTN4Yl9mYl9kaXNhYmxlLAorCX0sCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM2OSw0MSArNTU5LDEyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHRjNjM5M3hiX2h3X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaTsKLQotCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciwJdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOwotCWlvd3JpdGUxNih0Y3BkLT5zY3JfcGxsMmNyLAkJdGM2MzkzeGItPnNjciArIFNDUl9QTEwyQ1IpOwotCWlvd3JpdGUxNih0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKLQlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAotCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKLQkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKLQlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOwotCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKLQlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0sCi0JCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihpKSk7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kb2VjcltpXSwKLQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRE9FQ1IoaSkpOwotCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncGlfYmNyW2ldLAotCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQSV9CQ1IoaSkpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0YzYzOTN4Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGI7CiAJc3RydWN0IHJlc291cmNlICppb21lbSwgKnJzY3I7CiAJaW50IHJldCwgdGVtcDsKLQlpbnQgaTsKIAogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghaW9tZW0pCkBAIC00NTgsMjEgKzYxOSwxNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2VuYWJsZTsKIAotCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0gPQotCQkJKHRjcGQtPnNjcl9ncG9fZHNyID4+ICg4ICogaSkpICYgMHhmZjsKLQkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldID0KLQkJCSh0Y3BkLT5zY3JfZ3BvX2RvZWNyID4+ICg4ICogaSkpICYgMHhmZjsKLQl9Ci0KLQl0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IgPSBTQ1JfQ0NSX1VOSzEgfAotCQkJCQlTQ1JfQ0NSX0hDTEtfNDg7Ci0KLQlyZXQgPSB0YzYzOTN4Yl9od19pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfaHdfaW5pdDsKKwlpb3dyaXRlOCgwLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9wbGwyY3IsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDJDUik7CisJaW93cml0ZTE2KFNDUl9DQ1JfVU5LMSB8IFNDUl9DQ1JfSENMS180OCwKKwkJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAorCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKKwkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKKwlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3NoaWJhIHRjNjM5M3hiIHJldmlzaW9uICVkIGF0IDB4JTA4bHgsIGlycSAlZFxuIiwKIAkJCXRtaW9faW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX1JFVklEKSwKQEAgLTQ4OCwxNiArNjQ0LDMzIEBACiAKIAl0YzYzOTN4Yl9hdHRhY2hfaXJxKGRldik7CiAKKwlpZiAodGNwZC0+c2V0dXApIHsKKwkJcmV0ID0gdGNwZC0+c2V0dXAoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3NldHVwOworCX0KKwogCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTkFORF0uZHJpdmVyX2RhdGEgPSB0Y3BkLT5uYW5kX2RhdGE7CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5wbGF0Zm9ybV9kYXRhID0KIAkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTkFORF07CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5kYXRhX3NpemUgPQogCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXSk7CisKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10ucGxhdGZvcm1fZGF0YSA9CiAJCSZ0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ107CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9NTUNdLmRhdGFfc2l6ZSA9CiAJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10pOwogCisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXS5wbGF0Zm9ybV9kYXRhID0KKwkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfT0hDSV07CisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXS5kYXRhX3NpemUgPQorCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXSk7CisKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5kcml2ZXJfZGF0YSA9IHRjcGQtPmZiX2RhdGE7CisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9GQl0ucGxhdGZvcm1fZGF0YSA9CisJCSZ0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5kYXRhX3NpemUgPQorCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9GQl0pOwogCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgZGV2LT5pZCwKIAkJCXRjNjM5M3hiX2NlbGxzLCBBUlJBWV9TSVpFKHRjNjM5M3hiX2NlbGxzKSwKQEAgLTUwNiwxMiArNjc5LDE1IEBACiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCisJaWYgKHRjcGQtPnRlYXJkb3duKQorCQl0Y3BkLT50ZWFyZG93bihkZXYpOworCitlcnJfc2V0dXA6CiAJdGM2MzkzeGJfZGV0YWNoX2lycShkZXYpOwogCiBlcnJfZ3Bpb19hZGQ6CiAJaWYgKHRjNjM5M3hiLT5ncGlvLmJhc2UgIT0gLTEpCiAJCXRlbXAgPSBncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hiLT5ncGlvKTsKLWVycl9od19pbml0OgogCXRjcGQtPmRpc2FibGUoZGV2KTsKIGVycl9jbGtfZW5hYmxlOgogCWNsa19kaXNhYmxlKHRjNjM5M3hiLT5jbGspOwpAQCAtNTM1LDYgKzcxMSwxMCBAQAogCWludCByZXQ7CiAKIAltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKworCWlmICh0Y3BkLT50ZWFyZG93bikKKwkJdGNwZC0+dGVhcmRvd24oZGV2KTsKKwogCXRjNjM5M3hiX2RldGFjaF9pcnEoZGV2KTsKIAogCWlmICh0YzYzOTN4Yi0+Z3Bpby5iYXNlICE9IC0xKSB7CkBAIC01ODUsMTUgKzc2NSwzNyBAQAogCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0OworCWludCBpOwogCiAJY2xrX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKIAogCXJldCA9IHRjcGQtPnJlc3VtZShkZXYpOwotCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiB0YzYzOTN4Yl9od19pbml0KGRldik7CisJaWYgKCF0Y3BkLT5yZXN1bWVfcmVzdG9yZSkKKwkJcmV0dXJuIDA7CisKKwlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5mZXIsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX3BsbDJjciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMkNSKTsKKwlpb3dyaXRlMTYodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuY2NyLAl0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJaW93cml0ZTE2KFNDUl9NQ1JfUkRZX09QRU5EUkFJTiB8IFNDUl9NQ1JfUkRZX1VOSyB8IFNDUl9NQ1JfUkRZX0VOIHwKKwkJICBTQ1JfTUNSX0lOVF9PUEVORFJBSU4gfCBTQ1JfTUNSX0lOVF9VTksgfCBTQ1JfTUNSX0lOVF9FTiB8CisJCSAgQklUKDE1KSwJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX01DUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9ncGVyLAkJdGM2MzkzeGItPnNjciArIFNDUl9HUEVSKTsKKwlpb3dyaXRlOCgwLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lSUik7CisJaW93cml0ZTgoMHhiZiwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZHNyW2ldLAorCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19EU1IoaSkpOworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZG9lY3JbaV0sCisJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RPRUNSKGkpKTsKKwkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BpX2JjcltpXSwKKwkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUElfQkNSKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIHRjNjM5M3hiX3N1c3BlbmQgTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlhMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTAsMCArMSwxMTkzIEBACisvKgorICogdHdsNDAzMF9jb3JlLmMgLSBkcml2ZXIgZm9yIFRXTDQwMzAvVFBTNjU5eDAgUE0gYW5kIGF1ZGlvIENPREVDIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIE1vZGlmaWNhdGlvbnMgdG8gZGVmZXIgaW50ZXJydXB0IGhhbmRsaW5nIHRvIGEga2VybmVsIHRocmVhZDoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIENvZGUgY2xlYW51cCBhbmQgbW9kaWZpY2F0aW9ucyB0byBJUlEgaGFuZGxlci4KKyAqIGJ5IHN5ZWQga2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworCisvKgorICogVGhlIFRXTDQwMzAgIlRyaXRvbiAyIiBpcyBvbmUgb2YgYSBmYW1pbHkgb2YgYSBtdWx0aS1mdW5jdGlvbiAiUG93ZXIKKyAqIE1hbmFnZW1lbnQgYW5kIFN5c3RlbSBDb21wYW5pb24gRGV2aWNlIiBjaGlwcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvcgorICogdXNlIGluIE9NQVAyIGFuZCBPTUFQIDMgYmFzZWQgc3lzdGVtcy4gIEl0cyBjb250cm9sIGludGVyZmFjZXMgdXNlIEkyQywKKyAqIG9mdGVuIGF0IGFyb3VuZCAzIE1iaXQvc2VjLCBpbmNsdWRpbmcgZm9yIGludGVycnVwdCBoYW5kbGluZy4KKyAqCisgKiBUaGlzIGRyaXZlciBjb3JlIHByb3ZpZGVzIGdlbmlycSBzdXBwb3J0IGZvciB0aGUgaW50ZXJydXB0cyBlbWl0dGVkLAorICogYnkgdGhlIHZhcmlvdXMgbW9kdWxlcywgYW5kIGV4cG9ydHMgcmVnaXN0ZXIgYWNjZXNzIHByaW1pdGl2ZXMuCisgKgorICogRklYTUUgdGhpcyBkcml2ZXIgY3VycmVudGx5IHJlcXVpcmVzIHVzZSBvZiB0aGUgZmlyc3QgaW50ZXJydXB0IGxpbmUKKyAqIChhbmQgYXNzb2NpYXRlZCByZWdpc3RlcnMpLgorICovCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCQkidHdsNDAzMCIKKworI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUlkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19iY2koKQkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19iY2koKQkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfa2V5cGFkKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19HUElPX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfZ3BpbygpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfZ3BpbygpCWZhbHNlCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfTUFEQykgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9NQURDX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19tYWRjKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19tYWRjKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzBfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3J0YygpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfcnRjKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0IpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfVVNCX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc191c2IoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX3VzYigpCWZhbHNlCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2lycShpbnQgaXJxKQoreworI2lmZGVmIENPTkZJR19BUk0KKwkvKiBBUk0gcmVxdWlyZXMgYW4gZXh0cmEgc3RlcCB0byBjbGVhciBJUlFfTk9SRVFVRVNULCB3aGljaCBpdAorCSAqIHNldHMgb24gYmVoYWxmIG9mIGV2ZXJ5IGlycV9jaGlwLiAgQWxzbyBzZXRzIElSUV9OT1BST0JFLgorCSAqLworCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKyNlbHNlCisJLyogc2FtZSBlZmZlY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyAqLworCXNldF9pcnFfbm9wcm9iZShpcnEpOworI2VuZGlmCit9CisKKy8qIFByaW1hcnkgSW50ZXJydXB0IEhhbmRsZXIgb24gVFdMNDAzMCBSZWdpc3RlcnMgKi8KKworLyogUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBSRUdfUElIX0lTUl9QMQkJCSgweDEpCisjZGVmaW5lIFJFR19QSUhfSVNSX1AyCQkJKDB4MikKKyNkZWZpbmUgUkVHX1BJSF9TSVIJCQkoMHgzKQorCisvKiBUcml0b24gQ29yZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiAoQkVHSU4pICovCisKKy8qIExhc3QgLSBmb3IgaW5kZXggbWF4Ki8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTEFTVAkJVFdMNDAzMF9NT0RVTEVfU0VDVVJFRF9SRUcKKworI2RlZmluZSBUV0w0MDMwX05VTV9TTEFWRVMJCTQKKworCisvKiBCYXNlIEFkZHJlc3MgZGVmbnMgZm9yIHR3bDQwMzBfbWFwW10gKi8KKworLyogc3ViY2hpcC9zbGF2ZSAwIC0gVVNCIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9VU0IJCTB4MDAwMAorCisvKiBzdWJjaGlwL3NsYXZlIDEgLSBBVUQgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0FVRElPX1ZPSUNFCTB4MDAwMAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfR1BJTwkJMHgwMDk4CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRCUgkJMHgwMDg1CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QSUgJCTB4MDA4MAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfVEVTVAkJMHgwMDRDCisKKy8qIHN1YmNoaXAvc2xhdmUgMiAtIEFVWCBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5URVJSVVBUUwkweDAwQjkKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0xFRAkJMHgwMEVFCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9NQURDCQkweDAwMDAKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BSU5fQ0hBUkdFCTB4MDA3NAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFJFQ0hBUkdFCTB4MDBBQQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNMAkJMHgwMEY4CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00xCQkweDAwRkIKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTUEJCTB4MDBFRgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQgkJMHgwMEYxCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9LRVlQQUQJCTB4MDBEMgorCisvKiBzdWJjaGlwL3NsYXZlIDMgLSBQT1dFUiBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQkFDS1VQCQkweDAwMTQKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVAkJMHgwMDJFCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIJMHgwMDM2CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUgkweDAwNUIKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1JUQwkJMHgwMDFDCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRwkweDAwMDAKKworLyogVHJpdG9uIENvcmUgaW50ZXJuYWwgaW5mb3JtYXRpb24gKEVORCkgKi8KKworCisvKiBGZXcgcG93ZXIgdmFsdWVzICovCisjZGVmaW5lIFJfQ0ZHX0JPT1QJCQkweDA1CisjZGVmaW5lIFJfUFJPVEVDVF9LRVkJCQkweDBFCisKKy8qIGFjY2VzcyBjb250cm9sIHZhbHVlcyBmb3IgUl9QUk9URUNUX0tFWSAqLworI2RlZmluZSBLRVlfVU5MT0NLMQkJCTB4Y2UKKyNkZWZpbmUgS0VZX1VOTE9DSzIJCQkweGVjCisjZGVmaW5lIEtFWV9MT0NLCQkJMHgwMAorCisvKiBzb21lIGZpZWxkcyBpbiBSX0NGR19CT09UICovCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMTlwMl9NSFoJCSgxIDw8IDApCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMjZfTUhaCQkoMiA8PCAwKQorI2RlZmluZSBIRkNMS19GUkVRXzM4cDRfTUhaCQkoMyA8PCAwKQorI2RlZmluZSBISUdIX1BFUkZfU1EJCQkoMSA8PCAzKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIC0gVFdMIG1vZHVsZSBJTVIvSVNSIHJlZ3MgdG8gbWFzay9jbGVhciBhdCBpbml0CisgKiBAbW9kX25vOiBUV0w0MDMwIG1vZHVsZSBudW1iZXIgKGUuZy4sIFRXTDQwMzBfTU9EVUxFX0dQSU8pCisgKiBAc2loX2N0cmw6IGFkZHJlc3Mgb2YgbW9kdWxlIFNJSF9DVFJMIHJlZ2lzdGVyCisgKiBAcmVnX2NudDogbnVtYmVyIG9mIElNUi9JU1IgcmVncworICogQGltcnM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgVFdMIG1vZHVsZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciBpbmRpY2VzCisgKiBAaXNyczogcG9pbnRlciB0byBhcnJheSBvZiBUV0wgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgaW5kaWNlcworICoKKyAqIFRpZXMgdG9nZXRoZXIgVFdMNDAzMCBtb2R1bGVzIGFuZCBsaXN0cyBvZiBJTVIvSVNSIHJlZ2lzdGVycyB0byBtYXNrL2NsZWFyCisgKiBkdXJpbmcgdHdsX2luaXRfaXJxKCkuCisgKi8KK3N0cnVjdCB0d2w0MDMwX21vZF9pcmVncyB7CisJY29uc3QgdTggbW9kX25vOworCWNvbnN0IHU4IHNpaF9jdHJsOworCWNvbnN0IHU4IHJlZ19jbnQ7CisJY29uc3QgdTggKmltcnM7CisJY29uc3QgdTggKmlzcnM7Cit9OworCisvKiBUV0w0MDMwIElOVCBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9pbnRfaW1yX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0lOVF9QV1JfSU1SMSwKKwlUV0w0MDMwX0lOVF9QV1JfSU1SMiwKK307CisKKy8qIFRXTDQwMzAgSU5UIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfaW50X2lzcl9yZWdzW10gPSB7CisJVFdMNDAzMF9JTlRfUFdSX0lTUjEsCisJVFdMNDAzMF9JTlRfUFdSX0lTUjIsCit9OworCisvKiBUV0w0MDMwIElOVEVSUlVQVFMgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfaW50ZXJydXB0c19pbXJfcmVnc1tdID0geworCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQSwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUIsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJBLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQiwKK307CisKKy8qIFRXTDQwMzAgSU5URVJSVVBUUyBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2ludGVycnVwdHNfaXNyX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUEsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQSwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkIsCit9OworCisvKiBUV0w0MDMwIE1BREMgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfbWFkY19pbXJfcmVnc1tdID0geworCVRXTDQwMzBfTUFEQ19JTVIxLAorCVRXTDQwMzBfTUFEQ19JTVIyLAorfTsKKworLyogVFdMNDAzMCBNQURDIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfbWFkY19pc3JfcmVnc1tdID0geworCVRXTDQwMzBfTUFEQ19JU1IxLAorCVRXTDQwMzBfTUFEQ19JU1IyLAorfTsKKworLyogVFdMNDAzMCBrZXlwYWQgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfa2V5cGFkX2ltcl9yZWdzW10gPSB7CisJVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIxLAorCVRXTDQwMzBfS0VZUEFEX0tFWVBfSU1SMiwKK307CisKKy8qIFRXTDQwMzAga2V5cGFkIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfa2V5cGFkX2lzcl9yZWdzW10gPSB7CisJVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IxLAorCVRXTDQwMzBfS0VZUEFEX0tFWVBfSVNSMiwKK307CisKKy8qIFRXTDQwMzAgR1BJTyBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9ncGlvX2ltcl9yZWdzW10gPSB7CisJUkVHX0dQSU9fSU1SMUEsCisJUkVHX0dQSU9fSU1SMUIsCisJUkVHX0dQSU9fSU1SMkEsCisJUkVHX0dQSU9fSU1SMkIsCisJUkVHX0dQSU9fSU1SM0EsCisJUkVHX0dQSU9fSU1SM0IsCit9OworCisvKiBUV0w0MDMwIEdQSU8gbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9ncGlvX2lzcl9yZWdzW10gPSB7CisJUkVHX0dQSU9fSVNSMUEsCisJUkVHX0dQSU9fSVNSMUIsCisJUkVHX0dQSU9fSVNSMkEsCisJUkVHX0dQSU9fSVNSMkIsCisJUkVHX0dQSU9fSVNSM0EsCisJUkVHX0dQSU9fSVNSM0IsCit9OworCisvKiBUV0w0MDMwIG1vZHVsZXMgdGhhdCBoYXZlIElNUi9JU1IgcmVnaXN0ZXJzIHRoYXQgbXVzdCBiZSBtYXNrZWQvY2xlYXJlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0d2w0MDMwX21vZF9pcmVncyBfX2luaXRjb25zdCB0d2w0MDMwX21vZF9yZWdzW10gPSB7CisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9JTlQsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfSU5UX1BXUl9TSUhfQ1RSTCwKKwkJLnJlZ19jbnQgID0gQVJSQVlfU0laRSh0d2w0MDMwX2ludF9pbXJfcmVncyksCisJCS5pbXJzCSAgPSB0d2w0MDMwX2ludF9pbXJfcmVncywKKwkJLmlzcnMJICA9IHR3bDQwMzBfaW50X2lzcl9yZWdzLAorCX0sCisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTLAorCQkuc2loX2N0cmwgPSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTCwKKwkJLnJlZ19jbnQgID0gQVJSQVlfU0laRSh0d2w0MDMwX2ludGVycnVwdHNfaW1yX3JlZ3MpLAorCQkuaW1ycwkgID0gdHdsNDAzMF9pbnRlcnJ1cHRzX2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9pbnRlcnJ1cHRzX2lzcl9yZWdzLAorCX0sCisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9NQURDLAorCQkuc2loX2N0cmwgPSBUV0w0MDMwX01BRENfU0lIX0NUUkwsCisJCS5yZWdfY250ICA9IEFSUkFZX1NJWkUodHdsNDAzMF9tYWRjX2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfbWFkY19pbXJfcmVncywKKwkJLmlzcnMJICA9IHR3bDQwMzBfbWFkY19pc3JfcmVncywKKwl9LAorCXsKKwkJLm1vZF9ubwkgID0gVFdMNDAzMF9NT0RVTEVfS0VZUEFELAorCQkuc2loX2N0cmwgPSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJSF9DVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfa2V5cGFkX2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfa2V5cGFkX2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9rZXlwYWRfaXNyX3JlZ3MsCisJfSwKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX0dQSU8sCisJCS5zaWhfY3RybCA9IFJFR19HUElPX1NJSF9DVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfZ3Bpb19pbXJfcmVncyksCisJCS5pbXJzCSAgPSB0d2w0MDMwX2dwaW9faW1yX3JlZ3MsCisJCS5pc3JzCSAgPSB0d2w0MDMwX2dwaW9faXNyX3JlZ3MsCisJfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGlzIGRyaXZlciBhY3RpdmUsIGJvdW5kIHRvIGEgY2hpcD8gKi8KK3N0YXRpYyBib29sIGludXNlOworCisvKiBTdHJ1Y3R1cmUgZm9yIGVhY2ggVFdMNDAzMCBTbGF2ZSAqLworc3RydWN0IHR3bDQwMzBfY2xpZW50IHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXU4IGFkZHJlc3M7CisKKwkvKiBtYXggbnVtYiBvZiBpMmNfbXNnIHJlcXVpcmVkIGlzIGZvciByZWFkID0yICovCisJc3RydWN0IGkyY19tc2cgeGZlcl9tc2dbMl07CisKKwkvKiBUbyBsb2NrIGFjY2VzcyB0byB4ZmVyX21zZyAqLworCXN0cnVjdCBtdXRleCB4ZmVyX2xvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY2xpZW50IHR3bDQwMzBfbW9kdWxlc1tUV0w0MDMwX05VTV9TTEFWRVNdOworCisKKy8qIG1hcHBpbmcgdGhlIG1vZHVsZSBpZCB0byBzbGF2ZSBpZCBhbmQgYmFzZSBhZGRyZXNzICovCitzdHJ1Y3QgdHdsNDAzMG1hcHBpbmcgeworCXVuc2lnbmVkIGNoYXIgc2lkOwkvKiBTbGF2ZSBJRCAqLworCXVuc2lnbmVkIGNoYXIgYmFzZTsJLyogYmFzZSBhZGRyZXNzICovCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBtYXBwaW5nIHR3bDQwMzBfbWFwW1RXTDQwMzBfTU9EVUxFX0xBU1QgKyAxXSA9IHsKKwkvKgorCSAqIE5PVEU6ICBkb24ndCBjaGFuZ2UgdGhpcyB0YWJsZSB3aXRob3V0IHVwZGF0aW5nIHRoZQorCSAqIDxsaW51eC9pMmMvdHdsNDAzMC5oPiBkZWZpbmVzIGZvciBUV0w0MDMwX01PRFVMRV8qCisJICogc28gdGhleSBjb250aW51ZSB0byBtYXRjaCB0aGUgb3JkZXIgaW4gdGhpcyB0YWJsZS4KKwkgKi8KKworCXsgMCwgVFdMNDAzMF9CQVNFQUREX1VTQiB9LAorCisJeyAxLCBUV0w0MDMwX0JBU0VBRERfQVVESU9fVk9JQ0UgfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9HUElPIH0sCisJeyAxLCBUV0w0MDMwX0JBU0VBRERfSU5UQlIgfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9QSUggfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9URVNUIH0sCisKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9LRVlQQUQgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9NQURDIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfSU5URVJSVVBUUyB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX0xFRCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BSU5fQ0hBUkdFIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFJFQ0hBUkdFIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTTEgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01BIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNQiB9LAorCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfQkFDS1VQIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfSU5UIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfUE1fTUFTVEVSIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfUE1fUkVDRUlWRVIgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9SVEMgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRyB9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRXTDQwMzAgZG9lc24ndCBoYXZlIFBJSCBtYXNrLCBoZW5jZSBkdW1teSBmdW5jdGlvbiBmb3IgbWFzaworICogYW5kIHVubWFzayBvZiB0aGUgKGVpZ2h0KSBpbnRlcnJ1cHRzIHJlcG9ydGVkIGF0IHRoYXQgbGV2ZWwgLi4uCisgKiBtYXNraW5nIGlzIG9ubHkgYXZhaWxhYmxlIGZyb20gU0lIIChzZWNvbmRhcnkpIG1vZHVsZXMuCisgKi8KKworc3RhdGljIHZvaWQgdHdsNDAzMF9pMmNfYWNraXJxKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB2b2lkIHR3bDQwMzBfaTJjX2Rpc2FibGVpbnQodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9pMmNfZW5hYmxlaW50KHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdHdsNDAzMF9pcnFfY2hpcCA9IHsKKwkubmFtZQk9ICJ0d2w0MDMwIiwKKwkuYWNrCT0gdHdsNDAzMF9pMmNfYWNraXJxLAorCS5tYXNrCT0gdHdsNDAzMF9pMmNfZGlzYWJsZWludCwKKwkudW5tYXNrCT0gdHdsNDAzMF9pMmNfZW5hYmxlaW50LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgRnVuY3Rpb25zICovCisKKy8qKgorICogdHdsNDAzMF9pMmNfd3JpdGUgLSBXcml0ZXMgYSBuIGJpdCByZWdpc3RlciBpbiBUV0w0MDMwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IGFuIGFycmF5IG9mIG51bV9ieXRlcysxIGNvbnRhaW5pbmcgZGF0YSB0byB3cml0ZQorICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcyAoanVzdCBvZmZzZXQgd2lsbCBkbykKKyAqIEBudW1fYnl0ZXM6IG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlcgorICoKKyAqIElNUE9SVEFOVDogZm9yICd2YWx1ZScgcGFyYW1ldGVyOiBBbGxvY2F0ZSB2YWx1ZSBudW1fYnl0ZXMrMSBhbmQKKyAqIHZhbGlkIGRhdGEgc3RhcnRzIGF0IE9mZnNldCAxLgorICoKKyAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gLSAwIGlzIHN1Y2Nlc3MKKyAqLworaW50IHR3bDQwMzBfaTJjX3dyaXRlKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcykKK3sKKwlpbnQgcmV0OworCWludCBzaWQ7CisJc3RydWN0IHR3bDQwMzBfY2xpZW50ICp0d2w7CisJc3RydWN0IGkyY19tc2cgKm1zZzsKKworCWlmICh1bmxpa2VseShtb2Rfbm8gPiBUV0w0MDMwX01PRFVMRV9MQVNUKSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG1vZHVsZSBudW1iZXIgJWRcbiIsIERSSVZFUl9OQU1FLCBtb2Rfbm8pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlzaWQgPSB0d2w0MDMwX21hcFttb2Rfbm9dLnNpZDsKKwl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW3NpZF07CisKKwlpZiAodW5saWtlbHkoIWludXNlKSkgeworCQlwcl9lcnIoIiVzOiBjbGllbnQgJWQgaXMgbm90IGluaXRpYWxpemVkXG4iLCBEUklWRVJfTkFNRSwgc2lkKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJbXV0ZXhfbG9jaygmdHdsLT54ZmVyX2xvY2spOworCS8qCisJICogW01TRzFdOiBmaWxsIHRoZSByZWdpc3RlciBhZGRyZXNzIGRhdGEKKwkgKiBmaWxsIHRoZSBkYXRhIFR4IGJ1ZmZlcgorCSAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzBdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmxlbiA9IG51bV9ieXRlcyArIDE7CisJbXNnLT5mbGFncyA9IDA7CisJbXNnLT5idWYgPSB2YWx1ZTsKKwkvKiBvdmVyIHdyaXRlIHRoZSBmaXJzdCBieXRlIG9mIGJ1ZmZlciB3aXRoIHRoZSByZWdpc3RlciBhZGRyZXNzICovCisJKnZhbHVlID0gdHdsNDAzMF9tYXBbbW9kX25vXS5iYXNlICsgcmVnOworCXJldCA9IGkyY190cmFuc2Zlcih0d2wtPmNsaWVudC0+YWRhcHRlciwgdHdsLT54ZmVyX21zZywgMSk7CisJbXV0ZXhfdW5sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisKKwkvKiBpMmNUcmFuc2ZlciByZXR1cm5zIG51bSBtZXNzYWdlcy50cmFuc2xhdGUgaXQgcGxzLi4gKi8KKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfd3JpdGUpOworCisvKioKKyAqIHR3bDQwMzBfaTJjX3JlYWQgLSBSZWFkcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogYW4gYXJyYXkgb2YgbnVtX2J5dGVzIGNvbnRhaW5pbmcgZGF0YSB0byBiZSByZWFkCisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICogQG51bV9ieXRlczogbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gbnVtX2J5dGVzIGlzIHN1Y2Nlc3MgZWxzZSBmYWlsdXJlLgorICovCitpbnQgdHdsNDAzMF9pMmNfcmVhZCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1OCBudW1fYnl0ZXMpCit7CisJaW50IHJldDsKKwl1OCB2YWw7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgKnR3bDsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnOworCisJaWYgKHVubGlrZWx5KG1vZF9ubyA+IFRXTDQwMzBfTU9EVUxFX0xBU1QpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgbW9kdWxlIG51bWJlciAlZFxuIiwgRFJJVkVSX05BTUUsIG1vZF9ubyk7CisJCXJldHVybiAtRVBFUk07CisJfQorCXNpZCA9IHR3bDQwMzBfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbc2lkXTsKKworCWlmICh1bmxpa2VseSghaW51c2UpKSB7CisJCXByX2VycigiJXM6IGNsaWVudCAlZCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIERSSVZFUl9OQU1FLCBzaWQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwltdXRleF9sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisJLyogW01TRzFdIGZpbGwgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgZGF0YSAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzBdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmxlbiA9IDE7CisJbXNnLT5mbGFncyA9IDA7CS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHZhbHVlICovCisJdmFsID0gdHdsNDAzMF9tYXBbbW9kX25vXS5iYXNlICsgcmVnOworCW1zZy0+YnVmID0gJnZhbDsKKwkvKiBbTVNHMl0gZmlsbCB0aGUgZGF0YSByeCBidWZmZXIgKi8KKwltc2cgPSAmdHdsLT54ZmVyX21zZ1sxXTsKKwltc2ctPmFkZHIgPSB0d2wtPmFkZHJlc3M7CisJbXNnLT5mbGFncyA9IEkyQ19NX1JEOwkvKiBSZWFkIHRoZSByZWdpc3RlciB2YWx1ZSAqLworCW1zZy0+bGVuID0gbnVtX2J5dGVzOwkvKiBvbmx5IG4gYnl0ZXMgKi8KKwltc2ctPmJ1ZiA9IHZhbHVlOworCXJldCA9IGkyY190cmFuc2Zlcih0d2wtPmNsaWVudC0+YWRhcHRlciwgdHdsLT54ZmVyX21zZywgMik7CisJbXV0ZXhfdW5sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisKKwkvKiBpMmNUcmFuc2ZlciByZXR1cm5zIG51bSBtZXNzYWdlcy50cmFuc2xhdGUgaXQgcGxzLi4gKi8KKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfcmVhZCk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfd3JpdGVfdTggLSBXcml0ZXMgYSA4IGJpdCByZWdpc3RlciBpbiBUV0w0MDMwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIDggYml0CisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICoKKyAqIFJldHVybnMgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGVfdTgodTggbW9kX25vLCB1OCB2YWx1ZSwgdTggcmVnKQoreworCisJLyogMiBieXRlcyBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSBvZmZzZXQgMCBpcyB1c2VkIGJ5IGkyY193cml0ZSAqLworCXU4IHRlbXBfYnVmZmVyWzJdID0geyAwIH07CisJLyogb2Zmc2V0IDEgY29udGFpbnMgdGhlIGRhdGEgKi8KKwl0ZW1wX2J1ZmZlclsxXSA9IHZhbHVlOworCXJldHVybiB0d2w0MDMwX2kyY193cml0ZShtb2Rfbm8sIHRlbXBfYnVmZmVyLCByZWcsIDEpOworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY193cml0ZV91OCk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfcmVhZF91OCAtIFJlYWRzIGEgOCBiaXQgcmVnaXN0ZXIgZnJvbSBUV0w0MDMwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSByZWFkIDggYml0CisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICoKKyAqIFJldHVybnMgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfcmVhZF91OCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnKQoreworCXJldHVybiB0d2w0MDMwX2kyY19yZWFkKG1vZF9ubywgdmFsdWUsIHJlZywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR3bDQwMzBfaTJjX3JlYWRfdTgpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdW5zaWduZWQgdHdsNDAzMF9pcnFfYmFzZTsKKworc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGlycV9ldmVudDsKKworLyoKKyAqIFRoaXMgdGhyZWFkIHByb2Nlc3NlcyBpbnRlcnJ1cHRzIHJlcG9ydGVkIGJ5IHRoZSBQcmltYXJ5IEludGVycnVwdCBIYW5kbGVyLgorICovCitzdGF0aWMgaW50IHR3bDQwMzBfaXJxX3RocmVhZCh2b2lkICpkYXRhKQoreworCWxvbmcgaXJxID0gKGxvbmcpZGF0YTsKKwlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RhdGljIHVuc2lnbmVkIGkyY19lcnJvcnM7CisJY29uc3Qgc3RhdGljIHVuc2lnbmVkIG1heF9pMmNfZXJyb3JzID0gMTAwOworCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgcmV0OworCQlpbnQgbW9kdWxlX2lycTsKKwkJdTggcGloX2lzcjsKKworCQkvKiBXYWl0IGZvciBJUlEsIHRoZW4gcmVhZCBQSUggaXJxIHN0YXR1cyAoYWxzbyBibG9ja2luZykgKi8KKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZpcnFfZXZlbnQpOworCisJCXJldCA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUElILCAmcGloX2lzciwKKwkJCQkJICBSRUdfUElIX0lTUl9QMSk7CisJCWlmIChyZXQpIHsKKwkJCXByX3dhcm5pbmcoIiVzOiBJMkMgZXJyb3IgJWQgcmVhZGluZyBQSUggSVNSXG4iLAorCQkJCQlEUklWRVJfTkFNRSwgcmV0KTsKKwkJCWlmICgrK2kyY19lcnJvcnMgPj0gbWF4X2kyY19lcnJvcnMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk1heGltdW0gSTJDIGVycm9yIGNvdW50IgorCQkJCQkJIiBleGNlZWRlZC4gIFRlcm1pbmF0aW5nICVzLlxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbXBsZXRlKCZpcnFfZXZlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiB0aGVzZSBoYW5kbGVycyBkZWFsIHdpdGggdGhlIHJlbGV2YW50IFNJSCBpcnEgc3RhdHVzICovCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWZvciAobW9kdWxlX2lycSA9IHR3bDQwMzBfaXJxX2Jhc2U7CisJCQkJcGloX2lzcjsKKwkJCQlwaWhfaXNyID4+PSAxLCBtb2R1bGVfaXJxKyspIHsKKwkJCWlmIChwaWhfaXNyICYgMHgxKSB7CisJCQkJaXJxX2Rlc2NfdCAqZCA9IGlycV9kZXNjICsgbW9kdWxlX2lycTsKKworCQkJCWQtPmhhbmRsZV9pcnEobW9kdWxlX2lycSwgZCk7CisJCQl9CisJCX0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogZG9fdHdsNDAzMF9pcnEoKSBpcyB0aGUgZGVzYy0+aGFuZGxlIG1ldGhvZCBmb3IgdGhlIHR3bDQwMzAgaW50ZXJydXB0LgorICogVGhpcyBpcyBhIGNoYWluZWQgaW50ZXJydXB0LCBzbyB0aGVyZSBpcyBubyBkZXNjLT5hY3Rpb24gbWV0aG9kIGZvciBpdC4KKyAqIE5vdyB3ZSBuZWVkIHRvIHF1ZXJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbiB0aGUgdHdsNDAzMCB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIG1vZHVsZSBpcyBnZW5lcmF0aW5nIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdC4gIEhvd2V2ZXIsIHdlIGNhbid0IGRvIGkyYworICogdHJhbnNhY3Rpb25zIGluIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZSBtdXN0IGRlZmVyIHRoYXQgd29yayB0byBhIGtlcm5lbAorICogdGhyZWFkLiAgQWxsIHdlIGRvIGhlcmUgaXMgYWNrbm93bGVkZ2UgYW5kIG1hc2sgdGhlIGludGVycnVwdCBhbmQgd2FrZXVwCisgKiB0aGUga2VybmVsIHRocmVhZC4KKyAqLworc3RhdGljIHZvaWQgZG9fdHdsNDAzMF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxX2Rlc2NfdCAqZGVzYykKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBFYXJsaWVyIHRoaXMgd2FzIGRlc2MtPnRyaWdnZXJlZCA9IDE7CisJICovCisJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKworCS8qCisJICogQWNrbm93bGVkZ2UsIGNsZWFyIF9BTkRfIGRpc2FibGUgdGhlIGludGVycnVwdC4KKwkgKi8KKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCWlmICghZGVzYy0+ZGVwdGgpIHsKKwkJa3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisKKwkJY29tcGxldGUoJmlycV9ldmVudCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICogX19pbml0IHN0YXJ0X3R3bDQwMzBfaXJxX3RocmVhZChsb25nIGlycSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKworCWluaXRfY29tcGxldGlvbigmaXJxX2V2ZW50KTsKKwl0aHJlYWQgPSBrdGhyZWFkX3J1bih0d2w0MDMwX2lycV90aHJlYWQsICh2b2lkICopaXJxLCAidHdsNDAzMC1pcnEiKTsKKwlpZiAoIXRocmVhZCkKKwkJcHJfZXJyKCIlczogY291bGQgbm90IGNyZWF0ZSB0d2w0MDMwIGlycSAlbGQgdGhyZWFkIVxuIiwKKwkJICAgICAgIERSSVZFUl9OQU1FLCBpcnEpOworCisJcmV0dXJuIHRocmVhZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBhZGRfY2hpbGRyZW4oc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IE5VTEw7CisJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSBOVUxMOworCWludAkJCXN0YXR1cyA9IDA7CisKKwlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbM107CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9iY2kiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBiY2kgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+YmNpLAorCQkJCQlzaXplb2YoKnBkYXRhLT5iY2kpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBiY2kgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZSByID0geworCQkJCS5zdGFydCA9IFRXTDQwMzBfUFdSSVJRX0NIR19QUkVTLAorCQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfTsKKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnIsIDEpOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBjcmVhdGUgYmNpIGRldiwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICh0d2xfaGFzX2dwaW8oKSAmJiBwZGF0YS0+Z3BpbykgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzFdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfZ3BpbyIsIC0xKTsKKwkJaWYgKCFwZGV2KSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIGdwaW8gZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQkvKiBtb3JlIGRyaXZlciBtb2RlbCBpbml0ICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJLyogZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOyAqLworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPmdwaW8sCisJCQkJCXNpemVvZigqcGRhdGEtPmdwaW8pKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBncGlvIGRhdGEsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwkJLyogR1BJTyBtb2R1bGUgSVJRICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlCXIgPSB7CisJCQkJLnN0YXJ0ID0gcGRhdGEtPmlycV9iYXNlICsgMCwKKwkJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX07CisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyLCAxKTsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgY3JlYXRlIGdwaW8gZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfa2V5cGFkKCkgJiYgcGRhdGEtPmtleXBhZCkgeworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX2tleXBhZCIsIC0xKTsKKwkJaWYgKHBkZXYpIHsKKwkJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMl07CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPmtleXBhZCwKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+a2V5cGFkKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhZGQga2V5cGFkIGRhdGEsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCQkiY2FuJ3QgY3JlYXRlIGtleXBhZCBkZXYsICVkXG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2Mga2V5cGFkIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfbWFkYygpICYmIHBkYXRhLT5tYWRjKSB7CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfbWFkYyIsIC0xKTsKKwkJaWYgKHBkZXYpIHsKKwkJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMl07CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPm1hZGMsCisJCQkJCXNpemVvZigqcGRhdGEtPm1hZGMpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIG1hZGMgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCQkiY2FuJ3QgY3JlYXRlIG1hZGMgZGV2LCAlZFxuIiwKKwkJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIG1hZGMgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19ydGMoKSkgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzNdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfcnRjIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgcnRjIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJfQorCisJCS8qCisJCSAqIFJFVklTSVQgcGxhdGZvcm1fZGF0YSBoZXJlIGN1cnJlbnRseSBtaWdodCB1c2Ugb2YKKwkJICogIm1zZWN1cmUiIGxpbmUgLi4uIGJ1dCBmb3Igbm93IHdlIGp1c3QgZXhwZWN0IGJvYXJkCisJCSAqIHNldHVwIHRvIHRlbGwgdGhlIGNoaXAgIndlIGFyZSBzZWN1cmUiIGF0IGFsbCB0aW1lcy4KKwkJICogRXZlbnR1YWxseSwgTGludXggbWlnaHQgYmVjb21lIG1vcmUgYXdhcmUgb2Ygc3VjaAorCQkgKiBIVyBzZWN1cml0eSBjb25jZXJucywgYW5kICJsZWFzdCBwcml2aWxlZ2UiLgorCQkgKi8KKworCQkvKiBSVEMgbW9kdWxlIElSUSAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZQlyID0geworCQkJCS8qIFJFVklTSVQgZG9uJ3QgaGFyZC13aXJlIHRoaXMgc3R1ZmYgKi8KKwkJCQkuc3RhcnQgPSBUV0w0MDMwX1BXUklSUV9SVEMsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSBydGMgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfdXNiKCkgJiYgcGRhdGEtPnVzYikgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzBdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfdXNiIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgdXNiIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPnVzYiwKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+dXNiKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCB1c2IgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZSByID0geworCQkJCS5zdGFydCA9IFRXTDQwMzBfUFdSSVJRX1VTQl9QUkVTLAorCQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfTsKKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnIsIDEpOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBjcmVhdGUgdXNiIGRldiwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCX0KKwl9CisKK2VycjoKKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoImZhaWxlZCB0byBhZGQgdHdsNDAzMCdzIGNoaWxkcmVuIChzdGF0dXMgJWQpXG4iLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgaW5pdGlhbGl6ZSB0aGUgb24tY2hpcCBjbG9jayBmcmFtZXdvcmssCisgKiBsZXR0aW5nIGl0IGdlbmVyYXRlIHRoZSByaWdodCBmcmVxdWVuY2llcyBmb3IgVVNCLCBNQURDLCBhbmQKKyAqIG90aGVyIHB1cnBvc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgcHJvdGVjdF9wbV9tYXN0ZXIodm9pZCkKK3sKKwlpbnQgZSA9IDA7CisKKwllID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfTE9DSywKKwkJCVJfUFJPVEVDVF9LRVkpOworCXJldHVybiBlOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgdW5wcm90ZWN0X3BtX21hc3Rlcih2b2lkKQoreworCWludCBlID0gMDsKKworCWUgfD0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfVU5MT0NLMSwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWUgfD0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfVU5MT0NLMiwKKwkJCVJfUFJPVEVDVF9LRVkpOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY2xvY2tzX2luaXQodm9pZCkKK3sKKwlpbnQgZSA9IDA7CisJc3RydWN0IGNsayAqb3NjOworCXUzMiByYXRlOworCXU4IGN0cmwgPSBIRkNMS19GUkVRXzI2X01IWjsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQlvc2MgPSBjbGtfZ2V0KE5VTEwsICJvc2NfY2siKTsKKwllbHNlCisJCW9zYyA9IGNsa19nZXQoTlVMTCwgIm9zY19zeXNfY2siKTsKKyNlbHNlCisJLyogUkVWSVNJVCBmb3Igbm9uLU9NQVAgc3lzdGVtcywgcGFzcyB0aGUgY2xvY2sgcmF0ZSBmcm9tCisJICogYm9hcmQgaW5pdCBjb2RlLCB1c2luZyBwbGF0Zm9ybV9kYXRhLgorCSAqLworCW9zYyA9IEVSUl9QVFIoLUVJTyk7CisjZW5kaWYKKwlpZiAoSVNfRVJSKG9zYykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2tpcHBpbmcgdHdsNDAzMCBpbnRlcm5hbCBjbG9jayBpbml0IGFuZCAiCisJCQkJInVzaW5nIGJvb3Rsb2FkZXIgdmFsdWUgKHVua25vd24gb3NjIHJhdGUpXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUob3NjKTsKKwljbGtfcHV0KG9zYyk7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDE5MjAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8xOXAyX01IWjsKKwkJYnJlYWs7CisJY2FzZSAyNjAwMDAwMDoKKwkJY3RybCA9IEhGQ0xLX0ZSRVFfMjZfTUhaOworCQlicmVhazsKKwljYXNlIDM4NDAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8zOHA0X01IWjsKKwkJYnJlYWs7CisJfQorCisJY3RybCB8PSBISUdIX1BFUkZfU1E7CisJZSB8PSB1bnByb3RlY3RfcG1fbWFzdGVyKCk7CisJLyogZWZmZWN0LT5NQURDK1VTQiBjayBlbiAqLworCWUgfD0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBjdHJsLCBSX0NGR19CT09UKTsKKwllIHw9IHByb3RlY3RfcG1fbWFzdGVyKCk7CisKKwlpZiAoZSA8IDApCisJCXByX2VycigiJXM6IGNsb2NrIGluaXQgZXJyIFslZF1cbiIsIERSSVZFUl9OQU1FLCBlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB0d2w0MDMwX2kyY19jbGVhcl9pc3IgLSBjbGVhciBUV0w0MDMwIFNJSCBJU1IgcmVncyB2aWEgcmVhZCArIHdyaXRlCisgKiBAbW9kX25vOiBUV0w0MDMwIG1vZHVsZSBudW1iZXIKKyAqIEByZWc6IHJlZ2lzdGVyIGluZGV4IHRvIGNsZWFyCisgKiBAY29yOiB2YWx1ZSBvZiB0aGUgPG1vZHVsZT5fU0lIX0NUUkwuQ09SIGJpdCAoMSBvciAwKQorICoKKyAqIEVpdGhlciByZWFkcyAoY29yID09IDEpIG9yIHdyaXRlcyAoY29yID09IDApIHRvIGEgVFdMNDAzMCBpbnRlcnJ1cHQKKyAqIHN0YXR1cyByZWdpc3RlciB0byBlbnN1cmUgdGhhdCBhbnkgcHJpb3IgaW50ZXJydXB0cyBhcmUgY2xlYXJlZC4KKyAqIFJldHVybnMgdGhlIHN0YXR1cyBmcm9tIHRoZSBJMkMgcmVhZCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHR3bDQwMzBfaTJjX2NsZWFyX2lzcih1OCBtb2Rfbm8sIHU4IHJlZywgdTggY29yKQoreworCXU4IHRtcDsKKworCXJldHVybiAoY29yKSA/IHR3bDQwMzBfaTJjX3JlYWRfdTgobW9kX25vLCAmdG1wLCByZWcpIDoKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgobW9kX25vLCAweGZmLCByZWcpOworfQorCisvKioKKyAqIHR3bDQwMzBfcmVhZF9jb3JfYml0IC0gYXJlIFRXTCBtb2R1bGUgSVNScyBjbGVhcmVkIGJ5IHJlYWRzIG9yIHdyaXRlcz8KKyAqIEBtb2Rfbm86IFRXTDQwMzAgbW9kdWxlIG51bWJlcgorICogQHJlZzogcmVnaXN0ZXIgaW5kZXggdG8gY2xlYXIKKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIFRXTDQwMzAgU0lIIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzIChJU1JzKSBmb3IKKyAqIHRoZSBzcGVjaWZpZWQgVFdMIG1vZHVsZSBhcmUgY2xlYXJlZCBieSByZWFkcywgb3IgMCBpZiBjbGVhcmVkIGJ5CisgKiB3cml0ZXMuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9yZWFkX2Nvcl9iaXQodTggbW9kX25vLCB1OCByZWcpCit7CisJdTggdG1wID0gMDsKKworCVdBUk5fT04odHdsNDAzMF9pMmNfcmVhZF91OChtb2Rfbm8sICZ0bXAsIHJlZykgPCAwKTsKKworCXRtcCAmPSBUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLOworCXRtcCA+Pj0gX19mZnMoVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSyk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKioKKyAqIHR3bDQwMzBfbWFza19jbGVhcl9pbnRycyAtIG1hc2sgYW5kIGNsZWFyIGFsbCBUV0w0MDMwIGludGVycnVwdHMKKyAqIEB0OiBwb2ludGVyIHRvIHR3bDQwMzBfbW9kX2lyZWdzIGFycmF5CisgKiBAdF9zejogQVJSQVlfU0laRSh0KSAoc3RhcnRpbmcgYXQgMSkKKyAqCisgKiBNYXNrIGFsbCBUV0w0MDMwIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAoSU1ScykgYW5kIGNsZWFyIGFsbAorICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKElTUnMpLiAgTm8gcmV0dXJuIHZhbHVlLCBidXQgd2lsbCBXQVJOIGlmCisgKiBhbnkgSTJDIG9wZXJhdGlvbnMgZmFpbC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHR3bDQwMzBfbWFza19jbGVhcl9pbnRycyhjb25zdCBzdHJ1Y3QgdHdsNDAzMF9tb2RfaXJlZ3MgKnQsCisJCQkJCSAgICBjb25zdCB1OCB0X3N6KQoreworCWludCBpLCBqOworCisJLyoKKwkgKiBOLkIuIC0gZnVydGhlciBlZmZpY2llbmN5IGlzIHBvc3NpYmxlIGhlcmUuICBFaWdodCBJMkMKKwkgKiBvcGVyYXRpb25zIG9uIEJDSSBhbmQgR1BJTyBtb2R1bGVzIGFyZSBhdm9pZGFibGUgaWYgSTJDCisJICogYnVyc3QgcmVhZC93cml0ZSB0cmFuc2FjdGlvbnMgd2VyZSBpbXBsZW1lbnRlZC4gIFdvdWxkCisJICogcHJvYmFibHkgc2F2ZSBhYm91dCAxbXMgb2YgYm9vdCB0aW1lIGFuZCBhIHNtYWxsIGFtb3VudCBvZgorCSAqIHBvd2VyLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0X3N6OyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIHRtciA9IHRbaV07CisJCWludCBjb3I7CisKKwkJLyogQXJlIElTUnMgY2xlYXJlZCBieSByZWFkcyBvciB3cml0ZXM/ICovCisJCWNvciA9IHR3bDQwMzBfcmVhZF9jb3JfYml0KHRtci5tb2Rfbm8sIHRtci5zaWhfY3RybCk7CisKKwkJZm9yIChqID0gMDsgaiA8IHRtci5yZWdfY250OyBqKyspIHsKKworCQkJLyogTWFzayBpbnRlcnJ1cHRzIGF0IHRoZSBUV0w0MDMwICovCisJCQlXQVJOX09OKHR3bDQwMzBfaTJjX3dyaXRlX3U4KHRtci5tb2Rfbm8sIDB4ZmYsCisJCQkJCQkgICAgIHRtci5pbXJzW2pdKSA8IDApOworCisJCQkvKiBDbGVhciBUV0w0MDMwIElTUnMgKi8KKwkJCVdBUk5fT04odHdsNDAzMF9pMmNfY2xlYXJfaXNyKHRtci5tb2Rfbm8sCisJCQkJCQkgICAgICB0bXIuaXNyc1tqXSwgY29yKSA8IDApOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHR3bF9pbml0X2lycShpbnQgaXJxX251bSwgdW5zaWduZWQgaXJxX2Jhc2UsIHVuc2lnbmVkIGlycV9lbmQpCit7CisJaW50CWk7CisKKwkvKgorCSAqIE1hc2sgYW5kIGNsZWFyIGFsbCBUV0w0MDMwIGludGVycnVwdHMgc2luY2UgaW5pdGlhbGx5IHdlIGRvCisJICogbm90IGhhdmUgYW55IFRXTDQwMzAgbW9kdWxlIGludGVycnVwdCBoYW5kbGVycyBwcmVzZW50CisJICovCisJdHdsNDAzMF9tYXNrX2NsZWFyX2ludHJzKHR3bDQwMzBfbW9kX3JlZ3MsCisJCQkJIEFSUkFZX1NJWkUodHdsNDAzMF9tb2RfcmVncykpOworCisJdHdsNDAzMF9pcnFfYmFzZSA9IGlycV9iYXNlOworCisJLyogaW5zdGFsbCBhbiBpcnEgaGFuZGxlciBmb3IgZWFjaCBvZiB0aGUgUElIIG1vZHVsZXMgKi8KKwlmb3IgKGkgPSBpcnFfYmFzZTsgaSA8IGlycV9lbmQ7IGkrKykgeworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnR3bDQwMzBfaXJxX2NoaXAsCisJCQkJaGFuZGxlX3NpbXBsZV9pcnEpOworCQlhY3RpdmF0ZV9pcnEoaSk7CisJfQorCisJLyogaW5zdGFsbCBhbiBpcnEgaGFuZGxlciB0byBkZW11bHRpcGxleCB0aGUgVFdMNDAzMCBpbnRlcnJ1cHQgKi8KKwlzZXRfaXJxX2RhdGEoaXJxX251bSwgc3RhcnRfdHdsNDAzMF9pcnFfdGhyZWFkKGlycV9udW0pKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnFfbnVtLCBkb190d2w0MDMwX2lycSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdHdsNDAzMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1bnNpZ25lZCBpOworCisJLyogRklYTUUgdW5kbyB0d2xfaW5pdF9pcnEoKSAqLworCWlmICh0d2w0MDMwX2lycV9iYXNlKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiY2FuJ3QgeWV0IGNsZWFuIHVwIElSUXM/XG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRXTDQwMzBfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tpXTsKKworCQlpZiAodHdsLT5jbGllbnQgJiYgdHdsLT5jbGllbnQgIT0gY2xpZW50KQorCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHR3bC0+Y2xpZW50KTsKKwkJdHdsNDAzMF9tb2R1bGVzW2ldLmNsaWVudCA9IE5VTEw7CisJfQorCWludXNlID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKKy8qIE5PVEU6ICB0aGlzIGRyaXZlciBvbmx5IGhhbmRsZXMgYSBzaW5nbGUgdHdsNDAzMC90cHM2NTl4MCBjaGlwICovCitzdGF0aWMgaW50Cit0d2w0MDMwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQJCQkJc3RhdHVzOworCXVuc2lnbmVkCQkJaTsKKwlzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YT9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpID09IDApIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJjYW4ndCB0YWxrIEkyQz9cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoaW51c2UgfHwgdHdsNDAzMF9pcnFfYmFzZSkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImRyaXZlciBpcyBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRXTDQwMzBfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tpXTsKKworCQl0d2wtPmFkZHJlc3MgPSBjbGllbnQtPmFkZHIgKyBpOworCQlpZiAoaSA9PSAwKQorCQkJdHdsLT5jbGllbnQgPSBjbGllbnQ7CisJCWVsc2UgeworCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKKwkJCQkJdHdsLT5hZGRyZXNzKTsKKwkJCWlmICghdHdsLT5jbGllbnQpIHsKKwkJCQlkZXZfZXJyKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYXR0YWNoIGNsaWVudCAlZFxuIiwgaSk7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlzdHJsY3B5KHR3bC0+Y2xpZW50LT5uYW1lLCBpZC0+bmFtZSwKKwkJCQkJc2l6ZW9mKHR3bC0+Y2xpZW50LT5uYW1lKSk7CisJCX0KKwkJbXV0ZXhfaW5pdCgmdHdsLT54ZmVyX2xvY2spOworCX0KKwlpbnVzZSA9IHRydWU7CisKKwkvKiBzZXR1cCBjbG9jayBmcmFtZXdvcmsgKi8KKwljbG9ja3NfaW5pdCgpOworCisJLyogTWF5YmUgaW5pdCB0aGUgVDIgSW50ZXJydXB0IHN1YnN5c3RlbSAqLworCWlmIChjbGllbnQtPmlycQorCQkJJiYgcGRhdGEtPmlycV9iYXNlCisJCQkmJiBwZGF0YS0+aXJxX2VuZCA+IHBkYXRhLT5pcnFfYmFzZSkgeworCQl0d2xfaW5pdF9pcnEoY2xpZW50LT5pcnEsIHBkYXRhLT5pcnFfYmFzZSwgcGRhdGEtPmlycV9lbmQpOworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJJUlEgJWQgY2hhaW5zIElSUXMgJWQuLiVkXG4iLAorCQkJCWNsaWVudC0+aXJxLCBwZGF0YS0+aXJxX2Jhc2UsIHBkYXRhLT5pcnFfZW5kIC0gMSk7CisJfQorCisJc3RhdHVzID0gYWRkX2NoaWxkcmVuKHBkYXRhKTsKK2ZhaWw6CisJaWYgKHN0YXR1cyA8IDApCisJCXR3bDQwMzBfcmVtb3ZlKGNsaWVudCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHR3bDQwMzBfaWRzW10gPSB7CisJeyAidHdsNDAzMCIsIDAgfSwJLyogIlRyaXRvbiAyIiAqLworCXsgInRwczY1OTUwIiwgMCB9LAkvKiBjYXRhbG9nIHZlcnNpb24gb2YgdHdsNDAzMCAqLworCXsgInRwczY1OTMwIiwgMCB9LAkvKiBmZXdlciBMRE9zIGFuZCBEQUNzOyBubyBjaGFyZ2VyICovCisJeyAidHBzNjU5MjAiLCAwIH0sCS8qIGZld2VyIExET3M7IG5vIGNvZGVjIG9yIGNoYXJnZXIgKi8KKwl7ICJ0d2w1MDMwIiwgMCB9LAkvKiBUMiB1cGRhdGVkICovCisJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0d2w0MDMwX2lkcyk7CisKKy8qIE9uZSBDbGllbnQgRHJpdmVyICwgNCBDbGllbnRzICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHdsNDAzMF9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gdHdsNDAzMF9pZHMsCisJLnByb2JlCQk9IHR3bDQwMzBfcHJvYmUsCisJLnJlbW92ZQkJPSB0d2w0MDMwX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR3bDQwMzBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdHdsNDAzMF9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHR3bDQwMzBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d2w0MDMwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmdHdsNDAzMF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHdsNDAzMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDIENvcmUgaW50ZXJmYWNlIGZvciBUV0w0MDMwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwppbmRleCAyNWE3YTVkLi5iZjg3ZjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKQEAgLTEyMTcsNyArMTIxNyw3IEBACiAKIAltdXRleF9pbml0KCZ3bTgzNTAtPmlycV9tdXRleCk7CiAJSU5JVF9XT1JLKCZ3bTgzNTAtPmlycV93b3JrLCB3bTgzNTBfaXJxX3dvcmtlcik7Ci0JaWYgKGlycSAhPSBOT19JUlEpIHsKKwlpZiAoaXJxKSB7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgd204MzUwX2lycSwgMCwKIAkJCQkgICJ3bTgzNTAiLCB3bTgzNTApOwogCQlpZiAocmV0ICE9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocC13bWkuYyBiL2RyaXZlcnMvbWlzYy9ocC13bWkuYwppbmRleCA1ZGFiZmI2Li40YjdjMjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaHAtd21pLmMKKysrIGIvZHJpdmVycy9taXNjL2hwLXdtaS5jCkBAIC04Miw2ICs4Miw3IEBACiAJe0tFX0tFWSwgMHgwMywgS0VZX0JSSUdIVE5FU1NET1dOfSwKIAl7S0VfS0VZLCAweDIwZTYsIEtFWV9QUk9HMX0sCiAJe0tFX0tFWSwgMHgyMTQyLCBLRVlfTUVESUF9LAorCXtLRV9LRVksIDB4MjEzYiwgS0VZX0lORk99LAogCXtLRV9LRVksIDB4MjMxYiwgS0VZX0hFTFB9LAogCXtLRV9FTkQsIDB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCmluZGV4IDQwNjk4OWUuLjdhNzJlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogCiAJYmxrX3F1ZXVlX3ByZXBfcnEobXEtPnF1ZXVlLCBtbWNfcHJlcF9yZXF1ZXN0KTsKIAlibGtfcXVldWVfb3JkZXJlZChtcS0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOworCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCBtcS0+cXVldWUpOwogCiAjaWZkZWYgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UKIAlpZiAoaG9zdC0+bWF4X2h3X3NlZ3MgPT0gMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggYWUxNmQ4NC4uM2IyMDg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBtYWludGVjaCBHbWJILCBUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+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+aXJxX2NkID49IDApCiAJCWZyZWVfaXJxKGhvc3QtPmlycV9jZCwgaG9zdCk7CiAKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOwogCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiB9CkBAIC0xNDU1LDcgKzE1NjMsNyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIE1NQy9TRCBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4sIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4iKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMi1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQ0MC1zZGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCmluZGV4IDM3ZDljNjAuLmNhMWJhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaApAQCAtNTEsNyArNTEsNyBAQAogCWludAkJCWRtYV9jb21wbGV0ZTsKIAogCXUzMgkJCXBpb19zZ3B0cjsKLQl1MzIJCQlwaW9fd29yZHM7CisJdTMyCQkJcGlvX2J5dGVzOwogCXUzMgkJCXBpb19jb3VudDsKIAl1MzIJCQkqcGlvX3B0cjsKICNkZWZpbmUgWEZFUl9OT05FIDAKQEAgLTY3LDQgKzY3LDggQEAKIAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJZnJlcV90cmFuc2l0aW9uOworI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggMTRmMTFmOC4uYTkwZDUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC0xNzIsNiArMTcyLDExIEBACiAJICBtZW1vcnkgY2hpcHMsIGFuZCBhbHNvIHVzZSBpb2N0bCgpIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dAogCSAgdGhlIGRldmljZSwgb3IgdG8gZXJhc2UgcGFydHMgb2YgaXQuCiAKK2NvbmZpZyBIQVZFX01URF9PVFAKKwlib29sCisJaGVscAorCSAgRW5hYmxlIGFjY2VzcyB0byBPVFAgcmVnaW9ucyB1c2luZyBNVERfQ0hBUi4KKwogY29uZmlnIE1URF9CTEtERVZTCiAJdHJpc3RhdGUgIkNvbW1vbiBpbnRlcmZhY2UgdG8gYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJyIKIAlkZXBlbmRzIG9uIEJMT0NLCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwppbmRleCA0NzlkMzJiLi45NDA4MDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiBjb25maWcgTVREX0NGSQogCXRyaXN0YXRlICJEZXRlY3QgZmxhc2ggY2hpcHMgYnkgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBwcm9iZSIKIAlzZWxlY3QgTVREX0dFTl9QUk9CRQorCXNlbGVjdCBNVERfQ0ZJX1VUSUwKIAloZWxwCiAJICBUaGUgQ29tbW9uIEZsYXNoIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uIHdhcyBkZXZlbG9wZWQgYnkgSW50ZWwsCiAJICBBTUQgYW5kIG90aGVyIGZsYXNoIG1hbnVmYWN0dXJlcyB0aGF0IHByb3ZpZGVzIGEgdW5pdmVyc2FsIG1ldGhvZApAQCAtMTU0LDYgKzE1NSw3IEBACiBjb25maWcgTVREX09UUAogCWJvb2wgIlByb3RlY3Rpb24gUmVnaXN0ZXJzIGFrYSBvbmUtdGltZSBwcm9ncmFtbWFibGUgKE9UUCkgYml0cyIKIAlkZXBlbmRzIG9uIE1URF9DRklfQURWX09QVElPTlMKKwlzZWxlY3QgSEFWRV9NVERfT1RQCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcgYW5kIGxvY2tpbmcgc28gY2FsbGVkCkBAIC0xODcsNyArMTg5LDcgQEAKIAkgIFN0cmF0YUZsYXNoIGFuZCBvdGhlciBwYXJ0cy4KIAogY29uZmlnIE1URF9DRklfQU1EU1RECi0JdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEFNRC9GdWppdHN1IGZsYXNoIGNoaXBzIgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBTUQvRnVqaXRzdS9TcGFuc2lvbiBmbGFzaCBjaGlwcyIKIAlkZXBlbmRzIG9uIE1URF9HRU5fUFJPQkUKIAlzZWxlY3QgTVREX0NGSV9VVElMCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCA1ZjFiNDcyLi5jOTNhOGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtNDc4LDYgKzQ3OCwyOCBAQAogCQllbHNlCiAJCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAyMDAwMDAwOwogCisJCWlmIChjZmktPmNmaXEtPldvcmRXcml0ZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lX21heCA9CisJCQkJMTw8KGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cCArCisJCQkJICAgIGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dE1heCk7CisJCWVsc2UKKwkJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lX21heCA9IDUwMDAwICogODsKKworCQlpZiAoY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0TWF4KQorCQkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZV9tYXggPQorCQkJCTE8PChjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCArCisJCQkJICAgIGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0TWF4KTsKKworCQlpZiAoY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dFR5cCAmJgorCQkgICAgY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZV9tYXggPQorCQkJCTEwMDA8PChjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwICsKKwkJCQkgICAgICAgY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dE1heCk7CisJCWVsc2UKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZV9tYXggPSAyMDAwMDAwICogODsKKwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CkBAIC03MDMsNiArNzI1LDEwIEBACiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgSFo7CiAKKwkvKiBQcmV2ZW50IHNldHRpbmcgc3RhdGUgRkxfU1lOQ0lORyBmb3IgY2hpcCBpbiBzdXNwZW5kZWQgc3RhdGUuICovCisJaWYgKG1vZGUgPT0gRkxfU1lOQ0lORyAmJiBjaGlwLT5vbGRzdGF0ZSAhPSBGTF9SRUFEWSkKKwkJZ290byBzbGVlcDsKKwogCXN3aXRjaCAoY2hpcC0+c3RhdGUpIHsKIAogCWNhc2UgRkxfU1RBVFVTOgpAQCAtODA4LDggKzgzNCw5IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKICByZXRyeToKLQlpZiAoY2hpcC0+cHJpdiAmJiAobW9kZSA9PSBGTF9XUklUSU5HIHx8IG1vZGUgPT0gRkxfRVJBU0lORwotCQkJICAgfHwgbW9kZSA9PSBGTF9PVFBfV1JJVEUgfHwgbW9kZSA9PSBGTF9TSFVURE9XTikpIHsKKwlpZiAoY2hpcC0+cHJpdiAmJgorCSAgICAobW9kZSA9PSBGTF9XUklUSU5HIHx8IG1vZGUgPT0gRkxfRVJBU0lORyB8fCBtb2RlID09IEZMX09UUF9XUklURQorCSAgICB8fCBtb2RlID09IEZMX1NIVVRET1dOKSAmJiBjaGlwLT5zdGF0ZSAhPSBGTF9TWU5DSU5HKSB7CiAJCS8qCiAJCSAqIE9LLiBXZSBoYXZlIHBvc3NpYmlsaXR5IGZvciBjb250ZW50aW9uIG9uIHRoZSB3cml0ZS9lcmFzZQogCQkgKiBvcGVyYXRpb25zIHdoaWNoIGFyZSBnbG9iYWwgdG8gdGhlIHJlYWwgY2hpcCBhbmQgbm90IHBlcgpAQCAtODU5LDYgKzg4NiwxNCBAQAogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCQlzcGluX2xvY2soJnNoYXJlZC0+bG9jayk7CisKKwkJCS8qIFdlIHNob3VsZCBub3Qgb3duIGNoaXAgaWYgaXQgaXMgYWxyZWFkeQorCQkJICogaW4gRkxfU1lOQ0lORyBzdGF0ZS4gUHV0IGNvbnRlbmRlciBhbmQgcmV0cnkuICovCisJCQlpZiAoY2hpcC0+c3RhdGUgPT0gRkxfU1lOQ0lORykgeworCQkJCXB1dF9jaGlwKG1hcCwgY29udGVuZGVyLCBjb250ZW5kZXItPnN0YXJ0KTsKKwkJCQlzcGluX3VubG9jayhjb250ZW5kZXItPm11dGV4KTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQogCQkJc3Bpbl91bmxvY2soY29udGVuZGVyLT5tdXRleCk7CiAJCX0KIApAQCAtMTAxMiw3ICsxMDQ3LDcgQEAKIAogc3RhdGljIGludCBfX3hpcHJhbSB4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQkJdW5zaWduZWQgbG9uZyBhZHIsIHVuc2lnbmVkIGludCBjaGlwX29wX3RpbWUgKQorCQl1bnNpZ25lZCBsb25nIGFkciwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZV9tYXgpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwpAQCAtMTAyMSw3ICsxMDU2LDcgQEAKIAlmbHN0YXRlX3Qgb2xkc3RhdGUsIG5ld3N0YXRlOwogCiAgICAgICAgCXN0YXJ0ID0geGlwX2N1cnJ0aW1lKCk7Ci0JdXNlYyA9IGNoaXBfb3BfdGltZSAqIDg7CisJdXNlYyA9IGNoaXBfb3BfdGltZV9tYXg7CiAJaWYgKHVzZWMgPT0gMCkKIAkJdXNlYyA9IDUwMDAwMDsKIAlkb25lID0gMDsKQEAgLTExMzEsOCArMTE2Niw4IEBACiAjZGVmaW5lIFhJUF9JTlZBTF9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSAgXAogCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkKIAotI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsIGludmFsX2FkciwgaW52YWxfbGVuLCB1c2VjKSBcCi0JeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWMpCisjZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwgaW52YWxfYWRyLCBpbnZhbF9sZW4sIHVzZWMsIHVzZWNfbWF4KSBcCisJeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWNfbWF4KQogCiAjZWxzZQogCkBAIC0xMTQ0LDcgKzExNzksNyBAQAogc3RhdGljIGludCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKIAkJdW5zaWduZWQgbG9uZyBjbWRfYWRyLCB1bnNpZ25lZCBsb25nIGludmFsX2FkciwgaW50IGludmFsX2xlbiwKLQkJdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSkKKwkJdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZV9tYXgpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0sgPSBDTUQoMHg4MCk7CkBAIC0xMTU2LDggKzExOTEsNyBAQAogCQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGludmFsX2FkciwgaW52YWxfbGVuKTsKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCi0JLyogc2V0IG91ciB0aW1lb3V0IHRvIDggdGltZXMgdGhlIGV4cGVjdGVkIGRlbGF5ICovCi0JdGltZW8gPSBjaGlwX29wX3RpbWUgKiA4OworCXRpbWVvID0gY2hpcF9vcF90aW1lX21heDsKIAlpZiAoIXRpbWVvKQogCQl0aW1lbyA9IDUwMDAwMDsKIAlyZXNldF90aW1lbyA9IHRpbWVvOwpAQCAtMTIxNyw4ICsxMjUxLDggQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpIFwKLQlJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgdWRlbGF5KTsKKyNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXksIHVkZWxheV9tYXgpIFwKKwlJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgdWRlbGF5LCB1ZGVsYXlfbWF4KTsKIAogCiBzdGF0aWMgaW50IGRvX3BvaW50X29uZWNoaXAgKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLCBsb2ZmX3QgYWRyLCBzaXplX3QgbGVuKQpAQCAtMTQ1Miw3ICsxNDg2LDggQEAKIAogCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLAogCQkJCSAgIGFkciwgbWFwX2Jhbmt3aWR0aChtYXApLAotCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZSk7CisJCQkJICAgY2hpcC0+d29yZF93cml0ZV90aW1lLAorCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdvcmQgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKQEAgLTE2MjMsNyArMTY1OCw3IEBACiAKIAljaGlwLT5zdGF0ZSA9IEZMX1dSSVRJTkdfVE9fQlVGRkVSOwogCW1hcF93cml0ZShtYXAsIHdyaXRlX2NtZCwgY21kX2Fkcik7Ci0JcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCk7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCwgMCk7CiAJaWYgKHJldCkgewogCQkvKiBBcmdoLiBOb3QgcmVhZHkgZm9yIHdyaXRlIHRvIGJ1ZmZlciAqLwogCQltYXBfd29yZCBYc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKQEAgLTE2NDAsNyArMTY3NSw3IEBACiAKIAkvKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2Ygd29yZHMgdG8gd3JpdGUgKi8KIAl3b3JkX2dhcCA9ICgtYWRyICYgKG1hcF9iYW5rd2lkdGgobWFwKS0xKSk7Ci0Jd29yZHMgPSAobGVuIC0gd29yZF9nYXAgKyBtYXBfYmFua3dpZHRoKG1hcCkgLSAxKSAvIG1hcF9iYW5rd2lkdGgobWFwKTsKKwl3b3JkcyA9IERJVl9ST1VORF9VUChsZW4gLSB3b3JkX2dhcCwgbWFwX2Jhbmt3aWR0aChtYXApKTsKIAlpZiAoIXdvcmRfZ2FwKSB7CiAJCXdvcmRzLS07CiAJfSBlbHNlIHsKQEAgLTE2OTIsNyArMTcyNyw4IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsCiAJCQkJICAgaW5pdGlhbF9hZHIsIGluaXRpYWxfbGVuLAotCQkJCSAgIGNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lKTsKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZSwKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CkBAIC0xODI3LDcgKzE4NjMsOCBAQAogCiAJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCiAJCQkJICAgYWRyLCBsZW4sCi0JCQkJICAgY2hpcC0+ZXJhc2VfdGltZSk7CisJCQkJICAgY2hpcC0+ZXJhc2VfdGltZSwKKwkJCQkgICBjaGlwLT5lcmFzZV90aW1lX21heCk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CiAJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwpAQCAtMjAwNiw3ICsyMDQzLDcgQEAKIAkgKi8KIAl1ZGVsYXkgPSAoIWV4dHAgfHwgIShleHRwLT5GZWF0dXJlU3VwcG9ydCAmICgxIDw8IDUpKSkgPyAxMDAwMDAwL0haIDogMDsKIAotCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5KTsKKwlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSwgdWRlbGF5ICogMTAwKTsKIAlpZiAocmV0KSB7CiAJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IGE5NzJjYzYuLjNlNmY1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKiBYSVAgc3VwcG9ydCBob29rcyBieSBWaXRhbHkgV29vbCAoYmFzZWQgb24gY29kZSBmb3IgSW50ZWwgZmxhc2gKICAqIGJ5IE5pY29sYXMgUGl0cmUpCiAgKgorICogMjUvMDkvMjAwOCBDaHJpc3RvcGhlciBNb29yZTogVG9wQm90dG9tIGZpeHVwIGZvciBtYW55IE1hY3Jvbml4IHdpdGggQ0ZJIFYxLjAKKyAqCiAgKiBPY2Nhc2lvbmFsbHkgbWFpbnRhaW5lZCBieSBUaGF5bmUgSGFyYmF1Z2ggdGhhcmJhdWdoIGF0IGxueGkgZG90IGNvbQogICoKICAqIFRoaXMgY29kZSBpcyBHUEwKQEAgLTQzLDYgKzQ1LDcgQEAKIAogI2RlZmluZSBNQU5VRkFDVFVSRVJfQU1ECTB4MDAwMQogI2RlZmluZSBNQU5VRkFDVFVSRVJfQVRNRUwJMHgwMDFGCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9NQUNST05JWAkweDAwQzIKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NTVAkweDAwQkYKICNkZWZpbmUgU1NUNDlMRjAwNEIJICAgICAgICAweDAwNjAKICNkZWZpbmUgU1NUNDlMRjA0MEIJICAgICAgICAweDAwNTAKQEAgLTE0NCwxMiArMTQ3LDQ0IEBACiAKIAlpZiAoKChtYWpvciA8PCA4KSB8IG1pbm9yKSA8IDB4MzEzMSkgewogCQkvKiBDRkkgdmVyc2lvbiAxLjAgPT4gZG9uJ3QgdHJ1c3QgYm9vdGxvYyAqLworCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCQkiJXM6IEpFREVDIFZlbmRvciBJRCBpcyAweCUwMlggRGV2aWNlIElEIGlzIDB4JTAyWFxuIiwKKwkJCW1hcC0+bmFtZSwgY2ZpLT5tZnIsIGNmaS0+aWQpOworCisJCS8qIEFGQUlDUyBhbGwgMjlMVjQwMCB3aXRoIGEgYm90dG9tIGJvb3QgYmxvY2sgaGF2ZSBhIGRldmljZSBJRAorCQkgKiBvZiAweDIyQkEgaW4gMTYtYml0IG1vZGUgYW5kIDB4QkEgaW4gOC1iaXQgbW9kZS4KKwkJICogVGhlc2Ugd2VyZSBiYWRseSBkZXRlY3RlZCBhcyB0aGV5IGhhdmUgdGhlIDB4ODAgYml0IHNldAorCQkgKiBzbyB0cmVhdCB0aGVtIGFzIGEgc3BlY2lhbCBjYXNlLgorCQkgKi8KKwkJaWYgKCgoY2ZpLT5pZCA9PSAweEJBKSB8fCAoY2ZpLT5pZCA9PSAweDIyQkEpKSAmJgorCisJCQkvKiBNYWNyb25peCBhZGRlZCBDRkkgdG8gdGhlaXIgMm5kIGdlbmVyYXRpb24KKwkJCSAqIE1YMjlMVjQwMEMgQi9UIGJ1dCBBRkFJQ1Mgbm8gb3RoZXIgMjlMVjQwMCAoQU1ELAorCQkJICogRnVqaXRzdSwgU3BhbnNpb24sIEVPTiwgRVNJIGFuZCBvbGRlciBNYWNyb25peCkKKwkJCSAqIGhhcyBDRkkuCisJCQkgKgorCQkJICogVGhlcmVmb3JlIGFsc28gY2hlY2sgdGhlIG1hbnVmYWN0dXJlci4KKwkJCSAqIFRoaXMgcmVkdWNlcyB0aGUgcmlzayBvZiBmYWxzZSBkZXRlY3Rpb24gZHVlIHRvCisJCQkgKiB0aGUgOC1iaXQgZGV2aWNlIElELgorCQkJICovCisJCQkoY2ZpLT5tZnIgPT0gTUFOVUZBQ1RVUkVSX01BQ1JPTklYKSkgeworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKKwkJCQkiJXM6IE1hY3Jvbml4IE1YMjlMVjQwMEMgd2l0aCBib3R0b20gYm9vdCBibG9jayIKKwkJCQkiIGRldGVjdGVkXG4iLCBtYXAtPm5hbWUpOworCQkJZXh0cC0+VG9wQm90dG9tID0gMjsJLyogYm90dG9tIGJvb3QgKi8KKwkJfSBlbHNlCiAJCWlmIChjZmktPmlkICYgMHg4MCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEpFREVDIERldmljZSBJRCBpcyAweCUwMlguIEFzc3VtaW5nIGJyb2tlbiBDRkkgdGFibGUuXG4iLCBtYXAtPm5hbWUsIGNmaS0+aWQpOwogCQkJZXh0cC0+VG9wQm90dG9tID0gMzsJLyogdG9wIGJvb3QgKi8KIAkJfSBlbHNlIHsKIAkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CS8qIGJvdHRvbSBib290ICovCiAJCX0KKworCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJIiVzOiBBTUQgQ0ZJIFBSSSBWJWMuJWMgaGFzIG5vIGJvb3QgYmxvY2sgZmllbGQ7IgorCQkJIiBkZWR1Y2VkICVzIGZyb20gRGV2aWNlIElEXG4iLCBtYXAtPm5hbWUsIG1ham9yLCBtaW5vciwKKwkJCWV4dHAtPlRvcEJvdHRvbSA9PSAyID8gImJvdHRvbSIgOiAidG9wIik7CiAJfQogfQogI2VuZGlmCkBAIC0xNzgsMTAgKzIxMywxOCBAQAogCWlmIChhdG1lbF9wcmkuRmVhdHVyZXMgJiAweDAyKQogCQlleHRwLT5FcmFzZVN1c3BlbmQgPSAyOwogCi0JaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQotCQlleHRwLT5Ub3BCb3R0b20gPSAyOwotCWVsc2UKLQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwkvKiBTb21lIGNoaXBzIGdvdCBpdCBiYWNrd2FyZHMuLi4gKi8KKwlpZiAoY2ZpLT5pZCA9PSBBVDQ5QlY2NDE2KSB7CisJCWlmIChhdG1lbF9wcmkuQm90dG9tQm9vdCkKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDM7CisJCWVsc2UKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CisJfSBlbHNlIHsKKwkJaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQorCQkJZXh0cC0+VG9wQm90dG9tID0gMjsKKwkJZWxzZQorCQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwl9CiAKIAkvKiBidXJzdCB3cml0ZSBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KIAljZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCA9IDA7CkBAIC0yNDMsNiArMjg2LDcgQEAKIAl7IENGSV9NRlJfQVRNRUwsIENGSV9JRF9BTlksIGZpeHVwX2NvbnZlcnRfYXRtZWxfcHJpLCBOVUxMIH0sCiAjaWZkZWYgQU1EX0JPT1RMT0NfQlVHCiAJeyBDRklfTUZSX0FNRCwgQ0ZJX0lEX0FOWSwgZml4dXBfYW1kX2Jvb3RibG9jaywgTlVMTCB9LAorCXsgTUFOVUZBQ1RVUkVSX01BQ1JPTklYLCBDRklfSURfQU5ZLCBmaXh1cF9hbWRfYm9vdGJsb2NrLCBOVUxMIH0sCiAjZW5kaWYKIAl7IENGSV9NRlJfQU1ELCAweDAwNTAsIGZpeHVwX3VzZV9zZWNzaSwgTlVMTCwgfSwKIAl7IENGSV9NRlJfQU1ELCAweDAwNTMsIGZpeHVwX3VzZV9zZWNzaSwgTlVMTCwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKaW5kZXggYzQxOGU5Mi4uZTYzZTY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKQEAgLTQ0LDE3ICs0NCwxNCBAQAogCiAjZGVmaW5lIHhpcF9lbmFibGUoYmFzZSwgbWFwLCBjZmkpIFwKIGRvIHsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsJCVwKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOyBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHhpcF9kaXNhYmxlX3FyeShiYXNlLCBtYXAsIGNmaSkgXAogZG8geyBcCiAJeGlwX2Rpc2FibGUoKTsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAorCWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSk7IFwKIH0gd2hpbGUgKDApCiAKICNlbHNlCkBAIC03MCwzMiArNjcsNiBAQAogICAgaW46IGludGVybGVhdmUsdHlwZSxtb2RlCiAgICByZXQ6IHRhYmxlIGluZGV4LCA8MCBmb3IgZXJyb3IKICAqLwotc3RhdGljIGludCBfX3hpcHJhbSBxcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKLQkJCQlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKLXsKLQlpbnQgb3NmID0gY2ZpLT5pbnRlcmxlYXZlICogY2ZpLT5kZXZpY2VfdHlwZTsJLy8gc2NhbGUgZmFjdG9yCi0JbWFwX3dvcmQgdmFsWzNdOwotCW1hcF93b3JkIHFyeVszXTsKLQotCXFyeVswXSA9IGNmaV9idWlsZF9jbWQoJ1EnLCBtYXAsIGNmaSk7Ci0JcXJ5WzFdID0gY2ZpX2J1aWxkX2NtZCgnUicsIG1hcCwgY2ZpKTsKLQlxcnlbMl0gPSBjZmlfYnVpbGRfY21kKCdZJywgbWFwLCBjZmkpOwotCi0JdmFsWzBdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTApOwotCXZhbFsxXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDExKTsKLQl2YWxbMl0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMik7Ci0KLQlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzBdLCB2YWxbMF0pKQotCQlyZXR1cm4gMDsKLQotCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMV0sIHZhbFsxXSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsyXSwgdmFsWzJdKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsgCS8vICJRUlkiIGZvdW5kCi19CiAKIHN0YXRpYyBpbnQgX194aXByYW0gY2ZpX3Byb2JlX2NoaXAoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGJhc2UsCiAJCQkJICAgdW5zaWduZWQgbG9uZyAqY2hpcF9tYXAsIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQpAQCAtMTE2LDExICs4Nyw3IEBACiAJfQogCiAJeGlwX2Rpc2FibGUoKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQotCWlmICghcXJ5X3ByZXNlbnQobWFwLGJhc2UsY2ZpKSkgeworCWlmICghY2ZpX3FyeV9tb2RlX29uKGJhc2UsIG1hcCwgY2ZpKSkgewogCQl4aXBfZW5hYmxlKGJhc2UsIG1hcCwgY2ZpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQxLDE0ICsxMDgsMTMgQEAKICAJCXN0YXJ0ID0gaSA8PCBjZmktPmNoaXBzaGlmdDsKIAkJLyogVGhpcyBjaGlwIHNob3VsZCBiZSBpbiByZWFkIG1vZGUgaWYgaXQncyBvbmUKIAkJICAgd2UndmUgYWxyZWFkeSB0b3VjaGVkLiAqLwotCQlpZiAocXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgeworCQlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgc3RhcnQsIGNmaSkpIHsKIAkJCS8qIEVlcC4gVGhpcyBjaGlwIGFsc28gaGFkIHRoZSBRUlkgbWFya2VyLgogCQkJICogSXMgaXQgYW4gYWxpYXMgZm9yIHRoZSBuZXcgb25lPyAqLwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCQkJY2ZpX3FyeV9tb2RlX29mZihzdGFydCwgbWFwLCBjZmkpOwogCiAJCQkvKiBJZiB0aGUgUVJZIG1hcmtlciBnb2VzIGF3YXksIGl0J3MgYW4gYWxpYXMgKi8KLQkJCWlmICghcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgeworCQkJaWYgKCFjZmlfcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgewogCQkJCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3VuZCBhbiBhbGlhcyBhdCAweCV4IGZvciB0aGUgY2hpcCBhdCAweCVseFxuIiwKIAkJCQkgICAgICAgbWFwLT5uYW1lLCBiYXNlLCBzdGFydCk7CkBAIC0xNTgsMTAgKzEyNCw5IEBACiAJCQkgKiB1bmZvcnR1bmF0ZS4gU3RpY2sgdGhlIG5ldyBjaGlwIGluIHJlYWQgbW9kZQogCQkJICogdG9vIGFuZCBpZiBpdCdzIHRoZSBzYW1lLCBhc3N1bWUgaXQncyBhbiBhbGlhcy4gKi8KIAkJCS8qIEZJWE1FOiBVc2Ugb3RoZXIgbW9kZXMgdG8gZG8gYSBwcm9wZXIgY2hlY2sgKi8KLQkJCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCQkJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAKLQkJCWlmIChxcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpIHsKKwkJCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKSB7CiAJCQkJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvdW5kIGFuIGFsaWFzIGF0IDB4JXggZm9yIHRoZSBjaGlwIGF0IDB4JWx4XG4iLAogCQkJCSAgICAgICBtYXAtPm5hbWUsIGJhc2UsIHN0YXJ0KTsKQEAgLTE3Niw4ICsxNDEsNyBAQAogCWNmaS0+bnVtY2hpcHMrKzsKIAogCS8qIFB1dCBpdCBiYWNrIGludG8gUmVhZCBNb2RlICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlZCB4JWQgZGV2aWNlcyBhdCAweCV4IGluICVkLWJpdCBiYW5rXG4iLApAQCAtMjM3LDkgKzIwMSw3IEBACiAJCQkgIGNmaV9yZWFkX3F1ZXJ5KG1hcCwgYmFzZSArIDB4ZiAqIG9mc19mYWN0b3IpOwogCiAJLyogUHV0IGl0IGJhY2sgaW50byBSZWFkIE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQkvKiAuLi4gZXZlbiBpZiBpdCdzIGFuIEludGVsIGNoaXAgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOwogCiAJLyogRG8gYW55IG5lY2Vzc2FyeSBieXRlc3dhcHBpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCmluZGV4IDBlZTQ1NzAuLjM0ZDQwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwpAQCAtMjQsNiArMjQsNjYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCitpbnQgX194aXByYW0gY2ZpX3FyeV9wcmVzZW50KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwlpbnQgb3NmID0gY2ZpLT5pbnRlcmxlYXZlICogY2ZpLT5kZXZpY2VfdHlwZTsJLyogc2NhbGUgZmFjdG9yICovCisJbWFwX3dvcmQgdmFsWzNdOworCW1hcF93b3JkIHFyeVszXTsKKworCXFyeVswXSA9IGNmaV9idWlsZF9jbWQoJ1EnLCBtYXAsIGNmaSk7CisJcXJ5WzFdID0gY2ZpX2J1aWxkX2NtZCgnUicsIG1hcCwgY2ZpKTsKKwlxcnlbMl0gPSBjZmlfYnVpbGRfY21kKCdZJywgbWFwLCBjZmkpOworCisJdmFsWzBdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTApOworCXZhbFsxXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDExKTsKKwl2YWxbMl0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMik7CisKKwlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzBdLCB2YWxbMF0pKQorCQlyZXR1cm4gMDsKKworCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMV0sIHZhbFsxXSkpCisJCXJldHVybiAwOworCisJaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsyXSwgdmFsWzJdKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsgCS8qICJRUlkiIGZvdW5kICovCit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X3ByZXNlbnQpOworCitpbnQgX194aXByYW0gY2ZpX3FyeV9tb2RlX29uKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkKKwkJcmV0dXJuIDE7CisJLyogUVJZIG5vdCBmb3VuZCBwcm9iYWJseSB3ZSBkZWFsIHdpdGggc29tZSBvZGQgQ0ZJIGNoaXBzICovCisJLyogU29tZSByZXZpc2lvbnMgb2Ygc29tZSBvbGQgSW50ZWwgY2hpcHM/ICovCisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpCisJCXJldHVybiAxOworCS8qIFNUIE0yOURXIGNoaXBzICovCisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKQorCQlyZXR1cm4gMTsKKwkvKiBRUlkgbm90IGZvdW5kICovCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb24pOworCit2b2lkIF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vZmYodWludDMyX3QgYmFzZSwgc3RydWN0IG1hcF9pbmZvICptYXAsCisJCQkgICAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCit7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb2ZmKTsKKwogc3RydWN0IGNmaV9leHRxdWVyeSAqCiBfX3hpcHJhbSBjZmlfcmVhZF9wcmkoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTE2IGFkciwgX191MTYgc2l6ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKQEAgLTQ4LDggKzEwOCw3IEBACiAjZW5kaWYKIAogCS8qIFN3aXRjaCBpdCBpbnRvIFF1ZXJ5IE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQorCWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSk7CiAJLyogUmVhZCBpbiB0aGUgRXh0ZW5kZWQgUXVlcnkgVGFibGUgKi8KIAlmb3IgKGk9MDsgaTxzaXplOyBpKyspIHsKIAkJKCh1bnNpZ25lZCBjaGFyICopZXh0cClbaV0gPQpAQCAtNTcsOCArMTE2LDcgQEAKIAl9CiAKIAkvKiBNYWtlIHN1cmUgaXQgcmV0dXJucyB0byByZWFkIG1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4ZjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4ZmYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAogI2lmZGVmIENPTkZJR19NVERfWElQCiAJKHZvaWQpIG1hcF9yZWFkKG1hcCwgYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCmluZGV4IGYwNjE4ODUuLmUyZGM5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJbWF4X2NoaXBzID0gMTsKIAl9CiAKLQltYXBzaXplID0gc2l6ZW9mKGxvbmcpICogKCAobWF4X2NoaXBzICsgQklUU19QRVJfTE9ORy0xKSAvIEJJVFNfUEVSX0xPTkcgKTsKKwltYXBzaXplID0gc2l6ZW9mKGxvbmcpICogRElWX1JPVU5EX1VQKG1heF9jaGlwcywgQklUU19QRVJfTE9ORyk7CiAJY2hpcF9tYXAgPSBremFsbG9jKG1hcHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcF9tYXApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBDRkkgY2hpcCBtYXBcbiIsIG1hcC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jIGIvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYwppbmRleCA3MWJjMDdmLi41MGEzNDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKQEAgLTcsNiArNyw3IEBACiAgKgogICogbXRkcGFydHM9PG10ZGRlZj5bOzxtdGRkZWZdCiAgKiA8bXRkZGVmPiAgOj0gPG10ZC1pZD46PHBhcnRkZWY+Wyw8cGFydGRlZj5dCisgKiAgICAgICAgICAgICAgd2hlcmUgPG10ZC1pZD4gaXMgdGhlIG5hbWUgZnJvbSB0aGUgImNhdCAvcHJvYy9tdGQiIGNvbW1hbmQKICAqIDxwYXJ0ZGVmPiA6PSA8c2l6ZT5bQG9mZnNldF1bPG5hbWU+XVtyb11bbGtdCiAgKiA8bXRkLWlkPiAgOj0gdW5pcXVlIG5hbWUgdXNlZCBpbiBtYXBwaW5nIGRyaXZlci9kZXZpY2UgKG10ZC0+bmFtZSkKICAqIDxzaXplPiAgICA6PSBzdGFuZGFyZCBsaW51eCBtZW1zaXplIE9SICItIiB0byBkZW5vdGUgYWxsIHJlbWFpbmluZyBzcGFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IDljNjEzZjAuLjZmZGUwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTU5LDYgKzU5LDI3IEBACiAJICBTb21ldGltZXMgRGF0YUZsYXNoIGNoaXBzIGFyZSBwYWNrYWdlZCBpbnNpZGUgTU1DLWZvcm1hdAogCSAgY2FyZHM7IGF0IHRoaXMgd3JpdGluZywgdGhlIE1NQyBzdGFjayB3b24ndCBoYW5kbGUgdGhvc2UuCiAKK2NvbmZpZyBNVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWQorCWJvb2wgIlZlcmlmeSBEYXRhRmxhc2ggcGFnZSB3cml0ZXMiCisJZGVwZW5kcyBvbiBNVERfREFUQUZMQVNICisJaGVscAorCSAgVGhpcyBhZGRzIGFuIGV4dHJhIGNoZWNrIHdoZW4gZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBmbGFzaC4KKwkgIEl0IG1heSBoZWxwIGlmIHlvdSBhcmUgdmVyaWZ5aW5nIGNoaXAgc2V0dXAgKHRpbWluZ3MgZXRjKSBvbgorCSAgeW91ciBib2FyZC4gIFRoZXJlIGlzIGEgcmFyZSBwb3NzaWJpbGl0eSB0aGF0IGV2ZW4gdGhvdWdoIHRoZQorCSAgZGV2aWNlIHRoaW5rcyB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwsIGEgYml0IGNvdWxkIGhhdmUgYmVlbgorCSAgZmxpcHBlZCBhY2NpZGVudGFsbHkgZHVlIHRvIGRldmljZSB3ZWFyIG9yIHNvbWV0aGluZyBlbHNlLgorCitjb25maWcgTVREX0RBVEFGTEFTSF9PVFAKKwlib29sICJEYXRhRmxhc2ggT1RQIHN1cHBvcnQgKFNlY3VyaXR5IFJlZ2lzdGVyKSIKKwlkZXBlbmRzIG9uIE1URF9EQVRBRkxBU0gKKwlzZWxlY3QgSEFWRV9NVERfT1RQCisJaGVscAorCSAgTmV3ZXIgRGF0YUZsYXNoIGNoaXBzIChyZXZpc2lvbnMgQyBhbmQgRCkgc3VwcG9ydCAxMjggYnl0ZXMgb2YKKwkgIG9uZS10aW1lLXByb2dyYW1tYWJsZSAoT1RQKSBkYXRhLiAgVGhlIGZpcnN0IGhhbGYgbWF5IGJlIHdyaXR0ZW4KKwkgIChvbmNlKSB3aXRoIHVwIHRvIDY0IGJ5dGVzIG9mIGRhdGEsIHN1Y2ggYXMgYSBzZXJpYWwgbnVtYmVyIG9yCisJICBvdGhlciBrZXkgcHJvZHVjdCBkYXRhLiAgVGhlIHNlY29uZCBoYWxmIGlzIHByb2dyYW1tZWQgd2l0aCBhCisJICB1bmlxdWUtdG8tZWFjaC1jaGlwIGJpdCBwYXR0ZXJuIGF0IHRoZSBmYWN0b3J5LgorCiBjb25maWcgTVREX00yNVA4MAogCXRyaXN0YXRlICJTdXBwb3J0IG1vc3QgU1BJIEZsYXNoIGNoaXBzIChBVDI2REYsIE0yNVAsIFcyNVgsIC4uLikiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKaW5kZXggYjM1YzMzMy4uNzZhNzY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lCU9QQ09ERV9QUAkJMHgwMgkvKiBQYWdlIHByb2dyYW0gKHVwIHRvIDI1NiBieXRlcykgKi8KICNkZWZpbmUJT1BDT0RFX0JFXzRLIAkJMHgyMAkvKiBFcmFzZSA0S2lCIGJsb2NrICovCiAjZGVmaW5lCU9QQ09ERV9CRV8zMksJCTB4NTIJLyogRXJhc2UgMzJLaUIgYmxvY2sgKi8KKyNkZWZpbmUJT1BDT0RFX0JFCQkweGM3CS8qIEVyYXNlIHdob2xlIGZsYXNoIGJsb2NrICovCiAjZGVmaW5lCU9QQ09ERV9TRQkJMHhkOAkvKiBTZWN0b3IgZXJhc2UgKHVzdWFsbHkgNjRLaUIpICovCiAjZGVmaW5lCU9QQ09ERV9SRElECQkweDlmCS8qIFJlYWQgSkVERUMgSUQgKi8KIApAQCAtMTYxLDYgKzE2MiwzMSBAQAogCXJldHVybiAxOwogfQogCisvKgorICogRXJhc2UgdGhlIHdob2xlIGZsYXNoIG1lbW9yeQorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBub24temVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZXJhc2VfYmxvY2soc3RydWN0IG0yNXAgKmZsYXNoKQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogJXMgJWRLaUJcbiIsCisJCQlmbGFzaC0+c3BpLT5kZXYuYnVzX2lkLCBfX2Z1bmNfXywKKwkJCWZsYXNoLT5tdGQuc2l6ZSAvIDEwMjQpOworCisJLyogV2FpdCB1bnRpbCBmaW5pc2hlZCBwcmV2aW91cyB3cml0ZSBjb21tYW5kLiAqLworCWlmICh3YWl0X3RpbGxfcmVhZHkoZmxhc2gpKQorCQlyZXR1cm4gMTsKKworCS8qIFNlbmQgd3JpdGUgZW5hYmxlLCB0aGVuIGVyYXNlIGNvbW1hbmRzLiAqLworCXdyaXRlX2VuYWJsZShmbGFzaCk7CisKKwkvKiBTZXQgdXAgY29tbWFuZCBidWZmZXIuICovCisJZmxhc2gtPmNvbW1hbmRbMF0gPSBPUENPREVfQkU7CisKKwlzcGlfd3JpdGUoZmxhc2gtPnNwaSwgZmxhc2gtPmNvbW1hbmQsIDEpOworCisJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBFcmFzZSBvbmUgc2VjdG9yIG9mIGZsYXNoIG1lbW9yeSBhdCBvZmZzZXQgYGBvZmZzZXQnJyB3aGljaCBpcyBhbnkKQEAgLTIyOSwxNSArMjU1LDIxIEBACiAJICovCiAKIAkvKiBub3cgZXJhc2UgdGhvc2Ugc2VjdG9ycyAqLwotCXdoaWxlIChsZW4pIHsKLQkJaWYgKGVyYXNlX3NlY3RvcihmbGFzaCwgYWRkcikpIHsKLQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCQltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJaWYgKGxlbiA9PSBmbGFzaC0+bXRkLnNpemUgJiYgZXJhc2VfYmxvY2soZmxhc2gpKSB7CisJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CisJCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQl3aGlsZSAobGVuKSB7CisJCQlpZiAoZXJhc2Vfc2VjdG9yKGZsYXNoLCBhZGRyKSkgeworCQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CisJCQkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CiAKLQkJYWRkciArPSBtdGQtPmVyYXNlc2l6ZTsKLQkJbGVuIC09IG10ZC0+ZXJhc2VzaXplOworCQkJYWRkciArPSBtdGQtPmVyYXNlc2l6ZTsKKwkJCWxlbiAtPSBtdGQtPmVyYXNlc2l6ZTsKKwkJfQogCX0KIAogCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOwpAQCAtNDM3LDYgKzQ2OSw3IEBACiAJICogdGhlbiBhIHR3byBieXRlIGRldmljZSBpZC4KIAkgKi8KIAl1MzIJCWplZGVjX2lkOworCXUxNiAgICAgICAgICAgICBleHRfaWQ7CiAKIAkvKiBUaGUgc2l6ZSBsaXN0ZWQgaGVyZSBpcyB3aGF0IHdvcmtzIHdpdGggT1BDT0RFX1NFLCB3aGljaCBpc24ndAogCSAqIG5lY2Vzc2FyaWx5IGNhbGxlZCBhICJzZWN0b3IiIGJ5IHRoZSB2ZW5kb3IuCkBAIC00NTYsNzIgKzQ4OSw3NSBAQAogc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvIF9fZGV2aW5pdGRhdGEgbTI1cF9kYXRhIFtdID0gewogCiAJLyogQXRtZWwgLS0gc29tZSBhcmUgKGNvbmZ1c2luZ2x5KSBtYXJrZXRlZCBhcyAiRGF0YUZsYXNoIiAqLwotCXsgImF0MjVmczAxMCIsICAweDFmNjYwMSwgMzIgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAotCXsgImF0MjVmczA0MCIsICAweDFmNjYwNCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgImF0MjVmczAxMCIsICAweDFmNjYwMSwgMCwgMzIgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAorCXsgImF0MjVmczA0MCIsICAweDFmNjYwNCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAogCi0JeyAiYXQyNWRmMDQxYSIsIDB4MWY0NDAxLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNWRmNjQxIiwgIDB4MWY0ODAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SywgfSwKKwl7ICJhdDI1ZGYwNDFhIiwgMHgxZjQ0MDEsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKKwl7ICJhdDI1ZGY2NDEiLCAgMHgxZjQ4MDAsIDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAogCi0JeyAiYXQyNmYwMDQiLCAgIDB4MWYwNDAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNmRmMDgxYSIsIDB4MWY0NTAxLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAotCXsgImF0MjZkZjE2MWEiLCAweDFmNDYwMSwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKLQl7ICJhdDI2ZGYzMjEiLCAgMHgxZjQ3MDEsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCisJeyAiYXQyNmYwMDQiLCAgIDB4MWYwNDAwLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNmRmMDgxYSIsIDB4MWY0NTAxLCAwLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAorCXsgImF0MjZkZjE2MWEiLCAweDFmNDYwMSwgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKKwl7ICJhdDI2ZGYzMjEiLCAgMHgxZjQ3MDEsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCiAKIAkvKiBTcGFuc2lvbiAtLSBzaW5nbGUgKGxhcmdlKSBzZWN0b3Igc2l6ZSBvbmx5LCBhdCBsZWFzdAogCSAqIGZvciB0aGUgY2hpcHMgbGlzdGVkIGhlcmUgKHdpdGhvdXQgYm9vdCBzZWN0b3JzKS4KIAkgKi8KLQl7ICJzMjVzbDAwNGEiLCAweDAxMDIxMiwgNjQgKiAxMDI0LCA4LCB9LAotCXsgInMyNXNsMDA4YSIsIDB4MDEwMjEzLCA2NCAqIDEwMjQsIDE2LCB9LAotCXsgInMyNXNsMDE2YSIsIDB4MDEwMjE0LCA2NCAqIDEwMjQsIDMyLCB9LAotCXsgInMyNXNsMDMyYSIsIDB4MDEwMjE1LCA2NCAqIDEwMjQsIDY0LCB9LAotCXsgInMyNXNsMDY0YSIsIDB4MDEwMjE2LCA2NCAqIDEwMjQsIDEyOCwgfSwKKwl7ICJzMjVzbDAwNGEiLCAweDAxMDIxMiwgMCwgNjQgKiAxMDI0LCA4LCB9LAorCXsgInMyNXNsMDA4YSIsIDB4MDEwMjEzLCAwLCA2NCAqIDEwMjQsIDE2LCB9LAorCXsgInMyNXNsMDE2YSIsIDB4MDEwMjE0LCAwLCA2NCAqIDEwMjQsIDMyLCB9LAorCXsgInMyNXNsMDMyYSIsIDB4MDEwMjE1LCAwLCA2NCAqIDEwMjQsIDY0LCB9LAorCXsgInMyNXNsMDY0YSIsIDB4MDEwMjE2LCAwLCA2NCAqIDEwMjQsIDEyOCwgfSwKKyAgICAgICAgeyAiczI1c2wxMjgwMCIsIDB4MDEyMDE4LCAweDAzMDAsIDI1NiAqIDEwMjQsIDY0LCB9LAorCXsgInMyNXNsMTI4MDEiLCAweDAxMjAxOCwgMHgwMzAxLCA2NCAqIDEwMjQsIDI1NiwgfSwKIAogCS8qIFNTVCAtLSBsYXJnZSBlcmFzZSBzaXplcyBhcmUgIm92ZXJsYXlzIiwgInNlY3RvcnMiIGFyZSA0SyAqLwotCXsgInNzdDI1dmYwNDBiIiwgMHhiZjI1OGQsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKLQl7ICJzc3QyNXZmMDgwYiIsIDB4YmYyNThlLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAotCXsgInNzdDI1dmYwMTZiIiwgMHhiZjI1NDEsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV2ZjAzMmIiLCAweGJmMjU0YSwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXZmMDQwYiIsIDB4YmYyNThkLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAic3N0MjV2ZjA4MGIiLCAweGJmMjU4ZSwgMCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXZmMDE2YiIsIDB4YmYyNTQxLCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgInNzdDI1dmYwMzJiIiwgMHhiZjI1NGEsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCiAKIAkvKiBTVCBNaWNyb2VsZWN0cm9uaWNzIC0tIG5ld2VyIHByb2R1Y3Rpb24gbWF5IGhhdmUgZmVhdHVyZSB1cGRhdGVzICovCi0JeyAibTI1cDA1IiwgIDB4MjAyMDEwLCAgMzIgKiAxMDI0LCAyLCB9LAotCXsgIm0yNXAxMCIsICAweDIwMjAxMSwgIDMyICogMTAyNCwgNCwgfSwKLQl7ICJtMjVwMjAiLCAgMHgyMDIwMTIsICA2NCAqIDEwMjQsIDQsIH0sCi0JeyAibTI1cDQwIiwgIDB4MjAyMDEzLCAgNjQgKiAxMDI0LCA4LCB9LAotCXsgIm0yNXA4MCIsICAgICAgICAgMCwgIDY0ICogMTAyNCwgMTYsIH0sCi0JeyAibTI1cDE2IiwgIDB4MjAyMDE1LCAgNjQgKiAxMDI0LCAzMiwgfSwKLQl7ICJtMjVwMzIiLCAgMHgyMDIwMTYsICA2NCAqIDEwMjQsIDY0LCB9LAotCXsgIm0yNXA2NCIsICAweDIwMjAxNywgIDY0ICogMTAyNCwgMTI4LCB9LAotCXsgIm0yNXAxMjgiLCAweDIwMjAxOCwgMjU2ICogMTAyNCwgNjQsIH0sCisJeyAibTI1cDA1IiwgIDB4MjAyMDEwLCAgMCwgMzIgKiAxMDI0LCAyLCB9LAorCXsgIm0yNXAxMCIsICAweDIwMjAxMSwgIDAsIDMyICogMTAyNCwgNCwgfSwKKwl7ICJtMjVwMjAiLCAgMHgyMDIwMTIsICAwLCA2NCAqIDEwMjQsIDQsIH0sCisJeyAibTI1cDQwIiwgIDB4MjAyMDEzLCAgMCwgNjQgKiAxMDI0LCA4LCB9LAorCXsgIm0yNXA4MCIsICAgICAgICAgMCwgIDAsIDY0ICogMTAyNCwgMTYsIH0sCisJeyAibTI1cDE2IiwgIDB4MjAyMDE1LCAgMCwgNjQgKiAxMDI0LCAzMiwgfSwKKwl7ICJtMjVwMzIiLCAgMHgyMDIwMTYsICAwLCA2NCAqIDEwMjQsIDY0LCB9LAorCXsgIm0yNXA2NCIsICAweDIwMjAxNywgIDAsIDY0ICogMTAyNCwgMTI4LCB9LAorCXsgIm0yNXAxMjgiLCAweDIwMjAxOCwgMCwgMjU2ICogMTAyNCwgNjQsIH0sCiAKLQl7ICJtNDVwZTgwIiwgMHgyMDQwMTQsICA2NCAqIDEwMjQsIDE2LCB9LAotCXsgIm00NXBlMTYiLCAweDIwNDAxNSwgIDY0ICogMTAyNCwgMzIsIH0sCisJeyAibTQ1cGU4MCIsIDB4MjA0MDE0LCAgMCwgNjQgKiAxMDI0LCAxNiwgfSwKKwl7ICJtNDVwZTE2IiwgMHgyMDQwMTUsICAwLCA2NCAqIDEwMjQsIDMyLCB9LAogCi0JeyAibTI1cGU4MCIsIDB4MjA4MDE0LCAgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJtMjVwZTE2IiwgMHgyMDgwMTUsICA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgIm0yNXBlODAiLCAweDIwODAxNCwgIDAsIDY0ICogMTAyNCwgMTYsIH0sCisJeyAibTI1cGUxNiIsIDB4MjA4MDE1LCAgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKIAogCS8qIFdpbmJvbmQgLS0gdzI1eCAiYmxvY2tzIiBhcmUgNjRLLCAic2VjdG9ycyIgYXJlIDRLaUIgKi8KLQl7ICJ3MjV4MTAiLCAweGVmMzAxMSwgNjQgKiAxMDI0LCAyLCBTRUNUXzRLLCB9LAotCXsgIncyNXgyMCIsIDB4ZWYzMDEyLCA2NCAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDQwIiwgMHhlZjMwMTMsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKLQl7ICJ3MjV4ODAiLCAweGVmMzAxNCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKLQl7ICJ3MjV4MTYiLCAweGVmMzAxNSwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKLQl7ICJ3MjV4MzIiLCAweGVmMzAxNiwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKLQl7ICJ3MjV4NjQiLCAweGVmMzAxNywgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEssIH0sCisJeyAidzI1eDEwIiwgMHhlZjMwMTEsIDAsIDY0ICogMTAyNCwgMiwgU0VDVF80SywgfSwKKwl7ICJ3MjV4MjAiLCAweGVmMzAxMiwgMCwgNjQgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAorCXsgIncyNXg0MCIsIDB4ZWYzMDEzLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAidzI1eDgwIiwgMHhlZjMwMTQsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCisJeyAidzI1eDE2IiwgMHhlZjMwMTUsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCisJeyAidzI1eDMyIiwgMHhlZjMwMTYsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCisJeyAidzI1eDY0IiwgMHhlZjMwMTcsIDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvICpfX2RldmluaXQgamVkZWNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQJCQl0bXA7CiAJdTgJCQljb2RlID0gT1BDT0RFX1JESUQ7Ci0JdTgJCQlpZFszXTsKKwl1OAkJCWlkWzVdOwogCXUzMgkJCWplZGVjOworCXUxNiAgICAgICAgICAgICAgICAgICAgIGV4dF9qZWRlYzsKIAlzdHJ1Y3QgZmxhc2hfaW5mbwkqaW5mbzsKIAogCS8qIEpFREVDIGFsc28gZGVmaW5lcyBhbiBvcHRpb25hbCAiZXh0ZW5kZWQgZGV2aWNlIGluZm9ybWF0aW9uIgogCSAqIHN0cmluZyBmb3IgYWZ0ZXIgdmVuZG9yLXNwZWNpZmljIGRhdGEsIGFmdGVyIHRoZSB0aHJlZSBieXRlcwogCSAqIHdlIHVzZSBoZXJlLiAgU3VwcG9ydGluZyBzb21lIGNoaXBzIG1pZ2h0IHJlcXVpcmUgdXNpbmcgaXQuCiAJICovCi0JdG1wID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZjb2RlLCAxLCBpZCwgMyk7CisJdG1wID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZjb2RlLCAxLCBpZCwgNSk7CiAJaWYgKHRtcCA8IDApIHsKIAkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBlcnJvciAlZCByZWFkaW5nIEpFREVDIElEXG4iLAogCQkJc3BpLT5kZXYuYnVzX2lkLCB0bXApOwpAQCAtNTMzLDEwICs1NjksMTQgQEAKIAlqZWRlYyA9IGplZGVjIDw8IDg7CiAJamVkZWMgfD0gaWRbMl07CiAKKwlleHRfamVkZWMgPSBpZFszXSA8PCA4IHwgaWRbNF07CisKIAlmb3IgKHRtcCA9IDAsIGluZm8gPSBtMjVwX2RhdGE7CiAJCQl0bXAgPCBBUlJBWV9TSVpFKG0yNXBfZGF0YSk7CiAJCQl0bXArKywgaW5mbysrKSB7CiAJCWlmIChpbmZvLT5qZWRlY19pZCA9PSBqZWRlYykKKwkJCWlmIChleHRfamVkZWMgIT0gMCAmJiBpbmZvLT5leHRfaWQgIT0gZXh0X2plZGVjKQorCQkJCWNvbnRpbnVlOwogCQkJcmV0dXJuIGluZm87CiAJfQogCWRldl9lcnIoJnNwaS0+ZGV2LCAidW5yZWNvZ25pemVkIEpFREVDIGlkICUwNnhcbiIsIGplZGVjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKaW5kZXggOGJkMGRlYS4uNmRkOWFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKQEAgLTMwLDEyICszMCwxMCBAQAogICogZG9lc24ndCAoeWV0KSB1c2UgdGhlc2UgZm9yIGFueSBraW5kIG9mIGkvbyBvdmVybGFwIG9yIHByZWZldGNoaW5nLgogICoKICAqIFNvbWV0aW1lcyBEYXRhRmxhc2ggaXMgcGFja2FnZWQgaW4gTU1DLWZvcm1hdCBjYXJkcywgYWx0aG91Z2ggdGhlCi0gKiBNTUMgc3RhY2sgY2FuJ3QgdXNlIFNQSSAoeWV0KSwgb3IgZGlzdGluZ3Vpc2ggYmV0d2VlbiBNTUMgYW5kIERhdGFGbGFzaAorICogTU1DIHN0YWNrIGNhbid0ICh5ZXQ/KSBkaXN0aW5ndWlzaCBiZXR3ZWVuIE1NQyBhbmQgRGF0YUZsYXNoCiAgKiBwcm90b2NvbHMgZHVyaW5nIGVudW1lcmF0aW9uLgogICovCiAKLSNkZWZpbmUgQ09ORklHX0RBVEFGTEFTSF9XUklURV9WRVJJRlkKLQogLyogcmVhZHMgY2FuIGJ5cGFzcyB0aGUgYnVmZmVycyAqLwogI2RlZmluZSBPUF9SRUFEX0NPTlRJTlVPVVMJMHhFOAogI2RlZmluZSBPUF9SRUFEX1BBR0UJCTB4RDIKQEAgLTgwLDcgKzc4LDggQEAKICAqLwogI2RlZmluZSBPUF9SRUFEX0lECQkweDlGCiAjZGVmaW5lIE9QX1JFQURfU0VDVVJJVFkJMHg3NwotI2RlZmluZSBPUF9XUklURV9TRUNVUklUWQkweDlBCS8qIE9UUCBiaXRzICovCisjZGVmaW5lIE9QX1dSSVRFX1NFQ1VSSVRZX1JFVkMJMHg5QQorI2RlZmluZSBPUF9XUklURV9TRUNVUklUWQkweDlCCS8qIHJldmlzaW9uIEQgKi8KIAogCiBzdHJ1Y3QgZGF0YWZsYXNoIHsKQEAgLTQwMiw3ICs0MDEsNyBAQAogCQkodm9pZCkgZGF0YWZsYXNoX3dhaXRyZWFkeShwcml2LT5zcGkpOwogCiAKLSNpZmRlZglDT05GSUdfREFUQUZMQVNIX1dSSVRFX1ZFUklGWQorI2lmZGVmIENPTkZJR19NVERfREFUQUZMQVNIX1ZFUklGWV9XUklURQogCiAJCS8qICgzKSBDb21wYXJlIHRvIEJ1ZmZlcjEgKi8KIAkJYWRkciA9IHBhZ2VhZGRyIDw8IHByaXYtPnBhZ2Vfb2Zmc2V0OwpAQCAtNDMxLDcgKzQzMCw3IEBACiAJCX0gZWxzZQogCQkJc3RhdHVzID0gMDsKIAotI2VuZGlmCS8qIENPTkZJR19EQVRBRkxBU0hfV1JJVEVfVkVSSUZZICovCisjZW5kaWYJLyogQ09ORklHX01URF9EQVRBRkxBU0hfVkVSSUZZX1dSSVRFICovCiAKIAkJcmVtYWluaW5nID0gcmVtYWluaW5nIC0gd3JpdGVsZW47CiAJCXBhZ2VhZGRyKys7CkBAIC00NTEsMTYgKzQ1MCwxOTIgQEAKIAogLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLwogCisjaWZkZWYgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQCisKK3N0YXRpYyBpbnQgZGF0YWZsYXNoX2dldF9vdHBfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJc3RydWN0IG90cF9pbmZvICppbmZvLCBzaXplX3QgbGVuKQoreworCS8qIFJlcG9ydCBib3RoIGJsb2NrcyBhcyBpZGVudGljYWw6ICBieXRlcyAwLi42NCwgbG9ja2VkLgorCSAqIFVubGVzcyB0aGUgdXNlciBibG9jayBjaGFuZ2VkIGZyb20gYWxsLW9uZXMsIHdlIGNhbid0CisJICogdGVsbCB3aGV0aGVyIGl0J3Mgc3RpbGwgd3JpdGFibGU7IHNvIHdlIGFzc3VtZSBpdCBpc24ndC4KKwkgKi8KKwlpbmZvLT5zdGFydCA9IDA7CisJaW5mby0+bGVuZ3RoID0gNjQ7CisJaW5mby0+bG9ja2VkID0gMTsKKwlyZXR1cm4gc2l6ZW9mKCppbmZvKTsKK30KKworc3RhdGljIHNzaXplX3Qgb3RwX3JlYWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgYmFzZSwKKwkJdWludDhfdCAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZQltOworCXNpemVfdAkJCWw7CisJdWludDhfdAkJCSpzY3JhdGNoOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJdDsKKwlpbnQJCQlzdGF0dXM7CisKKwlpZiAob2ZmID4gNjQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChvZmYgKyBsZW4pID4gNjQpCisJCWxlbiA9IDY0IC0gb2ZmOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIGxlbjsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJbCA9IDQgKyBiYXNlICsgb2ZmICsgbGVuOworCXNjcmF0Y2ggPSBremFsbG9jKGwsIEdGUF9LRVJORUwpOworCWlmICghc2NyYXRjaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBPVVQ6IE9QX1JFQURfU0VDVVJJVFksIDMgZG9uJ3QtY2FyZSBieXRlcywgemVyb2VzCisJICogSU46ICBpZ25vcmUgNCBieXRlcywgZGF0YSBieXRlcyAwLi5OIChtYXggMTI3KQorCSAqLworCXNjcmF0Y2hbMF0gPSBPUF9SRUFEX1NFQ1VSSVRZOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YgdCk7CisJdC50eF9idWYgPSBzY3JhdGNoOworCXQucnhfYnVmID0gc2NyYXRjaDsKKwl0LmxlbiA9IGw7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCWRhdGFmbGFzaF93YWl0cmVhZHkoc3BpKTsKKworCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJm0pOworCWlmIChzdGF0dXMgPj0gMCkgeworCQltZW1jcHkoYnVmLCBzY3JhdGNoICsgNCArIGJhc2UgKyBvZmYsIGxlbik7CisJCXN0YXR1cyA9IGxlbjsKKwl9CisKKwlrZnJlZShzY3JhdGNoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRhdGFmbGFzaF9yZWFkX2ZhY3Rfb3RwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQlsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKW10ZC0+cHJpdjsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiA2NCBieXRlcywgZnJvbSAwLi42MyAuLi4gc3RhcnQgYXQgNjQgb24tY2hpcCAqLworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCXN0YXR1cyA9IG90cF9yZWFkKHByaXYtPnNwaSwgNjQsIGJ1ZiwgZnJvbSwgbGVuKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJKnJldGxlbiA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXRhZmxhc2hfcmVhZF91c2VyX290cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJaW50CQkJc3RhdHVzOworCisJLyogNjQgYnl0ZXMsIGZyb20gMC4uNjMgLi4uIHN0YXJ0IGF0IDAgb24tY2hpcCAqLworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCXN0YXR1cyA9IG90cF9yZWFkKHByaXYtPnNwaSwgMCwgYnVmLCBmcm9tLCBsZW4pOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwkqcmV0bGVuID0gc3RhdHVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdGFmbGFzaF93cml0ZV91c2VyX290cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKKwljb25zdCBzaXplX3QJCWwgPSA0ICsgNjQ7CisJdWludDhfdAkJCSpzY3JhdGNoOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJdDsKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJaW50CQkJc3RhdHVzOworCisJaWYgKGxlbiA+IDY0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFN0cmljdGx5IHNwZWFraW5nLCB3ZSAqY291bGQqIHRydW5jYXRlIHRoZSB3cml0ZSAuLi4gYnV0CisJICogbGV0J3Mgbm90IGRvIHRoYXQgZm9yIHRoZSBvbmx5IHdyaXRlIHRoYXQncyBldmVyIHBvc3NpYmxlLgorCSAqLworCWlmICgoZnJvbSArIGxlbikgPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBPVVQ6IE9QX1dSSVRFX1NFQ1VSSVRZLCAzIHplcm9lcywgNjQgZGF0YS1vci16ZXJvIGJ5dGVzCisJICogSU46ICBpZ25vcmUgYWxsCisJICovCisJc2NyYXRjaCA9IGt6YWxsb2MobCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY3JhdGNoKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzY3JhdGNoWzBdID0gT1BfV1JJVEVfU0VDVVJJVFk7CisJbWVtY3B5KHNjcmF0Y2ggKyA0ICsgZnJvbSwgYnVmLCBsZW4pOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisKKwltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKKwl0LnR4X2J1ZiA9IHNjcmF0Y2g7CisJdC5sZW4gPSBsOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisKKwkvKiBXcml0ZSB0aGUgT1RQIGJpdHMsIGlmIHRoZXkndmUgbm90IHlldCBiZWVuIHdyaXR0ZW4uCisJICogVGhpcyBtb2RpZmllcyBTUkFNIGJ1ZmZlcjEuCisJICovCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisJZGF0YWZsYXNoX3dhaXRyZWFkeShwcml2LT5zcGkpOworCXN0YXR1cyA9IHNwaV9zeW5jKHByaXYtPnNwaSwgJm0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlrZnJlZShzY3JhdGNoKTsKKworCWlmIChzdGF0dXMgPj0gMCkgeworCQlzdGF0dXMgPSAwOworCQkqcmV0bGVuID0gbGVuOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY2hhciAqb3RwX3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqZGV2aWNlLCBjaGFyIHJldmlzaW9uKQoreworCWRldmljZS0+Z2V0X2ZhY3RfcHJvdF9pbmZvID0gZGF0YWZsYXNoX2dldF9vdHBfaW5mbzsKKwlkZXZpY2UtPnJlYWRfZmFjdF9wcm90X3JlZyA9IGRhdGFmbGFzaF9yZWFkX2ZhY3Rfb3RwOworCWRldmljZS0+Z2V0X3VzZXJfcHJvdF9pbmZvID0gZGF0YWZsYXNoX2dldF9vdHBfaW5mbzsKKwlkZXZpY2UtPnJlYWRfdXNlcl9wcm90X3JlZyA9IGRhdGFmbGFzaF9yZWFkX3VzZXJfb3RwOworCisJLyogcmV2IGMgcGFydHMgKGF0NDVkYjMyMWMgYW5kIGF0NDVkYjEyODEgb25seSEpIHVzZSBhCisJICogZGlmZmVyZW50IHdyaXRlIHByb2NlZHVyZTsgbm90ICh5ZXQ/KSBpbXBsZW1lbnRlZC4KKwkgKi8KKwlpZiAocmV2aXNpb24gPiAnYycpCisJCWRldmljZS0+d3JpdGVfdXNlcl9wcm90X3JlZyA9IGRhdGFmbGFzaF93cml0ZV91c2VyX290cDsKKworCXJldHVybiAiLCBPVFAiOworfQorCisjZWxzZQorCitzdGF0aWMgY2hhciAqb3RwX3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqZGV2aWNlLCBjaGFyIHJldmlzaW9uKQoreworCXJldHVybiAiIChPVFApIjsKK30KKworI2VuZGlmCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKwogLyoKICAqIFJlZ2lzdGVyIERhdGFGbGFzaCBkZXZpY2Ugd2l0aCBNVEQgc3Vic3lzdGVtLgogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotYWRkX2RhdGFmbGFzaChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjaGFyICpuYW1lLAotCQlpbnQgbnJfcGFnZXMsIGludCBwYWdlc2l6ZSwgaW50IHBhZ2VvZmZzZXQpCithZGRfZGF0YWZsYXNoX290cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjaGFyICpuYW1lLAorCQlpbnQgbnJfcGFnZXMsIGludCBwYWdlc2l6ZSwgaW50IHBhZ2VvZmZzZXQsIGNoYXIgcmV2aXNpb24pCiB7CiAJc3RydWN0IGRhdGFmbGFzaAkJKnByaXY7CiAJc3RydWN0IG10ZF9pbmZvCQkJKmRldmljZTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWNoYXIJCQkJKm90cF90YWcgPSAiIjsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KQpAQCAtNDg5LDggKzY2NCwxMiBAQAogCWRldmljZS0+d3JpdGUgPSBkYXRhZmxhc2hfd3JpdGU7CiAJZGV2aWNlLT5wcml2ID0gcHJpdjsKIAotCWRldl9pbmZvKCZzcGktPmRldiwgIiVzICglZCBLQnl0ZXMpIHBhZ2VzaXplICVkIGJ5dGVzXG4iLAotCQkJbmFtZSwgRElWX1JPVU5EX1VQKGRldmljZS0+c2l6ZSwgMTAyNCksIHBhZ2VzaXplKTsKKwlpZiAocmV2aXNpb24gPj0gJ2MnKQorCQlvdHBfdGFnID0gb3RwX3NldHVwKGRldmljZSwgcmV2aXNpb24pOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJXMgKCVkIEtCeXRlcykgcGFnZXNpemUgJWQgYnl0ZXMlc1xuIiwKKwkJCW5hbWUsIERJVl9ST1VORF9VUChkZXZpY2UtPnNpemUsIDEwMjQpLAorCQkJcGFnZXNpemUsIG90cF90YWcpOwogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHByaXYpOwogCiAJaWYgKG10ZF9oYXNfcGFydGl0aW9ucygpKSB7CkBAIC01MTksNiArNjk4LDE0IEBACiAJcmV0dXJuIGFkZF9tdGRfZGV2aWNlKGRldmljZSkgPT0gMSA/IC1FTk9ERVYgOiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX2RldmluaXQKK2FkZF9kYXRhZmxhc2goc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY2hhciAqbmFtZSwKKwkJaW50IG5yX3BhZ2VzLCBpbnQgcGFnZXNpemUsIGludCBwYWdlb2Zmc2V0KQoreworCXJldHVybiBhZGRfZGF0YWZsYXNoX290cChzcGksIG5hbWUsIG5yX3BhZ2VzLCBwYWdlc2l6ZSwKKwkJCXBhZ2VvZmZzZXQsIDApOworfQorCiBzdHJ1Y3QgZmxhc2hfaW5mbyB7CiAJY2hhcgkJKm5hbWU7CiAKQEAgLTY2NCwxMyArODUxLDE2IEBACiAJICogVHJ5IHRvIGRldGVjdCBkYXRhZmxhc2ggYnkgSkVERUMgSUQuCiAJICogSWYgaXQgc3VjY2VlZHMgd2Uga25vdyB3ZSBoYXZlIGVpdGhlciBhIEMgb3IgRCBwYXJ0LgogCSAqIEQgd2lsbCBzdXBwb3J0IHBvd2VyIG9mIDIgcGFnZXNpemUgb3B0aW9uLgorCSAqIEJvdGggc3VwcG9ydCB0aGUgc2VjdXJpdHkgcmVnaXN0ZXIsIHRob3VnaCB3aXRoIGRpZmZlcmVudAorCSAqIHdyaXRlIHByb2NlZHVyZXMuCiAJICovCiAJaW5mbyA9IGplZGVjX3Byb2JlKHNwaSk7CiAJaWYgKElTX0VSUihpbmZvKSkKIAkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CiAJaWYgKGluZm8gIT0gTlVMTCkKLQkJcmV0dXJuIGFkZF9kYXRhZmxhc2goc3BpLCBpbmZvLT5uYW1lLCBpbmZvLT5ucl9wYWdlcywKLQkJCQkgaW5mby0+cGFnZXNpemUsIGluZm8tPnBhZ2VvZmZzZXQpOworCQlyZXR1cm4gYWRkX2RhdGFmbGFzaF9vdHAoc3BpLCBpbmZvLT5uYW1lLCBpbmZvLT5ucl9wYWdlcywKKwkJCQlpbmZvLT5wYWdlc2l6ZSwgaW5mby0+cGFnZW9mZnNldCwKKwkJCQkoaW5mby0+ZmxhZ3MgJiBTVVBfUE9XMlBTKSA/ICdkJyA6ICdjJyk7CiAKIAkvKgogCSAqIE9sZGVyIGNoaXBzIHN1cHBvcnQgb25seSBsZWdhY3kgY29tbWFuZHMsIGlkZW50aWZpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKaW5kZXggYzRmOWQzMy4uNTBjZTEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKQEAgLTM4OCw2ICszODgsMTAgQEAKIAkJaWYgKHRoaXNFVU4gPT0gdGFyZ2V0RVVOKQogCQkJYnJlYWs7CiAKKwkJLyogVW5saW5rIHRoZSBsYXN0IGJsb2NrIGZyb20gdGhlIGNoYWluLiAqLworCQlpbmZ0bC0+UFV0YWJsZVtwcmV2RVVOXSA9IEJMT0NLX05JTDsKKworCQkvKiBOb3cgdHJ5IHRvIGVyYXNlIGl0LiAqLwogCQlpZiAoSU5GVExfZm9ybWF0YmxvY2soaW5mdGwsIHRoaXNFVU4pIDwgMCkgewogCQkJLyoKIAkJCSAqIENvdWxkIG5vdCBlcmFzZSA6IG1hcmsgYmxvY2sgYXMgcmVzZXJ2ZWQuCkBAIC0zOTYsNyArNDAwLDYgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIENvcnJlY3RseSBlcmFzZWQgOiBtYXJrIGl0IGFzIGZyZWUgKi8KIAkJCWluZnRsLT5QVXRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfRlJFRTsKLQkJCWluZnRsLT5QVXRhYmxlW3ByZXZFVU5dID0gQkxPQ0tfTklMOwogCQkJaW5mdGwtPm51bWZyZWVFVU5zKys7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggZGY4ZTAwYi4uNWVhMTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtMzMyLDMwICszMzIsNiBAQAogCSAgTWFwcGluZyBmb3IgdGhlIEZsYWdhIGRpZ2l0YWwgbW9kdWxlLiBJZiB5b3UgZG9uJ3QgaGF2ZSBvbmUsIGlnbm9yZQogCSAgdGhpcyBzZXR0aW5nLgogCi1jb25maWcgTVREX1dBTE5VVAotCXRyaXN0YXRlICJGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIElCTSA0MDVHUCBXYWxudXQiCi0JZGVwZW5kcyBvbiBNVERfSkVERUNQUk9CRSAmJiBXQUxOVVQgJiYgIVBQQ19NRVJHRQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSUJNIDQwNUdQCi0JICBXYWxudXQgYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIGxpa2UgdG8KLQkgIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCi0KLWNvbmZpZyBNVERfRUJPTlkKLQl0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlcyBtYXBwZWQgb24gSUJNIDQ0MEdQIEVib255IgotCWRlcGVuZHMgb24gTVREX0pFREVDUFJPQkUgJiYgRUJPTlkgJiYgIVBQQ19NRVJHRQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSUJNIDQ0MEdQCi0JICBFYm9ueSBib2FyZC4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGJvYXJkcyBhbmQgd291bGQgbGlrZSB0bwotCSAgdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KLQotY29uZmlnIE1URF9PQ09URUEKLQl0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlcyBtYXBwZWQgb24gSUJNIDQ0MEdYIE9jb3RlYSIKLQlkZXBlbmRzIG9uIE1URF9DRkkgJiYgT0NPVEVBICYmICFQUENfTUVSR0UKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTSA0NDBHWAotCSAgT2NvdGVhIGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZCBsaWtlIHRvCi0JICB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgotCiBjb25maWcgTVREX1JFRFdPT0QKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZXMgbWFwcGVkIG9uIElCTSBSZWR3b29kIgogCWRlcGVuZHMgb24gTVREX0NGSSAmJiAoIFJFRFdPT0RfNCB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82ICkKQEAgLTQ1OCwxMyArNDM0LDYgQEAKIAkgIFBob3RvTWF4IERpZ2l0YWwgUGljdHVyZSBGcmFtZS4KIAkgIElmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UsIHNheSAnWScuCiAKLWNvbmZpZyBNVERfTk9SX1RPVE8KLQl0cmlzdGF0ZSAiTk9SIEZsYXNoIGRldmljZSBvbiBUT1RPIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIE9NQVBfVE9UTwotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3MgdG8gdGhlIE5PUiBmbGFzaCBvbiB0aGUgVGV4YXMgSW5zdHJ1bWVudHMKLQkgIFRPVE8gYm9hcmQuCi0KIGNvbmZpZyBNVERfSDcyMFgKIAl0cmlzdGF0ZSAiSHluaXggZXZhbHVhdGlvbiBib2FyZCBtYXBwaW5ncyIKIAlkZXBlbmRzIG9uIE1URF9DRkkgJiYgKCBBUkNIX0g3MjAxIHx8IEFSQ0hfSDcyMDIgKQpAQCAtNTIyLDcgKzQ5MSw3IEBACiAKIGNvbmZpZyBNVERfVUNMSU5VWAogCXRyaXN0YXRlICJHZW5lcmljIHVDbGludXggUkFNL1JPTSBmaWxlc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNVERfUEFSVElUSU9OUyAmJiAhTU1VCisJZGVwZW5kcyBvbiBNVERfUEFSVElUSU9OUyAmJiBNVERfUkFNICYmICFNTVUKIAloZWxwCiAJICBNYXAgZHJpdmVyIHRvIHN1cHBvcnQgaW1hZ2UgYmFzZWQgZmlsZXN5c3RlbXMgZm9yIHVDbGludXguCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDZjZGE2ZGYuLjZkOWJhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTAsMTIgKzUwLDggQEAKIG9iai0kKENPTkZJR19NVERfVUNMSU5VWCkJKz0gdWNsaW51eC5vCiBvYmotJChDT05GSUdfTVREX05FVHRlbCkJKz0gbmV0dGVsLm8KIG9iai0kKENPTkZJR19NVERfU0NCMl9GTEFTSCkJKz0gc2NiMl9mbGFzaC5vCi1vYmotJChDT05GSUdfTVREX0VCT05ZKQkJKz0gZWJvbnkubwotb2JqLSQoQ09ORklHX01URF9PQ09URUEpCSs9IG9jb3RlYS5vCi1vYmotJChDT05GSUdfTVREX1dBTE5VVCkgICAgICAgICs9IHdhbG51dC5vCiBvYmotJChDT05GSUdfTVREX0g3MjBYKQkJKz0gaDcyMHgtZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9TQkM4MjQwKQkrPSBzYmM4MjQwLm8KLW9iai0kKENPTkZJR19NVERfTk9SX1RPVE8pCSs9IG9tYXAtdG90by1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0lYUDRYWCkJKz0gaXhwNHh4Lm8KIG9iai0kKENPTkZJR19NVERfSVhQMjAwMCkJKz0gaXhwMjAwMC5vCiBvYmotJChDT05GSUdfTVREX1dSU0JDODI2MCkJKz0gd3Jfc2JjODJ4eF9mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMgYi9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MmI3YzcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBNYXBwaW5nIGZvciBFYm9ueSB1c2VyIGZsYXNoCi0gKgotICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+Ci0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9lYm9ueS5oPgotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaDsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBlYm9ueV9zbWFsbF9tYXAgPSB7Ci0JLm5hbWUgPQkJIkVib255IHNtYWxsIGZsYXNoIiwKLQkuc2l6ZSA9CQlFQk9OWV9TTUFMTF9GTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBlYm9ueV9sYXJnZV9tYXAgPSB7Ci0JLm5hbWUgPQkJIkVib255IGxhcmdlIGZsYXNoIiwKLQkuc2l6ZSA9CQlFQk9OWV9MQVJHRV9GTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVib255X3NtYWxsX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gICAiT3BlbkJJT1MiLAotCQkub2Zmc2V0ID0gMHgwLAotCQkuc2l6ZSA9ICAgMHg4MDAwMCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWJvbnlfbGFyZ2VfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJmcyIsCi0JCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9ICAgMHgzODAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lID0gICAiZmlybXdhcmUiLAotCQkub2Zmc2V0ID0gMHgzODAwMDAsCi0JCS5zaXplID0gICAweDgwMDAwLAotCX0KLX07Ci0KLWludCBfX2luaXQgaW5pdF9lYm9ueSh2b2lkKQotewotCXU4IGZwZ2EwX3JlZzsKLQl1OCBfX2lvbWVtICpmcGdhMF9hZHI7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNtYWxsX2ZsYXNoX2Jhc2UsIGxhcmdlX2ZsYXNoX2Jhc2U7Ci0KLQlmcGdhMF9hZHIgPSBpb3JlbWFwNjQoRUJPTllfRlBHQV9BRERSLCAxNik7Ci0JaWYgKCFmcGdhMF9hZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnBnYTBfcmVnID0gcmVhZGIoZnBnYTBfYWRyKTsKLQlpb3VubWFwKGZwZ2EwX2Fkcik7Ci0KLQlpZiAoRUJPTllfQk9PVF9TTUFMTF9GTEFTSChmcGdhMF9yZWcpICYmCi0JCQkhRUJPTllfRkxBU0hfU0VMKGZwZ2EwX3JlZykpCi0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBFQk9OWV9TTUFMTF9GTEFTSF9ISUdIMjsKLQllbHNlIGlmIChFQk9OWV9CT09UX1NNQUxMX0ZMQVNIKGZwZ2EwX3JlZykgJiYKLQkJCUVCT05ZX0ZMQVNIX1NFTChmcGdhMF9yZWcpKQotCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfSElHSDE7Ci0JZWxzZSBpZiAoIUVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgotCQkJIUVCT05ZX0ZMQVNIX1NFTChmcGdhMF9yZWcpKQotCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfTE9XMjsKLQllbHNlCi0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBFQk9OWV9TTUFMTF9GTEFTSF9MT1cxOwotCi0JaWYgKEVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgotCQkJIUVCT05ZX09OQlJEX0ZMQVNIX0VOKGZwZ2EwX3JlZykpCi0JCWxhcmdlX2ZsYXNoX2Jhc2UgPSBFQk9OWV9MQVJHRV9GTEFTSF9MT1c7Ci0JZWxzZQotCQlsYXJnZV9mbGFzaF9iYXNlID0gRUJPTllfTEFSR0VfRkxBU0hfSElHSDsKLQotCWVib255X3NtYWxsX21hcC5waHlzID0gc21hbGxfZmxhc2hfYmFzZTsKLQllYm9ueV9zbWFsbF9tYXAudmlydCA9IGlvcmVtYXA2NChzbWFsbF9mbGFzaF9iYXNlLAotCQkJCQkgZWJvbnlfc21hbGxfbWFwLnNpemUpOwotCi0JaWYgKCFlYm9ueV9zbWFsbF9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZlYm9ueV9zbWFsbF9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJmVib255X3NtYWxsX21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIGVib255X3NtYWxsX3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUoZWJvbnlfc21hbGxfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQllYm9ueV9sYXJnZV9tYXAucGh5cyA9IGxhcmdlX2ZsYXNoX2Jhc2U7Ci0JZWJvbnlfbGFyZ2VfbWFwLnZpcnQgPSBpb3JlbWFwNjQobGFyZ2VfZmxhc2hfYmFzZSwKLQkJCQkJIGVib255X2xhcmdlX21hcC5zaXplKTsKLQotCWlmICghZWJvbnlfbGFyZ2VfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJmVib255X2xhcmdlX21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmZWJvbnlfbGFyZ2VfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgZWJvbnlfbGFyZ2VfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRShlYm9ueV9sYXJnZV9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwotCQlpb3VubWFwKGVib255X2xhcmdlX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfZWJvbnkodm9pZCkKLXsKLQlpZiAoZmxhc2gpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKGZsYXNoKTsKLQkJbWFwX2Rlc3Ryb3koZmxhc2gpOwotCX0KLQotCWlmIChlYm9ueV9zbWFsbF9tYXAudmlydCkgewotCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKLQkJZWJvbnlfc21hbGxfbWFwLnZpcnQgPSBOVUxMOwotCX0KLQotCWlmIChlYm9ueV9sYXJnZV9tYXAudmlydCkgewotCQlpb3VubWFwKGVib255X2xhcmdlX21hcC52aXJ0KTsKLQkJZWJvbnlfbGFyZ2VfbWFwLnZpcnQgPSBOVUxMOwotCX0KLX0KLQotbW9kdWxlX2luaXQoaW5pdF9lYm9ueSk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX2Vib255KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBhbmQgcGFydGl0aW9ucyBmb3IgSUJNIDQ0MEdQIEVib255IGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYyBiL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MjJlYWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICogTWFwcGluZyBmb3IgT2NvdGVhIHVzZXIgZmxhc2gKLSAqCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KLSNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L29jb3RlYS5oPgotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaDsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBvY290ZWFfc21hbGxfbWFwID0gewotCS5uYW1lID0JCSJPY290ZWEgc21hbGwgZmxhc2giLAotCS5zaXplID0JCU9DT1RFQV9TTUFMTF9GTEFTSF9TSVpFLAotCS5idXN3aWR0aCA9CTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIG9jb3RlYV9sYXJnZV9tYXAgPSB7Ci0JLm5hbWUgPQkJIk9jb3RlYSBsYXJnZSBmbGFzaCIsCi0JLnNpemUgPQkJT0NPVEVBX0xBUkdFX0ZMQVNIX1NJWkUsCi0JLmJ1c3dpZHRoID0JMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvY290ZWFfc21hbGxfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJwaWJzIiwKLQkJLm9mZnNldCA9IDB4MCwKLQkJLnNpemUgPSAgIDB4MTAwMDAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvY290ZWFfbGFyZ2VfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJmcyIsCi0JCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9ICAgMHgzMDAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lID0gICAiZmlybXdhcmUiLAotCQkub2Zmc2V0ID0gMHgzMDAwMDAsCi0JCS5zaXplID0gICAweDEwMDAwMCwKLQl9Ci19OwotCi1pbnQgX19pbml0IGluaXRfb2NvdGVhKHZvaWQpCi17Ci0JdTggZnBnYTBfcmVnOwotCXU4ICpmcGdhMF9hZHI7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNtYWxsX2ZsYXNoX2Jhc2UsIGxhcmdlX2ZsYXNoX2Jhc2U7Ci0KLQlmcGdhMF9hZHIgPSBpb3JlbWFwNjQoT0NPVEVBX0ZQR0FfQUREUiwgMTYpOwotCWlmICghZnBnYTBfYWRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZwZ2EwX3JlZyA9IHJlYWRiKCh1bnNpZ25lZCBsb25nKWZwZ2EwX2Fkcik7Ci0JaW91bm1hcChmcGdhMF9hZHIpOwotCi0JaWYgKE9DT1RFQV9CT09UX0xBUkdFX0ZMQVNIKGZwZ2EwX3JlZykpIHsKLQkJc21hbGxfZmxhc2hfYmFzZSA9IE9DT1RFQV9TTUFMTF9GTEFTSF9ISUdIOwotCQlsYXJnZV9mbGFzaF9iYXNlID0gT0NPVEVBX0xBUkdFX0ZMQVNIX0xPVzsKLQl9Ci0JZWxzZSB7Ci0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBPQ09URUFfU01BTExfRkxBU0hfTE9XOwotCQlsYXJnZV9mbGFzaF9iYXNlID0gT0NPVEVBX0xBUkdFX0ZMQVNIX0hJR0g7Ci0JfQotCi0Jb2NvdGVhX3NtYWxsX21hcC5waHlzID0gc21hbGxfZmxhc2hfYmFzZTsKLQlvY290ZWFfc21hbGxfbWFwLnZpcnQgPSBpb3JlbWFwNjQoc21hbGxfZmxhc2hfYmFzZSwKLQkJCQkJIG9jb3RlYV9zbWFsbF9tYXAuc2l6ZSk7Ci0KLQlpZiAoIW9jb3RlYV9zbWFsbF9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZvY290ZWFfc21hbGxfbWFwKTsKLQotCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJtYXBfcm9tIiwgJm9jb3RlYV9zbWFsbF9tYXApOwotCWlmIChmbGFzaCkgewotCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCBvY290ZWFfc21hbGxfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRShvY290ZWFfc21hbGxfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKG9jb3RlYV9zbWFsbF9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0Jb2NvdGVhX2xhcmdlX21hcC5waHlzID0gbGFyZ2VfZmxhc2hfYmFzZTsKLQlvY290ZWFfbGFyZ2VfbWFwLnZpcnQgPSBpb3JlbWFwNjQobGFyZ2VfZmxhc2hfYmFzZSwKLQkJCQkJIG9jb3RlYV9sYXJnZV9tYXAuc2l6ZSk7Ci0KLQlpZiAoIW9jb3RlYV9sYXJnZV9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJm9jb3RlYV9sYXJnZV9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZvY290ZWFfbGFyZ2VfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgb2NvdGVhX2xhcmdlX3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUob2NvdGVhX2xhcmdlX3BhcnRpdGlvbnMpKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKLQkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwotCQlpb3VubWFwKG9jb3RlYV9sYXJnZV9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX29jb3RlYSh2b2lkKQotewotCWlmIChmbGFzaCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2gpOwotCQltYXBfZGVzdHJveShmbGFzaCk7Ci0JfQotCi0JaWYgKG9jb3RlYV9zbWFsbF9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopb2NvdGVhX3NtYWxsX21hcC52aXJ0KTsKLQkJb2NvdGVhX3NtYWxsX21hcC52aXJ0ID0gMDsKLQl9Ci0KLQlpZiAob2NvdGVhX2xhcmdlX21hcC52aXJ0KSB7Ci0JCWlvdW5tYXAoKHZvaWQgKilvY290ZWFfbGFyZ2VfbWFwLnZpcnQpOwotCQlvY290ZWFfbGFyZ2VfbWFwLnZpcnQgPSAwOwotCX0KLX0KLQotbW9kdWxlX2luaXQoaW5pdF9vY290ZWEpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9vY290ZWEpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDQwR1ggT2NvdGVhIGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNjBlYmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogTk9SIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gVEkgVG90byBib2FyZAotICoKLSAqIGp6aGFuZ0B0aS5jb20gKEMpIDIwMDMgVGV4YXMgSW5zdHJ1bWVudHMuCi0gKgotICogIChDKSAyMDAyIE1vbnRWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0KLSNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUAotI2Vycm9yIFRoaXMgaXMgZm9yIE9NQVAgYXJjaGl0ZWN0dXJlIG9ubHkKLSNlbmRpZgotCi0vL3RoZXNlIGxpbmVzIG5lZWQgYmUgbW92ZWQgdG8gYSBoYXJkd2FyZSBoZWFkZXIgZmlsZQotI2RlZmluZSBPTUFQX1RPVE9fRkxBU0hfQkFTRSAweGQ4MDAwMDAwCi0jZGVmaW5lIE9NQVBfVE9UT19GTEFTSF9TSVpFIDB4ODAwMDAKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBvbWFwX3RvdG9fbWFwX2ZsYXNoID0gewotCS5uYW1lID0JCSJPTUFQIFRvdG8gZmxhc2giLAotCS5iYW5rd2lkdGggPQkyLAotCS52aXJ0ID0JCSh2b2lkIF9faW9tZW0gKilPTUFQX1RPVE9fRkxBU0hfQkFTRSwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHRvdG9fZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPQkJIkJvb3RMb2FkZXIiLAotCQkuc2l6ZSA9CQkweDAwMDQwMDAwLCAgICAgLyogaG9wZWZ1bGx5IHUtYm9vdCB3aWxsIHN0YXkgMTI4ayArIDEyOCovCi0JCS5vZmZzZXQgPQkwLAotCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7Ci0JCS5uYW1lID0JCSJSZXNlcnZlZFNwYWNlIiwKLQkJLnNpemUgPQkJMHgwMDAzMDAwMCwKLQkJLm9mZnNldCA9CU1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLy9tYXNrX2ZsYWdzOglNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwgewotCQkubmFtZSA9CQkiRW52QXJlYSIsICAgICAgLyogYm90dG9tIDY0S2lCIGZvciBlbnYgdmFycyAqLwotCQkuc2l6ZSA9CQlNVERQQVJUX1NJWl9GVUxMLAotCQkub2Zmc2V0ID0JTVREUEFSVF9PRlNfQVBQRU5ELAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRzOwotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZmxhc2ggKHZvaWQpCi17Ci0KLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JaW50IG5iX3BhcnRzID0gMDsKLQlpbnQgcGFyc2VkX25yX3BhcnRzID0gMDsKLQljb25zdCBjaGFyICpwYXJ0X3R5cGU7Ci0KLQkvKgotCSAqIFN0YXRpYyBwYXJ0aXRpb24gZGVmaW5pdGlvbiBzZWxlY3Rpb24KLQkgKi8KLQlwYXJ0X3R5cGUgPSAic3RhdGljIjsKLQotIAlwYXJ0cyA9IHRvdG9fZmxhc2hfcGFydGl0aW9uczsKLQluYl9wYXJ0cyA9IEFSUkFZX1NJWkUodG90b19mbGFzaF9wYXJ0aXRpb25zKTsKLQlvbWFwX3RvdG9fbWFwX2ZsYXNoLnNpemUgPSBPTUFQX1RPVE9fRkxBU0hfU0laRTsKLQlvbWFwX3RvdG9fbWFwX2ZsYXNoLnBoeXMgPSB2aXJ0X3RvX3BoeXMoT01BUF9UT1RPX0ZMQVNIX0JBU0UpOwotCi0Jc2ltcGxlX21hcF9pbml0KCZvbWFwX3RvdG9fbWFwX2ZsYXNoKTsKLQkvKgotCSAqIE5vdyBsZXQncyBwcm9iZSBmb3IgdGhlIGFjdHVhbCBmbGFzaC4gIERvIGl0IGhlcmUgc2luY2UKLQkgKiBzcGVjaWZpYyBtYWNoaW5lIHNldHRpbmdzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgYWJvdmUuCi0JICovCi0JcHJpbnRrKEtFUk5fTk9USUNFICJPTUFQIHRvdG8gZmxhc2g6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1c1xuIiwKLQkJb21hcF90b3RvX21hcF9mbGFzaC5iYW5rd2lkdGgqOCk7Ci0JZmxhc2hfbXRkID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZvbWFwX3RvdG9fbWFwX2ZsYXNoKTsKLQlpZiAoIWZsYXNoX210ZCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotIAlpZiAocGFyc2VkX25yX3BhcnRzID4gMCkgewotCQlwYXJ0cyA9IHBhcnNlZF9wYXJ0czsKLQkJbmJfcGFydHMgPSBwYXJzZWRfbnJfcGFydHM7Ci0JfQotCi0JaWYgKG5iX3BhcnRzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJPTUFQIHRvdG8gZmxhc2g6IG5vIHBhcnRpdGlvbiBpbmZvIGF2YWlsYWJsZSwiCi0JCQkicmVnaXN0ZXJpbmcgd2hvbGUgZmxhc2ggYXQgb25jZVxuIik7Ci0JCWlmIChhZGRfbXRkX2RldmljZShmbGFzaF9tdGQpKXsKLSAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgIH0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nICVzIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iLAotCQkJcGFydF90eXBlKTsKLQkJcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQsIHBhcnRzLCBuYl9wYXJ0cyk7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IG9tYXBfdG90b19tdGRfaW5pdCh2b2lkKQotewotCWludCBzdGF0dXM7Ci0KLSAJaWYgKHN0YXR1cyA9IGluaXRfZmxhc2goKSkgewotCQlwcmludGsoS0VSTl9FUlIgIk9NQVAgVG90byBGbGFzaDogdW5hYmxlIHRvIGluaXQgbWFwIGZvciB0b3RvIGZsYXNoXG4iKTsKLQl9Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHZvaWQgIF9fZXhpdCBvbWFwX3RvdG9fbXRkX2NsZWFudXAodm9pZCkKLXsKLQlpZiAoZmxhc2hfbXRkKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQpOwotCQltYXBfZGVzdHJveShmbGFzaF9tdGQpOwotCQlrZnJlZShwYXJzZWRfcGFydHMpOwotCX0KLX0KLQotbW9kdWxlX2luaXQob21hcF90b3RvX210ZF9pbml0KTsKLW1vZHVsZV9leGl0KG9tYXBfdG90b19tdGRfY2xlYW51cCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkppYW4gWmhhbmciKTsKLU1PRFVMRV9ERVNDUklQVElPTigiT01BUCBUb3RvIGJvYXJkIG1hcCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjaS5jCmluZGV4IDVjNmEyNWMuLjQ4ZjRjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY2kuYwpAQCAtMjAzLDE1ICsyMDMsOCBAQAogCQkgKiBub3QgZW5hYmxlZCwgc2hvdWxkIHdlIGJlIGFsbG9jYXRpbmcgYSBuZXcgcmVzb3VyY2UgZm9yIGl0CiAJCSAqIG9yIHNpbXBseSBlbmFibGluZyBpdD8KIAkJICovCi0JCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIFBDSV9ST01fUkVTT1VSQ0UpICYKLQkJCQkgICAgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSkgewotCQkgICAgIAl1MzIgdmFsOwotCQkJcGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgUENJX1JPTV9SRVNPVVJDRSkgfD0gSU9SRVNPVVJDRV9ST01fRU5BQkxFOwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCAmdmFsKTsKLQkJCXZhbCB8PSBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgdmFsKTsKLQkJCXByaW50aygiJXM6IGVuYWJsaW5nIGV4cGFuc2lvbiBST01cbiIsIHBjaV9uYW1lKGRldikpOwotCQl9CisJCXBjaV9lbmFibGVfcm9tKGRldik7CisJCXByaW50aygiJXM6IGVuYWJsaW5nIGV4cGFuc2lvbiBST01cbiIsIHBjaV9uYW1lKGRldikpOwogCX0KIAogCWlmICghbGVuIHx8ICFiYXNlKQpAQCAtMjMyLDE4ICsyMjUsMTMgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9kYzIxMjg1X2V4aXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1hcF9wY2lfaW5mbyAqbWFwKQogewotCXUzMiB2YWw7Ci0KIAlpZiAobWFwLT5iYXNlKQogCQlpb3VubWFwKG1hcC0+YmFzZSk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gdW5kbyB0aGUgUENJIEJBUjIvUENJIFJPTSBCQVIgYWRkcmVzcyBhbHRlcmF0aW9uLgogCSAqLwotCXBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIFBDSV9ST01fUkVTT1VSQ0UpICY9IH5JT1JFU09VUkNFX1JPTV9FTkFCTEU7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCAmdmFsKTsKLQl2YWwgJj0gflBDSV9ST01fQUREUkVTU19FTkFCTEU7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgdmFsKTsKKwlwY2lfZGlzYWJsZV9yb20oZGV2KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKaW5kZXggNDlhY2Q0MS4uNWZjZmVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTIzMCw4ICsyMzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX01URF9PRl9QQVJUUwogCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucygmZGV2LT5kZXYsIGluZm8tPm10ZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAsICZpbmZvLT5wYXJ0cyk7CisJCWVyciA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKCZkZXYtPmRldiwgZHAsICZpbmZvLT5wYXJ0cyk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jIGIvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0MzQ3Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBNYXBwaW5nIGZvciBXYWxudXQgZmxhc2gKLSAqICh1c2VkIGVib255LmMgYXMgYSAiZnJhbWV3b3JrIikKLSAqCi0gKiBIZWlra2kgTGluZGhvbG0gPGhvbGluZGhvQGluZnJhZGVhZC5vcmc+Ci0gKgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+Ci0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC93YWxudXQuaD4KLQotLyogdGhlc2Ugc2hvdWxkIGJlIGluIHBsYXRmb3Jtcy80eHgvd2FsbnV0LmggPyAqLwotI2RlZmluZSBXQUxOVVRfRkxBU0hfT05CRF9OKHgpCQkoeCAmIDB4MDIpCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9TUkFNX1NFTCh4KQkoeCAmIDB4MDEpCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9MT1cJCTB4RkZGMDAwMDAKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX0hJR0gJCTB4RkZGODAwMDAKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX1NJWkUJCTB4ODAwMDAKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gd2FsbnV0X21hcCA9IHsKLQkubmFtZSA9CQkiV2FsbnV0IGZsYXNoIiwKLQkuc2l6ZSA9CQlXQUxOVVRfRkxBU0hfU0laRSwKLQkuYmFua3dpZHRoID0JMSwKLX07Ci0KLS8qIEFjdHVhbGx5LCBPcGVuQklPUyBpcyB0aGUgbGFzdCAxMjggS2lCIG9mIHRoZSBmbGFzaCAtIGJldHRlcgotICogcGFydGl0aW9uaW5nIGNvdWxkIGJlIG1hZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB3YWxudXRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJPcGVuQklPUyIsCi0JCS5vZmZzZXQgPSAweDAsCi0JCS5zaXplID0gICBXQUxOVVRfRkxBU0hfU0laRSwKLQkJLyoubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsICovIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0KLX07Ci0KLWludCBfX2luaXQgaW5pdF93YWxudXQodm9pZCkKLXsKLQl1OCBmcGdhX2JyZHMxOwotCXZvaWQgKmZwZ2FfYnJkczFfYWRyOwotCXZvaWQgKmZwZ2Ffc3RhdHVzX2FkcjsKLQl1bnNpZ25lZCBsb25nIGZsYXNoX2Jhc2U7Ci0KLQkvKiB0aGlzIHNob3VsZCBhbHJlYWR5IGJlIG1hcHBlZCAocGxhdGZvcm0vNHh4L3dhbG51dC5jKSAqLwotCWZwZ2Ffc3RhdHVzX2FkciA9IGlvcmVtYXAoV0FMTlVUX0ZQR0FfQkFTRSwgOCk7Ci0JaWYgKCFmcGdhX3N0YXR1c19hZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnBnYV9icmRzMV9hZHIgPSBmcGdhX3N0YXR1c19hZHIrNTsKLQlmcGdhX2JyZHMxID0gcmVhZGIoZnBnYV9icmRzMV9hZHIpOwotCS8qIGlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsgKi8KLQotCWlmIChXQUxOVVRfRkxBU0hfT05CRF9OKGZwZ2FfYnJkczEpKSB7Ci0JCXByaW50aygiVGhlIG9uLWJvYXJkIGZsYXNoIGlzIGRpc2FibGVkIChVNzkgc3cgNSkhIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChXQUxOVVRfRkxBU0hfU1JBTV9TRUwoZnBnYV9icmRzMSkpCi0JCWZsYXNoX2Jhc2UgPSBXQUxOVVRfRkxBU0hfTE9XOwotCWVsc2UKLQkJZmxhc2hfYmFzZSA9IFdBTE5VVF9GTEFTSF9ISUdIOwotCi0Jd2FsbnV0X21hcC5waHlzID0gZmxhc2hfYmFzZTsKLQl3YWxudXRfbWFwLnZpcnQgPQotCQkodm9pZCBfX2lvbWVtICopaW9yZW1hcChmbGFzaF9iYXNlLCB3YWxudXRfbWFwLnNpemUpOwotCi0JaWYgKCF3YWxudXRfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaC5cbiIpOwotCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmd2FsbnV0X21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmd2FsbnV0X21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIHdhbG51dF9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKHdhbG51dF9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3dhbG51dCh2b2lkKQotewotCWlmIChmbGFzaCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2gpOwotCQltYXBfZGVzdHJveShmbGFzaCk7Ci0JfQotCi0JaWYgKHdhbG51dF9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopd2FsbnV0X21hcC52aXJ0KTsKLQkJd2FsbnV0X21hcC52aXJ0ID0gMDsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfd2FsbnV0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfd2FsbnV0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSGVpa2tpIExpbmRob2xtIDxob2xpbmRob0BpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDA1R1AgV2FsbnV0IGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IDFjNzQ3NjIuLjk2Mzg0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCXdha2VfdXAoKHdhaXRfcXVldWVfaGVhZF90ICopaW5zdHItPnByaXYpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX09UUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT1RQKQorI2lmZGVmIENPTkZJR19IQVZFX01URF9PVFAKIHN0YXRpYyBpbnQgb3RwX3NlbGVjdF9maWxlbW9kZShzdHJ1Y3QgbXRkX2ZpbGVfaW5mbyAqbWZpLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJCWJyZWFrOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX01URF9PVFApIHx8IGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09UUCkKKyNpZmRlZiBDT05GSUdfSEFWRV9NVERfT1RQCiAJY2FzZSBPVFBTRUxFQ1Q6CiAJewogCQlpbnQgbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggMjk3MmE1ZS4uNzg5ODQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIG1ha2UgYSBsb2NhbCBjb3B5IG9mIGluc3RyIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgY2FsbGVyJ3Mgc3RydWN0ICovCiAJZXJhc2UgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGVyYXNlX2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQkJLyogc2FuaXR5IGNoZWNrOiBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlCiAJCQkgKiBibG9jayBhbGlnbm1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhYm92ZSAqLwogCQkJQlVHX09OKGVyciA9PSAtRUlOVkFMKTsKLQkJCWlmIChlcmFzZS0+ZmFpbF9hZGRyICE9IDB4ZmZmZmZmZmYpCisJCQlpZiAoZXJhc2UtPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCiAJCQkJaW5zdHItPmZhaWxfYWRkciA9IGVyYXNlLT5mYWlsX2FkZHIgKyBvZmZzZXQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkb29wcy5jIGIvZHJpdmVycy9tdGQvbXRkb29wcy5jCmluZGV4IDVhNjgwZTEuLmFlYmIzYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZG9vcHMuYworKysgYi9kcml2ZXJzL210ZC9tdGRvb3BzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAKKyNkZWZpbmUgTVRET09QU19LRVJOTVNHX01BR0lDIDB4NWQwMDVkMDAKICNkZWZpbmUgT09QU19QQUdFX1NJWkUgNDA5NgogCiBzdGF0aWMgc3RydWN0IG10ZG9vcHNfY29udGV4dCB7CkBAIC05OSw3ICsxMDAsNyBAQAogCWludCByZXQ7CiAKIAljeHQtPm5leHRwYWdlKys7Ci0JaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJaWYgKGN4dC0+bmV4dHBhZ2UgPj0gY3h0LT5vb3BzX3BhZ2VzKQogCQljeHQtPm5leHRwYWdlID0gMDsKIAljeHQtPm5leHRjb3VudCsrOwogCWlmIChjeHQtPm5leHRjb3VudCA9PSAweGZmZmZmZmZmKQpAQCAtMTQxLDcgKzE0Miw3IEBACiAJbW9kID0gKGN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSkgJSBtdGQtPmVyYXNlc2l6ZTsKIAlpZiAobW9kICE9IDApIHsKIAkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAoKG10ZC0+ZXJhc2VzaXplIC0gbW9kKSAvIE9PUFNfUEFHRV9TSVpFKTsKLQkJaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCX0KIApAQCAtMTU4LDcgKzE1OSw3IEBACiAJCQkJY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFKTsKIAkJaSsrOwogCQljeHQtPm5leHRwYWdlID0gY3h0LT5uZXh0cGFnZSArIChtdGQtPmVyYXNlc2l6ZSAvIE9PUFNfUEFHRV9TSVpFKTsKLQkJaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCQlpZiAoaSA9PSAoY3h0LT5vb3BzX3BhZ2VzIC8gKG10ZC0+ZXJhc2VzaXplIC8gT09QU19QQUdFX1NJWkUpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBBbGwgYmxvY2tzIGJhZCFcbiIpOwpAQCAtMjI0LDQwICsyMjUsNDAgQEAKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwogCWludCByZXQsIHBhZ2UsIG1heHBvcyA9IDA7Ci0JdTMyIGNvdW50LCBtYXhjb3VudCA9IDB4ZmZmZmZmZmY7CisJdTMyIGNvdW50WzJdLCBtYXhjb3VudCA9IDB4ZmZmZmZmZmY7CiAJc2l6ZV90IHJldGxlbjsKIAogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBjeHQtPm9vcHNfcGFnZXM7IHBhZ2UrKykgewotCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBwYWdlICogT09QU19QQUdFX1NJWkUsIDQsICZyZXRsZW4sICh1X2NoYXIgKikgJmNvdW50KTsKLQkJaWYgKChyZXRsZW4gIT0gNCkgfHwgKChyZXQgPCAwKSAmJiAocmV0ICE9IC1FVUNMRUFOKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogUmVhZCBmYWlsdXJlIGF0ICVkICgldGQgb2YgNCByZWFkKSIKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCA4LCAmcmV0bGVuLCAodV9jaGFyICopICZjb3VudFswXSk7CisJCWlmICgocmV0bGVuICE9IDgpIHx8ICgocmV0IDwgMCkgJiYgKHJldCAhPSAtRVVDTEVBTikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IFJlYWQgZmFpbHVyZSBhdCAlZCAoJXRkIG9mIDggcmVhZCkiCiAJCQkJIiwgZXJyICVkLlxuIiwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCByZXRsZW4sIHJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChjb3VudCA9PSAweGZmZmZmZmZmKQorCQlpZiAoY291bnRbMV0gIT0gTVRET09QU19LRVJOTVNHX01BR0lDKQorCQkJY29udGludWU7CisJCWlmIChjb3VudFswXSA9PSAweGZmZmZmZmZmKQogCQkJY29udGludWU7CiAJCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7Ci0JCQltYXhjb3VudCA9IGNvdW50OworCQkJbWF4Y291bnQgPSBjb3VudFswXTsKIAkJCW1heHBvcyA9IHBhZ2U7Ci0JCX0gZWxzZSBpZiAoKGNvdW50IDwgMHg0MDAwMDAwMCkgJiYgKG1heGNvdW50ID4gMHhjMDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCX0gZWxzZSBpZiAoKGNvdW50WzBdIDwgMHg0MDAwMDAwMCkgJiYgKG1heGNvdW50ID4gMHhjMDAwMDAwMCkpIHsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA+IG1heGNvdW50KSAmJiAoY291bnQgPCAweGMwMDAwMDAwKSkgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJfSBlbHNlIGlmICgoY291bnRbMF0gPiBtYXhjb3VudCkgJiYgKGNvdW50WzBdIDwgMHhjMDAwMDAwMCkpIHsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA+IG1heGNvdW50KSAmJiAoY291bnQgPiAweGMwMDAwMDAwKQorCQl9IGVsc2UgaWYgKChjb3VudFswXSA+IG1heGNvdW50KSAmJiAoY291bnRbMF0gPiAweGMwMDAwMDAwKQogCQkJCQkmJiAobWF4Y291bnQgPiAweDgwMDAwMDAwKSkgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwogCQl9CiAJfQogCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7CiAJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCQljeHQtPm5leHRjb3VudCA9IDE7Ci0JCWN4dC0+cmVhZHkgPSAxOwotCQlwcmludGsoS0VSTl9ERUJVRyAibXRkb29wczogUmVhZHkgJWQsICVkIChmaXJzdCBpbml0KVxuIiwKLQkJCQljeHQtPm5leHRwYWdlLCBjeHQtPm5leHRjb3VudCk7CisJCXNjaGVkdWxlX3dvcmsoJmN4dC0+d29ya19lcmFzZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM1OCw4ICszNTksOSBAQAogCiAJaWYgKGN4dC0+d3JpdGVjb3VudCA9PSAwKSB7CiAJCXUzMiAqc3RhbXAgPSBjeHQtPm9vcHNfYnVmOwotCQkqc3RhbXAgPSBjeHQtPm5leHRjb3VudDsKLQkJY3h0LT53cml0ZWNvdW50ID0gNDsKKwkJKnN0YW1wKysgPSBjeHQtPm5leHRjb3VudDsKKwkJKnN0YW1wID0gTVRET09QU19LRVJOTVNHX01BR0lDOworCQljeHQtPndyaXRlY291bnQgPSA4OwogCX0KIAogCWlmICgoY291bnQgKyBjeHQtPndyaXRlY291bnQpID4gT09QU19QQUdFX1NJWkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggOWEwNmRjOS4uMzcyODkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJaW5zdHItPmFkZHIgKz0gcGFydC0+b2Zmc2V0OwogCXJldCA9IHBhcnQtPm1hc3Rlci0+ZXJhc2UocGFydC0+bWFzdGVyLCBpbnN0cik7CiAJaWYgKHJldCkgewotCQlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSAweGZmZmZmZmZmKQorCQlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCiAJCQlpbnN0ci0+ZmFpbF9hZGRyIC09IHBhcnQtPm9mZnNldDsKIAkJaW5zdHItPmFkZHIgLT0gcGFydC0+b2Zmc2V0OwogCX0KQEAgLTIyNiw3ICsyMjYsNyBAQAogCWlmIChpbnN0ci0+bXRkLT5lcmFzZSA9PSBwYXJ0X2VyYXNlKSB7CiAJCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQoaW5zdHItPm10ZCk7CiAKLQkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gMHhmZmZmZmZmZikKKwkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJaW5zdHItPmZhaWxfYWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJCWluc3RyLT5hZGRyIC09IHBhcnQtPm9mZnNldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggNDFmMzYxYy4uMWMyZTk0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtNTYsNiArNTYsMTIgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIGlQQVEgaDE5MDAgZmxhc2guCiAKK2NvbmZpZyBNVERfTkFORF9HUElPCisJdHJpc3RhdGUgIkdQSU8gTkFORCBGbGFzaCBkcml2ZXIiCisJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8gJiYgQVJNCisJaGVscAorCSAgVGhpcyBlbmFibGVzIGEgR1BJTyBiYXNlZCBOQU5EIGZsYXNoIGRyaXZlci4KKwogY29uZmlnIE1URF9OQU5EX1NQSUEKIAl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gU1BJQSBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfUDcyMFQKQEAgLTY4LDEyICs3NCw2IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgTkFORCBmbGFzaCBvbiBBbXN0cmFkIEUzIChEZWx0YSkuCiAKLWNvbmZpZyBNVERfTkFORF9UT1RPCi0JdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFRPVE8gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAgJiYgQlJPS0VOCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgTkFORCBmbGFzaCBvbiBUZXhhcyBJbnN0cnVtZW50cyBUb3RvIHBsYXRmb3JtLgotCiBjb25maWcgTVREX05BTkRfVFM3MjUwCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFRTLTcyNTAgYm9hcmQiCiAJZGVwZW5kcyBvbiBNQUNIX1RTNzJYWApAQCAtMTYzLDEzICsxNjMsNiBAQAogCSAgaW5jb3JyZWN0IEVDQyBnZW5lcmF0aW9uLCBhbmQgaWYgdXNpbmcgdGhlc2UsIHRoZSBkZWZhdWx0IG9mCiAJICBzb2Z0d2FyZSBFQ0MgaXMgcHJlZmVyYWJsZS4KIAotY29uZmlnIE1URF9OQU5EX05ERkMKLQl0cmlzdGF0ZSAiTkRGQyBOYW5EIEZsYXNoIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiA0eHggJiYgIVBQQ19NRVJHRQotCXNlbGVjdCBNVERfTkFORF9FQ0NfU01DCi0JaGVscAotCSBOREZDIE5hbmQgRmxhc2ggQ29udHJvbGxlcnMgYXJlIGludGVncmF0ZWQgaW4gSUJNL0FNQ0MncyA0eHggU29DcwotCiBjb25maWcgTVREX05BTkRfUzNDMjQxMF9DTEtTVE9QCiAJYm9vbCAiUzNDMjQxMCBOQU5EIElETEUgY2xvY2sgc3RvcCIKIAlkZXBlbmRzIG9uIE1URF9OQU5EX1MzQzI0MTAKQEAgLTM0MCw2ICszMzMsMTMgQEAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBkZXZpY2UgZm91bmQgb24KIAkgIFBYQTN4eCBwcm9jZXNzb3JzCiAKK2NvbmZpZyBNVERfTkFORF9QWEEzeHhfQlVJTFRJTgorCWJvb2wgIlVzZSBidWlsdGluIGRlZmluaXRpb25zIGZvciBzb21lIE5BTkQgY2hpcHMgKGRlcHJlY2F0ZWQpIgorCWRlcGVuZHMgb24gTVREX05BTkRfUFhBM3h4CisJaGVscAorCSAgVGhpcyBlbmFibGVzIGJ1aWx0aW4gZGVmaW5pdGlvbnMgZm9yIHNvbWUgTkFORCBjaGlwcy4gVGhpcworCSAgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhLgorCiBjb25maWcgTVREX05BTkRfQ01fWDI3MAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIEZsYXNoIG9uIENNLVgyNzAgbW9kdWxlcyIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIE1BQ0hfQVJNQ09SRQpAQCAtNDAwLDEwICs0MDAsMjQgQEAKIAogY29uZmlnIE1URF9OQU5EX0ZTTF9VUE0KIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBGcmVlc2NhbGUgVVBNIgotCWRlcGVuZHMgb24gTVREX05BTkQgJiYgT0ZfR1BJTyAmJiAoUFBDXzgzeHggfHwgUFBDXzg1eHgpCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiAoUFBDXzgzeHggfHwgUFBDXzg1eHgpCiAJc2VsZWN0IEZTTF9MQkMKIAloZWxwCiAJICBFbmFibGVzIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggY2hpcHMgd2lyZWQgb250byBGcmVlc2NhbGUgUG93ZXJQQwogCSAgcHJvY2Vzc29yIGxvY2FsYnVzIHdpdGggVXNlci1Qcm9ncmFtbWFibGUgTWFjaGluZSBzdXBwb3J0LgogCitjb25maWcgTVREX05BTkRfTVhDCisJdHJpc3RhdGUgIk1YQyBOQU5EIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX01YMgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIHRoZQorCSAgTVhDIHByb2Nlc3NvcnMuCisKK2NvbmZpZyBNVERfTkFORF9TSF9GTENUTAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIG9uIFJlbmVzYXMgU3VwZXJIIEZMQ1RMIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgU1VQRVJIICYmIENQVV9TVUJUWVBFX1NINzcyMworCWhlbHAKKwkgIFNldmVyYWwgUmVuZXNhcyBTdXBlckggQ1BVIGhhcyBGTENUTC4gVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0CisJICBmb3IgTkFORCBGbGFzaCB1c2luZyBGTENUTC4gVGhpcyBkcml2ZXIgc3VwcG9ydCBTSDc3MjMuCisKIGVuZGlmICMgTVREX05BTkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IGI3ODZjNWQuLmI2NjE1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtOCw3ICs4LDYgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9DQUZFKQkJKz0gY2FmZV9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9TUElBKQkJKz0gc3BpYS5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQU1TX0RFTFRBKQkrPSBhbXMtZGVsdGEubwotb2JqLSQoQ09ORklHX01URF9OQU5EX1RPVE8pCQkrPSB0b3RvLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9BVVRDUFUxMikJCSs9IGF1dGNwdTEyLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9FREI3MzEyKQkJKz0gZWRiNzMxMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVUxNTUwKQkJKz0gYXUxNTUwbmQubwpAQCAtMjQsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX0NTNTUzWCkJCSs9IGNzNTUzeF9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9OREZDKQkJKz0gbmRmYy5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVRNRUwpCQkrPSBhdG1lbF9uYW5kLm8KK29iai0kKENPTkZJR19NVERfTkFORF9HUElPKQkJKz0gZ3Bpby5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQ01fWDI3MCkJCSs9IGNteDI3MF9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFKQkrPSBleGNpdGVfbmFuZGZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9QWEEzeHgpCQkrPSBweGEzeHhfbmFuZC5vCkBAIC0zNCw1ICszNCw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfT1JJT04pCQkrPSBvcmlvbl9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9GU0xfRUxCQykJCSs9IGZzbF9lbGJjX25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0ZTTF9VUE0pCQkrPSBmc2xfdXBtLm8KK29iai0kKENPTkZJR19NVERfTkFORF9TSF9GTENUTCkJCSs9IHNoX2ZsY3RsLm8KK29iai0kKENPTkZJR19NVERfTkFORF9NWEMpCQkrPSBteGNfbmFuZC5vCiAKIG5hbmQtb2JqcyA6PSBuYW5kX2Jhc2UubyBuYW5kX2JidC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jIGIvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYwppbmRleCAyNTc5MzdjLi45NjIzODAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogCWFsWzBdLnBvcnQgPSBBTEFVREFfUE9SVF9YRDsKIAlhbFsxXS5wb3J0ID0gQUxBVURBX1BPUlRfU007CiAKLQlpbmZvKCJhbGF1ZGEgcHJvYmVkIik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiYWxhdWRhIHByb2JlZFxuIik7CiAJYWxhdWRhX2NoZWNrX21lZGlhKGFsKTsKIAlhbGF1ZGFfY2hlY2tfbWVkaWEoYWwrMSk7CiAKQEAgLTcxNiw3ICs3MTYsNyBAQAogCWlmIChhbCkKIAkJa3JlZl9wdXQoJmFsLT5rcmVmLCBhbGF1ZGFfZGVsZXRlKTsKIAotCWluZm8oImFsYXVkYSBnb25lIik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiYWxhdWRhIGdvbmUiKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCmluZGV4IDMzODdlMGQuLmM5OGMxNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCkBAIC0xNzQsNDggKzE3NCw2IEBACiB9CiAKIC8qCi0gKiB3cml0ZSBvb2IgZm9yIHNtYWxsIHBhZ2VzCi0gKi8KLXN0YXRpYyBpbnQgYXRtZWxfbmFuZF93cml0ZV9vb2JfNTEyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSkKLXsKLQlpbnQgY2h1bmsgPSBjaGlwLT5lY2MuYnl0ZXMgKyBjaGlwLT5lY2MucHJlcGFkICsgY2hpcC0+ZWNjLnBvc3RwYWQ7Ci0JaW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZSwgbGVuZ3RoID0gbXRkLT5vb2JzaXplOwotCWludCBsZW4sIHBvcywgc3RhdHVzID0gMDsKLQljb25zdCB1aW50OF90ICpidWZwb2kgPSBjaGlwLT5vb2JfcG9pOwotCi0JcG9zID0gZWNjc2l6ZSArIGNodW5rOwotCi0JY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBwb3MsIHBhZ2UpOwotCWxlbiA9IG1pbl90KGludCwgbGVuZ3RoLCBjaHVuayk7Ci0JY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmcG9pLCBsZW4pOwotCWJ1ZnBvaSArPSBsZW47Ci0JbGVuZ3RoIC09IGxlbjsKLQlpZiAobGVuZ3RoID4gMCkKLQkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmcG9pLCBsZW5ndGgpOwotCi0JY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOwotCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7Ci0KLQlyZXR1cm4gc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCA/IC1FSU8gOiAwOwotCi19Ci0KLS8qCi0gKiByZWFkIG9vYiBmb3Igc21hbGwgcGFnZXMKLSAqLwotc3RhdGljIGludCBhdG1lbF9uYW5kX3JlYWRfb29iXzUxMihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwJaW50IHBhZ2UsIGludCBzbmRjbWQpCi17Ci0JaWYgKHNuZGNtZCkgewotCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7Ci0JCXNuZGNtZCA9IDA7Ci0JfQotCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKLQlyZXR1cm4gc25kY21kOwotfQotCi0vKgogICogQ2FsY3VsYXRlIEhXIEVDQwogICoKICAqIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBhIHdyaXRlCkBAIC0yMzUsMTQgKzE5MywxNCBAQAogCS8qIGdldCB0aGUgZmlyc3QgMiBFQ0MgYnl0ZXMgKi8KIAllY2NfdmFsdWUgPSBlY2NfcmVhZGwoaG9zdC0+ZWNjLCBQUik7CiAKLQllY2NfY29kZVtlY2Nwb3NbMF1dID0gZWNjX3ZhbHVlICYgMHhGRjsKLQllY2NfY29kZVtlY2Nwb3NbMV1dID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CisJZWNjX2NvZGVbMF0gPSBlY2NfdmFsdWUgJiAweEZGOworCWVjY19jb2RlWzFdID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CiAKIAkvKiBnZXQgdGhlIGxhc3QgMiBFQ0MgYnl0ZXMgKi8KIAllY2NfdmFsdWUgPSBlY2NfcmVhZGwoaG9zdC0+ZWNjLCBOUFIpICYgQVRNRUxfRUNDX05QQVJJVFk7CiAKLQllY2NfY29kZVtlY2Nwb3NbMl1dID0gZWNjX3ZhbHVlICYgMHhGRjsKLQllY2NfY29kZVtlY2Nwb3NbM11dID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CisJZWNjX2NvZGVbMl0gPSBlY2NfdmFsdWUgJiAweEZGOworCWVjY19jb2RlWzNdID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3NiwxNCArNDM0LDEyIEBACiAJCQlyZXMgPSAtRUlPOwogCQkJZ290byBlcnJfZWNjX2lvcmVtYXA7CiAJCX0KLQkJbmFuZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXX1NZTkRST01FOworCQluYW5kX2NoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CiAJCW5hbmRfY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IGF0bWVsX25hbmRfY2FsY3VsYXRlOwogCQluYW5kX2NoaXAtPmVjYy5jb3JyZWN0ID0gYXRtZWxfbmFuZF9jb3JyZWN0OwogCQluYW5kX2NoaXAtPmVjYy5od2N0bCA9IGF0bWVsX25hbmRfaHdjdGw7CiAJCW5hbmRfY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IGF0bWVsX25hbmRfcmVhZF9wYWdlOwogCQluYW5kX2NoaXAtPmVjYy5ieXRlcyA9IDQ7Ci0JCW5hbmRfY2hpcC0+ZWNjLnByZXBhZCA9IDA7Ci0JCW5hbmRfY2hpcC0+ZWNjLnBvc3RwYWQgPSAwOwogCX0KIAogCW5hbmRfY2hpcC0+Y2hpcF9kZWxheSA9IDIwOwkJLyogMjB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KQEAgLTUxNCw3ICs0NzAsNyBAQAogCQlnb3RvIGVycl9zY2FuX2lkZW50OwogCX0KIAotCWlmIChuYW5kX2NoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX0hXX1NZTkRST01FKSB7CisJaWYgKG5hbmRfY2hpcC0+ZWNjLm1vZGUgPT0gTkFORF9FQ0NfSFcpIHsKIAkJLyogRUNDIGlzIGNhbGN1bGF0ZWQgZm9yIHRoZSB3aG9sZSBwYWdlICgxIHN0ZXApICovCiAJCW5hbmRfY2hpcC0+ZWNjLnNpemUgPSBtdGQtPndyaXRlc2l6ZTsKIApAQCAtNTIyLDggKzQ3OCw2IEBACiAJCXN3aXRjaCAobXRkLT53cml0ZXNpemUpIHsKIAkJY2FzZSA1MTI6CiAJCQluYW5kX2NoaXAtPmVjYy5sYXlvdXQgPSAmYXRtZWxfb29iaW5mb19zbWFsbDsKLQkJCW5hbmRfY2hpcC0+ZWNjLnJlYWRfb29iID0gYXRtZWxfbmFuZF9yZWFkX29vYl81MTI7Ci0JCQluYW5kX2NoaXAtPmVjYy53cml0ZV9vb2IgPSBhdG1lbF9uYW5kX3dyaXRlX29vYl81MTI7CiAJCQllY2Nfd3JpdGVsKGhvc3QtPmVjYywgTVIsIEFUTUVMX0VDQ19QQUdFU0laRV81MjgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMTAyNDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwppbmRleCAzMzcwYTgwLi45ZjFiNDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCkBAIC0yODksOCArMjg5LDEwIEBACiAJaW50IGk7CiAJdWludDY0X3QgdmFsOwogCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaW50IG10ZF9wYXJ0c19uYiA9IDA7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKm10ZF9wYXJ0cyA9IE5VTEw7CisjZW5kaWYKIAogCS8qIElmIHRoZSBDUFUgaXNuJ3QgYSBHZW9kZSBHWCBvciBMWCwgYWJvcnQgKi8KIAlpZiAoIWlzX2dlb2RlKCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCmluZGV4IDk4YWQzY2UuLjRhYTViZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCkBAIC05MTgsOCArOTE4LDcgQEAKIAogI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFMKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMocHJpdi0+ZGV2LCAmcHJpdi0+bXRkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCAmcGFydHMpOworCQlyZXQgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucyhwcml2LT5kZXYsIG5vZGUsICZwYXJ0cyk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYwppbmRleCAxZWJmZDg3Li4wMjRlM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CkBAIC0zNiw4ICszNyw2IEBACiAJdWludDhfdCB1cG1fY21kX29mZnNldDsKIAl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJaW50IHJuYl9ncGlvOwotCWNvbnN0IHVpbnQzMl90ICp3YWl0X3BhdHRlcm47Ci0JY29uc3QgdWludDMyX3QgKndhaXRfd3JpdGU7CiAJaW50IGNoaXBfZGVsYXk7CiB9OwogCkBAIC02MSwxMCArNjAsMTEgQEAKIAlpZiAoZnVuLT5ybmJfZ3BpbyA+PSAwKSB7CiAJCXdoaWxlICgtLWNudCAmJiAhZnVuX2NoaXBfcmVhZHkoJmZ1bi0+bXRkKSkKIAkJCWNwdV9yZWxheCgpOworCQlpZiAoIWNudCkKKwkJCWRldl9lcnIoZnVuLT5kZXYsICJ0aXJlZCB3YWl0aW5nIGZvciBSTkJcbiIpOworCX0gZWxzZSB7CisJCW5kZWxheSgxMDApOwogCX0KLQotCWlmICghY250KQotCQlkZXZfZXJyKGZ1bi0+ZGV2LCAidGlyZWQgd2FpdGluZyBmb3IgUk5CXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgZnVuX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKQEAgLTg5LDggKzg5LDcgQEAKIAogCWZzbF91cG1fcnVuX3BhdHRlcm4oJmZ1bi0+dXBtLCBmdW4tPmlvX2Jhc2UsIGNtZCk7CiAKLQlpZiAoZnVuLT53YWl0X3BhdHRlcm4pCi0JCWZ1bl93YWl0X3JuYihmdW4pOworCWZ1bl93YWl0X3JuYihmdW4pOwogfQogCiBzdGF0aWMgdWludDhfdCBmdW5fcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtMTE2LDE0ICsxMTUsMTYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlvdXRfOChmdW4tPmNoaXAuSU9fQUREUl9XLCBidWZbaV0pOwotCQlpZiAoZnVuLT53YWl0X3dyaXRlKQotCQkJZnVuX3dhaXRfcm5iKGZ1bik7CisJCWZ1bl93YWl0X3JuYihmdW4pOwogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZnVuX2NoaXBfaW5pdChzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmdW5fY2hpcF9pbml0KHN0cnVjdCBmc2xfdXBtX25hbmQgKmZ1biwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnVwbV9ucCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlcykKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZmxhc2hfbnA7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfdHlwZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCwgfTsKICNlbmRpZgpAQCAtMTQzLDE4ICsxNDQsMzcgQEAKIAlmdW4tPm10ZC5wcml2ID0gJmZ1bi0+Y2hpcDsKIAlmdW4tPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOwogCisJZmxhc2hfbnAgPSBvZl9nZXRfbmV4dF9jaGlsZCh1cG1fbnAsIE5VTEwpOworCWlmICghZmxhc2hfbnApCisJCXJldHVybiAtRU5PREVWOworCisJZnVuLT5tdGQubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXguJXMiLCBpb19yZXMtPnN0YXJ0LAorCQkJCSAgZmxhc2hfbnAtPm5hbWUpOworCWlmICghZnVuLT5tdGQubmFtZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKIAlyZXQgPSBuYW5kX3NjYW4oJmZ1bi0+bXRkLCAxKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JZnVuLT5tdGQubmFtZSA9IGZ1bi0+ZGV2LT5idXNfaWQ7CisJCWdvdG8gZXJyOwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJcmV0ID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoJmZ1bi0+bXRkLCBwYXJ0X3R5cGVzLCAmZnVuLT5wYXJ0cywgMCk7Ci0JaWYgKHJldCA+IDApCi0JCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoJmZ1bi0+bXRkLCBmdW4tPnBhcnRzLCByZXQpOworCisjaWZkZWYgQ09ORklHX01URF9PRl9QQVJUUworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoZnVuLT5kZXYsICZmdW4tPm10ZCwKKwkJCQkJICAgICAgZmxhc2hfbnAsICZmdW4tPnBhcnRzKTsKICNlbmRpZgotCXJldHVybiBhZGRfbXRkX2RldmljZSgmZnVuLT5tdGQpOworCWlmIChyZXQgPiAwKQorCQlyZXQgPSBhZGRfbXRkX3BhcnRpdGlvbnMoJmZ1bi0+bXRkLCBmdW4tPnBhcnRzLCByZXQpOworCWVsc2UKKyNlbmRpZgorCQlyZXQgPSBhZGRfbXRkX2RldmljZSgmZnVuLT5tdGQpOworZXJyOgorCW9mX25vZGVfcHV0KGZsYXNoX25wKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmdW5fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCkBAIC0yMTEsNiArMjMxLDEyIEBACiAJCWdvdG8gZXJyMjsKIAl9CiAKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiY2hpcC1kZWxheSIsIE5VTEwpOworCWlmIChwcm9wKQorCQlmdW4tPmNoaXBfZGVsYXkgPSAqcHJvcDsKKwllbHNlCisJCWZ1bi0+Y2hpcF9kZWxheSA9IDUwOworCiAJZnVuLT5pb19iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJm9mZGV2LT5kZXYsIGlvX3Jlcy5zdGFydCwKIAkJCQkJICBpb19yZXMuZW5kIC0gaW9fcmVzLnN0YXJ0ICsgMSk7CiAJaWYgKCFmdW4tPmlvX2Jhc2UpIHsKQEAgLTIyMCwxNyArMjQ2LDggQEAKIAogCWZ1bi0+ZGV2ID0gJm9mZGV2LT5kZXY7CiAJZnVuLT5sYXN0X2N0cmwgPSBOQU5EX0NMRTsKLQlmdW4tPndhaXRfcGF0dGVybiA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImZzbCx3YWl0LXBhdHRlcm4iLAotCQkJCQkgICAgTlVMTCk7Ci0JZnVuLT53YWl0X3dyaXRlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiZnNsLHdhaXQtd3JpdGUiLCBOVUxMKTsKIAotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJjaGlwLWRlbGF5IiwgTlVMTCk7Ci0JaWYgKHByb3ApCi0JCWZ1bi0+Y2hpcF9kZWxheSA9ICpwcm9wOwotCWVsc2UKLQkJZnVuLT5jaGlwX2RlbGF5ID0gNTA7Ci0KLQlyZXQgPSBmdW5fY2hpcF9pbml0KGZ1bik7CisJcmV0ID0gZnVuX2NoaXBfaW5pdChmdW4sIG9mZGV2LT5ub2RlLCAmaW9fcmVzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7CiAKQEAgLTI1MSw2ICsyNjgsNyBAQAogCXN0cnVjdCBmc2xfdXBtX25hbmQgKmZ1biA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CiAKIAluYW5kX3JlbGVhc2UoJmZ1bi0+bXRkKTsKKwlrZnJlZShmdW4tPm10ZC5uYW1lKTsKIAogCWlmIChmdW4tPnJuYl9ncGlvID49IDApCiAJCWdwaW9fZnJlZShmdW4tPnJuYl9ncGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jIGIvZHJpdmVycy9tdGQvbmFuZC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MDJlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogZHJpdmVycy9tdGQvbmFuZC9ncGlvLmMKKyAqCisgKiBVcGRhdGVkLCBhbmQgY29udmVydGVkIHRvIGdlbmVyaWMgR1BJTyBiYXNlZCBkcml2ZXIgYnkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFdyaXR0ZW4gYnkgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICBCYXNlZCBvbiAyLjQgdmVyc2lvbiBieSBNYXJrIFdoaXR0YWtlcgorICoKKyAqIMKpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogRGV2aWNlIGRyaXZlciBmb3IgTkFORCBjb25uZWN0ZWQgdmlhIEdQSU8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLWdwaW8uaD4KKworc3RydWN0IGdwaW9tdGQgeworCXZvaWQgX19pb21lbQkJKmlvX3N5bmM7CisJc3RydWN0IG10ZF9pbmZvCQltdGRfaW5mbzsKKwlzdHJ1Y3QgbmFuZF9jaGlwCW5hbmRfY2hpcDsKKwlzdHJ1Y3QgZ3Bpb19uYW5kX3BsYXRkYXRhIHBsYXQ7Cit9OworCisjZGVmaW5lIGdwaW9fbmFuZF9nZXRwcml2KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZ3Bpb210ZCwgbXRkX2luZm8pCisKKworI2lmZGVmIENPTkZJR19BUk0KKy8qIGdwaW9fbmFuZF9kb3N5bmMoKQorICoKKyAqIE1ha2Ugc3VyZSB0aGUgR1BJTyBzdGF0ZSBjaGFuZ2VzIG9jY3VyIGluLW9yZGVyIHdpdGggd3JpdGVzIHRvIE5BTkQKKyAqIG1lbW9yeSByZWdpb24uCisgKiBOZWVkZWQgb24gUFhBIGR1ZSB0byBidXMtcmVvcmRlcmluZyB3aXRoaW4gdGhlIFNvQyBpdHNlbGYgKHNlZSBzZWN0aW9uIG9uCisgKiBJL08gb3JkZXJpbmcgaW4gUFhBIG1hbnVhbCAoc2VjdGlvbiAyLjMsIHAzNSkKKyAqLworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX2Rvc3luYyhzdHJ1Y3QgZ3Bpb210ZCAqZ3Bpb210ZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChncGlvbXRkLT5pb19zeW5jKSB7CisJCS8qCisJCSAqIExpbnV4IG1lbW9yeSBiYXJyaWVycyBkb24ndCBjYXRlciBmb3Igd2hhdCdzIHJlcXVpcmVkIGhlcmUuCisJCSAqIFdoYXQncyByZXF1aXJlZCBpcyB3aGF0J3MgaGVyZSAtIGEgcmVhZCBmcm9tIGEgc2VwYXJhdGUKKwkJICogcmVnaW9uIHdpdGggYSBkZXBlbmRlbmN5IG9uIHRoYXQgcmVhZC4KKwkJICovCisJCXRtcCA9IHJlYWRsKGdwaW9tdGQtPmlvX3N5bmMpOworCQlhc20gdm9sYXRpbGUoIm1vdiAlMSwgJTBcbiIgOiAiPXIiICh0bXApIDogInIiICh0bXApKTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGdwaW9fbmFuZF9kb3N5bmMoc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQpIHt9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgZ3Bpb210ZCAqZ3Bpb210ZCA9IGdwaW9fbmFuZF9nZXRwcml2KG10ZCk7CisKKwlncGlvX25hbmRfZG9zeW5jKGdwaW9tdGQpOworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsICEoY3RybCAmIE5BTkRfTkNFKSk7CisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsICEhKGN0cmwgJiBOQU5EX0NMRSkpOworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlLCAhIShjdHJsICYgTkFORF9BTEUpKTsKKwkJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKKwl9CisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwl3cml0ZWIoY21kLCBncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9XKTsKKwlncGlvX25hbmRfZG9zeW5jKGdwaW9tdGQpOworfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwl3cml0ZXNiKHRoaXMtPklPX0FERFJfVywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCXJlYWRzYih0aGlzLT5JT19BRERSX1IsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGludCBncGlvX25hbmRfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGNoYXIgcmVhZCwgKnAgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcmVhZCA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7CisJCWlmIChyZWFkICE9IHBbaV0pIHsKKwkJCXByX2RlYnVnKCIlczogZXJyIGF0ICVkIChyZWFkICUwNHggdnMgJTA0eClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGksIHJlYWQsIHBbaV0pOworCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfd3JpdGVidWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsCisJCQkJIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWJ1ZiwgMikpIHsKKwkJd3JpdGVzdyh0aGlzLT5JT19BRERSX1csIGJ1ZiwgbGVuPj4xKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgc2hvcnQgKnB0ciA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDIsIHB0cisrKQorCQkJd3JpdGV3KCpwdHIsIHRoaXMtPklPX0FERFJfVyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfcmVhZGJ1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJaWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpYnVmLCAyKSkgeworCQlyZWFkc3codGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbj4+MSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIHNob3J0ICpwdHIgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyLCBwdHIrKykKKwkJCSpwdHIgPSByZWFkdyh0aGlzLT5JT19BRERSX1IpOworCX0KK30KKworc3RhdGljIGludCBncGlvX25hbmRfdmVyaWZ5YnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgc2hvcnQgcmVhZCwgKnAgPSAodW5zaWduZWQgc2hvcnQgKikgYnVmOworCWludCBpLCBlcnIgPSAwOworCWxlbiA+Pj0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZWFkID0gcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwkJaWYgKHJlYWQgIT0gcFtpXSkgeworCQkJcHJfZGVidWcoIiVzOiBlcnIgYXQgJWQgKHJlYWQgJTA0eCB2cyAlMDR4KVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSwgcmVhZCwgcFtpXSk7CisJCQllcnIgPSAtRUZBVUxUOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBncGlvX25hbmRfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBncGlvX25hbmRfZ2V0cHJpdihtdGQpOworCXJldHVybiBncGlvX2dldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb19uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJbmFuZF9yZWxlYXNlKCZncGlvbXRkLT5tdGRfaW5mbyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaW91bm1hcChncGlvbXRkLT5pb19zeW5jKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW91bm1hcChncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9SKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgMSk7CisKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2NsZSk7CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUpOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkKKwkJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3ApOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKKworCWtmcmVlKGdwaW9tdGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnJlcXVlc3RfYW5kX3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBzaXplX3Qgc2l6ZSwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnIpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCBuYW1lKSkgeworCQkqZXJyID0gLUVCVVNZOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwdHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOworCWlmICghcHRyKSB7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwkJKmVyciA9IC1FTk9NRU07CisJfQorCXJldHVybiBwdHI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQ7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczAsICpyZXMxOworCWludCByZXQ7CisKKwlpZiAoIWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzMCA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlczApCisJCXJldHVybiAtRUlOVkFMOworCisJZ3Bpb210ZCA9IGt6YWxsb2Moc2l6ZW9mKCpncGlvbXRkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdwaW9tdGQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgTkFORCBNVERcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0aGlzID0gJmdwaW9tdGQtPm5hbmRfY2hpcDsKKwl0aGlzLT5JT19BRERSX1IgPSByZXF1ZXN0X2FuZF9yZW1hcChyZXMwLCAyLCAiTkFORCIsICZyZXQpOworCWlmICghdGhpcy0+SU9fQUREUl9SKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIG1hcCBOQU5EXG4iKTsKKwkJZ290byBlcnJfbWFwOworCX0KKworCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKHJlczEpIHsKKwkJZ3Bpb210ZC0+aW9fc3luYyA9IHJlcXVlc3RfYW5kX3JlbWFwKHJlczEsIDQsICJOQU5EIHN5bmMiLCAmcmV0KTsKKwkJaWYgKCFncGlvbXRkLT5pb19zeW5jKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byBtYXAgc3luYyBOQU5EXG4iKTsKKwkJCWdvdG8gZXJyX3N5bmM7CisJCX0KKwl9CisKKwltZW1jcHkoJmdwaW9tdGQtPnBsYXQsIGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHNpemVvZihncGlvbXRkLT5wbGF0KSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgIk5BTkQgTkNFIik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbmNlOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvbXRkLT5wbGF0LmdwaW9fbmNlLCAxKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgIk5BTkQgTldQIik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9ud3A7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvbXRkLT5wbGF0LmdwaW9fbndwLCAxKTsKKwl9CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUsICJOQU5EIEFMRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FsZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSwgMCk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsICJOQU5EIENMRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX2NsZSwgMCk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19yZHksICJOQU5EIFJEWSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JkeTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKKworCisJdGhpcy0+SU9fQUREUl9XICA9IHRoaXMtPklPX0FERFJfUjsKKwl0aGlzLT5lY2MubW9kZSAgID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5vcHRpb25zICAgID0gZ3Bpb210ZC0+cGxhdC5vcHRpb25zOworCXRoaXMtPmNoaXBfZGVsYXkgPSBncGlvbXRkLT5wbGF0LmNoaXBfZGVsYXk7CisKKwkvKiBpbnN0YWxsIG91ciByb3V0aW5lcyAqLworCXRoaXMtPmNtZF9jdHJsICAgPSBncGlvX25hbmRfY21kX2N0cmw7CisJdGhpcy0+ZGV2X3JlYWR5ICA9IGdwaW9fbmFuZF9kZXZyZWFkeTsKKworCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQl0aGlzLT5yZWFkX2J1ZiAgID0gZ3Bpb19uYW5kX3JlYWRidWYxNjsKKwkJdGhpcy0+d3JpdGVfYnVmICA9IGdwaW9fbmFuZF93cml0ZWJ1ZjE2OworCQl0aGlzLT52ZXJpZnlfYnVmID0gZ3Bpb19uYW5kX3ZlcmlmeWJ1ZjE2OworCX0gZWxzZSB7CisJCXRoaXMtPnJlYWRfYnVmICAgPSBncGlvX25hbmRfcmVhZGJ1ZjsKKwkJdGhpcy0+d3JpdGVfYnVmICA9IGdwaW9fbmFuZF93cml0ZWJ1ZjsKKwkJdGhpcy0+dmVyaWZ5X2J1ZiA9IGdwaW9fbmFuZF92ZXJpZnlidWY7CisJfQorCisJLyogc2V0IHRoZSBtdGQgcHJpdmF0ZSBkYXRhIGZvciB0aGUgbmFuZCBkcml2ZXIgKi8KKwlncGlvbXRkLT5tdGRfaW5mby5wcml2ID0gdGhpczsKKwlncGlvbXRkLT5tdGRfaW5mby5vd25lciA9IFRISVNfTU9EVUxFOworCisJaWYgKG5hbmRfc2NhbigmZ3Bpb210ZC0+bXRkX2luZm8sIDEpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gbmFuZCBjaGlwcyBmb3VuZD9cbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX3dwOworCX0KKworCWlmIChncGlvbXRkLT5wbGF0LmFkanVzdF9wYXJ0cykKKwkJZ3Bpb210ZC0+cGxhdC5hZGp1c3RfcGFydHMoJmdwaW9tdGQtPnBsYXQsCisJCQkJCSAgIGdwaW9tdGQtPm10ZF9pbmZvLnNpemUpOworCisJYWRkX210ZF9wYXJ0aXRpb25zKCZncGlvbXRkLT5tdGRfaW5mbywgZ3Bpb210ZC0+cGxhdC5wYXJ0cywKKwkJCSAgIGdwaW9tdGQtPnBsYXQubnVtX3BhcnRzKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGdwaW9tdGQpOworCisJcmV0dXJuIDA7CisKK2Vycl93cDoKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMCk7CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19yZHkpOworZXJyX3JkeToKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2NsZSk7CitlcnJfY2xlOgorCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlKTsKK2Vycl9hbGU6CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbndwKTsKK2Vycl9ud3A6CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UpOworZXJyX25jZToKKwlpb3VubWFwKGdwaW9tdGQtPmlvX3N5bmMpOworCWlmIChyZXMxKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIHJlczEtPmVuZCAtIHJlczEtPnN0YXJ0ICsgMSk7CitlcnJfc3luYzoKKwlpb3VubWFwKGdwaW9tdGQtPm5hbmRfY2hpcC5JT19BRERSX1IpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMwLT5zdGFydCwgcmVzMC0+ZW5kIC0gcmVzMC0+c3RhcnQgKyAxKTsKK2Vycl9tYXA6CisJa2ZyZWUoZ3Bpb210ZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3Bpb19uYW5kX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZ3Bpb19uYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gZ3Bpb19uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZ3Bpby1uYW5kIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3Bpb19uYW5kX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJHUElPIE5BTkQgZHJpdmVyLCDCqSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZncGlvX25hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGdwaW9fbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdwaW9fbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChncGlvX25hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChncGlvX25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTyBOQU5EIERyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmQ0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKQEAgLTAsMCArMSwxMDc3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggU2FzY2hhIEhhdWVyLCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJteGNfbmFuZCIKKworLyogQWRkcmVzc2VzIGZvciBORkMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5GQ19CVUZfU0laRQkJMHhFMDAKKyNkZWZpbmUgTkZDX0JVRl9BRERSCQkweEUwNAorI2RlZmluZSBORkNfRkxBU0hfQUREUgkJMHhFMDYKKyNkZWZpbmUgTkZDX0ZMQVNIX0NNRAkJMHhFMDgKKyNkZWZpbmUgTkZDX0NPTkZJRwkJMHhFMEEKKyNkZWZpbmUgTkZDX0VDQ19TVEFUVVNfUkVTVUxUCTB4RTBDCisjZGVmaW5lIE5GQ19SU0xUTUFJTl9BUkVBCTB4RTBFCisjZGVmaW5lIE5GQ19SU0xUU1BBUkVfQVJFQQkweEUxMAorI2RlZmluZSBORkNfV1JQUk9UCQkweEUxMgorI2RlZmluZSBORkNfVU5MT0NLU1RBUlRfQkxLQUREUgkweEUxNAorI2RlZmluZSBORkNfVU5MT0NLRU5EX0JMS0FERFIJMHhFMTYKKyNkZWZpbmUgTkZDX05GX1dSUFJTVAkJMHhFMTgKKyNkZWZpbmUgTkZDX0NPTkZJRzEJCTB4RTFBCisjZGVmaW5lIE5GQ19DT05GSUcyCQkweEUxQworCisvKiBBZGRyZXNzZXMgZm9yIE5GQyBSQU0gQlVGRkVSIE1haW4gYXJlYSAwICovCisjZGVmaW5lIE1BSU5fQVJFQTAJCTB4MDAwCisjZGVmaW5lIE1BSU5fQVJFQTEJCTB4MjAwCisjZGVmaW5lIE1BSU5fQVJFQTIJCTB4NDAwCisjZGVmaW5lIE1BSU5fQVJFQTMJCTB4NjAwCisKKy8qIEFkZHJlc3NlcyBmb3IgTkZDIFNQQVJFIEJVRkZFUiBTcGFyZSBhcmVhIDAgKi8KKyNkZWZpbmUgU1BBUkVfQVJFQTAJCTB4ODAwCisjZGVmaW5lIFNQQVJFX0FSRUExCQkweDgxMAorI2RlZmluZSBTUEFSRV9BUkVBMgkJMHg4MjAKKyNkZWZpbmUgU1BBUkVfQVJFQTMJCTB4ODMwCisKKy8qIFNldCBJTlQgdG8gMCwgRkNNRCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBDb21tYW5kIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfQ01EICAgICAgICAgICAgMHgxCisKKy8qIFNldCBJTlQgdG8gMCwgRkFERCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBBZGRyZXNzIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfQUREUiAgICAgICAgICAgMHgyCisKKy8qIFNldCBJTlQgdG8gMCwgRkRJIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIElucHV0IG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfSU5QVVQgICAgICAgICAgMHg0CisKKy8qIFNldCBJTlQgdG8gMCwgRkRPIHRvIDAwMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgRGF0YSBPdXRwdXQgb3BlcmF0aW9uICovCisjZGVmaW5lIE5GQ19PVVRQVVQgICAgICAgICAweDgKKworLyogU2V0IElOVCB0byAwLCBGRDAgdG8gMDEwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBSZWFkIElEIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfSUQgICAgICAgICAgICAgMHgxMAorCisvKiBTZXQgSU5UIHRvIDAsIEZETyB0byAxMDAsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIFJlYWQgU3RhdHVzIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfU1RBVFVTICAgICAgICAgMHgyMAorCisvKiBTZXQgSU5UIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlciBmb3IgUmVhZAorICogU3RhdHVzIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfSU5UICAgICAgICAgICAgMHg4MDAwCisKKyNkZWZpbmUgTkZDX1NQX0VOICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBORkNfRUNDX0VOICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIE5GQ19JTlRfTVNLICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgTkZDX0JJRyAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBORkNfUlNUICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIE5GQ19DRSAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgTkZDX09ORV9DWUNMRSAgICAgICAoMSA8PCA4KQorCitzdHJ1Y3QgbXhjX25hbmRfaG9zdCB7CisJc3RydWN0IG10ZF9pbmZvCQltdGQ7CisJc3RydWN0IG5hbmRfY2hpcAluYW5kOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCisJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwlpbnQJCQlzcGFyZV9vbmx5OworCWludAkJCXN0YXR1c19yZXF1ZXN0OworCWludAkJCXBhZ2VzaXplXzJrOworCXVpbnQxNl90CQljb2xfYWRkcjsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCWludAkJCWNsa19hY3Q7CisJaW50CQkJaXJxOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJaXJxX3dhaXRxOworfTsKKworLyogRGVmaW5lIGRlbGF5cyBpbiBtaWNyb3NlYyBmb3IgTkFORCBkZXZpY2Ugb3BlcmF0aW9ucyAqLworI2RlZmluZSBUUk9QX1VTX0RFTEFZICAgMjAwMAorLyogTWFjcm9zIHRvIGdldCBieXRlIGFuZCBiaXQgcG9zaXRpb25zIG9mIEVDQyAqLworI2RlZmluZSBDT0xQT1MoeCkgICgoeCkgPj4gMykKKyNkZWZpbmUgQklUUE9TKHgpICgoeCkgJiAweGYpCisKKy8qIERlZmluZSBzaW5nbGUgYml0IEVycm9yIHBvc2l0aW9ucyBpbiBNYWluICYgU3BhcmUgYXJlYSAqLworI2RlZmluZSBNQUlOX1NJTkdMRUJJVF9FUlJPUiAweDQKKyNkZWZpbmUgU1BBUkVfU0lOR0xFQklUX0VSUk9SIDB4MQorCisvKiBPT0IgcGxhY2VtZW50IGJsb2NrIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBlY2MgZ2VuZXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYl84ID0geworCS5lY2NieXRlcyA9IDUsCisJLmVjY3BvcyA9IHs2LCA3LCA4LCA5LCAxMH0sCisJLm9vYmZyZWUgPSB7ezAsIDV9LCB7MTEsIDV9LCB9Cit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfaHdfZWNjb29iXzE2ID0geworCS5lY2NieXRlcyA9IDUsCisJLmVjY3BvcyA9IHs2LCA3LCA4LCA5LCAxMH0sCisJLm9vYmZyZWUgPSB7ezAsIDZ9LCB7MTIsIDR9LCB9Cit9OworCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCitzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90IG14Y19uZmNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IGRldl9pZDsKKworCXVpbnQxNl90IHRtcDsKKworCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJdG1wIHw9IE5GQ19JTlRfTVNLOyAvKiBEaXNhYmxlIGludGVycnVwdCAqLworCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwl3YWtlX3VwKCZob3N0LT5pcnFfd2FpdHEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBvbGxzIHRoZSBOQU5ERkMgdG8gd2FpdCBmb3IgdGhlIGJhc2ljIG9wZXJhdGlvbiB0bworICogY29tcGxldGUgYnkgY2hlY2tpbmcgdGhlIElOVCBiaXQgb2YgY29uZmlnMiByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgd2FpdF9vcF9kb25lKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCBpbnQgbWF4X3JldHJpZXMsCisJCQkJdWludDE2X3QgcGFyYW0sIGludCB1c2VpcnEpCit7CisJdWludDMyX3QgdG1wOworCisJaWYgKHVzZWlycSkgeworCQlpZiAoKHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKSA9PSAwKSB7CisKKwkJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCQl0bXAgICY9IH5ORkNfSU5UX01TSzsJLyogRW5hYmxlIGludGVycnVwdCAqLworCQkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCQkJd2FpdF9ldmVudChob3N0LT5pcnFfd2FpdHEsCisJCQkJcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKSAmIE5GQ19JTlQpOworCisJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJdG1wICAmPSB+TkZDX0lOVDsKKwkJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAobWF4X3JldHJpZXMtLSA+IDApIHsKKwkJCWlmIChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgeworCQkJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisJCQkJdG1wICAmPSB+TkZDX0lOVDsKKwkJCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJCWJyZWFrOworCQkJfQorCQkJdWRlbGF5KDEpOworCQl9CisJCWlmIChtYXhfcmV0cmllcyA8PSAwKQorCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzKCVkKTogSU5UIG5vdCBzZXRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcGFyYW0pOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgdGhlIHNwZWNpZmllZCBjb21tYW5kIHRvIHRoZSBOQU5EIGRldmljZSBhbmQKKyAqIHdhaXRzIGZvciBjb21wbGV0aW9uLiAqLworc3RhdGljIHZvaWQgc2VuZF9jbWQoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQxNl90IGNtZCwgaW50IHVzZWlycSkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9jbWQoaG9zdCwgMHgleCwgJWQpXG4iLCBjbWQsIHVzZWlycSk7CisKKwl3cml0ZXcoY21kLCBob3N0LT5yZWdzICsgTkZDX0ZMQVNIX0NNRCk7CisJd3JpdGV3KE5GQ19DTUQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgY21kLCB1c2VpcnEpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIGFkZHJlc3MgKG9yIHBhcnRpYWwgYWRkcmVzcykgdG8gdGhlCisgKiBOQU5EIGRldmljZS4gVGhlIGFkZHJlc3MgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBmb3IKKyAqIGEgTkFORCBjb21tYW5kLiAqLworc3RhdGljIHZvaWQgc2VuZF9hZGRyKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBhZGRyLCBpbnQgaXNsYXN0KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX2FkZHIoaG9zdCwgMHgleCAlZClcbiIsIGFkZHIsIGlzbGFzdCk7CisKKwl3cml0ZXcoYWRkciwgaG9zdC0+cmVncyArIE5GQ19GTEFTSF9BRERSKTsKKwl3cml0ZXcoTkZDX0FERFIsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgYWRkciwgaXNsYXN0KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0aGUgTkFOREZDIHRvIGluaXRhdGUgdGhlIHRyYW5zZmVyCisgKiBvZiBkYXRhIGN1cnJlbnRseSBpbiB0aGUgTkFOREZDIFJBTSBidWZmZXIgdG8gdGhlIE5BTkQgZGV2aWNlLiAqLworc3RhdGljIHZvaWQgc2VuZF9wcm9nX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAorCQkJaW50IHNwYXJlX29ubHkpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfcHJvZ19wYWdlICglZClcbiIsIHNwYXJlX29ubHkpOworCisJLyogTkFOREZDIGJ1ZmZlciAwIGlzIHVzZWQgZm9yIHBhZ2UgcmVhZC93cml0ZSAqLworCXdyaXRldyhidWZfaWQsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogQ29uZmlndXJlIHNwYXJlIG9yIHBhZ2Urc3BhcmUgYWNjZXNzICovCisJaWYgKCFob3N0LT5wYWdlc2l6ZV8yaykgeworCQl1aW50MTZfdCBjb25maWcxID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJaWYgKHNwYXJlX29ubHkpCisJCQljb25maWcxIHw9IE5GQ19TUF9FTjsKKwkJZWxzZQorCQkJY29uZmlnMSAmPSB+KE5GQ19TUF9FTik7CisJCXdyaXRldyhjb25maWcxLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCXdyaXRldyhORkNfSU5QVVQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgc3BhcmVfb25seSwgdHJ1ZSk7Cit9CisKKy8qIFJlcXVlc3RzIE5BTkRGQyB0byBpbml0YXRlZCB0aGUgdHJhbnNmZXIgb2YgZGF0YSBmcm9tIHRoZQorICogTkFORCBkZXZpY2UgaW50byBpbiB0aGUgTkFOREZDIHJhbSBidWZmZXIuICovCitzdGF0aWMgdm9pZCBzZW5kX3JlYWRfcGFnZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgdWludDhfdCBidWZfaWQsCisJCWludCBzcGFyZV9vbmx5KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX3JlYWRfcGFnZSAoJWQpXG4iLCBzcGFyZV9vbmx5KTsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KKwl3cml0ZXcoYnVmX2lkLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKKworCS8qIENvbmZpZ3VyZSBzcGFyZSBvciBwYWdlK3NwYXJlIGFjY2VzcyAqLworCWlmICghaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJdWludDMyX3QgY29uZmlnMSA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCWlmIChzcGFyZV9vbmx5KQorCQkJY29uZmlnMSB8PSBORkNfU1BfRU47CisJCWVsc2UKKwkJCWNvbmZpZzEgJj0gfk5GQ19TUF9FTjsKKwkJd3JpdGV3KGNvbmZpZzEsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJfQorCisJd3JpdGV3KE5GQ19PVVRQVVQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgc3BhcmVfb25seSwgdHJ1ZSk7Cit9CisKKy8qIFJlcXVlc3QgdGhlIE5BTkRGQyB0byBwZXJmb3JtIGEgcmVhZCBvZiB0aGUgTkFORCBkZXZpY2UgSUQuICovCitzdGF0aWMgdm9pZCBzZW5kX3JlYWRfaWQoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9ICZob3N0LT5uYW5kOworCXVpbnQxNl90IHRtcDsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBkZXZpY2UgSUQgb3V0cHV0ICovCisJd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBSZWFkIElEIGludG8gbWFpbiBidWZmZXIgKi8KKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCAmPSB+TkZDX1NQX0VOOworCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwl3cml0ZXcoTkZDX0lELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIDAsIHRydWUpOworCisJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7CisJCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMDsKKwkJLyogY29tcHJlc3MgdGhlIElEIGluZm8gKi8KKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgMiksIG1haW5fYnVmICsgMSk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDQpLCBtYWluX2J1ZiArIDIpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyA2KSwgbWFpbl9idWYgKyAzKTsKKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgOCksIG1haW5fYnVmICsgNCk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDEwKSwgbWFpbl9idWYgKyA1KTsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdGhlIE5BTkRGQyB0byBwZXJmb3JtIGEgcmVhZCBvZiB0aGUKKyAqIE5BTkQgZGV2aWNlIHN0YXR1cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMuICovCitzdGF0aWMgdWludDE2X3QgZ2V0X2Rldl9zdGF0dXMoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QpCit7CisJdm9pZCBfX2lvbWVtICptYWluX2J1ZiA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUExOworCXVpbnQzMl90IHN0b3JlOworCXVpbnQxNl90IHJldCwgdG1wOworCS8qIElzc3VlIHN0YXR1cyByZXF1ZXN0IHRvIE5BTkQgZGV2aWNlICovCisKKwkvKiBzdG9yZSB0aGUgbWFpbiBhcmVhMSBmaXJzdCB3b3JkLCBsYXRlciBkbyByZWNvdmVyeSAqLworCXN0b3JlID0gcmVhZGwobWFpbl9idWYpOworCS8qIE5BTkRGQyBidWZmZXIgMSBpcyB1c2VkIGZvciBkZXZpY2Ugc3RhdHVzIHRvIHByZXZlbnQKKwkgKiBjb3JydXB0aW9uIG9mIHJlYWQvd3JpdGUgYnVmZmVyIG9uIHN0YXR1cyByZXF1ZXN0cy4gKi8KKwl3cml0ZXcoMSwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBSZWFkIHN0YXR1cyBpbnRvIG1haW4gYnVmZmVyICovCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgJj0gfk5GQ19TUF9FTjsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd3JpdGV3KE5GQ19TVEFUVVMsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgMCwgdHJ1ZSk7CisKKwkvKiBTdGF0dXMgaXMgcGxhY2VkIGluIGZpcnN0IHdvcmQgb2YgbWFpbiBidWZmZXIgKi8KKwkvKiBnZXQgc3RhdHVzLCB0aGVuIHJlY292ZXJ5IGFyZWEgMSBkYXRhICovCisJcmV0ID0gcmVhZHcobWFpbl9idWYpOworCXdyaXRlbChzdG9yZSwgbWFpbl9idWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBmdW5jdGlvbnMgaXMgdXNlZCBieSB1cHBlciBsYXllciB0byBjaGVja3MgaWYgZGV2aWNlIGlzIHJlYWR5ICovCitzdGF0aWMgaW50IG14Y19uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwkvKgorCSAqIE5GQyBoYW5kbGVzIFIvQiBpbnRlcm5hbGx5LiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24KKwkgKiBhbHdheXMgcmV0dXJucyBzdGF0dXMgYXMgcmVhZHkuCisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG14Y19uYW5kX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCit7CisJLyoKKwkgKiBJZiBIVyBFQ0MgaXMgZW5hYmxlZCwgd2UgdHVybiBpdCBvbiBkdXJpbmcgaW5pdC4gVGhlcmUgaXMKKwkgKiBubyBuZWVkIHRvIGVuYWJsZSBhZ2FpbiBoZXJlLgorCSAqLworfQorCitzdGF0aWMgaW50IG14Y19uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsCisJCQkJIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCisJLyoKKwkgKiAxLUJpdCBlcnJvcnMgYXJlIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkIGluIEhXLiAgTm8gbmVlZCBmb3IKKwkgKiBhZGRpdGlvbmFsIGNvcnJlY3Rpb24uICAyLUJpdCBlcnJvcnMgY2Fubm90IGJlIGNvcnJlY3RlZCBieQorCSAqIEhXIEVDQywgc28gd2UgbmVlZCB0byByZXR1cm4gZmFpbHVyZQorCSAqLworCXVpbnQxNl90IGVjY19zdGF0dXMgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0VDQ19TVEFUVVNfUkVTVUxUKTsKKworCWlmICgoKGVjY19zdGF0dXMgJiAweDMpID09IDIpIHx8ICgoZWNjX3N0YXR1cyA+PiAyKSA9PSAyKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiTVhDX05BTkQ6IEhXRUNDIHVuY29ycmVjdGFibGUgMi1iaXQgRUNDIGVycm9yXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Y19uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAorCQkJCSAgdV9jaGFyICplY2NfY29kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVfY2hhciBteGNfbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCXVpbnQ4X3QgcmV0ID0gMDsKKwl1aW50MTZfdCBjb2wsIHJkX3dvcmQ7CisJdWludDE2X3QgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMDsKKwl1aW50MTZfdCBfX2lvbWVtICpzcGFyZV9idWYgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTA7CisKKwkvKiBDaGVjayBmb3Igc3RhdHVzIHJlcXVlc3QgKi8KKwlpZiAoaG9zdC0+c3RhdHVzX3JlcXVlc3QpCisJCXJldHVybiBnZXRfZGV2X3N0YXR1cyhob3N0KSAmIDB4RkY7CisKKwkvKiBHZXQgY29sdW1uIGZvciAxNi1iaXQgYWNjZXNzICovCisJY29sID0gaG9zdC0+Y29sX2FkZHIgPj4gMTsKKworCS8qIElmIHdlIGFyZSBhY2Nlc3NpbmcgdGhlIHNwYXJlIHJlZ2lvbiAqLworCWlmIChob3N0LT5zcGFyZV9vbmx5KQorCQlyZF93b3JkID0gcmVhZHcoJnNwYXJlX2J1Zltjb2xdKTsKKwllbHNlCisJCXJkX3dvcmQgPSByZWFkdygmbWFpbl9idWZbY29sXSk7CisKKwkvKiBQaWNrIHVwcGVyL2xvd2VyIGJ5dGUgb2Ygd29yZCBmcm9tIFJBTSBidWZmZXIgKi8KKwlpZiAoaG9zdC0+Y29sX2FkZHIgJiAweDEpCisJCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhGRjsKKwllbHNlCisJCXJldCA9IHJkX3dvcmQgJiAweEZGOworCisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIrKzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBteGNfbmFuZF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCXVpbnQxNl90IGNvbCwgcmRfd29yZCwgcmV0OworCXVpbnQxNl90IF9faW9tZW0gKnA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF9yZWFkX3dvcmQoY29sID0gJWQpXG4iLCBob3N0LT5jb2xfYWRkcik7CisKKwljb2wgPSBob3N0LT5jb2xfYWRkcjsKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplKQorCQlwID0gKGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUEwKSArIChjb2wgPj4gMSk7CisJZWxzZQorCQlwID0gKGhvc3QtPnJlZ3MgKyBTUEFSRV9BUkVBMCkgKyAoKGNvbCAtIG10ZC0+d3JpdGVzaXplKSA+PiAxKTsKKworCWlmIChjb2wgJiAxKSB7CisJCXJkX3dvcmQgPSByZWFkdyhwKTsKKwkJcmV0ID0gKHJkX3dvcmQgPj4gOCkgJiAweGZmOworCQlyZF93b3JkID0gcmVhZHcoJnBbMV0pOworCQlyZXQgfD0gKHJkX3dvcmQgPDwgOCkgJiAweGZmMDA7CisKKwl9IGVsc2UKKwkJcmV0ID0gcmVhZHcocCk7CisKKwkvKiBVcGRhdGUgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlob3N0LT5jb2xfYWRkciA9IGNvbCArIDI7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBXcml0ZSBkYXRhIG9mIGxlbmd0aCBsZW4gdG8gYnVmZmVyIGJ1Zi4gVGhlIGRhdGEgdG8gYmUKKyAqIHdyaXR0ZW4gb24gTkFORCBGbGFzaCBpcyBmaXJzdCBjb3BpZWQgdG8gUkFNYnVmZmVyLiBBZnRlciB0aGUgRGF0YSBJbnB1dAorICogT3BlcmF0aW9uIGJ5IHRoZSBORkMsIHRoZSBkYXRhIGlzIHdyaXR0ZW4gdG8gTkFORCBGbGFzaCAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwlpbnQgbiwgY29sLCBpID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIm14Y19uYW5kX3dyaXRlX2J1Zihjb2wgPSAlZCwgbGVuID0gJWQpXG4iLCBob3N0LT5jb2xfYWRkciwKKwkgICAgICBsZW4pOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplIC0gY29sOworCW4gPSBtaW4obGVuLCBuKTsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIiVzOiVkOiBjb2wgPSAlZCwgbiA9ICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNvbCwgbik7CisKKwl3aGlsZSAobikgeworCQl2b2lkIF9faW9tZW0gKnA7CisKKwkJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplKQorCQkJcCA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUEwICsgKGNvbCAmIH4zKTsKKwkJZWxzZQorCQkJcCA9IGhvc3QtPnJlZ3MgKyBTUEFSRV9BUkVBMCAtCisJCQkJCQltdGQtPndyaXRlc2l6ZSArIChjb2wgJiB+Myk7CisKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiVkOiBwID0gJXBcbiIsIF9fZnVuY19fLAorCQkgICAgICBfX0xJTkVfXywgcCk7CisKKwkJaWYgKCgoY29sIHwgKGludCkmYnVmW2ldKSAmIDMpIHx8IG4gPCAxNikgeworCQkJdWludDMyX3QgZGF0YSA9IDA7CisKKwkJCWlmIChjb2wgJiAzIHx8IG4gPCA0KQorCQkJCWRhdGEgPSByZWFkbChwKTsKKworCQkJc3dpdGNoIChjb2wgJiAzKSB7CisJCQljYXNlIDA6CisJCQkJaWYgKG4pIHsKKwkJCQkJZGF0YSA9IChkYXRhICYgMHhmZmZmZmYwMCkgfAorCQkJCQkgICAgKGJ1ZltpKytdIDw8IDApOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMToKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmZmYwMGZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgOCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAyOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmYwMGZmZmYpIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAxNik7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAzOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4MDBmZmZmZmYpIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAyNCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJfQorCisJCQl3cml0ZWwoZGF0YSwgcCk7CisJCX0gZWxzZSB7CisJCQlpbnQgbSA9IG10ZC0+d3JpdGVzaXplIC0gY29sOworCisJCQlpZiAoY29sID49IG10ZC0+d3JpdGVzaXplKQorCQkJCW0gKz0gbXRkLT5vb2JzaXplOworCisJCQltID0gbWluKG4sIG0pICYgfjM7CisKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJCQkgICAgICAiJXM6JWQ6IG4gPSAlZCwgbSA9ICVkLCBpID0gJWQsIGNvbCA9ICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sICBfX0xJTkVfXywgbiwgbSwgaSwgY29sKTsKKworCQkJbWVtY3B5KHAsICZidWZbaV0sIG0pOworCQkJY29sICs9IG07CisJCQlpICs9IG07CisJCQluIC09IG07CisJCX0KKwl9CisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2w7Cit9CisKKy8qIFJlYWQgdGhlIGRhdGEgYnVmZmVyIGZyb20gdGhlIE5BTkQgRmxhc2guIFRvIHJlYWQgdGhlIGRhdGEgZnJvbSBOQU5ECisgKiBGbGFzaCBmaXJzdCB0aGUgZGF0YSBvdXRwdXQgY3ljbGUgaXMgaW5pdGlhdGVkIGJ5IHRoZSBORkMsIHdoaWNoIGNvcGllcworICogdGhlIGRhdGEgdG8gUkFNYnVmZmVyLiBUaGlzIGRhdGEgb2YgbGVuZ3RoIGxlbiBpcyB0aGVuIGNvcGllZCB0byBidWZmZXIgYnVmLgorICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCWludCBuLCBjb2wsIGkgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfcmVhZF9idWYoY29sID0gJWQsIGxlbiA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIsIGxlbik7CisKKwljb2wgPSBob3N0LT5jb2xfYWRkcjsKKworCS8qIEFkanVzdCBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSAmJiBob3N0LT5zcGFyZV9vbmx5KQorCQljb2wgKz0gbXRkLT53cml0ZXNpemU7CisKKwluID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUgLSBjb2w7CisJbiA9IG1pbihsZW4sIG4pOworCisJd2hpbGUgKG4pIHsKKwkJdm9pZCBfX2lvbWVtICpwOworCisJCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJCXAgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMCArIChjb2wgJiB+Myk7CisJCWVsc2UKKwkJCXAgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTAgLQorCQkJCQltdGQtPndyaXRlc2l6ZSArIChjb2wgJiB+Myk7CisKKwkJaWYgKCgoY29sIHwgKGludCkmYnVmW2ldKSAmIDMpIHx8IG4gPCAxNikgeworCQkJdWludDMyX3QgZGF0YTsKKworCQkJZGF0YSA9IHJlYWRsKHApOworCQkJc3dpdGNoIChjb2wgJiAzKSB7CisJCQljYXNlIDA6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMToKKwkJCQlpZiAobikgeworCQkJCQlidWZbaSsrXSA9ICh1aW50OF90KSAoZGF0YSA+PiA4KTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDI6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gMTYpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMzoKKwkJCQlpZiAobikgeworCQkJCQlidWZbaSsrXSA9ICh1aW50OF90KSAoZGF0YSA+PiAyNCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaW50IG0gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKKworCQkJaWYgKGNvbCA+PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQltICs9IG10ZC0+b29ic2l6ZTsKKworCQkJbSA9IG1pbihuLCBtKSAmIH4zOworCQkJbWVtY3B5KCZidWZbaV0sIHAsIG0pOworCQkJY29sICs9IG07CisJCQlpICs9IG07CisJCQluIC09IG07CisJCX0KKwl9CisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2w7CisKK30KKworLyogVXNlZCBieSB0aGUgdXBwZXIgbGF5ZXIgdG8gdmVyaWZ5IHRoZSBkYXRhIGluIE5BTkQgRmxhc2gKKyAqIHdpdGggdGhlIGRhdGEgaW4gdGhlIGJ1Zi4gKi8KK3N0YXRpYyBpbnQgbXhjX25hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHVwcGVyIGxheWVyIGZvciBzZWxlY3QgYW5kCisgKiBkZXNlbGVjdCBvZiB0aGUgTkFORCBjaGlwICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCisjaWZkZWYgQ09ORklHX01URF9OQU5EX01YQ19GT1JDRV9DRQorCWlmIChjaGlwID4gMCkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiRVJST1I6ICBJbGxlZ2FsIGNoaXAgc2VsZWN0IChjaGlwID0gJWQpXG4iLCBjaGlwKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjaGlwID09IC0xKSB7CisJCXdyaXRldyhyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpICYgfk5GQ19DRSwKKwkJCQlob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQlyZXR1cm47CisJfQorCisJd3JpdGV3KHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSkgfCBORkNfQ0UsCisJCQlob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworI2VuZGlmCisKKwlzd2l0Y2ggKGNoaXApIHsKKwljYXNlIC0xOgorCQkvKiBEaXNhYmxlIHRoZSBORkMgY2xvY2sgKi8KKwkJaWYgKGhvc3QtPmNsa19hY3QpIHsKKwkJCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CisJCQlob3N0LT5jbGtfYWN0ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIDA6CisJCS8qIEVuYWJsZSB0aGUgTkZDIGNsb2NrICovCisJCWlmICghaG9zdC0+Y2xrX2FjdCkgeworCQkJY2xrX2VuYWJsZShob3N0LT5jbGspOworCQkJaG9zdC0+Y2xrX2FjdCA9IDE7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIFVzZWQgYnkgdGhlIHVwcGVyIGxheWVyIHRvIHdyaXRlIGNvbW1hbmQgdG8gTkFORCBGbGFzaCBmb3IKKyAqIGRpZmZlcmVudCBvcGVyYXRpb25zIHRvIGJlIGNhcnJpZWQgb3V0IG9uIE5BTkQgRmxhc2ggKi8KK3N0YXRpYyB2b2lkIG14Y19uYW5kX2NvbW1hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsCisJCQkJaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJaW50IHVzZWlycSA9IHRydWU7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF9jb21tYW5kIChjbWQgPSAweCV4LCBjb2wgPSAweCV4LCBwYWdlID0gMHgleClcbiIsCisJICAgICAgY29tbWFuZCwgY29sdW1uLCBwYWdlX2FkZHIpOworCisJLyogUmVzZXQgY29tbWFuZCBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWhvc3QtPnN0YXR1c19yZXF1ZXN0ID0gZmFsc2U7CisKKwkvKiBDb21tYW5kIHByZS1wcm9jZXNzaW5nIHN0ZXAgKi8KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlob3N0LT5jb2xfYWRkciA9IDA7CisJCWhvc3QtPnN0YXR1c19yZXF1ZXN0ID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQUQwOgorCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKwkJaG9zdC0+c3BhcmVfb25seSA9IGZhbHNlOworCQl1c2VpcnEgPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWhvc3QtPmNvbF9hZGRyID0gY29sdW1uOworCQlob3N0LT5zcGFyZV9vbmx5ID0gdHJ1ZTsKKwkJdXNlaXJxID0gZmFsc2U7CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsgLyogb25seSBSRUFEMCBpcyB2YWxpZCAqLworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU0VRSU46CisJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKKwkJCS8qCisJCQkgKiBGSVhNRTogYmVmb3JlIHNlbmQgU0VRSU4gY29tbWFuZCBmb3Igd3JpdGUgT09CLAorCQkJICogV2UgbXVzdCByZWFkIG9uZSBwYWdlIG91dC4KKwkJCSAqIEZvciBLOUYxR1hYIGhhcyBubyBSRUFEMSBjb21tYW5kIHRvIHNldCBjdXJyZW50IEhXCisJCQkgKiBwb2ludGVyIHRvIHNwYXJlIGFyZWEsIHdlIG11c3Qgd3JpdGUgdGhlIHdob2xlIHBhZ2UKKwkJCSAqIGluY2x1ZGluZyBPT0IgdG9nZXRoZXIuCisJCQkgKi8KKwkJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCQkvKiBjYWxsIG91cnNlbGYgdG8gcmVhZCBhIHBhZ2UgKi8KKwkJCQlteGNfbmFuZF9jb21tYW5kKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsCisJCQkJCQlwYWdlX2FkZHIpOworCisJCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbiAtIG10ZC0+d3JpdGVzaXplOworCQkJaG9zdC0+c3BhcmVfb25seSA9IHRydWU7CisKKwkJCS8qIFNldCBwcm9ncmFtIHBvaW50ZXIgdG8gc3BhcmUgcmVnaW9uICovCisJCQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKQorCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQURPT0IsIGZhbHNlKTsKKwkJfSBlbHNlIHsKKwkJCWhvc3QtPnNwYXJlX29ubHkgPSBmYWxzZTsKKwkJCWhvc3QtPmNvbF9hZGRyID0gY29sdW1uOworCisJCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHBhZ2Ugc3RhcnQgKi8KKwkJCWlmICghaG9zdC0+cGFnZXNpemVfMmspCisJCQkJc2VuZF9jbWQoaG9zdCwgTkFORF9DTURfUkVBRDAsIGZhbHNlKTsKKwkJfQorCQl1c2VpcnEgPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlzZW5kX3Byb2dfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKworCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJCS8qIGRhdGEgaW4gNCBhcmVhcyBkYXRhcyAqLworCQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMSwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3Byb2dfcGFnZShob3N0LCAyLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcHJvZ19wYWdlKGhvc3QsIDMsIGhvc3QtPnNwYXJlX29ubHkpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworCS8qIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLiAqLworCXNlbmRfY21kKGhvc3QsIGNvbW1hbmQsIHVzZWlycSk7CisKKwkvKiBXcml0ZSBvdXQgY29sdW1uIGFkZHJlc3MsIGlmIG5lY2Vzc2FyeSAqLworCWlmIChjb2x1bW4gIT0gLTEpIHsKKwkJLyoKKwkJICogTVhDIE5BTkRGQyBjYW4gb25seSBwZXJmb3JtIGZ1bGwgcGFnZStzcGFyZSBvcgorCQkgKiBzcGFyZS1vbmx5IHJlYWQvd3JpdGUuICBXaGVuIHRoZSB1cHBlciBsYXllcnMKKwkJICogbGF5ZXJzIHBlcmZvcm0gYSByZWFkL3dyaXRlIGJ1ZiBvcGVyYXRpb24sCisJCSAqIHdlIHdpbGwgdXNlZCB0aGUgc2F2ZWQgY29sdW1uIGFkcmVzcyB0byBpbmRleCBpbnRvCisJCSAqIHRoZSBmdWxsIHBhZ2UuCisJCSAqLworCQlzZW5kX2FkZHIoaG9zdCwgMCwgcGFnZV9hZGRyID09IC0xKTsKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKQorCQkJLyogYW5vdGhlciBjb2wgYWRkciBjeWNsZSBmb3IgMmsgcGFnZSAqLworCQkJc2VuZF9hZGRyKGhvc3QsIDAsIGZhbHNlKTsKKwl9CisKKwkvKiBXcml0ZSBvdXQgcGFnZSBhZGRyZXNzLCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocGFnZV9hZGRyICE9IC0xKSB7CisJCS8qIHBhZGRyXzAgLSBwX2FkZHJfNyAqLworCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciAmIDB4ZmYpLCBmYWxzZSk7CisKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4RkYsIGZhbHNlKTsKKwkJCWlmIChtdGQtPnNpemUgPj0gMHg0MDAwMDAwMCkKKwkJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGhpZ2hlciBkZW5zaXR5IGRldmljZXMgKi8KKwkJCWlmIChtdGQtPnNpemUgPj0gMHg0MDAwMDAwKSB7CisJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCBmYWxzZSk7CisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CisJCQl9IGVsc2UKKwkJCQkvKiBwYWRkcl84IC0gcGFkZHJfMTUgKi8KKwkJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYsIHRydWUpOworCQl9CisJfQorCisJLyogQ29tbWFuZCBwb3N0LXByb2Nlc3Npbmcgc3RlcCAqLworCXN3aXRjaCAoY29tbWFuZCkgeworCisJY2FzZSBOQU5EX0NNRF9SRVNFVDoKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQkvKiBzZW5kIHJlYWQgY29uZmlybSBjb21tYW5kICovCisJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFEU1RBUlQsIHRydWUpOworCQkJLyogcmVhZCBmb3IgZWFjaCBBUkVBICovCisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcmVhZF9wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJfSBlbHNlCisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQURJRDoKKwkJc2VuZF9yZWFkX2lkKGhvc3QpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgbXhjbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVpbnQxNl90IHRtcDsKKwlpbnQgZXJyID0gMCwgbnJfcGFydHMgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGNfbmFuZF9ob3N0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhvc3QtPmRldiA9ICZwZGV2LT5kZXY7CisJLyogc3RydWN0dXJlcyBtdXN0IGJlIGxpbmtlZCAqLworCXRoaXMgPSAmaG9zdC0+bmFuZDsKKwltdGQgPSAmaG9zdC0+bXRkOworCW10ZC0+cHJpdiA9IHRoaXM7CisJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyogNTAgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCisJdGhpcy0+Y2hpcF9kZWxheSA9IDU7CisKKwl0aGlzLT5wcml2ID0gaG9zdDsKKwl0aGlzLT5kZXZfcmVhZHkgPSBteGNfbmFuZF9kZXZfcmVhZHk7CisJdGhpcy0+Y21kZnVuYyA9IG14Y19uYW5kX2NvbW1hbmQ7CisJdGhpcy0+c2VsZWN0X2NoaXAgPSBteGNfbmFuZF9zZWxlY3RfY2hpcDsKKwl0aGlzLT5yZWFkX2J5dGUgPSBteGNfbmFuZF9yZWFkX2J5dGU7CisJdGhpcy0+cmVhZF93b3JkID0gbXhjX25hbmRfcmVhZF93b3JkOworCXRoaXMtPndyaXRlX2J1ZiA9IG14Y19uYW5kX3dyaXRlX2J1ZjsKKwl0aGlzLT5yZWFkX2J1ZiA9IG14Y19uYW5kX3JlYWRfYnVmOworCXRoaXMtPnZlcmlmeV9idWYgPSBteGNfbmFuZF92ZXJpZnlfYnVmOworCisJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibmZjX2NsayIpOworCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkKKwkJZ290byBlY2xrOworCisJY2xrX2VuYWJsZShob3N0LT5jbGspOworCWhvc3QtPmNsa19hY3QgPSAxOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVyZXM7CisJfQorCisJaG9zdC0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFob3N0LT5yZWdzKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJlczsKKwl9CisKKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCB8PSBORkNfSU5UX01TSzsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+aXJxX3dhaXRxKTsKKworCWhvc3QtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIG14Y19uZmNfaXJxLCAwLCAibXhjX25kIiwgaG9zdCk7CisJaWYgKGVycikKKwkJZ290byBlaXJxOworCisJaWYgKHBkYXRhLT5od19lY2MpIHsKKwkJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IG14Y19uYW5kX2NhbGN1bGF0ZV9lY2M7CisJCXRoaXMtPmVjYy5od2N0bCA9IG14Y19uYW5kX2VuYWJsZV9od2VjYzsKKwkJdGhpcy0+ZWNjLmNvcnJlY3QgPSBteGNfbmFuZF9jb3JyZWN0X2RhdGE7CisJCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CisJCXRoaXMtPmVjYy5zaXplID0gNTEyOworCQl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7CisJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCXRtcCB8PSBORkNfRUNDX0VOOworCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0gZWxzZSB7CisJCXRoaXMtPmVjYy5zaXplID0gNTEyOworCQl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7CisJCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKwkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJdG1wICY9IH5ORkNfRUNDX0VOOworCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCS8qIFJlc2V0IE5BTkQgKi8KKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CisKKwkvKiBwcmVzZXQgb3BlcmF0aW9uICovCisJLyogVW5sb2NrIHRoZSBpbnRlcm5hbCBSQU0gQnVmZmVyICovCisJd3JpdGV3KDB4MiwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcpOworCisJLyogQmxvY2tzIHRvIGJlIHVubG9ja2VkICovCisJd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19VTkxPQ0tTVEFSVF9CTEtBRERSKTsKKwl3cml0ZXcoMHg0MDAwLCBob3N0LT5yZWdzICsgTkZDX1VOTE9DS0VORF9CTEtBRERSKTsKKworCS8qIFVubG9jayBCbG9jayBDb21tYW5kIGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlICovCisJd3JpdGV3KDB4NCwgaG9zdC0+cmVncyArIE5GQ19XUlBST1QpOworCisJLyogTkFORCBidXMgd2lkdGggZGV0ZXJtaW5lcyBhY2Nlc3MgZnVudGlvbnMgdXNlZCBieSB1cHBlciBsYXllciAqLworCWlmIChwZGF0YS0+d2lkdGggPT0gMikgeworCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CisJCXRoaXMtPmVjYy5sYXlvdXQgPSAmbmFuZF9od19lY2Nvb2JfMTY7CisJfQorCisJaG9zdC0+cGFnZXNpemVfMmsgPSAwOworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2NhbihtdGQsIDEpKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsCisJCSAgICAgICJNWENfTkQ6IFVuYWJsZSB0byBmaW5kIGFueSBOQU5EIGRldmljZS5cbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXNjYW47CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlucl9wYXJ0cyA9CisJICAgIHBhcnNlX210ZF9wYXJ0aXRpb25zKG10ZCwgcGFydF9wcm9iZXMsICZob3N0LT5wYXJ0cywgMCk7CisJaWYgKG5yX3BhcnRzID4gMCkKKwkJYWRkX210ZF9wYXJ0aXRpb25zKG10ZCwgaG9zdC0+cGFydHMsIG5yX3BhcnRzKTsKKwllbHNlCisjZW5kaWYKKwl7CisJCXByX2luZm8oIlJlZ2lzdGVyaW5nICVzIGFzIHdob2xlIGRldmljZVxuIiwgbXRkLT5uYW1lKTsKKwkJYWRkX210ZF9kZXZpY2UobXRkKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKKworCXJldHVybiAwOworCitlc2NhbjoKKwlmcmVlX2lycShob3N0LT5pcnEsIE5VTEwpOworZWlycToKKwlpb3VubWFwKGhvc3QtPnJlZ3MpOworZXJlczoKKwljbGtfcHV0KGhvc3QtPmNsayk7CitlY2xrOgorCWtmcmVlKGhvc3QpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXhjbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19wdXQoaG9zdC0+Y2xrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJbmFuZF9yZWxlYXNlKCZob3N0LT5tdGQpOworCWZyZWVfaXJxKGhvc3QtPmlycSwgTlVMTCk7CisJaW91bm1hcChob3N0LT5yZWdzKTsKKwlrZnJlZShob3N0KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG14Y25kX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBtdGRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgc3VzcGVuZFxuIik7CisJaWYgKGluZm8pCisJCXJldCA9IGluZm8tPnN1c3BlbmQoaW5mbyk7CisKKwkvKiBEaXNhYmxlIHRoZSBORkMgY2xvY2sgKi8KKwljbGtfZGlzYWJsZShuZmNfY2xrKTsJLyogRklYTUUgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXhjbmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10ZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldCA9IDA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiTVhDX05EIDogTkFORCByZXN1bWVcbiIpOworCS8qIEVuYWJsZSB0aGUgTkZDIGNsb2NrICovCisJY2xrX2VuYWJsZShuZmNfY2xrKTsJLyogRklYTUUgKi8KKworCWlmIChpbmZvKQorCQlpbmZvLT5yZXN1bWUoaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZWxzZQorIyBkZWZpbmUgbXhjbmRfc3VzcGVuZCAgIE5VTEwKKyMgZGVmaW5lIG14Y25kX3Jlc3VtZSAgICBOVUxMCisjZW5kaWYJCQkJLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14Y25kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICB9LAorCS5yZW1vdmUgPSBfX2V4aXRfcChteGNuZF9yZW1vdmUpLAorCS5zdXNwZW5kID0gbXhjbmRfc3VzcGVuZCwKKwkucmVzdW1lID0gbXhjbmRfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhjX25kX2luaXQodm9pZCkKK3sKKwkvKiBSZWdpc3RlciB0aGUgZGV2aWNlIGRyaXZlciBzdHJ1Y3R1cmUuICovCisJcHJfaW5mbygiTVhDIE1URCBuYW5kIERyaXZlclxuIik7CisJaWYgKHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXhjbmRfZHJpdmVyLCBteGNuZF9wcm9iZSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RlciBmYWlsZWQgZm9yIG14Y25kX2RyaXZlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14Y19uZF9jbGVhbnVwKHZvaWQpCit7CisJLyogVW5yZWdpc3RlciB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteGNuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChteGNfbmRfaW5pdCk7Cittb2R1bGVfZXhpdChteGNfbmRfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1YQyBOQU5EIE1URCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IGQxMTI5YmEuLjBhOWM5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtODAxLDkgKzgwMSw5IEBACiAgKiBuYW5kX3JlYWRfc3VicGFnZSAtIFtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgc3ViLXBhZ2UgcmVhZCBmdW5jdGlvbgogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCi0gKiBAZGF0YW9mcwlvZmZzZXQgb2YgcmVxdWVzdGVkIGRhdGEgd2l0aGluIHRoZSBwYWdlCi0gKiBAcmVhZGxlbglkYXRhIGxlbmd0aAotICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQGRhdGFfb2ZmczoJb2Zmc2V0IG9mIHJlcXVlc3RlZCBkYXRhIHdpdGhpbiB0aGUgcGFnZQorICogQHJlYWRsZW46CWRhdGEgbGVuZ3RoCisgKiBAYnVmcG9pOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3N1YnBhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQzMl90IGRhdGFfb2ZmcywgdWludDMyX3QgcmVhZGxlbiwgdWludDhfdCAqYnVmcG9pKQogewpAQCAtMjA0Miw3ICsyMDQyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwogCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX0VSQVNJTkcpOwpAQCAtMjMxOCw2ICsyMzE4LDEyIEBACiAJLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KIAljaGlwLT5zZWxlY3RfY2hpcChtdGQsIDApOwogCisJLyoKKwkgKiBSZXNldCB0aGUgY2hpcCwgcmVxdWlyZWQgYnkgc29tZSBjaGlwcyAoZS5nLiBNaWNyb24gTVQyOUZ4R3h4eHh4KQorCSAqIGFmdGVyIHBvd2VyLXVwCisJICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCiAJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KIAljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7CiAKQEAgLTI0ODgsNiArMjQ5NCw4IEBACiAJLyogQ2hlY2sgZm9yIGEgY2hpcCBhcnJheSAqLwogCWZvciAoaSA9IDE7IGkgPCBtYXhjaGlwczsgaSsrKSB7CiAJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgaSk7CisJCS8qIFNlZSBjb21tZW50IGluIG5hbmRfZ2V0X2ZsYXNoX3R5cGUgZm9yIHJlc2V0ICovCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKIAkJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KIAkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwogCQkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCmluZGV4IDkxOGE4MDYuLjg2ODE0N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKQEAgLTEsMTMgKzEsMTggQEAKIC8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFsZ29yaXRobSBmcm9tIFRvc2hpYmEgdGhhdCBkZXRlY3RzIGFuZAotICogY29ycmVjdHMgMSBiaXQgZXJyb3JzIGluIGEgMjU2IGJ5dGUgYmxvY2sgb2YgZGF0YS4KKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbiBFQ0MgYWxnb3JpdGhtIHRoYXQgZGV0ZWN0cyBhbmQgY29ycmVjdHMgMSBiaXQKKyAqIGVycm9ycyBpbiBhIDI1NiBieXRlIGJsb2NrIG9mIGRhdGEuCiAgKgogICogZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBUb3NoaWJhIEFtZXJpY2EgRWxlY3Ryb25pY3MgQ29tcG9uZW50cywgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDggS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOVi4KKyAqICAgICAgICAgICAgICAgICAgQXV0aG9yOiBGcmFucyBNZXVsZW5icm9la3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiBDb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBwcmV2aW91cyBFQ0MgaW1wbGVtZW50YXRpb24gd2hpY2ggd2FzIHdyaXR0ZW4gYnk6CisgKiAgIFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQorICogICBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKKyAqCisgKiBJbmZvcm1hdGlvbiBvbiBob3cgdGhpcyBhbGdvcml0aG0gd29ya3MgYW5kIGhvdyBpdCB3YXMgZGV2ZWxvcGVkCisgKiBjYW4gYmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0CiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjMsMTc0ICsyOCw0NzUgQEAKICAqIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCi0gKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlCi0gKiBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoZXNlIGZpbGVzLCBvciB5b3UgY29tcGlsZSB0aGVzZQotICogZmlsZXMgYW5kIGxpbmsgdGhlbSB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoZXNlCi0gKiBmaWxlcywgdGhlc2UgZmlsZXMgZG8gbm90IGJ5IHRoZW1zZWx2ZXMgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlCi0gKiBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yCi0gKiB0aGVzZSBmaWxlcyBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKQotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgotICogdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogICovCiAKKy8qCisgKiBUaGUgU1RBTkRBTE9ORSBtYWNybyBpcyB1c2VmdWwgd2hlbiBydW5uaW5nIHRoZSBjb2RlIG91dHNpZGUgdGhlIGtlcm5lbAorICogZS5nLiB3aGVuIHJ1bm5pbmcgdGhlIGNvZGUgaW4gYSB0ZXN0YmVkIG9yIGEgYmVuY2htYXJrIHByb2dyYW0uCisgKiBXaGVuIFNUQU5EQUxPTkUgaXMgdXNlZCwgdGhlIG1vZHVsZSByZWxhdGVkIG1hY3JvcyBhcmUgY29tbWVudGVkIG91dAorICogYXMgd2VsbCBhcyB0aGUgbGludXggaW5jbHVkZSBmaWxlcy4KKyAqIEluc3RlYWQgYSBwcml2YXRlIGRlZmluaXRpb24gb2YgbXRkX2luZm8gaXMgZ2l2ZW4gdG8gc2F0aXNmeSB0aGUgY29tcGlsZXIKKyAqICh0aGUgY29kZSBkb2VzIG5vdCB1c2UgbXRkX2luZm8sIHNvIHRoZSBjb2RlIGRvZXMgbm90IGNhcmUpCisgKi8KKyNpZm5kZWYgU1RBTkRBTE9ORQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3N0cnVjdCBtdGRfaW5mbzsKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTCh4KSAgLyogeCAqLworCisjZGVmaW5lIE1PRFVMRV9MSUNFTlNFKHgpCS8qIHggKi8KKyNkZWZpbmUgTU9EVUxFX0FVVEhPUih4KQkvKiB4ICovCisjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTih4KQkvKiB4ICovCisKKyNkZWZpbmUgcHJpbnRrIHByaW50ZgorI2RlZmluZSBLRVJOX0VSUgkJIiIKKyNlbmRpZgogCiAvKgotICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eQorICogaW52cGFyaXR5IGlzIGEgMjU2IGJ5dGUgdGFibGUgdGhhdCBjb250YWlucyB0aGUgb2RkIHBhcml0eQorICogZm9yIGVhY2ggYnl0ZS4gU28gaWYgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgYnl0ZSBpcyBldmVuLAorICogdGhlIGFycmF5IGVsZW1lbnQgaXMgMSwgYW5kIHdoZW4gdGhlIG51bWJlciBvZiBiaXRzIGlzIG9kZAorICogdGhlIGFycmF5IGVsZWVtbnQgaXMgMC4KICAqLwotc3RhdGljIGNvbnN0IHVfY2hhciBuYW5kX2VjY19wcmVjYWxjX3RhYmxlW10gPSB7Ci0JMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCi0JMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAotCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCi0JMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCi0JMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAotCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCi0JMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAotCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCi0JMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMAorc3RhdGljIGNvbnN0IGNoYXIgaW52cGFyaXR5WzI1Nl0gPSB7CisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMQorfTsKKworLyoKKyAqIGJpdHNwZXJieXRlIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgYnl0ZQorICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcgYW5kIHJlcGFpcmluZyBwYXJpdHkKKyAqIChhIHByZWNhbGN1bGF0ZWQgdmFsdWUgc2xpZ2h0bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2UpCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGJpdHNwZXJieXRlWzI1Nl0gPSB7CisJMCwgMSwgMSwgMiwgMSwgMiwgMiwgMywgMSwgMiwgMiwgMywgMiwgMywgMywgNCwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCisJNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywgNSwgNiwgNiwgNywgNiwgNywgNywgOCwKK307CisKKy8qCisgKiBhZGRyZXNzYml0cyBpcyBhIGxvb2t1cCB0YWJsZSB0byBmaWx0ZXIgb3V0IHRoZSBiaXRzIGZyb20gdGhlIHhvci1lZAorICogZWNjIGRhdGEgdGhhdCBpZGVudGlmeSB0aGUgZmF1bHR5IGxvY2F0aW9uLgorICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHJlcGFpcmluZyBwYXJpdHkKKyAqIHNlZSB0aGUgY29tbWVudHMgaW4gbmFuZF9jb3JyZWN0X2RhdGEgZm9yIG1vcmUgZGV0YWlscworICovCitzdGF0aWMgY29uc3QgY2hhciBhZGRyZXNzYml0c1syNTZdID0geworCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBhLCAweDBiLCAweDBiLAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDBjLCAweDBjLCAweDBkLCAweDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZgogfTsKIAogLyoqCi0gKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzLWJ5dGUgRUNDIGZvciAyNTYtYnl0ZSBibG9jaworICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LzUxMi1ieXRlCisgKgkJCSBibG9jawogICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQotICogQGRhdDoJcmF3IGRhdGEKLSAqIEBlY2NfY29kZToJYnVmZmVyIGZvciBFQ0MKKyAqIEBidWY6CWlucHV0IGJ1ZmZlciB3aXRoIHJhdyBkYXRhCisgKiBAY29kZToJb3V0cHV0IGJ1ZmZlciB3aXRoIEVDQwogICovCi1pbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKLQkJICAgICAgIHVfY2hhciAqZWNjX2NvZGUpCitpbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjb2RlKQogewotCXVpbnQ4X3QgaWR4LCByZWcxLCByZWcyLCByZWczLCB0bXAxLCB0bXAyOwogCWludCBpOworCWNvbnN0IHVpbnQzMl90ICpicCA9ICh1aW50MzJfdCAqKWJ1ZjsKKwkvKiAyNTYgb3IgNTEyIGJ5dGVzL2VjYyAgKi8KKwljb25zdCB1aW50MzJfdCBlY2NzaXplX211bHQgPQorCQkJKCgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPmVjYy5zaXplKSA+PiA4OworCXVpbnQzMl90IGN1cjsJCS8qIGN1cnJlbnQgdmFsdWUgaW4gYnVmZmVyICovCisJLyogcnAwLi5ycDE1Li5ycDE3IGFyZSB0aGUgdmFyaW91cyBhY2N1bXVsYXRlZCBwYXJpdGllcyAocGVyIGJ5dGUpICovCisJdWludDMyX3QgcnAwLCBycDEsIHJwMiwgcnAzLCBycDQsIHJwNSwgcnA2LCBycDc7CisJdWludDMyX3QgcnA4LCBycDksIHJwMTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTUsIHJwMTY7CisJdWludDMyX3QgdW5pbml0aWFsaXplZF92YXIocnAxNyk7CS8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl1aW50MzJfdCBwYXI7CQkvKiB0aGUgY3VtdWxhdGl2ZSBwYXJpdHkgZm9yIGFsbCBkYXRhICovCisJdWludDMyX3QgdG1wcGFyOwkvKiB0aGUgY3VtdWxhdGl2ZSBwYXJpdHkgZm9yIHRoaXMgaXRlcmF0aW9uOworCQkJCSAgIGZvciBycDEyLCBycDE0IGFuZCBycDE2IGF0IHRoZSBlbmQgb2YgdGhlCisJCQkJICAgbG9vcCAqLwogCi0JLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi8KLQlyZWcxID0gcmVnMiA9IHJlZzMgPSAwOworCXBhciA9IDA7CisJcnA0ID0gMDsKKwlycDYgPSAwOworCXJwOCA9IDA7CisJcnAxMCA9IDA7CisJcnAxMiA9IDA7CisJcnAxNCA9IDA7CisJcnAxNiA9IDA7CiAKLQkvKiBCdWlsZCB1cCBjb2x1bW4gcGFyaXR5ICovCi0JZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJLyogR2V0IENQMCAtIENQNSBmcm9tIHRhYmxlICovCi0JCWlkeCA9IG5hbmRfZWNjX3ByZWNhbGNfdGFibGVbKmRhdCsrXTsKLQkJcmVnMSBePSAoaWR4ICYgMHgzZik7CisJLyoKKwkgKiBUaGUgbG9vcCBpcyB1bnJvbGxlZCBhIG51bWJlciBvZiB0aW1lczsKKwkgKiBUaGlzIGF2b2lkcyBpZiBzdGF0ZW1lbnRzIHRvIGRlY2lkZSBvbiB3aGljaCBycCB2YWx1ZSB0byB1cGRhdGUKKwkgKiBBbHNvIHdlIHByb2Nlc3MgdGhlIGRhdGEgYnkgbG9uZ3dvcmRzLgorCSAqIE5vdGU6IHBhc3NpbmcgdW5hbGlnbmVkIGRhdGEgbWlnaHQgZ2l2ZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBidWZmZXJzIGFyZSBhbGlnbmVkLgorCSAqIHRtcHBhciBpcyB0aGUgY3VtdWxhdGl2ZSBzdW0gb2YgdGhpcyBpdGVyYXRpb24uCisJICogbmVlZGVkIGZvciBjYWxjdWxhdGluZyBycDEyLCBycDE0LCBycDE2IGFuZCBwYXIKKwkgKiBhbHNvIHVzZWQgYXMgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBmb3IgcnA2LCBycDggYW5kIHJwMTAKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZWNjc2l6ZV9tdWx0IDw8IDI7IGkrKykgeworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyID0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IHRtcHBhcjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDggXj0gdG1wcGFyOwogCi0JCS8qIEFsbCBiaXQgWE9SID0gMSA/ICovCi0JCWlmIChpZHggJiAweDQwKSB7Ci0JCQlyZWczIF49ICh1aW50OF90KSBpOwotCQkJcmVnMiBePSB+KCh1aW50OF90KSBpKTsKLQkJfQorCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnAxMCBePSB0bXBwYXI7CisKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwOCBePSBjdXI7CisKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisKKwkJcGFyIF49IHRtcHBhcjsKKwkJaWYgKChpICYgMHgxKSA9PSAwKQorCQkJcnAxMiBePSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MikgPT0gMCkKKwkJCXJwMTQgXj0gdG1wcGFyOworCQlpZiAoZWNjc2l6ZV9tdWx0ID09IDIgJiYgKGkgJiAweDQpID09IDApCisJCQlycDE2IF49IHRtcHBhcjsKIAl9CiAKLQkvKiBDcmVhdGUgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkgKi8KLQl0bXAxICA9IChyZWczICYgMHg4MCkgPj4gMDsgLyogQjcgLT4gQjcgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg4MCkgPj4gMTsgLyogQjcgLT4gQjYgKi8KLQl0bXAxIHw9IChyZWczICYgMHg0MCkgPj4gMTsgLyogQjYgLT4gQjUgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg0MCkgPj4gMjsgLyogQjYgLT4gQjQgKi8KLQl0bXAxIHw9IChyZWczICYgMHgyMCkgPj4gMjsgLyogQjUgLT4gQjMgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgyMCkgPj4gMzsgLyogQjUgLT4gQjIgKi8KLQl0bXAxIHw9IChyZWczICYgMHgxMCkgPj4gMzsgLyogQjQgLT4gQjEgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgxMCkgPj4gNDsgLyogQjQgLT4gQjAgKi8KKwkvKgorCSAqIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHdlIHVzZSBsb25nd29yZCBvcGVyYXRpb25zCisJICogd2UnbGwgYnJpbmcgcnA0Li5ycDE0Li5ycDE2IGJhY2sgdG8gc2luZ2xlIGJ5dGUgZW50aXRpZXMgYnkKKwkgKiBzaGlmdGluZyBhbmQgeG9yaW5nIGZpcnN0IGZvbGQgdGhlIHVwcGVyIGFuZCBsb3dlciAxNiBiaXRzLAorCSAqIHRoZW4gdGhlIHVwcGVyIGFuZCBsb3dlciA4IGJpdHMuCisJICovCisJcnA0IF49IChycDQgPj4gMTYpOworCXJwNCBePSAocnA0ID4+IDgpOworCXJwNCAmPSAweGZmOworCXJwNiBePSAocnA2ID4+IDE2KTsKKwlycDYgXj0gKHJwNiA+PiA4KTsKKwlycDYgJj0gMHhmZjsKKwlycDggXj0gKHJwOCA+PiAxNik7CisJcnA4IF49IChycDggPj4gOCk7CisJcnA4ICY9IDB4ZmY7CisJcnAxMCBePSAocnAxMCA+PiAxNik7CisJcnAxMCBePSAocnAxMCA+PiA4KTsKKwlycDEwICY9IDB4ZmY7CisJcnAxMiBePSAocnAxMiA+PiAxNik7CisJcnAxMiBePSAocnAxMiA+PiA4KTsKKwlycDEyICY9IDB4ZmY7CisJcnAxNCBePSAocnAxNCA+PiAxNik7CisJcnAxNCBePSAocnAxNCA+PiA4KTsKKwlycDE0ICY9IDB4ZmY7CisJaWYgKGVjY3NpemVfbXVsdCA9PSAyKSB7CisJCXJwMTYgXj0gKHJwMTYgPj4gMTYpOworCQlycDE2IF49IChycDE2ID4+IDgpOworCQlycDE2ICY9IDB4ZmY7CisJfQogCi0JdG1wMiAgPSAocmVnMyAmIDB4MDgpIDw8IDQ7IC8qIEIzIC0+IEI3ICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDgpIDw8IDM7IC8qIEIzIC0+IEI2ICovCi0JdG1wMiB8PSAocmVnMyAmIDB4MDQpIDw8IDM7IC8qIEIyIC0+IEI1ICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDQpIDw8IDI7IC8qIEIyIC0+IEI0ICovCi0JdG1wMiB8PSAocmVnMyAmIDB4MDIpIDw8IDI7IC8qIEIxIC0+IEIzICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDIpIDw8IDE7IC8qIEIxIC0+IEIyICovCi0JdG1wMiB8PSAocmVnMyAmIDB4MDEpIDw8IDE7IC8qIEIwIC0+IEIxICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDEpIDw8IDA7IC8qIEI3IC0+IEIwICovCi0KLQkvKiBDYWxjdWxhdGUgZmluYWwgRUNDIGNvZGUgKi8KLSNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQwotCWVjY19jb2RlWzBdID0gfnRtcDI7Ci0JZWNjX2NvZGVbMV0gPSB+dG1wMTsKKwkvKgorCSAqIHdlIGFsc28gbmVlZCB0byBjYWxjdWxhdGUgdGhlIHJvdyBwYXJpdHkgZm9yIHJwMC4ucnAzCisJICogVGhpcyBpcyBwcmVzZW50IGluIHBhciwgYmVjYXVzZSBwYXIgaXMgbm93CisJICogcnAzIHJwMyBycDIgcnAyIGluIGxpdHRsZSBlbmRpYW4gYW5kCisJICogcnAyIHJwMiBycDMgcnAzIGluIGJpZyBlbmRpYW4KKwkgKiBhcyB3ZWxsIGFzCisJICogcnAxIHJwMCBycDEgcnAwIGluIGxpdHRsZSBlbmRpYW4gYW5kCisJICogcnAwIHJwMSBycDAgcnAxIGluIGJpZyBlbmRpYW4KKwkgKiBGaXJzdCBjYWxjdWxhdGUgcnAyIGFuZCBycDMKKwkgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlycDIgPSAocGFyID4+IDE2KTsKKwlycDIgXj0gKHJwMiA+PiA4KTsKKwlycDIgJj0gMHhmZjsKKwlycDMgPSBwYXIgJiAweGZmZmY7CisJcnAzIF49IChycDMgPj4gOCk7CisJcnAzICY9IDB4ZmY7CiAjZWxzZQotCWVjY19jb2RlWzBdID0gfnRtcDE7Ci0JZWNjX2NvZGVbMV0gPSB+dG1wMjsKKwlycDMgPSAocGFyID4+IDE2KTsKKwlycDMgXj0gKHJwMyA+PiA4KTsKKwlycDMgJj0gMHhmZjsKKwlycDIgPSBwYXIgJiAweGZmZmY7CisJcnAyIF49IChycDIgPj4gOCk7CisJcnAyICY9IDB4ZmY7CiAjZW5kaWYKLQllY2NfY29kZVsyXSA9ICgofnJlZzEpIDw8IDIpIHwgMHgwMzsKIAorCS8qIHJlZHVjZSBwYXIgdG8gMTYgYml0cyB0aGVuIGNhbGN1bGF0ZSBycDEgYW5kIHJwMCAqLworCXBhciBePSAocGFyID4+IDE2KTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlycDAgPSAocGFyID4+IDgpICYgMHhmZjsKKwlycDEgPSAocGFyICYgMHhmZik7CisjZWxzZQorCXJwMSA9IChwYXIgPj4gOCkgJiAweGZmOworCXJwMCA9IChwYXIgJiAweGZmKTsKKyNlbmRpZgorCisJLyogZmluYWxseSByZWR1Y2UgcGFyIHRvIDggYml0cyAqLworCXBhciBePSAocGFyID4+IDgpOworCXBhciAmPSAweGZmOworCisJLyoKKwkgKiBhbmQgY2FsY3VsYXRlIHJwNS4ucnAxNS4ucnAxNworCSAqIG5vdGUgdGhhdCBwYXIgPSBycDQgXiBycDUgYW5kIGR1ZSB0byB0aGUgY29tbXV0YXRpdmUgcHJvcGVydHkKKwkgKiBvZiB0aGUgXiBvcGVyYXRvciB3ZSBjYW4gc2F5OgorCSAqIHJwNSA9IChwYXIgXiBycDQpOworCSAqIFRoZSAmIDB4ZmYgc2VlbXMgc3VwZXJmbHVvdXMsIGJ1dCBiZW5jaG1hcmtpbmcgbGVhcm5lZCB0aGF0CisJICogbGVhdmluZyBpdCBvdXQgZ2l2ZXMgc2xpZ2h0bHkgd29yc2UgcmVzdWx0cy4gTm8gaWRlYSB3aHksIHByb2JhYmx5CisJICogaXQgaGFzIHRvIGRvIHdpdGggdGhlIHdheSB0aGUgcGlwZWxpbmUgaW4gcGVudGl1bSBpcyBvcmdhbml6ZWQuCisJICovCisJcnA1ID0gKHBhciBeIHJwNCkgJiAweGZmOworCXJwNyA9IChwYXIgXiBycDYpICYgMHhmZjsKKwlycDkgPSAocGFyIF4gcnA4KSAmIDB4ZmY7CisJcnAxMSA9IChwYXIgXiBycDEwKSAmIDB4ZmY7CisJcnAxMyA9IChwYXIgXiBycDEyKSAmIDB4ZmY7CisJcnAxNSA9IChwYXIgXiBycDE0KSAmIDB4ZmY7CisJaWYgKGVjY3NpemVfbXVsdCA9PSAyKQorCQlycDE3ID0gKHBhciBeIHJwMTYpICYgMHhmZjsKKworCS8qCisJICogRmluYWxseSBjYWxjdWxhdGUgdGhlIGVjYyBiaXRzLgorCSAqIEFnYWluIGhlcmUgaXQgbWlnaHQgc2VlbSB0aGF0IHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBvcHRpbWlzYXRpb25zCisJICogcG9zc2libGUsIGJ1dCBiZW5jaG1hcmtzIHNob3dlZCB0aGF0IG9uIHRoZSBzeXN0ZW0gdGhpcyBpcyBkZXZlbG9wZWQKKwkgKiB0aGUgY29kZSBiZWxvdyBpcyB0aGUgZmFzdGVzdAorCSAqLworI2lmZGVmIENPTkZJR19NVERfTkFORF9FQ0NfU01DCisJY29kZVswXSA9CisJICAgIChpbnZwYXJpdHlbcnA3XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnA2XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnA1XSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnA0XSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAzXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAyXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnAxXSA8PCAxKSB8CisJICAgIChpbnZwYXJpdHlbcnAwXSk7CisJY29kZVsxXSA9CisJICAgIChpbnZwYXJpdHlbcnAxNV0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwMTRdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDEzXSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMl0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwMTFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDEwXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnA5XSA8PCAxKSAgfAorCSAgICAoaW52cGFyaXR5W3JwOF0pOworI2Vsc2UKKwljb2RlWzFdID0KKwkgICAgKGludnBhcml0eVtycDddIDw8IDcpIHwKKwkgICAgKGludnBhcml0eVtycDZdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDVdIDw8IDUpIHwKKwkgICAgKGludnBhcml0eVtycDRdIDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDNdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDJdIDw8IDIpIHwKKwkgICAgKGludnBhcml0eVtycDFdIDw8IDEpIHwKKwkgICAgKGludnBhcml0eVtycDBdKTsKKwljb2RlWzBdID0KKwkgICAgKGludnBhcml0eVtycDE1XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnAxNF0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwMTNdIDw8IDUpIHwKKwkgICAgKGludnBhcml0eVtycDEyXSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMV0gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMTBdIDw8IDIpIHwKKwkgICAgKGludnBhcml0eVtycDldIDw8IDEpICB8CisJICAgIChpbnZwYXJpdHlbcnA4XSk7CisjZW5kaWYKKwlpZiAoZWNjc2l6ZV9tdWx0ID09IDEpCisJCWNvZGVbMl0gPQorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHg1NV0gPDwgMikgfAorCQkgICAgMzsKKwllbHNlCisJCWNvZGVbMl0gPQorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHg1NV0gPDwgMikgfAorCQkgICAgKGludnBhcml0eVtycDE3XSA8PCAxKSB8CisJCSAgICAoaW52cGFyaXR5W3JwMTZdIDw8IDApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChuYW5kX2NhbGN1bGF0ZV9lY2MpOwogCi1zdGF0aWMgaW5saW5lIGludCBjb3VudGJpdHModWludDMyX3QgYnl0ZSkKLXsKLQlpbnQgcmVzID0gMDsKLQotCWZvciAoO2J5dGU7IGJ5dGUgPj49IDEpCi0JCXJlcyArPSBieXRlICYgMHgwMTsKLQlyZXR1cm4gcmVzOwotfQotCiAvKioKICAqIG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3QgYW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCiAgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlCi0gKiBAZGF0OglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKKyAqIEBidWY6CXJhdyBkYXRhIHJlYWQgZnJvbSB0aGUgY2hpcAogICogQHJlYWRfZWNjOglFQ0MgZnJvbSB0aGUgY2hpcAogICogQGNhbGNfZWNjOgl0aGUgRUNDIGNhbGN1bGF0ZWQgZnJvbSByYXcgZGF0YQogICoKLSAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYgYnl0ZSBibG9jaworICogRGV0ZWN0IGFuZCBjb3JyZWN0IGEgMSBiaXQgZXJyb3IgZm9yIDI1Ni81MTIgYnl0ZSBibG9jawogICovCi1pbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAotCQkgICAgICB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoraW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKIHsKLQl1aW50OF90IHMwLCBzMSwgczI7CisJdW5zaWduZWQgY2hhciBiMCwgYjEsIGIyOworCXVuc2lnbmVkIGNoYXIgYnl0ZV9hZGRyLCBiaXRfYWRkcjsKKwkvKiAyNTYgb3IgNTEyIGJ5dGVzL2VjYyAgKi8KKwljb25zdCB1aW50MzJfdCBlY2NzaXplX211bHQgPQorCQkJKCgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPmVjYy5zaXplKSA+PiA4OwogCisJLyoKKwkgKiBiMCB0byBiMiBpbmRpY2F0ZSB3aGljaCBiaXQgaXMgZmF1bHR5IChpZiBhbnkpCisJICogd2UgbWlnaHQgbmVlZCB0aGUgeG9yIHJlc3VsdCAgbW9yZSB0aGFuIG9uY2UsCisJICogc28ga2VlcCB0aGVtIGluIGEgbG9jYWwgdmFyCisJKi8KICNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQwotCXMwID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKLQlzMSA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07Ci0JczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworCWIwID0gcmVhZF9lY2NbMF0gXiBjYWxjX2VjY1swXTsKKwliMSA9IHJlYWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CiAjZWxzZQotCXMxID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKLQlzMCA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07Ci0JczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworCWIwID0gcmVhZF9lY2NbMV0gXiBjYWxjX2VjY1sxXTsKKwliMSA9IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CiAjZW5kaWYKLQlpZiAoKHMwIHwgczEgfCBzMikgPT0gMCkKLQkJcmV0dXJuIDA7CisJYjIgPSByZWFkX2VjY1syXSBeIGNhbGNfZWNjWzJdOwogCi0JLyogQ2hlY2sgZm9yIGEgc2luZ2xlIGJpdCBlcnJvciAqLwotCWlmKCAoKHMwIF4gKHMwID4+IDEpKSAmIDB4NTUpID09IDB4NTUgJiYKLQkgICAgKChzMSBeIChzMSA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0JICAgICgoczIgXiAoczIgPj4gMSkpICYgMHg1NCkgPT0gMHg1NCkgeworCS8qIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYml0ZmF1bHRzICovCiAKLQkJdWludDMyX3QgYnl0ZW9mZnMsIGJpdG51bTsKKwkvKiByZXBlYXRlZCBpZiBzdGF0ZW1lbnRzIGFyZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCB0aGFuIHN3aXRjaCAuLi4gKi8KKwkvKiBvcmRlcmVkIGluIG9yZGVyIG9mIGxpa2VsaWhvb2QgKi8KIAotCQlieXRlb2ZmcyA9IChzMSA8PCAwKSAmIDB4ODA7Ci0JCWJ5dGVvZmZzIHw9IChzMSA8PCAxKSAmIDB4NDA7Ci0JCWJ5dGVvZmZzIHw9IChzMSA8PCAyKSAmIDB4MjA7Ci0JCWJ5dGVvZmZzIHw9IChzMSA8PCAzKSAmIDB4MTA7CisJaWYgKChiMCB8IGIxIHwgYjIpID09IDApCisJCXJldHVybiAwOwkvKiBubyBlcnJvciAqLwogCi0JCWJ5dGVvZmZzIHw9IChzMCA+PiA0KSAmIDB4MDg7Ci0JCWJ5dGVvZmZzIHw9IChzMCA+PiAzKSAmIDB4MDQ7Ci0JCWJ5dGVvZmZzIHw9IChzMCA+PiAyKSAmIDB4MDI7Ci0JCWJ5dGVvZmZzIHw9IChzMCA+PiAxKSAmIDB4MDE7Ci0KLQkJYml0bnVtID0gKHMyID4+IDUpICYgMHgwNDsKLQkJYml0bnVtIHw9IChzMiA+PiA0KSAmIDB4MDI7Ci0JCWJpdG51bSB8PSAoczIgPj4gMykgJiAweDAxOwotCi0JCWRhdFtieXRlb2Zmc10gXj0gKDEgPDwgYml0bnVtKTsKLQorCWlmICgoKChiMCBeIChiMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSAmJgorCSAgICAoKChiMSBeIChiMSA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSAmJgorCSAgICAoKGVjY3NpemVfbXVsdCA9PSAxICYmICgoYjIgXiAoYjIgPj4gMSkpICYgMHg1NCkgPT0gMHg1NCkgfHwKKwkgICAgIChlY2NzaXplX211bHQgPT0gMiAmJiAoKGIyIF4gKGIyID4+IDEpKSAmIDB4NTUpID09IDB4NTUpKSkgeworCS8qIHNpbmdsZSBiaXQgZXJyb3IgKi8KKwkJLyoKKwkJICogcnAxNy9ycDE1LzEzLzExLzkvNy81LzMvMSBpbmRpY2F0ZSB3aGljaCBieXRlIGlzIHRoZSBmYXVsdHkKKwkJICogYnl0ZSwgY3AgNS8zLzEgaW5kaWNhdGUgdGhlIGZhdWx0eSBiaXQuCisJCSAqIEEgbG9va3VwIHRhYmxlIChjYWxsZWQgYWRkcmVzc2JpdHMpIGlzIHVzZWQgdG8gZmlsdGVyCisJCSAqIHRoZSBiaXRzIGZyb20gdGhlIGJ5dGUgdGhleSBhcmUgaW4uCisJCSAqIEEgbWFyZ2luYWwgb3B0aW1pc2F0aW9uIGlzIHBvc3NpYmxlIGJ5IGhhdmluZyB0aHJlZQorCQkgKiBkaWZmZXJlbnQgbG9va3VwIHRhYmxlcy4KKwkJICogT25lIGFzIHdlIGhhdmUgbm93IChmb3IgYjApLCBvbmUgZm9yIGIyCisJCSAqICh0aGF0IHdvdWxkIGF2b2lkIHRoZSA+PiAxKSwgYW5kIG9uZSBmb3IgYjEgKHdpdGggYWxsIHZhbHVlcworCQkgKiA8PCA0KS4gSG93ZXZlciBpdCB3YXMgZmVsdCB0aGF0IGludHJvZHVjaW5nIHR3byBtb3JlIHRhYmxlcworCQkgKiBoYXJkbHkganVzdGlmeSB0aGUgZ2Fpbi4KKwkJICoKKwkJICogVGhlIGIyIHNoaWZ0IGlzIHRoZXJlIHRvIGdldCByaWQgb2YgdGhlIGxvd2VzdCB0d28gYml0cy4KKwkJICogV2UgY291bGQgYWxzbyBkbyBhZGRyZXNzYml0c1tiMl0gPj4gMSBidXQgZm9yIHRoZQorCQkgKiBwZXJmb3JtYWNlIGl0IGRvZXMgbm90IG1ha2UgYW55IGRpZmZlcmVuY2UKKwkJICovCisJCWlmIChlY2NzaXplX211bHQgPT0gMSkKKwkJCWJ5dGVfYWRkciA9IChhZGRyZXNzYml0c1tiMV0gPDwgNCkgKyBhZGRyZXNzYml0c1tiMF07CisJCWVsc2UKKwkJCWJ5dGVfYWRkciA9IChhZGRyZXNzYml0c1tiMiAmIDB4M10gPDwgOCkgKworCQkJCSAgICAoYWRkcmVzc2JpdHNbYjFdIDw8IDQpICsgYWRkcmVzc2JpdHNbYjBdOworCQliaXRfYWRkciA9IGFkZHJlc3NiaXRzW2IyID4+IDJdOworCQkvKiBmbGlwIHRoZSBiaXQgKi8KKwkJYnVmW2J5dGVfYWRkcl0gXj0gKDEgPDwgYml0X2FkZHIpOwogCQlyZXR1cm4gMTsKKwogCX0KKwkvKiBjb3VudCBuciBvZiBiaXRzOyB1c2UgdGFibGUgbG9va3VwLCBmYXN0ZXIgdGhhbiBjYWxjdWxhdGluZyBpdCAqLworCWlmICgoYml0c3BlcmJ5dGVbYjBdICsgYml0c3BlcmJ5dGVbYjFdICsgYml0c3BlcmJ5dGVbYjJdKSA9PSAxKQorCQlyZXR1cm4gMTsJLyogZXJyb3IgaW4gZWNjIGRhdGE7IG5vIGFjdGlvbiBuZWVkZWQgKi8KIAotCWlmKGNvdW50Yml0cyhzMCB8ICgodWludDMyX3QpczEgPDwgOCkgfCAoKHVpbnQzMl90KXMyIDw8MTYpKSA9PSAxKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAtRUJBRE1TRzsKKwlwcmludGsoS0VSTl9FUlIgInVuY29ycmVjdGFibGUgZXJyb3IgOiAiKTsKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MKG5hbmRfY29ycmVjdF9kYXRhKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGcmFucyBNZXVsZW5icm9la3MgPGZyYW5zbWV1bGVuYnJvZWtzQGdtYWlsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBOQU5EIEVDQyBzdXBwb3J0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCmluZGV4IDU1NmU4MTMuLmFlN2M1NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIC8qIERlZmF1bHQgc2ltdWxhdG9yIHBhcmFtZXRlcnMgdmFsdWVzICovCiAjaWYgIWRlZmluZWQoQ09ORklHX05BTkRTSU1fRklSU1RfSURfQllURSkgIHx8IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwppbmRleCBhNjRhZDE1Li5jMGZhOWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCkBAIC0xMTUsNTUgKzExNSwxMSBAQAogCVNUQVRFX1BJT19XUklUSU5HLAogfTsKIAotc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyB7Ci0JdW5zaWduZWQgaW50CXRDSDsgIC8qIEVuYWJsZSBzaWduYWwgaG9sZCB0aW1lICovCi0JdW5zaWduZWQgaW50CXRDUzsgIC8qIEVuYWJsZSBzaWduYWwgc2V0dXAgdGltZSAqLwotCXVuc2lnbmVkIGludAl0V0g7ICAvKiBORF9uV0UgaGlnaCBkdXJhdGlvbiAqLwotCXVuc2lnbmVkIGludAl0V1A7ICAvKiBORF9uV0UgcHVsc2UgdGltZSAqLwotCXVuc2lnbmVkIGludAl0Ukg7ICAvKiBORF9uUkUgaGlnaCBkdXJhdGlvbiAqLwotCXVuc2lnbmVkIGludAl0UlA7ICAvKiBORF9uUkUgcHVsc2Ugd2lkdGggKi8KLQl1bnNpZ25lZCBpbnQJdFI7ICAgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3IgcmVhZCAqLwotCXVuc2lnbmVkIGludAl0V0hSOyAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciBzdGF0dXMgcmVhZCAqLwotCXVuc2lnbmVkIGludAl0QVI7ICAvKiBORF9BTEUgbG93IHRvIE5EX25SRSBsb3cgZGVsYXkgKi8KLX07Ci0KLXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgewotCXVpbnQxNl90CXJlYWQxOwotCXVpbnQxNl90CXJlYWQyOwotCXVpbnQxNl90CXByb2dyYW07Ci0JdWludDE2X3QJcmVhZF9zdGF0dXM7Ci0JdWludDE2X3QJcmVhZF9pZDsKLQl1aW50MTZfdAllcmFzZTsKLQl1aW50MTZfdAlyZXNldDsKLQl1aW50MTZfdAlsb2NrOwotCXVpbnQxNl90CXVubG9jazsKLQl1aW50MTZfdAlsb2NrX3N0YXR1czsKLX07Ci0KLXN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdGltaW5nOyAvKiBOQU5EIEZsYXNoIHRpbWluZyAqLwotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldDsKLQotCXVpbnQzMl90IHBhZ2VfcGVyX2Jsb2NrOy8qIFBhZ2VzIHBlciBibG9jayAoUEdfUEVSX0JMSykgKi8KLQl1aW50MzJfdCBwYWdlX3NpemU7CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcyAoUEFHRV9TWikgKi8KLQl1aW50MzJfdCBmbGFzaF93aWR0aDsJLyogV2lkdGggb2YgRmxhc2ggbWVtb3J5IChEV0lEVEhfTSkgKi8KLQl1aW50MzJfdCBkZmNfd2lkdGg7CS8qIFdpZHRoIG9mIGZsYXNoIGNvbnRyb2xsZXIoRFdJRFRIX0MpICovCi0JdWludDMyX3QgbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyBpbiBGbGFzaCAqLwotCXVpbnQzMl90IGNoaXBfaWQ7Ci0KLQkvKiBOT1RFOiB0aGVzZSBhcmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLCBkbyBub3QgZGVmaW5lICovCi0Jc2l6ZV90CQlvb2Jfc2l6ZTsKLQlzaXplX3QJCXJlYWRfaWRfYnl0ZXM7Ci0KLQl1bnNpZ25lZCBpbnQJY29sX2FkZHJfY3ljbGVzOwotCXVuc2lnbmVkIGludAlyb3dfYWRkcl9jeWNsZXM7Ci19OwotCiBzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyB7CiAJc3RydWN0IG5hbmRfY2hpcAluYW5kX2NoaXA7CiAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSAqcGRldjsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmZsYXNoX2luZm87CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvOwogCiAJc3RydWN0IGNsawkJKmNsazsKIAl2b2lkIF9faW9tZW0JCSptbWlvX2Jhc2U7CkBAIC0yMDIsMTIgKzE1OCwyMCBAQAogCXVpbnQzMl90CQluZGNiMDsKIAl1aW50MzJfdAkJbmRjYjE7CiAJdWludDMyX3QJCW5kY2IyOworCisJLyogY2FsY3VsYXRlZCBmcm9tIHB4YTN4eF9uYW5kX2ZsYXNoIGRhdGEgKi8KKwlzaXplX3QJCW9vYl9zaXplOworCXNpemVfdAkJcmVhZF9pZF9ieXRlczsKKworCXVuc2lnbmVkIGludAljb2xfYWRkcl9jeWNsZXM7CisJdW5zaWduZWQgaW50CXJvd19hZGRyX2N5Y2xlczsKIH07CiAKIHN0YXRpYyBpbnQgdXNlX2RtYSA9IDE7CiBtb2R1bGVfcGFyYW0odXNlX2RtYSwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJlbmFibGUgRE1BIGZvciBkYXRhIHRyYW5zZmVyaW5nIHRvL2Zyb20gTkFORCBIVyIpOwogCisjaWZkZWYgQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOCiBzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCBzbWFsbHBhZ2VfY21kc2V0ID0gewogCS5yZWFkMQkJPSAweDAwMDAsCiAJLnJlYWQyCQk9IDB4MDA1MCwKQEAgLTI5MSwxMSArMjU1LDM1IEBACiAJLmNoaXBfaWQJPSAweGIxMmMsCiB9OwogCitzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyBzdG0yR2JYMTZfdGltaW5nID0geworCS50Q0ggPSAxMCwKKwkudENTID0gMzUsCisJLnRXSCA9IDE1LAorCS50V1AgPSAyNSwKKwkudFJIID0gMTUsCisJLnRSUCA9IDI1LAorCS50UiA9IDI1MDAwLAorCS50V0hSID0gNjAsCisJLnRBUiA9IDEwLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCBzdG0yR2JYMTYgPSB7CisJLnRpbWluZyA9ICZzdG0yR2JYMTZfdGltaW5nLAorCS5wYWdlX3Blcl9ibG9jayA9IDY0LAorCS5wYWdlX3NpemUgPSAyMDQ4LAorCS5mbGFzaF93aWR0aCA9IDE2LAorCS5kZmNfd2lkdGggPSAxNiwKKwkubnVtX2Jsb2NrcyA9IDIwNDgsCisJLmNoaXBfaWQgPSAweGJhMjAsCit9OworCiBzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpidWlsdGluX2ZsYXNoX3R5cGVzW10gPSB7CiAJJnNhbXN1bmc1MTJNYlgxNiwKIAkmbWljcm9uMUdiWDgsCiAJJm1pY3JvbjFHYlgxNiwKKwkmc3RtMkdiWDE2LAogfTsKKyNlbmRpZiAvKiBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4gKi8KIAogI2RlZmluZSBORFRSMF90Q0goYykJKG1pbigoYyksIDcpIDw8IDE5KQogI2RlZmluZSBORFRSMF90Q1MoYykJKG1pbigoYyksIDcpIDw8IDE2KQpAQCAtMzEyLDcgKzMwMCw3IEBACiAjZGVmaW5lIG5zMmN5Y2xlKG5zLCBjbGspCShpbnQpKCgobnMpICogKGNsayAvIDEwMDAwMDApIC8gMTAwMCkgKyAxKQogCiBzdGF0aWMgdm9pZCBweGEzeHhfbmFuZF9zZXRfdGltaW5nKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnQpCisJCQkJICAgY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdCkKIHsKIAl1bnNpZ25lZCBsb25nIG5hbmRfY2xrID0gY2xrX2dldF9yYXRlKGluZm8tPmNsayk7CiAJdWludDMyX3QgbmR0cjAsIG5kdHIxOwpAQCAtMzU0LDggKzM0Miw4IEBACiBzdGF0aWMgaW50IHByZXBhcmVfcmVhZF9wcm9nX2NtZChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKIAkJCXVpbnQxNl90IGNtZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKIAogCS8qIGNhbGN1bGF0ZSBkYXRhIHNpemUgKi8KIAlzd2l0Y2ggKGYtPnBhZ2Vfc2l6ZSkgewpAQCAtMzczLDE0ICszNjEsMTQgQEAKIAlpbmZvLT5uZGNiMCA9IGNtZCB8ICgoY21kICYgMHhmZjAwKSA/IE5EQ0IwX0RCQyA6IDApOwogCWluZm8tPm5kY2IxID0gMDsKIAlpbmZvLT5uZGNiMiA9IDA7Ci0JaW5mby0+bmRjYjAgfD0gTkRDQjBfQUREUl9DWUMoZi0+cm93X2FkZHJfY3ljbGVzICsgZi0+Y29sX2FkZHJfY3ljbGVzKTsKKwlpbmZvLT5uZGNiMCB8PSBORENCMF9BRERSX0NZQyhpbmZvLT5yb3dfYWRkcl9jeWNsZXMgKyBpbmZvLT5jb2xfYWRkcl9jeWNsZXMpOwogCi0JaWYgKGYtPmNvbF9hZGRyX2N5Y2xlcyA9PSAyKSB7CisJaWYgKGluZm8tPmNvbF9hZGRyX2N5Y2xlcyA9PSAyKSB7CiAJCS8qIGxhcmdlIGJsb2NrLCAyIGN5Y2xlcyBmb3IgY29sdW1uIGFkZHJlc3MKIAkJICogcm93IGFkZHJlc3Mgc3RhcnRzIGZyb20gM3JkIGN5Y2xlCiAJCSAqLwogCQlpbmZvLT5uZGNiMSB8PSAocGFnZV9hZGRyIDw8IDE2KSB8IChjb2x1bW4gJiAweGZmZmYpOwotCQlpZiAoZi0+cm93X2FkZHJfY3ljbGVzID09IDMpCisJCWlmIChpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPT0gMykKIAkJCWluZm8tPm5kY2IyID0gKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmOwogCX0gZWxzZQogCQkvKiBzbWFsbCBibG9jaywgMSBjeWNsZXMgZm9yIGNvbHVtbiBhZGRyZXNzCkBAIC00MDYsNyArMzk0LDcgQEAKIAogc3RhdGljIGludCBwcmVwYXJlX290aGVyX2NtZChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywgdWludDE2X3QgY21kKQogewotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGluZm8tPmZsYXNoX2luZm8tPmNtZHNldDsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBpbmZvLT5mbGFzaF9pbmZvLT5jbWRzZXQ7CiAKIAlpbmZvLT5uZGNiMCA9IGNtZCB8ICgoY21kICYgMHhmZjAwKSA/IE5EQ0IwX0RCQyA6IDApOwogCWluZm8tPm5kY2IxID0gMDsKQEAgLTY0MSw4ICs2MjksOCBAQAogCQkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7CiAJc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8gPSBtdGQtPnByaXY7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmbGFzaF9pbmZvLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmbGFzaF9pbmZvLT5jbWRzZXQ7CiAJaW50IHJldDsKIAogCWluZm8tPnVzZV9kbWEgPSAodXNlX2RtYSkgPyAxIDogMDsKQEAgLTcyMCw3ICs3MDgsNyBAQAogCQlpbmZvLT51c2VfZG1hID0gMDsJLyogZm9yY2UgUElPIHJlYWQgKi8KIAkJaW5mby0+YnVmX3N0YXJ0ID0gMDsKIAkJaW5mby0+YnVmX2NvdW50ID0gKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRElEKSA/Ci0JCQkJZmxhc2hfaW5mby0+cmVhZF9pZF9ieXRlcyA6IDE7CisJCQkJaW5mby0+cmVhZF9pZF9ieXRlcyA6IDE7CiAKIAkJaWYgKHByZXBhcmVfb3RoZXJfY21kKGluZm8sIChjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkgPwogCQkJCWNtZHNldC0+cmVhZF9pZCA6IGNtZHNldC0+cmVhZF9zdGF0dXMpKQpAQCAtODYxLDggKzg0OSw4IEBACiAKIHN0YXRpYyBpbnQgX19yZWFkaWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sIHVpbnQzMl90ICppZCkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKIAl1aW50MzJfdCBuZGNyOwogCXVpbnQ4X3QgIGlkX2J1ZmZbOF07CiAKQEAgLTg5MSw3ICs4NzksNyBAQAogfQogCiBzdGF0aWMgaW50IHB4YTN4eF9uYW5kX2NvbmZpZ19mbGFzaChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmKQorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGluZm8tPnBkZXY7CiAJc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC05MDQsMjUgKzg5MiwyNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGNhbGN1bGF0ZSBmbGFzaCBpbmZvcm1hdGlvbiAqLwotCWYtPm9vYl9zaXplID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDY0IDogMTY7Ci0JZi0+cmVhZF9pZF9ieXRlcyA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA0IDogMjsKKwlpbmZvLT5vb2Jfc2l6ZSA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA2NCA6IDE2OworCWluZm8tPnJlYWRfaWRfYnl0ZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNCA6IDI7CiAKIAkvKiBjYWxjdWxhdGUgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiAqLwotCWYtPmNvbF9hZGRyX2N5Y2xlcyA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyAyIDogMTsKKwlpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gMiA6IDE7CiAKIAlpZiAoZi0+bnVtX2Jsb2NrcyAqIGYtPnBhZ2VfcGVyX2Jsb2NrID4gNjU1MzYpCi0JCWYtPnJvd19hZGRyX2N5Y2xlcyA9IDM7CisJCWluZm8tPnJvd19hZGRyX2N5Y2xlcyA9IDM7CiAJZWxzZQotCQlmLT5yb3dfYWRkcl9jeWNsZXMgPSAyOworCQlpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPSAyOwogCiAJbmRjciB8PSAocGRhdGEtPmVuYWJsZV9hcmJpdGVyKSA/IE5EQ1JfTkRfQVJCX0VOIDogMDsKLQluZGNyIHw9IChmLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgPyBORENSX1JBX1NUQVJUIDogMDsKKwluZGNyIHw9IChpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgPyBORENSX1JBX1NUQVJUIDogMDsKIAluZGNyIHw9IChmLT5wYWdlX3Blcl9ibG9jayA9PSA2NCkgPyBORENSX1BHX1BFUl9CTEsgOiAwOwogCW5kY3IgfD0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IE5EQ1JfUEFHRV9TWiA6IDA7CiAJbmRjciB8PSAoZi0+Zmxhc2hfd2lkdGggPT0gMTYpID8gTkRDUl9EV0lEVEhfTSA6IDA7CiAJbmRjciB8PSAoZi0+ZGZjX3dpZHRoID09IDE2KSA/IE5EQ1JfRFdJRFRIX0MgOiAwOwogCi0JbmRjciB8PSBORENSX1JEX0lEX0NOVChmLT5yZWFkX2lkX2J5dGVzKTsKKwluZGNyIHw9IE5EQ1JfUkRfSURfQ05UKGluZm8tPnJlYWRfaWRfYnl0ZXMpOwogCW5kY3IgfD0gTkRDUl9TUEFSRV9FTjsgLyogZW5hYmxlIHNwYXJlIGJ5IGRlZmF1bHQgKi8KIAogCWluZm8tPnJlZ19uZGNyID0gbmRjcjsKQEAgLTkzMiwxMiArOTIwLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvKQorc3RhdGljIGludCBweGEzeHhfbmFuZF9kZXRlY3RfZmxhc2goc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCisJCQkJICAgIGNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmY7Ci0JdWludDMyX3QgaWQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmOworCXVpbnQzMl90IGlkID0gLTE7CiAJaW50IGk7CiAKKwlmb3IgKGkgPSAwOyBpPHBkYXRhLT5udW1fZmxhc2g7ICsraSkgeworCQlmID0gcGRhdGEtPmZsYXNoICsgaTsKKworCQlpZiAocHhhM3h4X25hbmRfY29uZmlnX2ZsYXNoKGluZm8sIGYpKQorCQkJY29udGludWU7CisKKwkJaWYgKF9fcmVhZGlkKGluZm8sICZpZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoaWQgPT0gZi0+Y2hpcF9pZCkKKwkJCXJldHVybiAwOworCX0KKworI2lmZGVmIENPTkZJR19NVERfTkFORF9QWEEzeHhfQlVJTFRJTgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1aWx0aW5fZmxhc2hfdHlwZXMpOyBpKyspIHsKIAogCQlmID0gYnVpbHRpbl9mbGFzaF90eXBlc1tpXTsKQEAgLTk1MSw3ICs5NTQsMTEgQEAKIAkJaWYgKGlkID09IGYtPmNoaXBfaWQpCiAJCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYKIAorCWRldl93YXJuKCZpbmZvLT5wZGV2LT5kZXYsCisJCSAiZmFpbGVkIHRvIGRldGVjdCBjb25maWd1cmVkIG5hbmQgZmxhc2g7IGZvdW5kICUwNHggaW5zdGVhZCBvZlxuIiwKKwkJIGlkKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApAQCAtMTAxNCw3ICsxMDIxLDcgQEAKIHN0YXRpYyB2b2lkIHB4YTN4eF9uYW5kX2luaXRfbXRkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCQkJCSBzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZiA9IGluZm8tPmZsYXNoX2luZm87CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9ICZpbmZvLT5uYW5kX2NoaXA7CiAKIAl0aGlzLT5vcHRpb25zID0gKGYtPmZsYXNoX3dpZHRoID09IDE2KSA/IE5BTkRfQlVTV0lEVEhfMTY6IDA7CkBAIC0xMTM1LDcgKzExNDIsNyBAQAogCQlnb3RvIGZhaWxfZnJlZV9idWY7CiAJfQogCi0JcmV0ID0gcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKGluZm8pOworCXJldCA9IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChpbmZvLCBwZGF0YSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZGV0ZWN0IGZsYXNoXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjFhY2IwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogU3VwZXJIIEZMQ1RMIG5hbmQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiBmc2xfZWxiY19uYW5kLmMsIENvcHlyaWdodCDCqSAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3NoX2ZsY3RsLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgZmxjdGxfNHNlY2Nfb29iXzE2ID0geworCS5lY2NieXRlcyA9IDEwLAorCS5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX0sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMTIsCisJCS4gbGVuZ3RoID0gNH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgZmxjdGxfNHNlY2Nfb29iXzY0ID0geworCS5lY2NieXRlcyA9IDEwLAorCS5lY2Nwb3MgPSB7NDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTd9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDYwLAorCQkuIGxlbmd0aCA9IDR9IH0sCit9OworCitzdGF0aWMgdWludDhfdCBzY2FuX2ZmX3BhdHRlcm5bXSA9IHsgMHhmZiwgMHhmZiB9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGZsY3RsXzRzZWNjX3NtYWxscGFnZSA9IHsKKwkub3B0aW9ucyA9IE5BTkRfQkJUX1NDQU4yTkRQQUdFLAorCS5vZmZzID0gMTEsCisJLmxlbiA9IDEsCisJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4sCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGZsY3RsXzRzZWNjX2xhcmdlcGFnZSA9IHsKKwkub3B0aW9ucyA9IDAsCisJLm9mZnMgPSA1OCwKKwkubGVuID0gMiwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybiwKK307CisKK3N0YXRpYyB2b2lkIGVtcHR5X2ZpZm8oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKK3sKKwl3cml0ZWwoMHgwMDBjMDAwMCwgRkxJTlRETUFDUihmbGN0bCkpOwkvKiBGSUZPIENsZWFyICovCisJd3JpdGVsKDB4MDAwMDAwMDAsIEZMSU5URE1BQ1IoZmxjdGwpKTsJLyogQ2xlYXIgRXJyb3IgZmxhZ3MgKi8KK30KKworc3RhdGljIHZvaWQgc3RhcnRfdHJhbnNsYXRpb24oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKK3sKKwl3cml0ZWIoVFJTVFJULCBGTFRSQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCWlmIChyZWFkYihGTFRSQ1IoZmxjdGwpKSAmIFRSRU5EKSB7CisJCQl3cml0ZWIoMHgwLCBGTFRSQ1IoZmxjdGwpKTsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X2NvbXBsZXRpb24oKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJd3JpdGViKDB4MCwgRkxUUkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hZGRyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBhZGRyID0gMDsKKworCWlmIChjb2x1bW4gPT0gLTEpIHsKKwkJYWRkciA9IHBhZ2VfYWRkcjsJLyogRVJBU0UxICovCisJfSBlbHNlIGlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJLyogU0VRSU4sIFJFQUQwLCBldGMuLiAqLworCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgeworCQkJYWRkciA9IGNvbHVtbiAmIDB4MEZGRjsKKwkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDE2OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpIDw8IDI0OworCQkJLyogYmlnIHRoYW4gMTI4TUIgKi8KKwkJCWlmIChmbGN0bC0+cndfQURSQ05UID09IEFEUkNOVDJfRSkgeworCQkJCXVpbnQzMl90IAlhZGRyMjsKKwkJCQlhZGRyMiA9IChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZjsKKwkJCQl3cml0ZWwoYWRkcjIsIEZMQURSMihmbGN0bCkpOworCQkJfQorCQl9IGVsc2UgeworCQkJYWRkciA9IGNvbHVtbjsKKwkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDg7CisJCQlhZGRyIHw9ICgocGFnZV9hZGRyID4+IDgpICYgMHhmZikgPDwgMTY7CisJCQlhZGRyIHw9ICgocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYpIDw8IDI0OworCQl9CisJfQorCXdyaXRlbChhZGRyLCBGTEFEUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3JmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCXVpbnQzMl90IHZhbDsKKwkJLyogY2hlY2sgRklGTyAqLworCQl2YWwgPSByZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDE2OworCQlpZiAodmFsICYgMHhGRikKKwkJCXJldHVybjsKKwkJdWRlbGF5KDEpOworCX0KKwlwcmludGsoS0VSTl9FUlIgIndhaXRfcmZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2ZpZm9fcmVhZHkoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKK3sKKwl1aW50MzJfdCBsZW4sIHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkvKiBjaGVjayBGSUZPICovCisJCWxlbiA9IChyZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDE2KSAmIDB4RkY7CisJCWlmIChsZW4gPj0gNCkKKwkJCXJldHVybjsKKwkJdWRlbGF5KDEpOworCX0KKwlwcmludGsoS0VSTl9FUlIgIndhaXRfd2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9yZWNmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisJaW50IGNoZWNrZWRbNF07CisJdm9pZCBfX2lvbWVtICplY2NfcmVnWzRdOworCWludCBpOworCXVpbnQzMl90IGRhdGEsIHNpemU7CisKKwltZW1zZXQoY2hlY2tlZCwgMCwgc2l6ZW9mKGNoZWNrZWQpKTsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJc2l6ZSA9IHJlYWRsKEZMRFRDTlRSKGZsY3RsKSkgPj4gMjQ7CisJCWlmIChzaXplICYgMHhGRikKKwkJCXJldHVybiAwOwkvKiBzdWNjZXNzICovCisKKwkJaWYgKHJlYWRsKEZMNEVDQ0NSKGZsY3RsKSkgJiBfNEVDQ0ZBKQorCQkJcmV0dXJuIDE7CS8qIGNhbid0IGNvcnJlY3QgKi8KKworCQl1ZGVsYXkoMSk7CisJCWlmICghKHJlYWRsKEZMNEVDQ0NSKGZsY3RsKSkgJiBfNEVDQ0VORCkpCisJCQljb250aW51ZTsKKworCQkvKiBzdGFydCBlcnJvciBjb3JyZWN0aW9uICovCisJCWVjY19yZWdbMF0gPSBGTDRFQ0NSRVNVTFQwKGZsY3RsKTsKKwkJZWNjX3JlZ1sxXSA9IEZMNEVDQ1JFU1VMVDEoZmxjdGwpOworCQllY2NfcmVnWzJdID0gRkw0RUNDUkVTVUxUMihmbGN0bCk7CisJCWVjY19yZWdbM10gPSBGTDRFQ0NSRVNVTFQzKGZsY3RsKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlkYXRhID0gcmVhZGwoZWNjX3JlZ1tpXSk7CisJCQlpZiAoZGF0YSAhPSBJTklUX0ZMNEVDQ1JFU1VMVF9WQUwgJiYgIWNoZWNrZWRbaV0pIHsKKwkJCQl1aW50OF90IG9yZzsKKwkJCQlpbnQgaW5kZXg7CisKKwkJCQlpbmRleCA9IGRhdGEgPj4gMTY7CisJCQkJb3JnID0gZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisJCQkJZmxjdGwtPmRvbmVfYnVmZltpbmRleF0gPSBvcmcgXiAoZGF0YSAmIDB4RkYpOworCQkJCWNoZWNrZWRbaV0gPSAxOworCQkJfQorCQl9CisKKwkJd3JpdGVsKDAsIEZMNEVDQ0NSKGZsY3RsKSk7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJcmV0dXJuIDE7CS8qIHRpbWVvdXQgKi8KK30KKworc3RhdGljIHZvaWQgd2FpdF93ZWNmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisJdWludDMyX3QgbGVuOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkvKiBjaGVjayBGTEVDRklGTyAqLworCQlsZW4gPSAocmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAyNCkgJiAweEZGOworCQlpZiAobGVuID49IDQpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZGF0YXJlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisKKwl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCisJZGF0YSA9IHJlYWRsKEZMREFUQVIoZmxjdGwpKTsKKwkqYnVmID0gbGUzMl90b19jcHUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZmlmb3JlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBpbnQgcmxlbiwgaW50IG9mZnNldCkKK3sKKwlpbnQgaSwgbGVuXzRhbGlnbjsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTERURklGTyhmbGN0bCk7CisKKwlsZW5fNGFsaWduID0gKHJsZW4gKyAzKSAvIDQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuXzRhbGlnbjsgaSsrKSB7CisJCXdhaXRfcmZpZm9fcmVhZHkoZmxjdGwpOworCQlidWZbaV0gPSByZWFkbChmaWZvX2FkZHIpOworCQlidWZbaV0gPSBiZTMyX3RvX2NwdShidWZbaV0pOworCX0KK30KKworc3RhdGljIGludCByZWFkX2VjZmlmb3JlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCB1aW50OF90ICpidWZmKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgKmVjY19idWYgPSAodW5zaWduZWQgbG9uZyAqKWJ1ZmY7CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTEVDRklGTyhmbGN0bCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmICh3YWl0X3JlY2ZpZm9fcmVhZHkoZmxjdGwpKQorCQkJcmV0dXJuIDE7CisJCWVjY19idWZbaV0gPSByZWFkbChmaWZvX2FkZHIpOworCQllY2NfYnVmW2ldID0gYmUzMl90b19jcHUoZWNjX2J1ZltpXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHJsZW4sIGludCBvZmZzZXQpCit7CisJaW50IGksIGxlbl80YWxpZ247CisJdW5zaWduZWQgbG9uZyAqZGF0YSA9ICh1bnNpZ25lZCBsb25nICopJmZsY3RsLT5kb25lX2J1ZmZbb2Zmc2V0XTsKKwl2b2lkICpmaWZvX2FkZHIgPSAodm9pZCAqKUZMRFRGSUZPKGZsY3RsKTsKKworCWxlbl80YWxpZ24gPSAocmxlbiArIDMpIC8gNDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuXzRhbGlnbjsgaSsrKSB7CisJCXdhaXRfd2ZpZm9fcmVhZHkoZmxjdGwpOworCQl3cml0ZWwoY3B1X3RvX2JlMzIoZGF0YVtpXSksIGZpZm9fYWRkcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfY21kX3JlZ3Moc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQzMl90IGNtZCwgdWludDMyX3QgZmxjbWNkcl92YWwpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IGZsY21uY3JfdmFsID0gcmVhZGwoRkxDTU5DUihmbGN0bCkpOworCXVpbnQzMl90IGZsY21kY3JfdmFsLCBhZGRyX2xlbl9ieXRlcyA9IDA7CisKKwkvKiBTZXQgU05BTkQgYml0IGlmIHBhZ2Ugc2l6ZSBpcyAyMDQ4Ynl0ZSAqLworCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQlmbGNtbmNyX3ZhbCB8PSBTTkFORF9FOworCWVsc2UKKwkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CisKKwkvKiBkZWZhdWx0IEZMQ01EQ1IgdmFsICovCisJZmxjbWRjcl92YWwgPSBET0NNRDFfRSB8IERPQURSX0U7CisKKwkvKiBTZXQgZm9yIEZMQ01EQ1IgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkFORF9DTURfRVJBU0UxOgorCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5lcmFzZV9BRFJDTlQ7CisJCWZsY21kY3JfdmFsIHw9IERPQ01EMl9FOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1JFQUQwOgorCWNhc2UgTkFORF9DTURfUkVBRE9PQjoKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBDRFNSQ19FOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQkvKiBUaGlzIGNhc2UgaXMgdGhhdCBjbWQgaXMgUkVBRDAgb3IgUkVBRDEgb3IgUkVBRDAwICovCisJCWZsY21kY3JfdmFsICY9IH5ET0FEUl9FOwkvKiBPTkxZIGV4ZWN1dGUgMXN0IGNtZCAqLworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5yd19BRFJDTlQ7CisJCWZsY21kY3JfdmFsIHw9IERPQ01EMl9FIHwgQ0RTUkNfRSB8IFNFTFJXOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1JFQURJRDoKKwkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CisJCWFkZHJfbGVuX2J5dGVzID0gQURSQ05UXzE7CisJCWJyZWFrOworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCWNhc2UgTkFORF9DTURfUkVTRVQ6CisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCQlmbGNtZGNyX3ZhbCAmPSB+KERPQURSX0UgfCBET1NSX0UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBTZXQgYWRkcmVzcyBieXRlcyBwYXJhbWV0ZXIgKi8KKwlmbGNtZGNyX3ZhbCB8PSBhZGRyX2xlbl9ieXRlczsKKworCS8qIE5vdyBhY3R1YWxseSB3cml0ZSAqLworCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCXdyaXRlbChmbGNtZGNyX3ZhbCwgRkxDTURDUihmbGN0bCkpOworCXdyaXRlbChmbGNtY2RyX3ZhbCwgRkxDTUNEUihmbGN0bCkpOworfQorCitzdGF0aWMgaW50IGZsY3RsX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQl1aW50OF90ICpidWYpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKnAgPSBidWY7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJaWYgKGZsY3RsLT5od2VjY19jYW50X2NvcnJlY3RbaV0pCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJZWxzZQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF9yZWFkX3BhZ2Vfc2VjdG9yKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgc2VjdG9yLCBwYWdlX3NlY3RvcnM7CisKKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJcGFnZV9zZWN0b3JzID0gNDsKKwllbHNlCisJCXBhZ2Vfc2VjdG9ycyA9IDE7CisKKwl3cml0ZWwocmVhZGwoRkxDTU5DUihmbGN0bCkpIHwgQUNNX1NBQ0NFU19NT0RFIHwgXzRFQ0NDT1JSRUNULAorCQkgRkxDTU5DUihmbGN0bCkpOworCisJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfUkVBRDAsCisJCShOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkgfCBOQU5EX0NNRF9SRUFEMCk7CisKKwlmb3IgKHNlY3RvciA9IDA7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJaW50IHJldDsKKworCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJd3JpdGVsKHJlYWRsKEZMQ01EQ1IoZmxjdGwpKSB8IDEsIEZMQ01EQ1IoZmxjdGwpKTsKKwkJd3JpdGVsKHBhZ2VfYWRkciA8PCAyIHwgc2VjdG9yLCBGTEFEUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCA1MTIsIDUxMiAqIHNlY3Rvcik7CisKKwkJcmV0ID0gcmVhZF9lY2ZpZm9yZWcoZmxjdGwsCisJCQkmZmxjdGwtPmRvbmVfYnVmZlttdGQtPndyaXRlc2l6ZSArIDE2ICogc2VjdG9yXSk7CisKKwkJaWYgKHJldCkKKwkJCWZsY3RsLT5od2VjY19jYW50X2NvcnJlY3Rbc2VjdG9yXSA9IDE7CisKKwkJd3JpdGVsKDB4MCwgRkw0RUNDQ1IoZmxjdGwpKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9CisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSAmIH4oQUNNX1NBQ0NFU19NT0RFIHwgXzRFQ0NDT1JSRUNUKSwKKwkJCUZMQ01OQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgZXhlY21kX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1JFQUQwLAorCQkoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpIHwgTkFORF9DTURfUkVBRDApOworCisJZW1wdHlfZmlmbyhmbGN0bCk7CisJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJaW50IGk7CisJCS8qIEluIGNhc2UgdGhhdCB0aGUgcGFnZSBzaXplIGlzIDJrICovCisJCWZvciAoaSA9IDA7IGkgPCAxNiAqIDM7IGkrKykKKwkJCWZsY3RsLT5kb25lX2J1ZmZbaV0gPSAweEZGOworCisJCXNldF9hZGRyKG10ZCwgMyAqIDUyOCArIDUxMiwgcGFnZV9hZGRyKTsKKwkJd3JpdGVsKDE2LCBGTERUQ05UUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCAxNiwgMTYgKiAzKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9IGVsc2UgeworCQkvKiBJbiBjYXNlIHRoYXQgdGhlIHBhZ2Ugc2l6ZSBpcyA1MTJiICovCisJCXNldF9hZGRyKG10ZCwgNTEyLCBwYWdlX2FkZHIpOworCQl3cml0ZWwoMTYsIEZMRFRDTlRSKGZsY3RsKSk7CisKKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2ZpZm9yZWcoZmxjdGwsIDE2LCAwKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF93cml0ZV9wYWdlX3NlY3RvcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IGksIHBhZ2VfYWRkciA9IGZsY3RsLT5zZXFpbl9wYWdlX2FkZHI7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpCisJCXBhZ2Vfc2VjdG9ycyA9IDQ7CisJZWxzZQorCQlwYWdlX3NlY3RvcnMgPSAxOworCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IEFDTV9TQUNDRVNfTU9ERSwgRkxDTU5DUihmbGN0bCkpOworCisJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfUEFHRVBST0csCisJCQkoTkFORF9DTURfUEFHRVBST0cgPDwgOCkgfCBOQU5EX0NNRF9TRVFJTik7CisKKwlmb3IgKHNlY3RvciA9IDA7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXdyaXRlbChyZWFkbChGTENNRENSKGZsY3RsKSkgfCAxLCBGTENNRENSKGZsY3RsKSk7CisJCXdyaXRlbChwYWdlX2FkZHIgPDwgMiB8IHNlY3RvciwgRkxBRFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIDUxMiwgNTEyICogc2VjdG9yKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl3YWl0X3dlY2ZpZm9fcmVhZHkoZmxjdGwpOyAvKiB3YWl0IGZvciB3cml0ZSByZWFkeSAqLworCQkJd3JpdGVsKDB4RkZGRkZGRkYsIEZMRUNGSUZPKGZsY3RsKSk7CisJCX0KKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9CisKKwl3cml0ZWwocmVhZGwoRkxDTU5DUihmbGN0bCkpICYgfkFDTV9TQUNDRVNfTU9ERSwgRkxDTU5DUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCBleGVjbWRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgcGFnZV9hZGRyID0gZmxjdGwtPnNlcWluX3BhZ2VfYWRkcjsKKwlpbnQgc2VjdG9yLCBwYWdlX3NlY3RvcnM7CisKKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgeworCQlzZWN0b3IgPSAzOworCQlwYWdlX3NlY3RvcnMgPSA0OworCX0gZWxzZSB7CisJCXNlY3RvciA9IDA7CisJCXBhZ2Vfc2VjdG9ycyA9IDE7CisJfQorCisJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfUEFHRVBST0csCisJCQkoTkFORF9DTURfUEFHRVBST0cgPDwgOCkgfCBOQU5EX0NNRF9TRVFJTik7CisKKwlmb3IgKDsgc2VjdG9yIDwgcGFnZV9zZWN0b3JzOyBzZWN0b3IrKykgeworCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJc2V0X2FkZHIobXRkLCBzZWN0b3IgKiA1MjggKyA1MTIsIHBhZ2VfYWRkcik7CisJCXdyaXRlbCgxNiwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHJlYWQgc2l6ZSAqLworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJd3JpdGVfZmlmb3JlZyhmbGN0bCwgMTYsIDE2ICogc2VjdG9yKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX2NtZGZ1bmMoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBjb21tYW5kLAorCQkJaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJdWludDMyX3QgcmVhZF9jbWQgPSAwOworCisJZmxjdGwtPnJlYWRfYnl0ZXMgPSAwOworCWlmIChjb21tYW5kICE9IE5BTkRfQ01EX1BBR0VQUk9HKQorCQlmbGN0bC0+aW5kZXggPSAwOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBOQU5EX0NNRF9SRUFEMToKKwljYXNlIE5BTkRfQ01EX1JFQUQwOgorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiByZWFkIHBhZ2Ugd2l0aCBod2VjYyAqLworCQkJZXhlY21kX3JlYWRfcGFnZV9zZWN0b3IobXRkLCBwYWdlX2FkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgKE5BTkRfQ01EX1JFQURTVEFSVCA8PCA4KQorCQkJCXwgY29tbWFuZCk7CisJCWVsc2UKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIGNvbW1hbmQpOworCisJCXNldF9hZGRyKG10ZCwgMCwgcGFnZV9hZGRyKTsKKworCQlmbGN0bC0+cmVhZF9ieXRlcyA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplOworCQlmbGN0bC0+aW5kZXggKz0gY29sdW1uOworCQlnb3RvIHJlYWRfbm9ybWFsX2V4aXQ7CisKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWlmIChmbGN0bC0+aHdlY2MpIHsKKwkJCS8qIHJlYWQgcGFnZSB3aXRoIGh3ZWNjICovCisJCQlleGVjbWRfcmVhZF9vb2IobXRkLCBwYWdlX2FkZHIpOworCQkJYnJlYWs7CisJCX0KKworCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkKKwkJCQl8IE5BTkRfQ01EX1JFQUQwKTsKKwkJCXNldF9hZGRyKG10ZCwgbXRkLT53cml0ZXNpemUsIHBhZ2VfYWRkcik7CisJCX0gZWxzZSB7CisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJCXNldF9hZGRyKG10ZCwgMCwgcGFnZV9hZGRyKTsKKwkJfQorCQlmbGN0bC0+cmVhZF9ieXRlcyA9IG10ZC0+b29ic2l6ZTsKKwkJZ290byByZWFkX25vcm1hbF9leGl0OworCisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAwLCAwKTsKKworCQlmbGN0bC0+cmVhZF9ieXRlcyA9IDQ7CisJCXdyaXRlbChmbGN0bC0+cmVhZF9ieXRlcywgRkxEVENOVFIoZmxjdGwpKTsgLyogc2V0IHJlYWQgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZGF0YXJlZyhmbGN0bCwgMCk7CS8qIHJlYWQgYW5kIGVuZCAqLworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfRVJBU0UxOgorCQlmbGN0bC0+ZXJhc2UxX3BhZ2VfYWRkciA9IHBhZ2VfYWRkcjsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMjoKKwkJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfRVJBU0UxLAorCQkJKGNvbW1hbmQgPDwgOCkgfCBOQU5EX0NNRF9FUkFTRTEpOworCQlzZXRfYWRkcihtdGQsIC0xLCBmbGN0bC0+ZXJhc2UxX3BhZ2VfYWRkcik7CisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlpZiAoIWZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCS8qIG91dHB1dCByZWFkIGNvbW1hbmQgKi8KKwkJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKKwkJCQljb2x1bW4gLT0gbXRkLT53cml0ZXNpemU7CisJCQkJcmVhZF9jbWQgPSBOQU5EX0NNRF9SRUFET09COworCQkJfSBlbHNlIGlmIChjb2x1bW4gPCAyNTYpIHsKKwkJCQlyZWFkX2NtZCA9IE5BTkRfQ01EX1JFQUQwOworCQkJfSBlbHNlIHsKKwkJCQljb2x1bW4gLT0gMjU2OworCQkJCXJlYWRfY21kID0gTkFORF9DTURfUkVBRDE7CisJCQl9CisJCX0KKwkJZmxjdGwtPnNlcWluX2NvbHVtbiA9IGNvbHVtbjsKKwkJZmxjdGwtPnNlcWluX3BhZ2VfYWRkciA9IHBhZ2VfYWRkcjsKKwkJZmxjdGwtPnNlcWluX3JlYWRfY21kID0gcmVhZF9jbWQ7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmICghZmxjdGwtPnBhZ2Vfc2l6ZSkgeworCQkJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfU0VRSU4sCisJCQkJCWZsY3RsLT5zZXFpbl9yZWFkX2NtZCk7CisJCQlzZXRfYWRkcihtdGQsIC0xLCAtMSk7CisJCQl3cml0ZWwoMCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IDAgc2l6ZSAqLworCQkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwkJfQorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiB3cml0ZSBwYWdlIHdpdGggaHdlY2MgKi8KKwkJCWlmIChmbGN0bC0+c2VxaW5fY29sdW1uID09IG10ZC0+d3JpdGVzaXplKQorCQkJCWV4ZWNtZF93cml0ZV9vb2IobXRkKTsKKwkJCWVsc2UgaWYgKCFmbGN0bC0+c2VxaW5fY29sdW1uKQorCQkJCWV4ZWNtZF93cml0ZV9wYWdlX3NlY3RvcihtdGQpOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBhZGRyZXNzICE/XG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChjb21tYW5kIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCQlzZXRfYWRkcihtdGQsIGZsY3RsLT5zZXFpbl9jb2x1bW4sIGZsY3RsLT5zZXFpbl9wYWdlX2FkZHIpOworCQl3cml0ZWwoZmxjdGwtPmluZGV4LCBGTERUQ05UUihmbGN0bCkpOwkvKiBzZXQgd3JpdGUgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIGZsY3RsLT5pbmRleCwgMCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CisJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIGNvbW1hbmQpOworCQlzZXRfYWRkcihtdGQsIC0xLCAtMSk7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSAxOworCQl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7IC8qIHNldCByZWFkIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2RhdGFyZWcoZmxjdGwsIDApOyAvKiByZWFkIGFuZCBlbmQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCisJCXdyaXRlbCgwLCBGTERUQ05UUihmbGN0bCkpOwkvKiBzZXQgMCBzaXplICovCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworCityZWFkX25vcm1hbF9leGl0OgorCXdyaXRlbChmbGN0bC0+cmVhZF9ieXRlcywgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHJlYWQgc2l6ZSAqLworCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwlyZWFkX2ZpZm9yZWcoZmxjdGwsIGZsY3RsLT5yZWFkX2J5dGVzLCAwKTsKKwl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZmxjdGxfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwbnIpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IGZsY21uY3JfdmFsID0gcmVhZGwoRkxDTU5DUihmbGN0bCkpOworCisJc3dpdGNoIChjaGlwbnIpIHsKKwljYXNlIC0xOgorCQlmbGNtbmNyX3ZhbCAmPSB+Q0UwX0VOQUJMRTsKKwkJd3JpdGVsKGZsY21uY3JfdmFsLCBGTENNTkNSKGZsY3RsKSk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJZmxjbW5jcl92YWwgfD0gQ0UwX0VOQUJMRTsKKwkJd3JpdGVsKGZsY21uY3JfdmFsLCBGTENNTkNSKGZsY3RsKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHZvaWQgZmxjdGxfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpLCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJZmxjdGwtPmRvbmVfYnVmZltpbmRleCArIGldID0gYnVmW2ldOworCWZsY3RsLT5pbmRleCArPSBsZW47Cit9CisKK3N0YXRpYyB1aW50OF90IGZsY3RsX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IGluZGV4ID0gZmxjdGwtPmluZGV4OworCXVpbnQ4X3QgZGF0YTsKKworCWRhdGEgPSBmbGN0bC0+ZG9uZV9idWZmW2luZGV4XTsKKwlmbGN0bC0+aW5kZXgrKzsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZmxjdGxfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJYnVmW2ldID0gZmxjdGxfcmVhZF9ieXRlKG10ZCk7Cit9CisKK3N0YXRpYyBpbnQgZmxjdGxfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChidWZbaV0gIT0gZmxjdGxfcmVhZF9ieXRlKG10ZCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmxjdGxfcmVnaXN0ZXJfaW5pdChzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBGTENNTkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyBpbnQgZmxjdGxfY2hpcF9pbml0X3RhaWwoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAmZmxjdGwtPmNoaXA7CisKKwlpZiAobXRkLT53cml0ZXNpemUgPT0gNTEyKSB7CisJCWZsY3RsLT5wYWdlX3NpemUgPSAwOworCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMzIgPDwgMjApKSB7CisJCQkvKiBiaWcgdGhhbiAzMk1CICovCisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UXzQ7CisJCQlmbGN0bC0+ZXJhc2VfQURSQ05UID0gQURSQ05UXzM7CisJCX0gZWxzZSBpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMiA8PCAxNikpIHsKKwkJCS8qIGJpZyB0aGFuIDEyOEtCICovCisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UXzM7CisJCQlmbGN0bC0+ZXJhc2VfQURSQ05UID0gQURSQ05UXzI7CisJCX0gZWxzZSB7CisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UXzI7CisJCQlmbGN0bC0+ZXJhc2VfQURSQ05UID0gQURSQ05UXzE7CisJCX0KKwl9IGVsc2UgeworCQlmbGN0bC0+cGFnZV9zaXplID0gMTsKKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDEyOCA8PCAyMCkpIHsKKwkJCS8qIGJpZyB0aGFuIDEyOE1CICovCisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UMl9FOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8zOworCQl9IGVsc2UgaWYgKGNoaXAtPmNoaXBzaXplID4gKDggPDwgMTYpKSB7CisJCQkvKiBiaWcgdGhhbiA1MTJLQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF80OworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8yOworCQl9IGVsc2UgeworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8zOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8xOworCQl9CisJfQorCisJaWYgKGZsY3RsLT5od2VjYykgeworCQlpZiAobXRkLT53cml0ZXNpemUgPT0gNTEyKSB7CisJCQljaGlwLT5lY2MubGF5b3V0ID0gJmZsY3RsXzRzZWNjX29vYl8xNjsKKwkJCWNoaXAtPmJhZGJsb2NrX3BhdHRlcm4gPSAmZmxjdGxfNHNlY2Nfc21hbGxwYWdlOworCQl9IGVsc2UgeworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZmbGN0bF80c2VjY19vb2JfNjQ7CisJCQljaGlwLT5iYWRibG9ja19wYXR0ZXJuID0gJmZsY3RsXzRzZWNjX2xhcmdlcGFnZTsKKwkJfQorCisJCWNoaXAtPmVjYy5zaXplID0gNTEyOworCQljaGlwLT5lY2MuYnl0ZXMgPSAxMDsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IGZsY3RsX3JlYWRfcGFnZV9od2VjYzsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBmbGN0bF93cml0ZV9wYWdlX2h3ZWNjOworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCisJCS8qIDQgc3ltYm9scyBFQ0MgZW5hYmxlZCAqLworCQl3cml0ZWwocmVhZGwoRkxDTU5DUihmbGN0bCkpIHwgXzRFQ0NFTiB8IEVDQ1BPUzIgfCBFQ0NQT1NfMDIsCisJCQkJRkxDTU5DUihmbGN0bCkpOworCX0gZWxzZSB7CisJCWNoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZmxjdGxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsOworCXN0cnVjdCBtdGRfaW5mbyAqZmxjdGxfbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQ7CisJc3RydWN0IHNoX2ZsY3RsX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2hfZmxjdGwgcGxhdGZvcm1fZGF0YSBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZmxjdGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfZmxjdGwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZsY3RsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIE5BTkQgTVREIGRldiBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNvdXJjZSBub3QgZm91bmQuXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCWZsY3RsLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmIChmbGN0bC0+cmVnID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBlcnJvci5cbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZmxjdGwpOworCWZsY3RsX210ZCA9ICZmbGN0bC0+bXRkOworCW5hbmQgPSAmZmxjdGwtPmNoaXA7CisJZmxjdGxfbXRkLT5wcml2ID0gbmFuZDsKKwlmbGN0bC0+aHdlY2MgPSBwZGF0YS0+aGFzX2h3ZWNjOworCisJZmxjdGxfcmVnaXN0ZXJfaW5pdChmbGN0bCwgcGRhdGEtPmZsY21uY3JfdmFsKTsKKworCW5hbmQtPm9wdGlvbnMgPSBOQU5EX05PX0FVVE9JTkNSOworCisJLyogU2V0IGFkZHJlc3Mgb2YgaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbiAqLworCS8qIDIwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLworCW5hbmQtPmNoaXBfZGVsYXkgPSAyMDsKKworCW5hbmQtPnJlYWRfYnl0ZSA9IGZsY3RsX3JlYWRfYnl0ZTsKKwluYW5kLT53cml0ZV9idWYgPSBmbGN0bF93cml0ZV9idWY7CisJbmFuZC0+cmVhZF9idWYgPSBmbGN0bF9yZWFkX2J1ZjsKKwluYW5kLT52ZXJpZnlfYnVmID0gZmxjdGxfdmVyaWZ5X2J1ZjsKKwluYW5kLT5zZWxlY3RfY2hpcCA9IGZsY3RsX3NlbGVjdF9jaGlwOworCW5hbmQtPmNtZGZ1bmMgPSBmbGN0bF9jbWRmdW5jOworCisJcmV0ID0gbmFuZF9zY2FuX2lkZW50KGZsY3RsX210ZCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBmbGN0bF9jaGlwX2luaXRfdGFpbChmbGN0bF9tdGQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gbmFuZF9zY2FuX3RhaWwoZmxjdGxfbXRkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWFkZF9tdGRfcGFydGl0aW9ucyhmbGN0bF9tdGQsIHBkYXRhLT5wYXJ0cywgcGRhdGEtPm5yX3BhcnRzKTsKKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUoZmxjdGwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGZsY3RsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW5hbmRfcmVsZWFzZSgmZmxjdGwtPm10ZCk7CisJa2ZyZWUoZmxjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZsY3RsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZmxjdGxfcHJvYmUsCisJLnJlbW92ZQkJPSBmbGN0bF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic2hfZmxjdGwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZmxjdGxfbmFuZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZmxjdGxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZsY3RsX25hbmRfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmbGN0bF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChmbGN0bF9uYW5kX2luaXQpOworbW9kdWxlX2V4aXQoZmxjdGxfbmFuZF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiWW9zaGloaXJvIFNoaW1vZGEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIEZMQ1RMIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaF9mbGN0bCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmNDkyZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYworKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogIGRyaXZlcnMvbXRkL25hbmQvdG90by5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwMyBUZXhhcyBJbnN0cnVtZW50cwotICoKLSAqICBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvYXV0Y3B1MTIuYwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDIgVGhvbWFzIEdsZWl4bmVyIDx0Z3hsQGxpbnV0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgT3ZlcnZpZXc6Ci0gKiAgIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBkZXZpY2UgZm91bmQgb24gdGhlCi0gKiAgIFRJIGZpZG8gYm9hcmQuIEl0IHN1cHBvcnRzIDMyTWlCIGFuZCA2NE1pQiBjYXJkcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3RvdG8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1vbWFwMTUxMC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLQotI2RlZmluZSBDT05GSUdfTkFORF9XT1JLQVJPVU5EIDEKLQotLyoKLSAqIE1URCBzdHJ1Y3R1cmUgZm9yIFRPVE8gYm9hcmQKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqdG90b19tdGQgPSBOVUxMOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RvX2lvX2Jhc2UgPSBPTUFQX0ZMQVNIXzFfQkFTRTsKLQotLyoKLSAqIERlZmluZSBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2VzCi0gKi8KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvNjRNW10gPSB7Ci0JeyAubmFtZSA9CSJ0b3RvIGtlcm5lbCBwYXJ0aXRpb24gMSIsCi0JICAub2Zmc2V0ID0JMCwKLQkgIC5zaXplCT0JMiAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIGZpbGUgc3lzIHBhcnRpdGlvbiAyIiwKLQkgIC5vZmZzZXQgPQkyICogU1pfMU0sCi0JICAuc2l6ZSA9CTE0ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gdXNlciBwYXJ0aXRpb24gMyIsCi0JICAub2Zmc2V0ID0JMTYgKiBTWl8xTSwKLQkgIC5zaXplID0JMTYgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBkZXZib2FyZCBleHRyYSBwYXJ0aXRpb24gNCIsCi0JICAub2Zmc2V0ID0JMzIgKiBTWl8xTSwKLQkgIC5zaXplID0JMzIgKiBTWl8xTSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvMzJNW10gPSB7Ci0JeyAubmFtZSA9CSJ0b3RvIGtlcm5lbCBwYXJ0aXRpb24gMSIsCi0JICAub2Zmc2V0ID0JMCwKLQkgIC5zaXplID0JMiAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIGZpbGUgc3lzIHBhcnRpdGlvbiAyIiwKLQkgIC5vZmZzZXQgPQkyICogU1pfMU0sCi0JICAuc2l6ZSA9CTE0ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gdXNlciBwYXJ0aXRpb24gMyIsCi0JICAub2Zmc2V0ID0JMTYgKiBTWl8xTSwKLQkgIC5zaXplID0JMTYgKiBTWl8xTSB9LAotfTsKLQotI2RlZmluZSBOVU1fUEFSVElUSU9OUzMyTSAzCi0jZGVmaW5lIE5VTV9QQVJUSVRJT05TNjRNIDQKLQotLyoKLSAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCi0gKgotICoJY3RybDoKLSAqCU5BTkRfTkNFOiBiaXQgMCAtPiBiaXQgMTQgKDB4NDAwMCkKLSAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMTIgKDB4MTAwMCkKLSAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMSAgKDB4MDAwMikKLSAqLwotc3RhdGljIHZvaWQgdG90b19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgY3RybCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwotCi0JaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYml0czsKLQotCQkvKiBob3BlZnVsbHkgZW5vdWdoIHRpbWUgZm9yIHRjIG1ha2UgcHJvY2VkaW5nIHdyaXRlIHRvIGNsZWFyICovCi0JCXVkZWxheSgxKTsKLQotCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpIDw8IDE0OwotCQliaXRzIHw9IChjdHJsICYgTkFORF9DTEUpIDw8IDEyOwotCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDE7Ci0KLSN3YXJuaW5nIFdpbGQgZ3Vlc3MgYXMgZ3Bpb3NldG91dCgpIGlzIG5vd2hlcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsIHNvdXJjZSAtIHRnbHgKLQkJZ3Bpb3NldG91dCgweDUwMDIsIGJpdHMpOwotCi0jaWZkZWYgQ09ORklHX05BTkRfV09SS0FST1VORAotCQkvKiAic29tZSIgZGV2IGJvYXJkcyBidXN0ZWQsIGJsdWUgd2lyZWQgdG8gcnRzMiA6KCAqLwotCQlydHMyc2V0b3V0KDIsIChjdHJsICYgTkFORF9DTEUpIDw8IDEpOwotI2VuZGlmCi0JCS8qIGFsbG93IHRpbWUgdG8gZW5zdXJlIGdwaW8gc3RhdGUgdG8gb3ZlciB0YWtlIG1lbW9yeSB3cml0ZSAqLwotCQl1ZGVsYXkoMSk7Ci0JfQotCi0JaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQotCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwotfQotCi0vKgotICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHRvdG9faW5pdCh2b2lkKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQl0b3RvX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwotCWlmICghdG90b19tdGQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGFsbG9jYXRlIHRvdG8gTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnRvdG9fbXRkWzFdKTsKLQotCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCh0b3RvX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwotCi0JLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KLQl0b3RvX210ZC0+cHJpdiA9IHRoaXM7Ci0JdG90b19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCi0JdGhpcy0+SU9fQUREUl9SID0gdG90b19pb19iYXNlOwotCXRoaXMtPklPX0FERFJfVyA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5jbWRfY3RybCA9IHRvdG9faHdjb250cm9sOwotCXRoaXMtPmRldl9yZWFkeSA9IE5VTEw7Ci0JLyogMjUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCi0JdGhpcy0+Y2hpcF9kZWxheSA9IDMwOwotCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKLQotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4odG90b19tdGQsIDEpKSB7Ci0JCWVyciA9IC1FTlhJTzsKLQkJZ290byBvdXRfbXRkOwotCX0KLQotCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCi0Jc3dpdGNoICh0b3RvX210ZC0+c2l6ZSkgewotCWNhc2UgU1pfNjRNOgotCQlhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvNjRNLCBOVU1fUEFSVElUSU9OUzY0TSk7Ci0JCWJyZWFrOwotCWNhc2UgU1pfMzJNOgotCQlhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvMzJNLCBOVU1fUEFSVElUSU9OUzMyTSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6ewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5zdXBwb3J0ZWQgTmFuZCBkZXZpY2VcbiIpOwotCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBvdXRfYnVmOwotCQl9Ci0JfQotCi0JZ3Bpb3Jlc2VydmUoTkFORF9NQVNLKTsJLyogY2xhaW0gb3VyIGdwaW9zICovCi0JYXJjaGZsYXNod3AoMCwgMCk7CS8qIG9wZW4gdXAgZmxhc2ggZm9yIHdyaXRpbmcgKi8KLQotCWdvdG8gb3V0OwotCi0gb3V0X210ZDoKLQlrZnJlZSh0b3RvX210ZCk7Ci0gb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLW1vZHVsZV9pbml0KHRvdG9faW5pdCk7Ci0KLS8qCi0gKiBDbGVhbiB1cCByb3V0aW5lCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB0b3RvX2NsZWFudXAodm9pZCkKLXsKLQkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UodG90b19tdGQpOwotCi0JLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSh0b3RvX210ZCk7Ci0KLQkvKiBzdG9wIGZsYXNoIHdyaXRlcyAqLwotCWFyY2hmbGFzaHdwKDAsIDEpOwotCi0JLyogcmVsZWFzZSBncGlvcyB0byBzeXN0ZW0gKi8KLQlncGlvcmVsZWFzZShOQU5EX01BU0spOwotfQotCi1tb2R1bGVfZXhpdCh0b3RvX2NsZWFudXApOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkdsdWUgbGF5ZXIgZm9yIE5BTkQgZmxhc2ggb24gdG90byBib2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb2ZwYXJ0LmMgYi9kcml2ZXJzL210ZC9vZnBhcnQuYwppbmRleCA0ZjgwYzJmLi45ZTQ1YjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vZnBhcnQuYworKysgYi9kcml2ZXJzL210ZC9vZnBhcnQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKIGludCBfX2RldmluaXQgb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoc3RydWN0IGRldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwppbmRleCBjYjQxY2JjLi43OWZhNzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCkBAIC0yNyw4ICsyNywxNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE9uZU5BTkQgZmxhc2ggdmlhIHBsYXRmb3JtIGRldmljZSBkcml2ZXIuCiAKK2NvbmZpZyBNVERfT05FTkFORF9PTUFQMgorCXRyaXN0YXRlICJPbmVOQU5EIG9uIE9NQVAyL09NQVAzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNVERfT05FTkFORCAmJiAoQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzKQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGEgT25lTkFORCBmbGFzaCBkZXZpY2UgY29ubmVjdGVkIHRvIGFuIE9NQVAyL09NQVAzIENQVQorCSAgdmlhIHRoZSBHUE1DIG1lbW9yeSBjb250cm9sbGVyLgorCiBjb25maWcgTVREX09ORU5BTkRfT1RQCiAJYm9vbCAiT25lTkFORCBPVFAgU3VwcG9ydCIKKwlzZWxlY3QgSEFWRV9NVERfT1RQCiAJaGVscAogCSAgT25lIEJsb2NrIG9mIHRoZSBOQU5EIEZsYXNoIEFycmF5IG1lbW9yeSBpcyByZXNlcnZlZCBhcwogCSAgYSBPbmUtVGltZSBQcm9ncmFtbWFibGUgQmxvY2sgbWVtb3J5IGFyZWEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQppbmRleCA0ZDJlYWNmLi42NGI2Y2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiAKICMgQm9hcmQgc3BlY2lmaWMuCiBvYmotJChDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQykJKz0gZ2VuZXJpYy5vCitvYmotJChDT05GSUdfTVREX09ORU5BTkRfT01BUDIpCQkrPSBvbWFwMi5vCiAKICMgU2ltdWxhdG9yCiBvYmotJChDT05GSUdfTVREX09ORU5BTkRfU0lNKQkJKz0gb25lbmFuZF9zaW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODdlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKQEAgLTAsMCArMSw4MDIgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCisgKgorICogIE9uZU5BTkQgZHJpdmVyIGZvciBPTUFQMiAvIE9NQVAzCisgKgorICogIENvcHlyaWdodCDCqSAyMDA1LTIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiAgQXV0aG9yOiBKYXJra28gTGF2aW5lbiA8amFya2tvLmxhdmluZW5Abm9raWEuY29tPiBhbmQgSnVoYSBZcmrDtmzDpAorICogIElSUSBhbmQgRE1BIHN1cHBvcnQgd3JpdHRlbiBieSBUaW1vIFRlcmFzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbmVuYW5kLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm9tYXAyLW9uZW5hbmQiCisKKyNkZWZpbmUgT05FTkFORF9JT19TSVpFCQlTWl8xMjhLCisjZGVmaW5lIE9ORU5BTkRfQlVGUkFNX1NJWkUJKDEwMjQgKiA1KQorCitzdHJ1Y3Qgb21hcDJfb25lbmFuZCB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgZ3BtY19jczsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKKwlpbnQgZ3Bpb19pcnE7CisJc3RydWN0IG10ZF9pbmZvIG10ZDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJc3RydWN0IG9uZW5hbmRfY2hpcCBvbmVuYW5kOworCXN0cnVjdCBjb21wbGV0aW9uIGlycV9kb25lOworCXN0cnVjdCBjb21wbGV0aW9uIGRtYV9kb25lOworCWludCBkbWFfY2hhbm5lbDsKKwlpbnQgZnJlcTsKKwlpbnQgKCpzZXR1cCkodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgZnJlcSk7Cit9OworCitzdGF0aWMgdm9pZCBvbWFwMl9vbmVuYW5kX2RtYV9jYihpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGF0YTsKKworCWNvbXBsZXRlKCZjLT5kbWFfZG9uZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMl9vbmVuYW5kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfaWQ7CisKKwljb21wbGV0ZSgmYy0+aXJxX2RvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHJlYWRfcmVnKHN0cnVjdCBvbWFwMl9vbmVuYW5kICpjLCBpbnQgcmVnKQoreworCXJldHVybiByZWFkdyhjLT5vbmVuYW5kLmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfcmVnKHN0cnVjdCBvbWFwMl9vbmVuYW5kICpjLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwKKwkJCSAgICAgaW50IHJlZykKK3sKKwl3cml0ZXcodmFsdWUsIGMtPm9uZW5hbmQuYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZXJyKGNoYXIgKm1zZywgaW50IHN0YXRlLCB1bnNpZ25lZCBpbnQgY3RybCwgdW5zaWduZWQgaW50IGludHIpCit7CisJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dhaXQ6ICVzISBzdGF0ZSAlZCBjdHJsIDB4JTA0eCBpbnRyIDB4JTA0eFxuIiwKKwkgICAgICAgbXNnLCBzdGF0ZSwgY3RybCwgaW50cik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2FybihjaGFyICptc2csIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGN0cmwsCisJCSAgICAgIHVuc2lnbmVkIGludCBpbnRyKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIm9uZW5hbmRfd2FpdDogJXMhIHN0YXRlICVkIGN0cmwgMHglMDR4ICIKKwkgICAgICAgImludHIgMHglMDR4XG4iLCBtc2csIHN0YXRlLCBjdHJsLCBpbnRyKTsKK30KKworc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXVuc2lnbmVkIGludCBpbnRyID0gMDsKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIHN5c2NmZzsKKworCWlmIChzdGF0ZSA9PSBGTF9SRVNFVElORykgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQkJdWRlbGF5KDEpOworCQkJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQlpZiAoaW50ciAmIE9ORU5BTkRfSU5UX01BU1RFUikKKwkJCQlicmVhazsKKwkJfQorCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOworCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9FUlJPUikgeworCQkJd2FpdF9lcnIoImNvbnRyb2xsZXIgZXJyb3IiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoIShpbnRyICYgT05FTkFORF9JTlRfUkVTRVQpKSB7CisJCQl3YWl0X2VycigidGltZW91dCIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGF0ZSAhPSBGTF9SRUFESU5HKSB7CisJCWludCByZXN1bHQ7CisKKwkJLyogVHVybiBpbnRlcnJ1cHRzIG9uICovCisJCXN5c2NmZyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwkJaWYgKCEoc3lzY2ZnICYgT05FTkFORF9TWVNfQ0ZHMV9JT0JFKSkgeworCQkJc3lzY2ZnIHw9IE9ORU5BTkRfU1lTX0NGRzFfSU9CRTsKKwkJCXdyaXRlX3JlZyhjLCBzeXNjZmcsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwkJCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJCQkvKiBBZGQgYSBkZWxheSB0byBsZXQgR1BJTyBzZXR0bGUgKi8KKwkJCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCX0KKworCQlJTklUX0NPTVBMRVRJT04oYy0+aXJxX2RvbmUpOworCQlpZiAoYy0+Z3Bpb19pcnEpIHsKKwkJCXJlc3VsdCA9IG9tYXBfZ2V0X2dwaW9fZGF0YWluKGMtPmdwaW9faXJxKTsKKwkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOworCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCXdhaXRfZXJyKCJncGlvIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9IGVsc2UKKwkJCXJlc3VsdCA9IDA7CisJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJaW50IHJldHJ5X2NudCA9IDA7CityZXRyeToKKwkJCXJlc3VsdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYy0+aXJxX2RvbmUsCisJCQkJCQkgICAgbXNlY3NfdG9famlmZmllcygyMCkpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJLyogVGltZW91dCBhZnRlciAyMG1zICovCisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9PTkdPKSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgc3RpbGwgZ29pbmcKKwkJCQkJICogc28gZ2l2ZSBpdCBzb21lIG1vcmUgdGltZS4KKwkJCQkJICovCisJCQkJCXJldHJ5X2NudCArPSAxOworCQkJCQlpZiAocmV0cnlfY250IDwgMykKKwkJCQkJCWdvdG8gcmV0cnk7CisJCQkJCWludHIgPSByZWFkX3JlZyhjLAorCQkJCQkJCU9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQkJCXdhaXRfZXJyKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl9CisJCQkJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQkJaWYgKChpbnRyICYgT05FTkFORF9JTlRfTUFTVEVSKSA9PSAwKQorCQkJCQl3YWl0X3dhcm4oInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpbnQgcmV0cnlfY250ID0gMDsKKworCQkvKiBUdXJuIGludGVycnVwdHMgb2ZmICovCisJCXN5c2NmZyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwkJc3lzY2ZnICY9IH5PTkVOQU5EX1NZU19DRkcxX0lPQkU7CisJCXdyaXRlX3JlZyhjLCBzeXNjZmcsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQl3aGlsZSAoMSkgeworCQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQkJaWYgKGludHIgJiBPTkVOQU5EX0lOVF9NQVNURVIpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lb3V0IGFmdGVyIDIwbXMgKi8KKwkJCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOworCQkJCWlmIChjdHJsICYgT05FTkFORF9DVFJMX09OR08pIHsKKwkJCQkJLyoKKwkJCQkJICogVGhlIG9wZXJhdGlvbiBzZWVtcyB0byBiZSBzdGlsbCBnb2luZworCQkJCQkgKiBzbyBnaXZlIGl0IHNvbWUgbW9yZSB0aW1lLgorCQkJCQkgKi8KKwkJCQkJcmV0cnlfY250ICs9IDE7CisJCQkJCWlmIChyZXRyeV9jbnQgPCAzKSB7CisJCQkJCQl0aW1lb3V0ID0gamlmZmllcyArCisJCQkJCQkJICBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKworCWlmIChpbnRyICYgT05FTkFORF9JTlRfUkVBRCkgeworCQlpbnQgZWNjID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfRUNDX1NUQVRVUyk7CisKKwkJaWYgKGVjYykgeworCQkJdW5zaWduZWQgaW50IGFkZHIxLCBhZGRyODsKKworCQkJYWRkcjEgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSk7CisJCQlhZGRyOCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M4KTsKKwkJCWlmIChlY2MgJiBPTkVOQU5EX0VDQ18yQklUX0FMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiBFQ0MgZXJyb3IgPSAiCisJCQkJICAgICAgICIweCUwNHgsIGFkZHIxICUjeCwgYWRkcjggJSN4XG4iLAorCQkJCSAgICAgICBlY2MsIGFkZHIxLCBhZGRyOCk7CisJCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCQkJcmV0dXJuIC1FQkFETVNHOworCQkJfSBlbHNlIGlmIChlY2MgJiBPTkVOQU5EX0VDQ18xQklUX0FMTCkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAib25lbmFuZF93YWl0OiBjb3JyZWN0YWJsZSAiCisJCQkJICAgICAgICJFQ0MgZXJyb3IgPSAweCUwNHgsIGFkZHIxICUjeCwgIgorCQkJCSAgICAgICAiYWRkcjggJSN4XG4iLCBlY2MsIGFkZHIxLCBhZGRyOCk7CisJCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkKys7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHN0YXRlID09IEZMX1JFQURJTkcpIHsKKwkJd2FpdF9lcnIoInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjdHJsICYgT05FTkFORF9DVFJMX0VSUk9SKSB7CisJCXdhaXRfZXJyKCJjb250cm9sbGVyIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9MT0NLKQorCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dhaXQ6ICIKKwkJCQkJIkRldmljZSBpcyB3cml0ZSBwcm90ZWN0ZWQhISFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY3RybCAmIDB4RkU5RikKKwkJd2FpdF93YXJuKCJ1bmV4cGVjdGVkIGNvbnRyb2xsZXIgc3RhdHVzIiwgc3RhdGUsIGN0cmwsIGludHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpKSB7CisJCWlmIChhcmVhID09IE9ORU5BTkRfREFUQVJBTSkKKwkJCXJldHVybiBtdGQtPndyaXRlc2l6ZTsKKwkJaWYgKGFyZWEgPT0gT05FTkFORF9TUEFSRVJBTSkKKwkJCXJldHVybiBtdGQtPm9vYnNpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAyKQorCitzdGF0aWMgaW50IG9tYXAzX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdm9pZCAqYnVmID0gKHZvaWQgKilidWZmZXI7CisJc2l6ZV90IHh0cmE7CisJdm9sYXRpbGUgdW5zaWduZWQgKmRvbmU7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwlpZiAoYnJhbV9vZmZzZXQgJiAzIHx8IChzaXplX3QpYnVmICYgMyB8fCBjb3VudCA8IDM4NCkKKwkJZ290byBvdXRfY29weTsKKworCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpIHsKKwkJc3RydWN0IHBhZ2UgKnAxOworCisJCWlmICgoKHNpemVfdClidWYgJiBQQUdFX01BU0spICE9CisJCSAgICAoKHNpemVfdCkoYnVmICsgY291bnQgLSAxKSAmIFBBR0VfTUFTSykpCisJCQlnb3RvIG91dF9jb3B5OworCQlwMSA9IHZtYWxsb2NfdG9fcGFnZShidWYpOworCQlpZiAoIXAxKQorCQkJZ290byBvdXRfY29weTsKKwkJYnVmID0gcGFnZV9hZGRyZXNzKHAxKSArICgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOworCX0KKworCXh0cmEgPSBjb3VudCAmIDM7CisJaWYgKHh0cmEpIHsKKwkJY291bnQgLT0geHRyYTsKKwkJbWVtY3B5KGJ1ZiArIGNvdW50LCB0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQgKyBjb3VudCwgeHRyYSk7CisJfQorCisJZG1hX3NyYyA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWRtYV9kc3QgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWYsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCA+PiAyLCAxLCAwLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJZG1hX3NyYywgMCwgMCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkgZG1hX2RzdCwgMCwgMCk7CisKKwlJTklUX0NPTVBMRVRJT04oYy0+ZG1hX2RvbmUpOworCW9tYXBfc3RhcnRfZG1hKGMtPmRtYV9jaGFubmVsKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CisJZG9uZSA9ICZjLT5kbWFfZG9uZS5kb25lOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJaWYgKCpkb25lKQorCQkJYnJlYWs7CisKKwlkbWFfdW5tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKCEqZG9uZSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIERNQVxuIik7CisJCWdvdG8gb3V0X2NvcHk7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9jb3B5OgorCW1lbWNweShidWYsIHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCwgY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkJIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdm9pZCAqYnVmID0gKHZvaWQgKilidWZmZXI7CisJdm9sYXRpbGUgdW5zaWduZWQgKmRvbmU7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwlpZiAoYnJhbV9vZmZzZXQgJiAzIHx8IChzaXplX3QpYnVmICYgMyB8fCBjb3VudCA8IDM4NCkKKwkJZ290byBvdXRfY29weTsKKworCS8qIHBhbmljX3dyaXRlKCkgbWF5IGJlIGluIGFuIGludGVycnVwdCBjb250ZXh0ICovCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlnb3RvIG91dF9jb3B5OworCisJaWYgKGJ1ZiA+PSBoaWdoX21lbW9yeSkgeworCQlzdHJ1Y3QgcGFnZSAqcDE7CisKKwkJaWYgKCgoc2l6ZV90KWJ1ZiAmIFBBR0VfTUFTSykgIT0KKwkJICAgICgoc2l6ZV90KShidWYgKyBjb3VudCAtIDEpICYgUEFHRV9NQVNLKSkKKwkJCWdvdG8gb3V0X2NvcHk7CisJCXAxID0gdm1hbGxvY190b19wYWdlKGJ1Zik7CisJCWlmICghcDEpCisJCQlnb3RvIG91dF9jb3B5OworCQlidWYgPSBwYWdlX2FkZHJlc3MocDEpICsgKChzaXplX3QpYnVmICYgflBBR0VfTUFTSyk7CisJfQorCisJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGJ1ZiwgY291bnQsIERNQV9UT19ERVZJQ0UpOworCWRtYV9kc3QgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCA+PiAyLCAxLCAwLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJZG1hX3NyYywgMCwgMCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkgZG1hX2RzdCwgMCwgMCk7CisKKwlJTklUX0NPTVBMRVRJT04oYy0+ZG1hX2RvbmUpOworCW9tYXBfc3RhcnRfZG1hKGMtPmRtYV9jaGFubmVsKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CisJZG9uZSA9ICZjLT5kbWFfZG9uZS5kb25lOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJaWYgKCpkb25lKQorCQkJYnJlYWs7CisKKwlkbWFfdW5tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKworCWlmICghKmRvbmUpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBETUFcbiIpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCXJldHVybiAwOworCitvdXRfY29weToKKwltZW1jcHkodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0LCBidWYsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IG9tYXAzX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJIHNpemVfdCBjb3VudCk7CisKK2ludCBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpOworCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoTVVMVElfT01BUDIpCisKK3N0YXRpYyBpbnQgb21hcDJfb25lbmFuZF9yZWFkX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IG9mZnNldCwKKwkJCQkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IG9tYXAyX29uZW5hbmQsIG10ZCk7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlkbWFfYWRkcl90IGRtYV9zcmMsIGRtYV9kc3Q7CisJaW50IGJyYW1fb2Zmc2V0OworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJLyogRE1BIGlzIG5vdCB1c2VkLiAgUmV2aXNpdCBQTSByZXF1aXJlbWVudHMgYmVmb3JlIGVuYWJsaW5nIGl0LiAqLworCWlmICgxIHx8IChjLT5kbWFfY2hhbm5lbCA8IDApIHx8CisJICAgICgodm9pZCAqKSBidWZmZXIgPj0gKHZvaWQgKikgaGlnaF9tZW1vcnkpIHx8IChicmFtX29mZnNldCAmIDMpIHx8CisJICAgICgoKHVuc2lnbmVkIGludCkgYnVmZmVyKSAmIDMpIHx8IChjb3VudCA8IDEwMjQpIHx8IChjb3VudCAmIDMpKSB7CisJCW1lbWNweShidWZmZXIsIChfX2ZvcmNlIHZvaWQgKikodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0KSwKKwkJICAgICAgIGNvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZG1hX3NyYyA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWRtYV9kc3QgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWZmZXIsIGNvdW50LAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJCQkgICAgIGNvdW50IC8gNCwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkJIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKworCWJyYW1fb2Zmc2V0ID0gb21hcDJfb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSkgKyBhcmVhICsgb2Zmc2V0OworCS8qIERNQSBpcyBub3QgdXNlZC4gIFJldmlzaXQgUE0gcmVxdWlyZW1lbnRzIGJlZm9yZSBlbmFibGluZyBpdC4gKi8KKwlpZiAoMSB8fCAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB8fAorCSAgICAoKHZvaWQgKikgYnVmZmVyID49ICh2b2lkICopIGhpZ2hfbWVtb3J5KSB8fCAoYnJhbV9vZmZzZXQgJiAzKSB8fAorCSAgICAoKCh1bnNpZ25lZCBpbnQpIGJ1ZmZlcikgJiAzKSB8fCAoY291bnQgPCAxMDI0KSB8fCAoY291bnQgJiAzKSkgeworCQltZW1jcHkoKF9fZm9yY2Ugdm9pZCAqKSh0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQpLCBidWZmZXIsCisJCSAgICAgICBjb3VudCk7CisJCXJldHVybiAwOworCX0KKworCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCAodm9pZCAqKSBidWZmZXIsIGNvdW50LAorCQkJCSBETUFfVE9fREVWSUNFKTsKKwlkbWFfZHN0ID0gYy0+cGh5c19iYXNlICsgYnJhbV9vZmZzZXQ7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QpKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZSBidWZmZXJcbiIsCisJCQljb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAorCQkJCSAgICAgY291bnQgLyAyLCAxLCAwLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJZG1hX3NyYywgMCwgMCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkgZG1hX2RzdCwgMCwgMCk7CisKKwlJTklUX0NPTVBMRVRJT04oYy0+ZG1hX2RvbmUpOworCW9tYXBfc3RhcnRfZG1hKGMtPmRtYV9jaGFubmVsKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjLT5kbWFfZG9uZSk7CisKKwlkbWFfdW5tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorCitpbnQgb21hcDJfb25lbmFuZF9yZWFkX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IG9mZnNldCwKKwkJCQkgc2l6ZV90IGNvdW50KTsKKworaW50IG9tYXAyX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkgIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7CisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMl9vbmVuYW5kX2RyaXZlcjsKKworc3RhdGljIGludCBfX2FkanVzdF90aW1pbmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjOworCisJYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJQlVHX09OKGMtPnNldHVwID09IE5VTEwpOworCisJLyogRE1BIGlzIG5vdCBpbiB1c2Ugc28gdGhpcyBpcyBhbGwgdGhhdCBpcyBuZWVkZWQgKi8KKwkvKiBSZXZpc2l0IGZvciBPTUFQMyEgKi8KKwlyZXQgPSBjLT5zZXR1cChjLT5vbmVuYW5kLmJhc2UsIGMtPmZyZXEpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IG9tYXAyX29uZW5hbmRfcmVwaGFzZSh2b2lkKQoreworCXJldHVybiBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCZvbWFwMl9vbmVuYW5kX2RyaXZlci5kcml2ZXIsIE5VTEwsCisJCQkJICAgICAgTlVMTCwgX19hZGp1c3RfdGltaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG9tYXAyX29uZW5hbmRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCS8qIFdpdGggY2VydGFpbiBjb250ZW50IGluIHRoZSBidWZmZXIgUkFNLCB0aGUgT01BUCBib290IFJPTSBjb2RlCisJICogY2FuIHJlY29nbml6ZSB0aGUgZmxhc2ggY2hpcCBpbmNvcnJlY3RseS4gWmVybyBpdCBvdXQgYmVmb3JlCisJICogc29mdCByZXNldC4KKwkgKi8KKwltZW1zZXQoKF9fZm9yY2Ugdm9pZCAqKWMtPm9uZW5hbmQuYmFzZSwgMCwgT05FTkFORF9CVUZSQU1fU0laRSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAyX29uZW5hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjOworCWludCByOworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXAyX29uZW5hbmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jb21wbGV0aW9uKCZjLT5pcnFfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZjLT5kbWFfZG9uZSk7CisJYy0+Z3BtY19jcyA9IHBkYXRhLT5jczsKKwljLT5ncGlvX2lycSA9IHBkYXRhLT5ncGlvX2lycTsKKwljLT5kbWFfY2hhbm5lbCA9IHBkYXRhLT5kbWFfY2hhbm5lbDsKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB7CisJCS8qIGlmIC0xLCBkb24ndCB1c2UgRE1BICovCisJCWMtPmdwaW9faXJxID0gMDsKKwl9CisKKwlyID0gZ3BtY19jc19yZXF1ZXN0KGMtPmdwbWNfY3MsIE9ORU5BTkRfSU9fU0laRSwgJmMtPnBoeXNfYmFzZSk7CisJaWYgKHIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXF1ZXN0IEdQTUMgQ1NcbiIpOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFLAorCQkJICAgICAgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlc2VydmUgbWVtb3J5IHJlZ2lvbiBhdCAweCUwOGx4LCAiCisJCQkic2l6ZTogMHgleFxuIiwJYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworCQlyID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX2NzOworCX0KKwljLT5vbmVuYW5kLmJhc2UgPSBpb3JlbWFwKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKKwlpZiAoYy0+b25lbmFuZC5iYXNlID09IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjsKKwl9CisKKwlpZiAocGRhdGEtPm9uZW5hbmRfc2V0dXAgIT0gTlVMTCkgeworCQlyID0gcGRhdGEtPm9uZW5hbmRfc2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJPbmVuYW5kIHBsYXRmb3JtIHNldHVwIGZhaWxlZDogIgorCQkJCSIlZFxuIiwgcik7CisJCQlnb3RvIGVycl9pb3VubWFwOworCQl9CisJCWMtPnNldHVwID0gcGRhdGEtPm9uZW5hbmRfc2V0dXA7CisJfQorCisJaWYgKGMtPmdwaW9faXJxKSB7CisJCWlmICgociA9IG9tYXBfcmVxdWVzdF9ncGlvKGMtPmdwaW9faXJxKSkgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciAiCisJCQkJIk9uZU5BTkRcbiIsIGMtPmdwaW9faXJxKTsKKwkJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGMtPmdwaW9faXJxLCAxKTsKKworCWlmICgociA9IHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEoYy0+Z3Bpb19pcnEpLAorCQkJICAgICBvbWFwMl9vbmVuYW5kX2ludGVycnVwdCwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgICAgcGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgYykpIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9ncGlvOworCX0KKworCWlmIChjLT5kbWFfY2hhbm5lbCA+PSAwKSB7CisJCXIgPSBvbWFwX3JlcXVlc3RfZG1hKDAsIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsCisJCQkJICAgICBvbWFwMl9vbmVuYW5kX2RtYV9jYiwgKHZvaWQgKikgYywKKwkJCQkgICAgICZjLT5kbWFfY2hhbm5lbCk7CisJCWlmIChyID09IDApIHsKKwkJCW9tYXBfc2V0X2RtYV93cml0ZV9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJT01BUF9ETUFfV1JJVEVfTk9OX1BPU1RFRCk7CisJCQlvbWFwX3NldF9kbWFfc3JjX2RhdGFfcGFjayhjLT5kbWFfY2hhbm5lbCwgMSk7CisJCQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoYy0+ZG1hX2NoYW5uZWwsCisJCQkJCQkgICAgT01BUF9ETUFfREFUQV9CVVJTVF84KTsKKwkJCW9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayhjLT5kbWFfY2hhbm5lbCwgMSk7CisJCQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJICAgICBPTUFQX0RNQV9EQVRBX0JVUlNUXzgpOworCQl9IGVsc2UgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgZm9yIE9uZU5BTkQsICIKKwkJCQkgInVzaW5nIFBJTyBpbnN0ZWFkXG4iKTsKKwkJCWMtPmRtYV9jaGFubmVsID0gLTE7CisJCX0KKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6aW5nIG9uIENTJWQsIHBoeXMgYmFzZSAweCUwOGx4LCB2aXJ0dWFsICIKKwkJICJiYXNlICVwXG4iLCBjLT5ncG1jX2NzLCBjLT5waHlzX2Jhc2UsCisJCSBjLT5vbmVuYW5kLmJhc2UpOworCisJYy0+cGRldiA9IHBkZXY7CisJYy0+bXRkLm5hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCWMtPm10ZC5wcml2ID0gJmMtPm9uZW5hbmQ7CisJYy0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPj0gMCkgeworCQlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gJmMtPm9uZW5hbmQ7CisKKwkJdGhpcy0+d2FpdCA9IG9tYXAyX29uZW5hbmRfd2FpdDsKKwkJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbSA9IG9tYXAzX29uZW5hbmRfcmVhZF9idWZmZXJyYW07CisJCQl0aGlzLT53cml0ZV9idWZmZXJyYW0gPSBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMtPnJlYWRfYnVmZmVycmFtID0gb21hcDJfb25lbmFuZF9yZWFkX2J1ZmZlcnJhbTsKKwkJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbSA9IG9tYXAyX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtOworCQl9CisJfQorCisJaWYgKChyID0gb25lbmFuZF9zY2FuKCZjLT5tdGQsIDEpKSA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfZG1hOworCisJc3dpdGNoICgoYy0+b25lbmFuZC52ZXJzaW9uX2lkID4+IDQpICYgMHhmKSB7CisJY2FzZSAwOgorCQljLT5mcmVxID0gNDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYy0+ZnJlcSA9IDU0OworCQlicmVhazsKKwljYXNlIDI6CisJCWMtPmZyZXEgPSA2NjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQljLT5mcmVxID0gODM7CisJCWJyZWFrOworCX0KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWlmIChwZGF0YS0+cGFydHMgIT0gTlVMTCkKKwkJciA9IGFkZF9tdGRfcGFydGl0aW9ucygmYy0+bXRkLCBwZGF0YS0+cGFydHMsCisJCQkJICAgICAgIHBkYXRhLT5ucl9wYXJ0cyk7CisJZWxzZQorI2VuZGlmCisJCXIgPSBhZGRfbXRkX2RldmljZSgmYy0+bXRkKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2Vfb25lbmFuZDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGMpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNlX29uZW5hbmQ6CisJb25lbmFuZF9yZWxlYXNlKCZjLT5tdGQpOworZXJyX3JlbGVhc2VfZG1hOgorCWlmIChjLT5kbWFfY2hhbm5lbCAhPSAtMSkKKwkJb21hcF9mcmVlX2RtYShjLT5kbWFfY2hhbm5lbCk7CisJaWYgKGMtPmdwaW9faXJxKQorCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwgYyk7CitlcnJfcmVsZWFzZV9ncGlvOgorCWlmIChjLT5ncGlvX2lycSkKKwkJb21hcF9mcmVlX2dwaW8oYy0+Z3Bpb19pcnEpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChjLT5vbmVuYW5kLmJhc2UpOworZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworZXJyX2ZyZWVfY3M6CisJZ3BtY19jc19mcmVlKGMtPmdwbWNfY3MpOworZXJyX2tmcmVlOgorCWtmcmVlKGMpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAyX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlCVUdfT04oYyA9PSBOVUxMKTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWlmIChjLT5wYXJ0cykKKwkJZGVsX210ZF9wYXJ0aXRpb25zKCZjLT5tdGQpOworCWVsc2UKKwkJZGVsX210ZF9kZXZpY2UoJmMtPm10ZCk7CisjZWxzZQorCWRlbF9tdGRfZGV2aWNlKCZjLT5tdGQpOworI2VuZGlmCisKKwlvbmVuYW5kX3JlbGVhc2UoJmMtPm10ZCk7CisJaWYgKGMtPmRtYV9jaGFubmVsICE9IC0xKQorCQlvbWFwX2ZyZWVfZG1hKGMtPmRtYV9jaGFubmVsKTsKKwlvbWFwMl9vbmVuYW5kX3NodXRkb3duKHBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmIChjLT5ncGlvX2lycSkgeworCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwgYyk7CisJCW9tYXBfZnJlZV9ncGlvKGMtPmdwaW9faXJxKTsKKwl9CisJaW91bm1hcChjLT5vbmVuYW5kLmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSk7CisJa2ZyZWUoYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfb25lbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9tYXAyX29uZW5hbmRfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwMl9vbmVuYW5kX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBvbWFwMl9vbmVuYW5kX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX29uZW5hbmRfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIk9uZU5BTkQgZHJpdmVyIGluaXRpYWxpemluZ1xuIik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDJfb25lbmFuZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDJfb25lbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXAyX29uZW5hbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob21hcDJfb25lbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KG9tYXAyX29uZW5hbmRfZXhpdCk7CisKK01PRFVMRV9BTElBUyhEUklWRVJfTkFNRSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJra28gTGF2aW5lbiA8amFya2tvLmxhdmluZW5Abm9raWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHbHVlIGxheWVyIGZvciBPbmVOQU5EIGZsYXNoIG9uIE9NQVAyIC8gT01BUDMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDkyNmNmM2EuLjkwZWQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMTc5NCw3ICsxNzk0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwogCW9uZW5hbmRfZ2V0X2RldmljZShtdGQsIEZMX0VSQVNJTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3NmZGMuYyBiL2RyaXZlcnMvbXRkL3NzZmRjLmMKaW5kZXggYTVmM2Q2MC4uMzNhNWQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc3NmZGMuYworKysgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCkBAIC0zMjEsOCArMzIxLDcgQEAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwxLAogCQkiU1NGRENfUk86IGNpc19ibG9jaz0lZCxlcmFzZV9zaXplPSVkLG1hcF9sZW49JWQsbl96b25lcz0lZFxuIiwKIAkJc3NmZGMtPmNpc19ibG9jaywgc3NmZGMtPmVyYXNlX3NpemUsIHNzZmRjLT5tYXBfbGVuLAotCQkoc3NmZGMtPm1hcF9sZW4gKyBNQVhfUEhZU19CTEtfUEVSX1pPTkUgLSAxKSAvCi0JCU1BWF9QSFlTX0JMS19QRVJfWk9ORSk7CisJCURJVl9ST1VORF9VUChzc2ZkYy0+bWFwX2xlbiwgTUFYX1BIWVNfQkxLX1BFUl9aT05FKSk7CiAKIAkvKiBTZXQgZ2VvbWV0cnkgKi8KIAlzc2ZkYy0+aGVhZHMgPSAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMgYi9kcml2ZXJzL210ZC91YmkvY2Rldi5jCmluZGV4IDAzYzc1OWIuLmIzMGEwYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2NkZXYuYwpAQCAtMTA0LDEyICsxMDQsOSBAQAogCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKmRlc2M7CiAJaW50IHZvbF9pZCA9IGltaW5vcihpbm9kZSkgLSAxLCBtb2RlLCB1YmlfbnVtOwogCi0JbG9ja19rZXJuZWwoKTsKIAl1YmlfbnVtID0gdWJpX21ham9yMm51bShpbWFqb3IoaW5vZGUpKTsKLQlpZiAodWJpX251bSA8IDApIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCWlmICh1YmlfbnVtIDwgMCkKIAkJcmV0dXJuIHViaV9udW07Ci0JfQogCiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQltb2RlID0gVUJJX1JFQURXUklURTsKQEAgLTExOSw3ICsxMTYsNiBAQAogCWRiZ19nZW4oIm9wZW4gdm9sdW1lICVkLCBtb2RlICVkIiwgdm9sX2lkLCBtb2RlKTsKIAogCWRlc2MgPSB1Ymlfb3Blbl92b2x1bWUodWJpX251bSwgdm9sX2lkLCBtb2RlKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJaWYgKElTX0VSUihkZXNjKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGVzYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IDk2N2JiNDQuLjRmMmRhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCXBudW0sIHZvbF9pZCwgbG51bSwgZWMsIHNxbnVtLCBiaXRmbGlwcyk7CiAKIAlzdiA9IGFkZF92b2x1bWUoc2ksIHZvbF9pZCwgcG51bSwgdmlkX2hkcik7Ci0JaWYgKElTX0VSUihzdikgPCAwKQorCWlmIChJU19FUlIoc3YpKQogCQlyZXR1cm4gUFRSX0VSUihzdik7CiAKIAlpZiAoc2ktPm1heF9zcW51bSA8IHNxbnVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYyBiL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKaW5kZXggMjE3ZDBlMS4uMzMzYzg5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYworKysgYi9kcml2ZXJzL210ZC91YmkvdnRibC5jCkBAIC0yNDQsOCArMjQ0LDggQEAKIAkJfQogCiAJCWlmIChyZXNlcnZlZF9wZWJzID4gdWJpLT5nb29kX3BlYl9jb3VudCkgewotCQkJZGJnX2VycigidG9vIGxhcmdlIHJlc2VydmVkX3BlYnMsIGdvb2QgUEVCcyAlZCIsCi0JCQkJdWJpLT5nb29kX3BlYl9jb3VudCk7CisJCQlkYmdfZXJyKCJ0b28gbGFyZ2UgcmVzZXJ2ZWRfcGVicyAlZCwgZ29vZCBQRUJzICVkIiwKKwkJCQlyZXNlcnZlZF9wZWJzLCB1YmktPmdvb2RfcGViX2NvdW50KTsKIAkJCWVyciA9IDk7CiAJCQlnb3RvIGJhZDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggNDkxZWUxNi4uOWJhMjk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05MCw3ICs5MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZWlzYS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CQkJLyogRm9yIE5SX0lSUVMgb25seS4gKi8KKyNpbmNsdWRlIDxhc20vaXJxLmg+CQkJLyogRm9yIG5yX2lycXMgb25seS4gKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCWlmIChwcmludF9pbmZvKQogCQlwcmludGsoIiwgSVJRICVkXG4iLCBkZXYtPmlycSk7CiAJLyogVGVsbCB0aGVtIGFib3V0IGFuIGludmFsaWQgSVJRLiAqLwotCWlmIChkZXYtPmlycSA8PSAwIHx8IGRldi0+aXJxID49IE5SX0lSUVMpCisJaWYgKGRldi0+aXJxIDw9IDAgfHwgZGV2LT5pcnEgPj0gbnJfaXJxcykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiICoqKiBXYXJuaW5nOiBJUlEgJWQgaXMgdW5saWtlbHkgdG8gd29yayEgKioqXG4iLAogCQkJICAgZGV2LT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAxZDhhZjMzLi5hZDMwMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI0MTAsNyArMjQxMCw2IEBACiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvCkBAIC0yNDI2LDYgKzI0MjUsMTEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGl4Z2JlLgogCitjb25maWcgSVhHQkVfRENBCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gSVhHQkUgJiYgRENBICYmICEoSVhHQkU9eSAmJiBEQ0E9bSkKKwogY29uZmlnIElYR0IKIAl0cmlzdGF0ZSAiSW50ZWwoUikgUFJPLzEwR2JFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTI0NjIsNyArMjQ2Niw2IEBACiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTXlyaWNvbSBNeXJpLTEwRyBEdWFsIFByb3RvY29sIGludGVyZmFjZSBpbgogCSAgRXRoZXJuZXQgbW9kZS4gSWYgdGhlIGVlcHJvbSBvbiB5b3VyIGJvYXJkIGlzIG5vdCByZWNlbnQgZW5vdWdoLApAQCAtMjQ3NCw2ICsyNDc3LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBteXJpMTBnZS4KIAorY29uZmlnIE1ZUkkxMEdFX0RDQQorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1ZUkkxMEdFICYmIERDQSAmJiAhKE1ZUkkxMEdFPXkgJiYgRENBPW0pCisKIGNvbmZpZyBORVRYRU5fTklDCiAJdHJpc3RhdGUgIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQyIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKaW5kZXggMTdhYzY5Ny4uYjZhODE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCkBAIC00MTYsMTAgKzQxNiwxMCBAQAogCWlmICghZGV2IHx8ICFiYykKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoIWRldi0+YmFzZV9hZGRyIHx8IGRldi0+YmFzZV9hZGRyID4gMHhmZmZmLVNFUjEyX0VYVEVOVCB8fAotCSAgICBkZXYtPmlycSA8IDIgfHwgZGV2LT5pcnEgPiBOUl9JUlFTKSB7CisJICAgIGRldi0+aXJxIDwgMiB8fCBkZXYtPmlycSA+IG5yX2lycXMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYmF5Y29tX3Nlcl9mZHg6IGludmFsaWQgcG9ydG51bWJlciAobWF4ICV1KSAiCiAJCQkJIm9yIGlycSAoMiA8PSBpcnEgPD0gJWQpXG4iLAotCQkJCTB4ZmZmZi1TRVIxMl9FWFRFTlQsIE5SX0lSUVMpOworCQkJCTB4ZmZmZi1TRVIxMl9FWFRFTlQsIG5yX2lycXMpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAlpZiAoYmMtPmJhdWQgPCAzMDAgfHwgYmMtPmJhdWQgPiA0ODAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IDQ1YWU5ZDEuLmMxN2UzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIkluaXQgWjg1MzAgZHJpdmVyOiAldSBjaGFubmVscywgSVJRIiwgTmNoaXBzKjIpOwogCQogCWZsYWc9IiAiOwotCWZvciAoayA9IDA7IGsgPCBOUl9JUlFTOyBrKyspCisJZm9yIChrID0gMDsgayA8IG5yX2lycXM7IGsrKykKIAkJaWYgKEl2ZWNba10udXNlZCkgCiAJCXsKIAkJCXByaW50aygiJXMlZCIsIGZsYWcsIGspOwpAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAogCQkJaWYgKGh3Y2ZnLmlycSA9PSAyKSBod2NmZy5pcnEgPSA5OwogCi0JCQlpZiAoaHdjZmcuaXJxIDwgMCB8fCBod2NmZy5pcnEgPj0gTlJfSVJRUykKKwkJCWlmIChod2NmZy5pcnEgPCAwIHx8IGh3Y2ZnLmlycSA+PSBucl9pcnFzKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCQogCQkJaWYgKCFJdmVjW2h3Y2ZnLmlycV0udXNlZCAmJiBod2NmZy5pcnEpCkBAIC0yMTQ4LDcgKzIxNDgsNyBAQAogCQl9CiAJCQogCS8qIFRvIHVubG9hZCB0aGUgcG9ydCBtdXN0IGJlIGNsb3NlZCBzbyBubyByZWFsIElSUSBwZW5kaW5nICovCi0JZm9yIChrPTA7IGsgPCBOUl9JUlFTIDsgaysrKQorCWZvciAoayA9IDA7IGsgPCBucl9pcnFzIDsgaysrKQogCQlpZiAoSXZlY1trXS51c2VkKSBmcmVlX2lycShrLCBOVUxMKTsKIAkJCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IDczZmU4M2IuLmUxNDI5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTU0MCw3ICs1NDAsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX21lbTsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9Eb25TaGluZSBkZXZpY2UgJXMiLCBuZXQtPm5hbWUpOworCWRldl9pbmZvKCZuZXQtPmRldiwgIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9Eb25TaGluZSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKaW5kZXggOGMyNTdhNS4uMjQ4MmQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC04MDEsNyArODAxLDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4gS1MtOTU5IGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuIEtTLTk1OSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggZDAxYTI4NS4uMWUwZGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC03MDUsNyArNzA1LDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4vRGF6emxlIGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RhenpsZSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDA1MTk2MzcuLjM1NzU4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTUwNiw3ICs1MDYsNyBAQAogCQkJZ290byBmb3VuZDsKIAl9CiAKLQl3YXJuKCIlczogaW52YWxpZCBzcGVlZCAlZCIsIHN0aXItPm5ldGRldi0+bmFtZSwgc3BlZWQpOworCWRldl93YXJuKCZzdGlyLT5uZXRkZXYtPmRldiwgImludmFsaWQgc3BlZWQgJWRcbiIsIHNwZWVkKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAogIGZvdW5kOgpAQCAtNTk4LDggKzU5OCw4IEBACiAJCWVyciA9IHJlYWRfcmVnKHN0aXIsIFJFR19GSUZPQ1RMLCBzdGlyLT5maWZvX3N0YXR1cywgCiAJCQkJICAgRklGT19SRUdTX1NJWkUpOwogCQlpZiAodW5saWtlbHkoZXJyICE9IEZJRk9fUkVHU19TSVpFKSkgewotCQkJd2FybigiJXM6IEZJRk8gcmVnaXN0ZXIgcmVhZCBlcnJvcjogJWQiLCAKLQkJCSAgICAgc3Rpci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCQkJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LAorCQkJCSAiRklGTyByZWdpc3RlciByZWFkIGVycm9yOiAlZFxuIiwgZXJyKTsKIAogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtNzgzLDggKzc4Myw5IEBACiAKIAkJCWlmICh1bmxpa2VseShyZWNlaXZlX3N0YXJ0KHN0aXIpKSkgewogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCWluZm8oIiVzOiByZWNlaXZlIHVzYiBzdWJtaXQgZmFpbGVkIiwKLQkJCQkJICAgICBzdGlyLT5uZXRkZXYtPm5hbWUpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIiVzOiByZWNlaXZlIHVzYiBzdWJtaXQgZmFpbGVkXG4iLAorCQkJCQkJIHN0aXItPm5ldGRldi0+bmFtZSk7CiAJCQkJc3Rpci0+cmVjZWl2aW5nID0gMDsKIAkJCQltc2xlZXAoMTApOwogCQkJCWNvbnRpbnVlOwpAQCAtODM2LDggKzgzNyw4IEBACiAKIAkvKiBpbiBjYXNlIG9mIGVycm9yLCB0aGUga2VybmVsIHRocmVhZCB3aWxsIHJlc3RhcnQgdXMgKi8KIAlpZiAoZXJyKSB7Ci0JCXdhcm4oIiVzOiB1c2IgcmVjZWl2ZSBzdWJtaXQgZXJyb3I6ICVkIiwKLQkJCXN0aXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LCAidXNiIHJlY2VpdmUgc3VibWl0IGVycm9yOiAlZFxuIiwKKwkJCSBlcnIpOwogCQlzdGlyLT5yZWNlaXZpbmcgPSAwOwogCQl3YWtlX3VwX3Byb2Nlc3Moc3Rpci0+dGhyZWFkKTsKIAl9CkBAIC0xMDczLDcgKzEwNzQsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBlcnJfb3V0MjsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgU2lnbWFUZWwgZGV2aWNlICVzIiwgbmV0LT5uYW1lKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBTaWdtYVRlbCBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzdGlyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggMjE5OGI3Ny4uZTExNmQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNlbmRpZgogCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJICAgICAgKiBvZmZzZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmluZywgd2hpY2ggaXMgZGlmZmVyZW50CiAJCSAgICAgICogZm9yIERDRSBhbmQgUlNTIG1vZGVzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCS8qIGNwdSBmb3IgdHggcXVldWUgKi8KIAlpbnQgY3B1OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggY2ExN2FmNC4uNzU0OGZiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTgwLDcgKzgwLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXhnYmVfcGNpX3RibCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogc3RhdGljIGludCBpeGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnApOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkY2Ffbm90aWZpZXIgPSB7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyZXR1cm4gKHRvdGFsX3BhY2tldHMgPyB0cnVlIDogZmFsc2UpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIHN0YXRpYyB2b2lkIGl4Z2JlX3VwZGF0ZV9yeF9kY2Eoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQogewpAQCAtMzgzLDcgKzM4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRENBIG9yIENPTkZJR19EQ0FfTU9EVUxFICovCisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLwogLyoqCiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC05NDcsNyArOTQ3LDcgQEAKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCXR4X3JpbmcgPSAmKGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCB0eF9yaW5nKTsKICNlbmRpZgpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgewogCQlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKQEAgLTIxNTUsNyArMjE1NSw3IEBACiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcigmYWRhcHRlci0+cGRldi0+ZGV2KTsKQEAgLTIxNjcsNyArMjE2Nyw3IEBACiAJaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwogCWl4Z2JlX2NsZWFuX2FsbF9yeF9yaW5ncyhhZGFwdGVyKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJLyogc2luY2Ugd2UgcmVzZXQgdGhlIGhhcmR3YXJlIERDQSBzZXR0aW5ncyB3ZXJlIGNsZWFyZWQgKi8KIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJmFkYXB0ZXItPnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwpAQCAtMjE5Myw3ICsyMTkzLDcgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwogCWludCB0eF9jbGVhbmVkLCB3b3JrX2RvbmUgPSAwOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7CiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZyk7CkBAIC0zOTIyLDcgKzM5MjIsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQkvKiBhbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZApAQCAtMzk3Miw3ICszOTcyLDcgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKCZwZGV2LT5kZXYpOwpAQCAtNDEwNSwxMCArNDEwNSwxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBpeGdiZV9kcml2ZXJfbmFtZSwgaXhnYmVfY29weXJpZ2h0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJZGNhX3JlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKLQogI2VuZGlmCisKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpeGdiZV9kcml2ZXIpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MTIzLDEzICs0MTIzLDEzIEBACiAgKiovCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhnYmVfZXhpdF9tb2R1bGUodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXhnYmVfZHJpdmVyKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiBzdGF0aWMgaW50IGl4Z2JlX25vdGlmeV9kY2Eoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwKQogewpAQCAtNDE0MCw3ICs0MTQwLDcgQEAKIAogCXJldHVybiByZXRfdmFsID8gTk9USUZZX0JBRCA6IE5PVElGWV9ET05FOwogfQotI2VuZGlmIC8qIENPTkZJR19EQ0Egb3IgQ09ORklHX0RDQV9NT0RVTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENBICovCiAKIG1vZHVsZV9leGl0KGl4Z2JlX2V4aXRfbW9kdWxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNmRjZTkwMS4uYTlhZWJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAlkbWFfYWRkcl90IGZ3X3N0YXRzX2J1czsKIAlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKIAlpbnQgd2F0Y2hkb2dfdHhfcmVxOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpbnQgY2FjaGVkX2RjYV90YWc7CiAJaW50IGNwdTsKIAlfX2JlMzIgX19pb21lbSAqZGNhX3RhZzsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWludCBtc2lfZW5hYmxlZDsKIAlpbnQgbXNpeF9lbmFibGVkOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X3ZlY3RvcnM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWludCBkY2FfZW5hYmxlZDsKICNlbmRpZgogCXUzMiBsaW5rX3N0YXRlOwpAQCAtOTAyLDcgKzkwMiw3IEBACiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKIAlpbnQgaSwgc3RhdHVzOwogCXNpemVfdCBieXRlczsKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJdW5zaWduZWQgbG9uZyBkY2FfdGFnX29mZjsKICNlbmRpZgogCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCX0KIAlwdXRfYmUzMihodG9ubChtZ3AtPmludHJfY29hbF9kZWxheSksIG1ncC0+aW50cl9jb2FsX2RlbGF5X3B0cik7CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9EQ0FfT0ZGU0VULCAmY21kLCAwKTsKIAlkY2FfdGFnX29mZiA9IGNtZC5kYXRhMDsKIAlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKQEAgLTEwNTEsNyArMTA1MSw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIHN0YXRpYyB2b2lkCiBteXJpMTBnZV93cml0ZV9kY2Eoc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzcywgaW50IGNwdSwgaW50IHRhZykKIHsKQEAgLTE1MDUsNyArMTUwNSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNzLT5tZ3AtPmRldjsKIAlpbnQgd29ya19kb25lOwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWlmIChzcy0+bWdwLT5kY2FfZW5hYmxlZCkKIAkJbXlyaTEwZ2VfdXBkYXRlX2RjYShzcyk7CiAjZW5kaWYKQEAgLTE3MzYsNyArMTczNiw3IEBACiAJInR4X2JvdW5kYXJ5IiwgIldDIiwgImlycSIsICJNU0kiLCAiTVNJWCIsCiAJInJlYWRfZG1hX2J3X01CcyIsICJ3cml0ZV9kbWFfYndfTUJzIiwgInJlYWRfd3JpdGVfZG1hX2J3X01CcyIsCiAJInNlcmlhbF9udW1iZXIiLCAid2F0Y2hkb2dfcmVzZXRzIiwKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJImRjYV9jYXBhYmxlX2Zpcm13YXJlIiwgImRjYV9kZXZpY2VfcHJlc2VudCIsCiAjZW5kaWYKIAkibGlua19jaGFuZ2VzIiwgImxpbmtfdXAiLCAiZHJvcHBlZF9saW5rX292ZXJmbG93IiwKQEAgLTE4MTUsNyArMTgxNSw3IEBACiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfd3JpdGVfZG1hOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5zZXJpYWxfbnVtYmVyOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53YXRjaGRvZ19yZXNldHM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpKG1ncC0+c3NbMF0uZGNhX3RhZyAhPSBOVUxMKTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KShtZ3AtPmRjYV9lbmFibGVkKTsKICNlbmRpZgpAQCAtMzg0NCw3ICszODQ0LDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHJlc2V0XG4iKTsKIAkJZ290byBhYm9ydF93aXRoX3NsaWNlczsKIAl9Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCW15cmkxMGdlX3NldHVwX2RjYShtZ3ApOwogI2VuZGlmCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1ncCk7CkBAIC0zOTQ4LDcgKzM5NDgsNyBAQAogCW5ldGRldiA9IG1ncC0+ZGV2OwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJbXlyaTEwZ2VfdGVhcmRvd25fZGNhKG1ncCk7CiAjZW5kaWYKIAlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgMCk7CkBAIC0zOTkzLDcgKzM5OTMsNyBAQAogI2VuZGlmCiB9OwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogc3RhdGljIGludAogbXlyaTEwZ2Vfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwKQogewpAQCAtNDAyNCw3ICs0MDI0LDcgQEAKIAkJICAgICAgIG15cmkxMGdlX2RyaXZlci5uYW1lLCBteXJpMTBnZV9yc3NfaGFzaCk7CiAJCW15cmkxMGdlX3Jzc19oYXNoID0gTVhHRUZXX1JTU19IQVNIX1RZUEVfU1JDX1BPUlQ7CiAJfQotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlkY2FfcmVnaXN0ZXJfbm90aWZ5KCZteXJpMTBnZV9kY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJaWYgKG15cmkxMGdlX21heF9zbGljZXMgPiBNWVJJMTBHRV9NQVhfU0xJQ0VTKQpAQCAtNDAzNyw3ICs0MDM3LDcgQEAKIAogc3RhdGljIF9fZXhpdCB2b2lkIG15cmkxMGdlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmbXlyaTEwZ2VfZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKaW5kZXggZThmNTVkOC4uOWI4Zjc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBjb25maWcgUENNQ0lBX0lCTVRSCiAJdHJpc3RhdGUgIklCTSBQQ01DSUEgdG9rZW5yaW5nIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElCTVRSIT15ICYmIFRSICYmICE2NEJJVAorCWRlcGVuZHMgb24gSUJNVFIhPXkgJiYgVFIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIHRoaXMgdHlwZSBvZiBUb2tlbiBSaW5nIFBDTUNJQQogCSAgY2FyZCB0byB5b3VyIGNvbXB1dGVyLiBZb3UgdGhlbiBhbHNvIG5lZWQgdG8gc2F5IFkgdG8gIlRva2VuIFJpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggYjM5ZDFjYy4uYTI0YmI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTEyMDUsMTEgKzEyMDUsMTIgQEAKIAkJZGV2bm8gPSAwOwogCiAJbmRldi0+ZG1hID0gLTE7Ci0JbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAobmRldi0+aXJxIDwgMCkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CisJbmRldi0+aXJxID0gcmV0OwogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IDIyYzE3YmIuLjQ2NmE4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiB7CiAJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0Jd2FybigiVHJhbnNtaXQgdGltZWQgb3V0LiIpOworCWRldl93YXJuKCZuZXRkZXYtPmRldiwgIlRyYW5zbWl0IHRpbWVkIG91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGNhdGMtPnR4X3VyYik7CiB9CiAKQEAgLTg0Nyw3ICs4NDcsOCBAQAogCQkJZGJnKCI2NGsgTWVtb3J5XG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd2FybigiQ291bGRuJ3QgZGV0ZWN0IG1lbW9yeSBzaXplLCBhc3N1bWluZyAzMmsiKTsKKwkJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkJICJDb3VsZG4ndCBkZXRlY3QgbWVtb3J5IHNpemUsIGFzc3VtaW5nIDMya1xuIik7CiAJCWNhc2UgMHg4NzY1NDMyMToKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBUeEJ1ZkNvdW50LCA0KTsKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeEJ1ZkNvdW50LCAxNik7CkBAIC05NTMsNyArOTU0LDggQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjYXRjX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCBkNjgyOWRiLi5mZGJmM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC04MzIsNyArODMyLDcgQEAKIAogCWlmKChyZXMgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPnR4X3VyYiwgR0ZQX0FUT01JQykpKQogCXsKLQkJd2Fybigia2F3ZXRoIGZhaWxlZCB0eF91cmIgJWQiLCByZXMpOworCQlkZXZfd2FybigmbmV0LT5kZXYsICJrYXdldGggZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKIHNraXA6CiAJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CiAKQEAgLTkyNCw3ICs5MjQsNyBAQAogewogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOwogCi0Jd2FybigiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLiIsIG5ldC0+bmFtZSk7CisJZGV2X3dhcm4oJm5ldC0+ZGV2LCAiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLlxuIiwgbmV0LT5uYW1lKTsKIAlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0xMDE2LDEwICsxMDE2LDEwIEBACiAJICovCiAKIAlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPj4gOCkgewotCQlpbmZvKCJGaXJtd2FyZSBwcmVzZW50IGluIGRldmljZS4iKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIkZpcm13YXJlIHByZXNlbnQgaW4gZGV2aWNlLlxuIik7CiAJfSBlbHNlIHsKIAkJLyogRG93bmxvYWQgdGhlIGZpcm13YXJlICovCi0JCWluZm8oIkRvd25sb2FkaW5nIGZpcm13YXJlLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJEb3dubG9hZGluZyBmaXJtd2FyZS4uLlxuIik7CiAJCWthd2V0aC0+ZmlybXdhcmVfYnVmID0gKF9fdTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKIAkJCQkJCSAgICAgICJrYXdldGgvbmV3X2NvZGUuYmluIiwKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJCX0KIAogCQkvKiBEZXZpY2Ugd2lsbCBub3cgZGlzYXBwZWFyIGZvciBhIG1vbWVudC4uLiAgKi8KLQkJaW5mbygiRmlybXdhcmUgbG9hZGVkLiAgSSdsbCBiZSBiYWNrLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGaXJtd2FyZSBsb2FkZWQuICBJJ2xsIGJlIGJhY2suLi5cbiIpOwogZXJyX2Z3OgogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2F3ZXRoLT5maXJtd2FyZV9idWYpOwogCQlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtMTA3NSwxMCArMTA3NSwxMCBAQAogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAl9CiAKLQlpbmZvKCJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLnN0YXRpc3RpY3NfbWFzayk7Ci0JaW5mbygiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXgiLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24ubWF4X211bHRpY2FzdF9maWx0ZXJzICYgKCgxIDw8IDE1KSAtIDEpKTsKLQlpbmZvKCJNVFU6ICVkIiwgbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSkpOwotCWluZm8oIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngiLAorCWRldl9pbmZvKCZpbnRmLT5kZXYsICJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4XG4iLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24uc3RhdGlzdGljc19tYXNrKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXhcbiIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5tYXhfbXVsdGljYXN0X2ZpbHRlcnMgJiAoKDEgPDwgMTUpIC0gMSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJNVFU6ICVkXG4iLCBsZTE2X3RvX2NwdShrYXdldGgtPmNvbmZpZ3VyYXRpb24uc2VnbWVudF9zaXplKSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnhcbiIsCiAJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzBdLAogCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclsxXSwKIAkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMl0sCkBAIC0xMTc0LDcgKzExNzQsOCBAQAogCQlnb3RvIGVycl9pbnRmZGF0YTsKIAl9CiAKLQlpbmZvKCJrYXdldGggaW50ZXJmYWNlIGNyZWF0ZWQgYXQgJXMiLCBrYXdldGgtPm5ldC0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgImthd2V0aCBpbnRlcmZhY2UgY3JlYXRlZCBhdCAlc1xuIiwKKwkJIGthd2V0aC0+bmV0LT5uYW1lKTsKIAogCWRiZygiS2F3ZXRoIHByb2JlIHJldHVybmluZy4iKTsKIApAQCAtMTIwNSwxMSArMTIwNiwxMSBAQAogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKLQlpbmZvKCJVbnJlZ2lzdGVyaW5nIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVucmVnaXN0ZXJpbmdcbiIpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAoIWthd2V0aCkgewotCQl3YXJuKCJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJbmV0ZGV2ID0ga2F3ZXRoLT5uZXQ7CkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCiAJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoYXdkLndxaCwgYXdkLmRvbmUsIHRpbWVvdXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gdGltZW91dAotICAgICAgICAgICAgICAgIHdhcm4oInVzYl9jb250cm9sL2J1bGtfbXNnOiB0aW1lb3V0Iik7CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJ1c2JfY29udHJvbC9idWxrX21zZzogdGltZW91dFxuIik7CiAgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiKHVyYik7ICAvLyByZW1vdmUgdXJiIHNhZmVseQogICAgICAgICAgICAgICAgIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCmluZGV4IDM4YjkwZTcuLjc5MTQ4NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7CiAJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpICYmIHByaW50a19yYXRlbGltaXQoKSkKIAkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKwkJCQkJX19mdW5jX18sIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTkyLDcgKzE5Miw3IEBACiAJaWYgKCFidWZmZXIpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCiAJCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwppbmRleCBkZjU2YTUxLi42MTMzNDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCWNhc2UgLUVOT0VOVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJd2FybigiY3RybCB1cmIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgImN0cmwgdXJiIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCX0KIAlkZXYgPSB1cmItPmNvbnRleHQ7CiAJY2xlYXJfYml0KFJYX1JFR19TRVQsICZkZXYtPmZsYWdzKTsKQEAgLTQ0MSwxMCArNDQxLDEwIEBACiAJY2FzZSAtRU5PRU5UOgogCQlyZXR1cm47CS8qIHRoZSB1cmIgaXMgaW4gdW5saW5rIHN0YXRlICovCiAJY2FzZSAtRVRJTUU6Ci0JCXdhcm4oIm1heSBiZSByZXNldCBpcyBuZWVkZWQ/Li4iKTsKKwkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJtYXkgYmUgcmVzZXQgaXMgbmVlZGVkPy4uXG4iKTsKIAkJZ290byBnb29uOwogCWRlZmF1bHQ6Ci0JCXdhcm4oIlJ4IHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJSeCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAkJZ290byBnb29uOwogCX0KIApAQCAtNTM4LDcgKzUzOCw4IEBACiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYtPm5ldGRldikpCiAJCXJldHVybjsKIAlpZiAodXJiLT5zdGF0dXMpCi0JCWluZm8oIiVzOiBUeCBzdGF0dXMgJWQiLCBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgIiVzOiBUeCBzdGF0dXMgJWRcbiIsCisJCQkgZGV2LT5uZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKIAlkZXYtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXRkZXYpOwogfQpAQCAtNTYxLDcgKzU2Miw4IEBACiAJCXJldHVybjsKIAkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KIAlkZWZhdWx0OgotCQlpbmZvKCIlczogaW50ciBzdGF0dXMgJWQiLCBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgIiVzOiBpbnRyIHN0YXR1cyAlZFxuIiwKKwkJCSBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOwogCQlnb3RvIHJlc3VibWl0OwogCX0KIApAQCAtNjY1LDcgKzY2Nyw3IEBACiAJdTggY3IsIHRjciwgcmNyLCBtc3I7CiAKIAlpZiAoIXJ0bDgxNTBfcmVzZXQoZGV2KSkgewotCQl3YXJuKCIlcyAtIGRldmljZSByZXNldCBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlkZXZfd2FybigmZGV2LT51ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXQgZmFpbGVkXG4iKTsKIAl9CiAJLyogUkNSIGJpdDc9MSBhdHRhY2ggUnggaW5mbyBhdCB0aGUgZW5kOyAgPTAgSFcgQ1JDICh3aGljaCBpcyBicm9rZW4pICovCiAJcmNyID0gMHg5ZTsKQEAgLTY5OSw3ICs3MDEsNyBAQAogc3RhdGljIHZvaWQgcnRsODE1MF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXdhcm4oIiVzOiBUeCB0aW1lb3V0LiIsIG5ldGRldi0+bmFtZSk7CisJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiVHggdGltZW91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKIAlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogfQpAQCAtNzEwLDEyICs3MTIsMTIgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlkZXYtPnJ4X2NyZWcgfD0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKLQkJaW5mbygiJXM6IHByb21pc2N1b3VzIG1vZGUiLCBuZXRkZXYtPm5hbWUpOworCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICIlczogcHJvbWlzY3VvdXMgbW9kZVxuIiwgbmV0ZGV2LT5uYW1lKTsKIAl9IGVsc2UgaWYgKG5ldGRldi0+bWNfY291bnQgfHwKIAkJICAgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCWRldi0+cnhfY3JlZyAmPSBjcHVfdG9fbGUxNigweGZmZmUpOwogCQlkZXYtPnJ4X2NyZWcgfD0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKLQkJaW5mbygiJXM6IGFsbG11bHRpIHNldCIsIG5ldGRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIiVzOiBhbGxtdWx0aSBzZXRcbiIsIG5ldGRldi0+bmFtZSk7CiAJfSBlbHNlIHsKIAkJLyogflJYX01VTFRJQ0FTVCwgflJYX1BST01JU0NVT1VTICovCiAJCWRldi0+cnhfY3JlZyAmPSBjcHVfdG9fbGUxNigweDAwZmMpOwpAQCAtNzQwLDcgKzc0Miw3IEBACiAJCWlmIChyZXMgPT0gLUVOT0RFVikKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwogCQllbHNlIHsKLQkJCXdhcm4oImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7CisJCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJmYWlsZWQgdHhfdXJiICVkXG4iLCByZXMpOwogCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCX0KQEAgLTc4Myw3ICs3ODUsNyBAQAogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5yeF91cmIsIEdGUF9LRVJORUwpKSkgewogCQlpZiAocmVzID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKLQkJd2FybigiJXM6IHJ4X3VyYiBzdWJtaXQgZmFpbGVkOiAlZCIsIF9fRlVOQ1RJT05fXywgcmVzKTsKKwkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAicnhfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkXG4iLCByZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50cl91cmIsIGRldi0+dWRldiwgdXNiX3JjdmludHBpcGUoZGV2LT51ZGV2LCAzKSwKQEAgLTc5Miw3ICs3OTQsNyBAQAogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRyX3VyYiwgR0ZQX0tFUk5FTCkpKSB7CiAJCWlmIChyZXMgPT0gLUVOT0RFVikKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwotCQl3YXJuKCIlczogaW50cl91cmIgc3VibWl0IGZhaWxlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHJlcyk7CisJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImludHJfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkXG4iLCByZXMpOwogCQl1c2Jfa2lsbF91cmIoZGV2LT5yeF91cmIpOwogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTk0Nyw3ICs5NDksNyBAQAogCQlnb3RvIG91dDI7CiAJfQogCi0JaW5mbygiJXM6IHJ0bDgxNTAgaXMgZGV0ZWN0ZWQiLCBuZXRkZXYtPm5hbWUpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlczogcnRsODE1MCBpcyBkZXRlY3RlZFxuIiwgbmV0ZGV2LT5uYW1lKTsKIAogCXJldHVybiAwOwogCkBAIC05ODQsNyArOTg2LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgdXNiX3J0bDgxNTBfaW5pdCh2b2lkKQogewotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJ0bDgxNTBfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGY4MDY0MGYuLmQ3YmI2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTEyMiw3ICsxMjIsNiBAQAogICAgICAqIE1vc3QgZnVuY3Rpb25zIG1lc3Mgd2l0aCB0aGUgc3RydWN0dXJlCiAgICAgICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWxlIHdlIGRvIHRoZSBwb2xsaW5nCiAgICAgICovCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICAgICAgLyoKQEAgLTE1Miw2ICsxNTEsNyBAQAogCQlicmVhazsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfbWVkaWEtPnNldF9zdGF0dXMgKHNjLCAmY3RsKTsKIAogICAgICAgICBpZihjdGwuY3JjX2xlbmd0aCAhPSBzYy0+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+bG1jX2xvY2ssIGZsYWdzKTsgLypmb2xkMDEqLwotCiAgICAgbG1jX3RyYWNlKGRldiwgImxtY19pb2N0bCBvdXQiKTsKIAogICAgIHJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwppbmRleCBmOTcyZmVmLi5lZTUxYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYoIHBjaV9pcnFfbGluZSA8PSAwICB8fCAgcGNpX2lycV9saW5lID49IE5SX0lSUVMgKQorCQlpZiAocGNpX2lycV9saW5lIDw9IDAgfHwgcGNpX2lycV9saW5lID49IG5yX2lycXMpCiAJCQlwcmludGsoIEtFUk5fV0FSTklORyAiICBXQVJOSU5HOiBUaGUgUENJIEJJT1MgYXNzaWduZWQgIgogCQkJCSJ0aGlzIFBDSSBjYXJkIHRvIElSUSAlZCwgd2hpY2ggaXMgdW5saWtlbHkgIgogCQkJCSJ0byB3b3JrIS5cbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggNWM3YTg3ZS4uYzY5NDhkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTIzOSwxMSArMjM5LDE0IEBACiAJICovCiAJYmF0Y2hfdGFyZ2V0ID0gbnAtPnJ4X3RhcmdldCAtIChyZXFfcHJvZCAtIG5wLT5yeC5yc3BfY29ucyk7CiAJZm9yIChpID0gc2tiX3F1ZXVlX2xlbigmbnAtPnJ4X2JhdGNoKTsgaSA8IGJhdGNoX3RhcmdldDsgaSsrKSB7Ci0JCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFJYX0NPUFlfVEhSRVNIT0xELAorCQlza2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LCBSWF9DT1BZX1RIUkVTSE9MRCArIE5FVF9JUF9BTElHTiwKIAkJCQkJIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwogCQlpZiAodW5saWtlbHkoIXNrYikpCiAJCQlnb3RvIG5vX3NrYjsKIAorCQkvKiBBbGlnbiBpcCBoZWFkZXIgdG8gYSAxNiBieXRlcyBib3VuZGFyeSAqLworCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCWlmICghcGFnZSkgewogCQkJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jIGIvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYwppbmRleCBiMzBlMzhmLi5kY2MxZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKQEAgLTY2LDE1ICs2Niw4IEBACiAjdW5kZWYgREVCVUdfQ0NJT19SVU5fU0cKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKgotICogQ0NJT19TRUFSQ0hfVElNRSBjYW4gaGVscCBtZWFzdXJlIGhvdyBmYXN0IHRoZSBiaXRtYXAgc2VhcmNoIGlzLgotICogaW1wYWN0cyBwZXJmb3JtYW5jZSB0aG91Z2ggLSBkaXRjaCBpdCBpZiB5b3UgZG9uJ3QgdXNlIGl0LgotICovCi0jZGVmaW5lIENDSU9fU0VBUkNIX1RJTUUKLSN1bmRlZiBDQ0lPX01BUF9TVEFUUwotI2Vsc2UKLSN1bmRlZiBDQ0lPX1NFQVJDSF9USU1FCi0jdW5kZWYgQ0NJT19NQVBfU1RBVFMKKy8qIGRlcGVuZHMgb24gcHJvYyBmcyBzdXBwb3J0LiBCdXQgY29zdHMgQ1BVIHBlcmZvcm1hbmNlLiAqLworI3VuZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC0yMzksMTIgKzIzMiwxMCBAQAogCXUzMiByZXNfc2l6ZTsJCSAgICAJLyogc2l6ZSBvZiByZXNvdXJjZSBtYXAgaW4gYnl0ZXMgKi8KIAlzcGlubG9ja190IHJlc19sb2NrOwogCi0jaWZkZWYgQ0NJT19TRUFSQ0hfVElNRQorI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogI2RlZmluZSBDQ0lPX1NFQVJDSF9TQU1QTEUgMHgxMDAKIAl1bnNpZ25lZCBsb25nIGF2Z19zZWFyY2hbQ0NJT19TRUFSQ0hfU0FNUExFXTsKIAl1bnNpZ25lZCBsb25nIGF2Z19pZHg7CQkgIC8qIGN1cnJlbnQgaW5kZXggaW50byBhdmdfc2VhcmNoICovCi0jZW5kaWYKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUwogCXVuc2lnbmVkIGxvbmcgdXNlZF9wYWdlczsKIAl1bnNpZ25lZCBsb25nIG1zaW5nbGVfY2FsbHM7CiAJdW5zaWduZWQgbG9uZyBtc2luZ2xlX3BhZ2VzOwpAQCAtMzUxLDcgKzM0Miw3IEBACiAJdW5zaWduZWQgaW50IHBhZ2VzX25lZWRlZCA9IHNpemUgPj4gSU9WUF9TSElGVDsKIAl1bnNpZ25lZCBpbnQgcmVzX2lkeDsKIAl1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3NpemU7Ci0jaWZkZWYgQ0NJT19TRUFSQ0hfVElNRQorI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCXVuc2lnbmVkIGxvbmcgY3Jfc3RhcnQgPSBtZmN0bCgxNik7CiAjZW5kaWYKIAkKQEAgLTQwNiw3ICszOTcsNyBAQAogCURCR19SRVMoIiVzKCkgcmVzX2lkeCAlZCByZXNfaGludDogJWRcbiIsCiAJCV9fZnVuY19fLCByZXNfaWR4LCBpb2MtPnJlc19oaW50KTsKIAotI2lmZGVmIENDSU9fU0VBUkNIX1RJTUUKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAl7CiAJCXVuc2lnbmVkIGxvbmcgY3JfZW5kID0gbWZjdGwoMTYpOwogCQl1bnNpZ25lZCBsb25nIHRtcCA9IGNyX2VuZCAtIGNyX3N0YXJ0OwpAQCAtNDE2LDcgKzQwNyw3IEBACiAJaW9jLT5hdmdfc2VhcmNoW2lvYy0+YXZnX2lkeCsrXSA9IGNyX3N0YXJ0OwogCWlvYy0+YXZnX2lkeCAmPSBDQ0lPX1NFQVJDSF9TQU1QTEUgLSAxOwogI2VuZGlmCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAlpb2MtPnVzZWRfcGFnZXMgKz0gcGFnZXNfbmVlZGVkOwogI2VuZGlmCiAJLyogCkBAIC00NTIsNyArNDQzLDcgQEAKIAlEQkdfUkVTKCIlcygpOiAgcmVzX2lkeDogJWQgcGFnZXNfbWFwcGVkICVkXG4iLCAKIAkJX19mdW5jX18sIHJlc19pZHgsIHBhZ2VzX21hcHBlZCk7CiAKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCWlvYy0+dXNlZF9wYWdlcyAtPSBwYWdlc19tYXBwZWQ7CiAjZW5kaWYKIApAQCAtNzY0LDcgKzc1NSw3IEBACiAJc2l6ZSA9IEFMSUdOKHNpemUgKyBvZmZzZXQsIElPVlBfU0laRSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKIAotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJaW9jLT5tc2luZ2xlX2NhbGxzKys7CiAJaW9jLT5tc2luZ2xlX3BhZ2VzICs9IHNpemUgPj4gSU9WUF9TSElGVDsKICNlbmRpZgpAQCAtODI4LDcgKzgxOSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yZXNfbG9jaywgZmxhZ3MpOwogCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAlpb2MtPnVzaW5nbGVfY2FsbHMrKzsKIAlpb2MtPnVzaW5nbGVfcGFnZXMgKz0gc2l6ZSA+PiBJT1ZQX1NISUZUOwogI2VuZGlmCkBAIC04OTQsNyArODg1LDcgQEAKICovCiAjZGVmaW5lIFBJREVfRkxBRyAweDgwMDAwMDAwVUwKIAotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAjZGVmaW5lIElPTU1VX01BUF9TVEFUUwogI2VuZGlmCiAjaW5jbHVkZSAiaW9tbXUtaGVscGVycy5oIgpAQCAtOTM4LDcgKzkyOSw3IEBACiAJCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKIAotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJaW9jLT5tc2dfY2FsbHMrKzsKICNlbmRpZgogCkBAIC05OTcsMTMgKzk4OCwxMyBAQAogCURCR19SVU5fU0coIiVzKCkgU1RBUlQgJWQgZW50cmllcywgICUwOGx4LCV4XG4iLAogCQlfX2Z1bmNfXywgbmVudHMsIHNnX3ZpcnRfYWRkcihzZ2xpc3QpLCBzZ2xpc3QtPmxlbmd0aCk7CiAKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCWlvYy0+dXNnX2NhbGxzKys7CiAjZW5kaWYKIAogCXdoaWxlKHNnX2RtYV9sZW4oc2dsaXN0KSAmJiBuZW50cy0tKSB7CiAKLSNpZmRlZiBDQ0lPX01BUF9TVEFUUworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCQlpb2MtPnVzZ19wYWdlcyArPSBzZ19kbWFfbGVuKHNnbGlzdCkgPj4gUEFHRV9TSElGVDsKICNlbmRpZgogCQljY2lvX3VubWFwX3NpbmdsZShkZXYsIHNnX2RtYV9hZGRyZXNzKHNnbGlzdCksCkBAIC0xMDQ4LDcgKzEwMzksNyBAQAogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAiSU8gUERJUiBzaXplICAgIDogJWQgYnl0ZXMgKCVkIGVudHJpZXMpXG4iLAogCQkJICAgICAgIHRvdGFsX3BhZ2VzICogOCwgdG90YWxfcGFnZXMpOwogCi0jaWZkZWYgQ0NJT19NQVBfU1RBVFMKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAkJbGVuICs9IHNlcV9wcmludGYobSwgIklPIFBESVIgZW50cmllcyA6ICVsZCBmcmVlICAlbGQgdXNlZCAoJWQlJSlcbiIsCiAJCQkJICB0b3RhbF9wYWdlcyAtIGlvYy0+dXNlZF9wYWdlcywgaW9jLT51c2VkX3BhZ2VzLAogCQkJCSAgKGludCkoaW9jLT51c2VkX3BhZ2VzICogMTAwIC8gdG90YWxfcGFnZXMpKTsKQEAgLTEwNTcsNyArMTA0OCw3IEBACiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICJSZXNvdXJjZSBiaXRtYXAgOiAlZCBieXRlcyAoJWQgcGFnZXMpXG4iLCAKIAkJCQkgIGlvYy0+cmVzX3NpemUsIHRvdGFsX3BhZ2VzKTsKIAotI2lmZGVmIENDSU9fU0VBUkNIX1RJTUUKKyNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKIAkJbWluID0gbWF4ID0gaW9jLT5hdmdfc2VhcmNoWzBdOwogCQlmb3IoaiA9IDA7IGogPCBDQ0lPX1NFQVJDSF9TQU1QTEU7ICsraikgewogCQkJYXZnICs9IGlvYy0+YXZnX3NlYXJjaFtqXTsKQEAgLTEwNzAsNyArMTA2MSw3IEBACiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICIgIEJpdG1hcCBzZWFyY2ggOiAlbGQvJWxkLyVsZCAobWluL2F2Zy9tYXggQ1BVIEN5Y2xlcylcbiIsCiAJCQkJICBtaW4sIGF2ZywgbWF4KTsKICNlbmRpZgotI2lmZGVmIENDSU9fTUFQX1NUQVRTCisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICJwY2lfbWFwX3NpbmdsZSgpOiAlOGxkIGNhbGxzICAlOGxkIHBhZ2VzIChhdmcgJWQvMTAwMClcbiIsCiAJCQkJICBpb2MtPm1zaW5nbGVfY2FsbHMsIGlvYy0+bXNpbmdsZV9wYWdlcywKIAkJCQkgIChpbnQpKChpb2MtPm1zaW5nbGVfcGFnZXMgKiAxMDAwKS9pb2MtPm1zaW5nbGVfY2FsbHMpKTsKQEAgLTEwODgsNyArMTA3OSw3IEBACiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICJwY2lfdW5tYXBfc2coKSAgOiAlOGxkIGNhbGxzICAlOGxkIHBhZ2VzIChhdmcgJWQvMTAwMClcblxuXG4iLAogCQkJCSAgaW9jLT51c2dfY2FsbHMsIGlvYy0+dXNnX3BhZ2VzLAogCQkJCSAgKGludCkoKGlvYy0+dXNnX3BhZ2VzICogMTAwMCkvaW9jLT51c2dfY2FsbHMpKTsKLSNlbmRpZgkvKiBDQ0lPX01BUF9TVEFUUyAqLworI2VuZGlmCS8qIENDSU9fQ09MTEVDVF9TVEFUUyAqLwogCiAJCWlvYyA9IGlvYy0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKaW5kZXggZmQ1NjEyOC4uM2JjNTRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZGluby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwpAQCAtMjk4LDcgKzI5OCw4IEBACiAKIHN0YXRpYyB2b2lkIGRpbm9fZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBkaW5vX2Rldi0+Z2xvYmFsX2lycSwgRElOT19MT0NBTF9JUlFTKTsKIAogCURCRyhLRVJOX1dBUk5JTkcgIiVzKDB4JXAsICVkKVxuIiwgX19mdW5jX18sIGRpbm9fZGV2LCBpcnEpOwpAQCAtMzEwLDcgKzMxMSw4IEBACiAKIHN0YXRpYyB2b2lkIGRpbm9fZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShpcnEsIGRpbm9fZGV2LT5nbG9iYWxfaXJxLCBESU5PX0xPQ0FMX0lSUVMpOwogCXUzMiB0bXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYwppbmRleCA3NzFjZWY1Li43ODkxZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCkBAIC0zNDYsMTAgKzM0NiwxMCBAQAogCX0KIAkKIAkvKiBSZXNlcnZlIElSUTIgKi8KLQlpcnFfZGVzY1syXS5hY3Rpb24gPSAmaXJxMl9hY3Rpb247CisJaXJxX3RvX2Rlc2MoMiktPmFjdGlvbiA9ICZpcnEyX2FjdGlvbjsKIAkKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpcnFfZGVzY1tpXS5jaGlwID0gJmVpc2FfaW50ZXJydXB0X3R5cGU7CisJCWlycV90b19kZXNjKGkpLT5jaGlwID0gJmVpc2FfaW50ZXJydXB0X3R5cGU7CiAJfQogCQogCUVJU0FfYnVzID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2dzYy5jIGIvZHJpdmVycy9wYXJpc2MvZ3NjLmMKaW5kZXggZjdkMDg4Yi4uZTc2ZGI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZ3NjLmMKQEAgLTEwOCw3ICsxMDgsOCBAQAogCiBzdGF0aWMgdm9pZCBnc2NfYXNpY19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CiAJdTMyIGltcjsKIApAQCAtMTIzLDcgKzEyNCw4IEBACiAKIHN0YXRpYyB2b2lkIGdzY19hc2ljX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgZ3NjX2FzaWMgKmlycV9kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGRlc2MtPmNoaXBfZGF0YTsKIAlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgaXJxX2Rldi0+Z2xvYmFsX2lycSwgMzIpOwogCXUzMiBpbXI7CiAKQEAgLTE1OSwxMiArMTYxLDE0IEBACiBpbnQgZ3NjX2Fzc2lnbl9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICp0eXBlLCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBpbnQgaXJxID0gR1NDX0lSUV9CQVNFOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWlmIChpcnEgPiBHU0NfSVJRX01BWCkKIAkJcmV0dXJuIE5PX0lSUTsKIAotCWlycV9kZXNjW2lycV0uY2hpcCA9IHR5cGU7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGEgPSBkYXRhOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmNoaXAgPSB0eXBlOworCWRlc2MtPmNoaXBfZGF0YSA9IGRhdGE7CiAJcmV0dXJuIGlycSsrOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKaW5kZXggNmZiM2Y3OS4uN2JlZmZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwpAQCAtNjE5LDcgKzYxOSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmVjdG9yX2luZm8gKmlvc2FwaWNfZ2V0X3ZlY3Rvcih1bnNpZ25lZCBpbnQgaXJxKQogewotCXJldHVybiBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJcmV0dXJuIGRlc2MtPmNoaXBfZGF0YTsKIH0KIAogc3RhdGljIHZvaWQgaW9zYXBpY19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jIGIvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCmluZGV4IDFlOGQyZDEuLjFlOTNjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKQEAgLTM2Myw3ICszNjMsOSBAQAogI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpcnFfZGVzY1tpXS5jaGlwID0gJnN1cGVyaW9faW50ZXJydXB0X3R5cGU7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPmNoaXAgPSAmc3VwZXJpb19pbnRlcnJ1cHRfdHlwZTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYnVzLmMgYi9kcml2ZXJzL3BjaS9idXMuYwppbmRleCA1MjlkOWQ3Li45OTljYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9idXMuYworKysgYi9kcml2ZXJzL3BjaS9idXMuYwpAQCAtMTUxLDYgKzE1MSwxMyBAQAogCQkJaWYgKHJldHZhbCkKIAkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIGNyZWF0aW5nIGNwdWFmZmluaXR5IgogCQkJCQkiIGZpbGUsIGNvbnRpbnVpbmcuLi5cbiIpOworCisJCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNoaWxkX2J1cy0+ZGV2LAorCQkJCQkJJmRldl9hdHRyX2NwdWxpc3RhZmZpbml0eSk7CisJCQlpZiAocmV0dmFsKQorCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkiRXJyb3IgY3JlYXRpbmcgY3B1bGlzdGFmZmluaXR5IgorCQkJCQkiIGZpbGUsIGNvbnRpbnVpbmcuLi5cbiIpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IGU4NDJlNzUuLjhiMjljMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogewogCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKIAlzdGF0aWMgaW50IGluY2x1ZGVfYWxsOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkcmhkID0gKHN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqKSBkbWFydS0+aGRyOwogCkBAIC0yMTIsNyArMjEyLDcgQEAKIAkJaW5jbHVkZV9hbGwgPSAxOwogCX0KIAotCWlmIChyZXQgfHwgKGRtYXJ1LT5kZXZpY2VzX2NudCA9PSAwICYmICFkbWFydS0+aW5jbHVkZV9hbGwpKSB7CisJaWYgKHJldCkgewogCQlsaXN0X2RlbCgmZG1hcnUtPmxpc3QpOwogCQlrZnJlZShkbWFydSk7CiAJfQpAQCAtMjg5LDYgKzI4OSwyNCBAQAogCX0KIH0KIAorLyoqCisgKiBkbWFyX3RhYmxlX2RldGVjdCAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERNQVIgZGV2aWNlcworICovCitzdGF0aWMgaW50IF9faW5pdCBkbWFyX3RhYmxlX2RldGVjdCh2b2lkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCisJLyogaWYgd2UgY291bGQgZmluZCBETUFSIHRhYmxlLCB0aGVuIHRoZXJlIGFyZSBETUFSIGRldmljZXMgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19ETUFSLCAwLAorCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmRtYXJfdGJsKTsKKworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAhZG1hcl90YmwpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIERNQVJcbiIpOworCQlzdGF0dXMgPSBBRV9OT1RfRk9VTkQ7CisJfQorCisJcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSA/IDEgOiAwKTsKK30KIAogLyoqCiAgKiBwYXJzZV9kbWFyX3RhYmxlIC0gcGFyc2VzIHRoZSBETUEgcmVwb3J0aW5nIHRhYmxlCkBAIC0zMDAsNiArMzE4LDEyIEBACiAJc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKmVudHJ5X2hlYWRlcjsKIAlpbnQgcmV0ID0gMDsKIAorCS8qCisJICogRG8gaXQgYWdhaW4sIGVhcmxpZXIgZG1hcl90YmwgbWFwcGluZyBjb3VsZCBiZSBtYXBwZWQgd2l0aAorCSAqIGZpeGVkIG1hcC4KKwkgKi8KKwlkbWFyX3RhYmxlX2RldGVjdCgpOworCiAJZG1hciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICopZG1hcl90Ymw7CiAJaWYgKCFkbWFyKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM3MywxMCArMzk3LDEwIEBACiAKIGludCBfX2luaXQgZG1hcl9kZXZfc2NvcGVfaW5pdCh2b2lkKQogewotCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQsICpkcmhkX247CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKLQlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcmhkLCBkcmhkX24sICZkbWFyX2RyaGRfdW5pdHMsIGxpc3QpIHsKIAkJcmV0ID0gZG1hcl9wYXJzZV9kZXYoZHJoZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMzg0LDggKzQwOCw4IEBACiAKICNpZmRlZiBDT05GSUdfRE1BUgogCXsKLQkJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwotCQlmb3JfZWFjaF9ybXJyX3VuaXRzKHJtcnIpIHsKKwkJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyLCAqcm1ycl9uOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm1yciwgcm1ycl9uLCAmZG1hcl9ybXJyX3VuaXRzLCBsaXN0KSB7CiAJCQlyZXQgPSBybXJyX3BhcnNlX2RldihybXJyKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTQzMCwzMCArNDU0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogZWFybHlfZG1hcl9kZXRlY3QgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBETUFSIGRldmljZXMKLSAqLwotaW50IF9faW5pdCBlYXJseV9kbWFyX2RldGVjdCh2b2lkKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCi0JLyogaWYgd2UgY291bGQgZmluZCBETUFSIHRhYmxlLCB0aGVuIHRoZXJlIGFyZSBETUFSIGRldmljZXMgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19ETUFSLCAwLAotCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmRtYXJfdGJsKTsKLQotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAhZG1hcl90YmwpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIERNQVJcbiIpOwotCQlzdGF0dXMgPSBBRV9OT1RfRk9VTkQ7Ci0JfQotCi0JcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSA/IDEgOiAwKTsKLX0KLQogdm9pZCBfX2luaXQgZGV0ZWN0X2ludGVsX2lvbW11KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGVhcmx5X2RtYXJfZGV0ZWN0KCk7CisJcmV0ID0gZG1hcl90YWJsZV9kZXRlY3QoKTsKIAogI2lmZGVmIENPTkZJR19ETUFSCiAJewpAQCAtNDc5LDE0ICs0ODQsMTYgQEAKIAkJCSAgICAgICAiIHgyYXBpYyBzdXBwb3J0XG4iKTsKIAogCQkJZG1hcl9kaXNhYmxlZCA9IDE7Ci0JCQlyZXR1cm47CisJCQlnb3RvIGVuZDsKIAkJfQogCiAJCWlmIChyZXQgJiYgIW5vX2lvbW11ICYmICFpb21tdV9kZXRlY3RlZCAmJiAhc3dpb3RsYiAmJgogCQkgICAgIWRtYXJfZGlzYWJsZWQpCiAJCQlpb21tdV9kZXRlY3RlZCA9IDE7CiAJfQorZW5kOgogI2VuZGlmCisJZG1hcl90YmwgPSBOVUxMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwppbmRleCA3ZDI3NjMxLi44Y2ZkMWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCkBAIC0xMjMsMTAgKzEyMyw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfYnVzX2luZm8gKHZvaWQpCiB7CiAJc3RydWN0IGJ1c19pbmZvICpwdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyMTsKIAkKLQlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmYnVzX2luZm9faGVhZCkgewotCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3QgYnVzX2luZm8sIGJ1c19pbmZvX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmYnVzX2luZm9faGVhZCwgYnVzX2luZm9fbGlzdCkgewogCQlkZWJ1ZyAoIiVzIC0gc2xvdF9taW4gPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdF9taW4pOwogCQlkZWJ1ZyAoIiVzIC0gc2xvdF9tYXggPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdF9tYXgpOwogCQlkZWJ1ZyAoIiVzIC0gc2xvdF9jb3VudCA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5zbG90X2NvdW50KTsKQEAgLTE0NiwxMCArMTQ0LDggQEAKIHN0YXRpYyB2b2lkIHByaW50X2xvX2luZm8gKHZvaWQpCiB7CiAJc3RydWN0IHJpb19kZXRhaWwgKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwogCWRlYnVnICgicHJpbnRfbG9faW5mbyAtLS0tXG4iKTsJCi0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJnJpb19sb19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCByaW9fZGV0YWlsLCByaW9fZGV0YWlsX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmcmlvX2xvX2hlYWQsIHJpb19kZXRhaWxfbGlzdCkgewogCQlkZWJ1ZyAoIiVzIC0gcmlvX25vZGVfaWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+cmlvX25vZGVfaWQpOwogCQlkZWJ1ZyAoIiVzIC0gcmlvX3R5cGUgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+cmlvX3R5cGUpOwogCQlkZWJ1ZyAoIiVzIC0gb3duZXJfaWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+b3duZXJfaWQpOwpAQCAtMTYzLDEwICsxNTksOCBAQAogc3RhdGljIHZvaWQgcHJpbnRfdmdfaW5mbyAodm9pZCkKIHsKIAlzdHJ1Y3QgcmlvX2RldGFpbCAqcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7CiAJZGVidWcgKCIlcyAtLS1cbiIsIF9fZnVuY19fKTsKLQlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmcmlvX3ZnX2hlYWQpIHsKLQkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IHJpb19kZXRhaWwsIHJpb19kZXRhaWxfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZyaW9fdmdfaGVhZCwgcmlvX2RldGFpbF9saXN0KSB7CiAJCWRlYnVnICgiJXMgLSByaW9fbm9kZV9pZCA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5yaW9fbm9kZV9pZCk7CiAJCWRlYnVnICgiJXMgLSByaW9fdHlwZSA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5yaW9fdHlwZSk7CiAJCWRlYnVnICgiJXMgLSBvd25lcl9pZCA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5vd25lcl9pZCk7CkBAIC0xODAsMTAgKzE3NCw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfZWJkYV9wY2lfcnNyYyAodm9pZCkKIHsKIAlzdHJ1Y3QgZWJkYV9wY2lfcnNyYyAqcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7CiAKLQlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmaWJtcGhwX2ViZGFfcGNpX3JzcmNfaGVhZCkgewotCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3QgZWJkYV9wY2lfcnNyYywgZWJkYV9wY2lfcnNyY19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmlibXBocF9lYmRhX3BjaV9yc3JjX2hlYWQsIGViZGFfcGNpX3JzcmNfbGlzdCkgewogCQlkZWJ1ZyAoIiVzIC0gcnNyYyB0eXBlOiAleCBidXMjOiAleCBkZXZfZnVuYzogJXggc3RhcnQgYWRkcjogJXggZW5kIGFkZHI6ICV4XG4iLCAKIAkJCV9fZnVuY19fLCBwdHItPnJzcmNfdHlwZSAscHRyLT5idXNfbnVtLCBwdHItPmRldl9mdW4scHRyLT5zdGFydF9hZGRyLCBwdHItPmVuZF9hZGRyKTsKIAl9CkBAIC0xOTIsMTAgKzE4NCw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfaWJtX3Nsb3QgKHZvaWQpCiB7CiAJc3RydWN0IHNsb3QgKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwogCi0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJmlibXBocF9zbG90X2hlYWQpIHsKLQkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IHNsb3QsIGlibV9zbG90X2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmaWJtcGhwX3Nsb3RfaGVhZCwgaWJtX3Nsb3RfbGlzdCkgewogCQlkZWJ1ZyAoIiVzIC0gc2xvdF9udW1iZXI6ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5udW1iZXIpOwogCX0KIH0KQEAgLTIwMywxMCArMTkzLDggQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcmludF9vcHRfdmcgKHZvaWQpCiB7CiAJc3RydWN0IG9wdF9yaW8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwogCWRlYnVnICgiJXMgLS0tXG4iLCBfX2Z1bmNfXyk7Ci0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJm9wdF92Z19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBvcHRfcmlvLCBvcHRfcmlvX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmb3B0X3ZnX2hlYWQsIG9wdF9yaW9fbGlzdCkgewogCQlkZWJ1ZyAoIiVzIC0gcmlvX3R5cGUgJXhcbiIsIF9fZnVuY19fLCBwdHItPnJpb190eXBlKTsKIAkJZGVidWcgKCIlcyAtIGNoYXNzaXNfbnVtOiAleFxuIiwgX19mdW5jX18sIHB0ci0+Y2hhc3Npc19udW0pOwogCQlkZWJ1ZyAoIiVzIC0gZmlyc3Rfc2xvdF9udW06ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5maXJzdF9zbG90X251bSk7CkBAIC0yMTcsMTMgKzIwNSw5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfZWJkYV9ocGMgKHZvaWQpCiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmhwY19wdHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHRyMTsKIAl1MTYgaW5kZXg7CiAKLQlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmZWJkYV9ocGNfaGVhZCkgewotCi0JCWhwY19wdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3QgY29udHJvbGxlciwgZWJkYV9ocGNfbGlzdCk7IAotCisJbGlzdF9mb3JfZWFjaF9lbnRyeShocGNfcHRyLCAmZWJkYV9ocGNfaGVhZCwgZWJkYV9ocGNfbGlzdCkgewogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBocGNfcHRyLT5zbG90X2NvdW50OyBpbmRleCsrKSB7CiAJCQlkZWJ1ZyAoIiVzIC0gcGh5c2ljYWwgc2xvdCM6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+c2xvdHNbaW5kZXhdLnNsb3RfbnVtKTsKIAkJCWRlYnVnICgiJXMgLSBwY2kgYnVzIyBvZiB0aGUgc2xvdDogJXhcbiIsIF9fZnVuY19fLCBocGNfcHRyLT5zbG90c1tpbmRleF0uc2xvdF9idXNfbnVtKTsKQEAgLTQ2MCw5ICs0NDQsNyBAQAogc3RhdGljIHN0cnVjdCBvcHRfcmlvICpzZWFyY2hfb3B0X3ZnICh1OCBjaGFzc2lzX251bSkKIHsKIAlzdHJ1Y3Qgb3B0X3JpbyAqcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7Ci0JbGlzdF9mb3JfZWFjaCAocHRyMSwgJm9wdF92Z19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBvcHRfcmlvLCBvcHRfcmlvX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmb3B0X3ZnX2hlYWQsIG9wdF9yaW9fbGlzdCkgewogCQlpZiAocHRyLT5jaGFzc2lzX251bSA9PSBjaGFzc2lzX251bSkKIAkJCXJldHVybiBwdHI7CiAJfQkJCkBAIC00NzMsMTAgKzQ1NSw4IEBACiB7CiAJc3RydWN0IG9wdF9yaW8gKm9wdF9yaW9fcHRyID0gTlVMTDsKIAlzdHJ1Y3QgcmlvX2RldGFpbCAqcmlvX2RldGFpbF9wdHIgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfaGVhZF9wdHIgPSBOVUxMOwogCQotCWxpc3RfZm9yX2VhY2ggKGxpc3RfaGVhZF9wdHIsICZyaW9fdmdfaGVhZCkgewotCQlyaW9fZGV0YWlsX3B0ciA9IGxpc3RfZW50cnkgKGxpc3RfaGVhZF9wdHIsIHN0cnVjdCByaW9fZGV0YWlsLCByaW9fZGV0YWlsX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmlvX2RldGFpbF9wdHIsICZyaW9fdmdfaGVhZCwgcmlvX2RldGFpbF9saXN0KSB7CiAJCW9wdF9yaW9fcHRyID0gc2VhcmNoX29wdF92ZyAocmlvX2RldGFpbF9wdHItPmNoYXNzaXNfbnVtKTsKIAkJaWYgKCFvcHRfcmlvX3B0cikgewogCQkJb3B0X3Jpb19wdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3B0X3JpbyksIEdGUF9LRVJORUwpOwpAQCAtNDk3LDE0ICs0NzcsMTIgQEAKIH0JCiAKIC8qCi0gKiByZW9yZ25pemluZyBsaW5rZWQgbGlzdCBvZiBleHBhbnNpb24gYm94CSAKKyAqIHJlb3JnYW5pemluZyBsaW5rZWQgbGlzdCBvZiBleHBhbnNpb24gYm94CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgb3B0X3Jpb19sbyAqc2VhcmNoX29wdF9sbyAodTggY2hhc3Npc19udW0pCiB7CiAJc3RydWN0IG9wdF9yaW9fbG8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIxOwotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZvcHRfbG9faGVhZCkgewotCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3Qgb3B0X3Jpb19sbywgb3B0X3Jpb19sb19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJm9wdF9sb19oZWFkLCBvcHRfcmlvX2xvX2xpc3QpIHsKIAkJaWYgKHB0ci0+Y2hhc3Npc19udW0gPT0gY2hhc3Npc19udW0pCiAJCQlyZXR1cm4gcHRyOwogCX0JCQpAQCAtNTE1LDEwICs0OTMsOCBAQAogewogCXN0cnVjdCBvcHRfcmlvX2xvICpvcHRfcmlvX2xvX3B0ciA9IE5VTEw7CiAJc3RydWN0IHJpb19kZXRhaWwgKnJpb19kZXRhaWxfcHRyID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2hlYWRfcHRyID0gTlVMTDsKIAkKLQlsaXN0X2Zvcl9lYWNoIChsaXN0X2hlYWRfcHRyLCAmcmlvX2xvX2hlYWQpIHsKLQkJcmlvX2RldGFpbF9wdHIgPSBsaXN0X2VudHJ5IChsaXN0X2hlYWRfcHRyLCBzdHJ1Y3QgcmlvX2RldGFpbCwgcmlvX2RldGFpbF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJpb19kZXRhaWxfcHRyLCAmcmlvX2xvX2hlYWQsIHJpb19kZXRhaWxfbGlzdCkgewogCQlvcHRfcmlvX2xvX3B0ciA9IHNlYXJjaF9vcHRfbG8gKHJpb19kZXRhaWxfcHRyLT5jaGFzc2lzX251bSk7CiAJCWlmICghb3B0X3Jpb19sb19wdHIpIHsKIAkJCW9wdF9yaW9fbG9fcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9wdF9yaW9fbG8pLCBHRlBfS0VSTkVMKTsKQEAgLTU1MCwyMCArNTI2LDE3IEBACiB7CiAJc3RydWN0IG9wdF9yaW8gKm9wdF92Z19wdHIgPSBOVUxMOwogCXN0cnVjdCBvcHRfcmlvX2xvICpvcHRfbG9fcHRyID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIgPSBOVUxMOwogCWludCByYyA9IDA7CiAKIAlpZiAoIXZhcikgewotCQlsaXN0X2Zvcl9lYWNoIChwdHIsICZvcHRfdmdfaGVhZCkgewotCQkJb3B0X3ZnX3B0ciA9IGxpc3RfZW50cnkgKHB0ciwgc3RydWN0IG9wdF9yaW8sIG9wdF9yaW9fbGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkob3B0X3ZnX3B0ciwgJm9wdF92Z19oZWFkLCBvcHRfcmlvX2xpc3QpIHsKIAkJCWlmICgoZmlyc3Rfc2xvdCA8IG9wdF92Z19wdHItPmZpcnN0X3Nsb3RfbnVtKSAmJiAoc2xvdF9udW0gPj0gb3B0X3ZnX3B0ci0+Zmlyc3Rfc2xvdF9udW0pKSB7IAogCQkJCXJjID0gLUVOT0RFVjsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCWxpc3RfZm9yX2VhY2ggKHB0ciwgJm9wdF9sb19oZWFkKSB7Ci0JCQlvcHRfbG9fcHRyID0gbGlzdF9lbnRyeSAocHRyLCBzdHJ1Y3Qgb3B0X3Jpb19sbywgb3B0X3Jpb19sb19saXN0KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHRfbG9fcHRyLCAmb3B0X2xvX2hlYWQsIG9wdF9yaW9fbG9fbGlzdCkgewogCQkJaWYgKChmaXJzdF9zbG90IDwgb3B0X2xvX3B0ci0+Zmlyc3Rfc2xvdF9udW0pICYmIChzbG90X251bSA+PSBvcHRfbG9fcHRyLT5maXJzdF9zbG90X251bSkpIHsKIAkJCQlyYyA9IC1FTk9ERVY7CiAJCQkJYnJlYWs7CkBAIC01NzYsMTAgKzU0OSw4IEBACiBzdGF0aWMgc3RydWN0IG9wdF9yaW9fbG8gKiBmaW5kX3J4ZV9udW0gKHU4IHNsb3RfbnVtKQogewogCXN0cnVjdCBvcHRfcmlvX2xvICpvcHRfbG9fcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKIAotCWxpc3RfZm9yX2VhY2ggKHB0ciwgJm9wdF9sb19oZWFkKSB7Ci0JCW9wdF9sb19wdHIgPSBsaXN0X2VudHJ5IChwdHIsIHN0cnVjdCBvcHRfcmlvX2xvLCBvcHRfcmlvX2xvX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob3B0X2xvX3B0ciwgJm9wdF9sb19oZWFkLCBvcHRfcmlvX2xvX2xpc3QpIHsKIAkJLy9jaGVjayB0byBzZWUgaWYgdGhpcyBzbG90X251bSBiZWxvbmdzIHRvIGV4cGFuc2lvbiBib3gKIAkJaWYgKChzbG90X251bSA+PSBvcHRfbG9fcHRyLT5maXJzdF9zbG90X251bSkgJiYgKCFmaXJzdF9zbG90X251bSAoc2xvdF9udW0sIG9wdF9sb19wdHItPmZpcnN0X3Nsb3RfbnVtLCAxKSkpIAogCQkJcmV0dXJuIG9wdF9sb19wdHI7CkBAIC01OTAsMTAgKzU2MSw4IEBACiBzdGF0aWMgc3RydWN0IG9wdF9yaW8gKiBmaW5kX2NoYXNzaXNfbnVtICh1OCBzbG90X251bSkKIHsKIAlzdHJ1Y3Qgb3B0X3JpbyAqb3B0X3ZnX3B0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CiAKLQlsaXN0X2Zvcl9lYWNoIChwdHIsICZvcHRfdmdfaGVhZCkgewotCQlvcHRfdmdfcHRyID0gbGlzdF9lbnRyeSAocHRyLCBzdHJ1Y3Qgb3B0X3Jpbywgb3B0X3Jpb19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdF92Z19wdHIsICZvcHRfdmdfaGVhZCwgb3B0X3Jpb19saXN0KSB7CiAJCS8vY2hlY2sgdG8gc2VlIGlmIHRoaXMgc2xvdF9udW0gYmVsb25ncyB0byBjaGFzc2lzIAogCQlpZiAoKHNsb3RfbnVtID49IG9wdF92Z19wdHItPmZpcnN0X3Nsb3RfbnVtKSAmJiAoIWZpcnN0X3Nsb3RfbnVtIChzbG90X251bSwgb3B0X3ZnX3B0ci0+Zmlyc3Rfc2xvdF9udW0sIDApKSkgCiAJCQlyZXR1cm4gb3B0X3ZnX3B0cjsKQEAgLTYwNywxMSArNTc2LDkgQEAKIHN0YXRpYyB1OCBjYWxjdWxhdGVfZmlyc3Rfc2xvdCAodTggc2xvdF9udW0pCiB7CiAJdTggZmlyc3Rfc2xvdCA9IDE7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIGxpc3Q7CiAJc3RydWN0IHNsb3QgKiBzbG90X2N1cjsKIAkKLQlsaXN0X2Zvcl9lYWNoIChsaXN0LCAmaWJtcGhwX3Nsb3RfaGVhZCkgewotCQlzbG90X2N1ciA9IGxpc3RfZW50cnkgKGxpc3QsIHN0cnVjdCBzbG90LCBpYm1fc2xvdF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3RfY3VyLCAmaWJtcGhwX3Nsb3RfaGVhZCwgaWJtX3Nsb3RfbGlzdCkgewogCQlpZiAoc2xvdF9jdXItPmN0cmwpIHsKIAkJCWlmICgoc2xvdF9jdXItPmN0cmwtPmN0bHJfdHlwZSAhPSA0KSAmJiAoc2xvdF9jdXItPmN0cmwtPmVuZGluZ19zbG90X251bSA+IGZpcnN0X3Nsb3QpICYmIChzbG90X251bSA+IHNsb3RfY3VyLT5jdHJsLT5lbmRpbmdfc2xvdF9udW0pKSAKIAkJCQlmaXJzdF9zbG90ID0gc2xvdF9jdXItPmN0cmwtPmVuZGluZ19zbG90X251bTsKQEAgLTc2Nyw3ICs3MzQsNiBAQAogCXN0cnVjdCBidXNfaW5mbyAqYnVzX2luZm9fcHRyMSwgKmJ1c19pbmZvX3B0cjI7CiAJaW50IHJjOwogCXN0cnVjdCBzbG90ICp0bXBfc2xvdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCiAJYWRkciA9IGhwY19saXN0X3B0ci0+cGh5c19hZGRyOwogCWZvciAoY3RsciA9IDA7IGN0bHIgPCBocGNfbGlzdF9wdHItPm51bV9jdGxyczsgY3RscisrKSB7CkBAIC05OTcsOSArOTYzLDcgQEAKIAogCX0JCQkvKiBlYWNoIGhwYyAgKi8KIAotCWxpc3RfZm9yX2VhY2ggKGxpc3QsICZpYm1waHBfc2xvdF9oZWFkKSB7Ci0JCXRtcF9zbG90ID0gbGlzdF9lbnRyeSAobGlzdCwgc3RydWN0IHNsb3QsIGlibV9zbG90X2xpc3QpOwotCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfc2xvdCwgJmlibXBocF9zbG90X2hlYWQsIGlibV9zbG90X2xpc3QpIHsKIAkJc25wcmludGYgKHRtcF9zbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUsIDMwLCAiJXMiLCBjcmVhdGVfZmlsZV9uYW1lICh0bXBfc2xvdCkpOwogCQlwY2lfaHBfcmVnaXN0ZXIodG1wX3Nsb3QtPmhvdHBsdWdfc2xvdCwKIAkJCXBjaV9maW5kX2J1cygwLCB0bXBfc2xvdC0+YnVzKSwgdG1wX3Nsb3QtPmRldmljZSk7CkBAIC0xMTAxLDEwICsxMDY1LDggQEAKIHN0cnVjdCBzbG90ICppYm1waHBfZ2V0X3Nsb3RfZnJvbV9waHlzaWNhbF9udW0gKHU4IHBoeXNpY2FsX251bSkKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JbGlzdF9mb3JfZWFjaCAobGlzdCwgJmlibXBocF9zbG90X2hlYWQpIHsKLQkJc2xvdCA9IGxpc3RfZW50cnkgKGxpc3QsIHN0cnVjdCBzbG90LCBpYm1fc2xvdF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZpYm1waHBfc2xvdF9oZWFkLCBpYm1fc2xvdF9saXN0KSB7CiAJCWlmIChzbG90LT5udW1iZXIgPT0gcGh5c2ljYWxfbnVtKQogCQkJcmV0dXJuIHNsb3Q7CiAJfQpAQCAtMTEyMCwxMCArMTA4Miw4IEBACiBzdHJ1Y3QgYnVzX2luZm8gKmlibXBocF9maW5kX3NhbWVfYnVzX251bSAodTMyIG51bSkKIHsKIAlzdHJ1Y3QgYnVzX2luZm8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAqcHRyMTsKIAotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZidXNfaW5mb19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBidXNfaW5mbywgYnVzX2luZm9fbGlzdCk7IAorCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmYnVzX2luZm9faGVhZCwgYnVzX2luZm9fbGlzdCkgewogCQlpZiAocHRyLT5idXNubyA9PSBudW0pIAogCQkJIHJldHVybiBwdHI7CiAJfQpAQCAtMTEzNiwxMCArMTA5Niw4IEBACiBpbnQgaWJtcGhwX2dldF9idXNfaW5kZXggKHU4IG51bSkKIHsKIAlzdHJ1Y3QgYnVzX2luZm8gKnB0cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAqcHRyMTsKIAotCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZidXNfaW5mb19oZWFkKSB7Ci0JCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBidXNfaW5mbywgYnVzX2luZm9fbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZidXNfaW5mb19oZWFkLCBidXNfaW5mb19saXN0KSB7CiAJCWlmIChwdHItPmJ1c25vID09IG51bSkgIAogCQkJcmV0dXJuIHB0ci0+aW5kZXg7CiAJfQpAQCAtMTIxMiwxMSArMTE3MCw5IEBACiBpbnQgaWJtcGhwX3JlZ2lzdGVyX3BjaSAodm9pZCkKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJaW50IHJjID0gMDsKIAotCWxpc3RfZm9yX2VhY2ggKHRtcCwgJmViZGFfaHBjX2hlYWQpIHsKLQkJY3RybCA9IGxpc3RfZW50cnkgKHRtcCwgc3RydWN0IGNvbnRyb2xsZXIsIGViZGFfaHBjX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgJmViZGFfaHBjX2hlYWQsIGViZGFfaHBjX2xpc3QpIHsKIAkJaWYgKGN0cmwtPmN0bHJfdHlwZSA9PSAxKSB7CiAJCQlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlibXBocF9kcml2ZXIpOwogCQkJYnJlYWs7CkBAIC0xMjI3LDEyICsxMTgzLDEwIEBACiBzdGF0aWMgaW50IGlibXBocF9wcm9iZSAoc3RydWN0IHBjaV9kZXYgKiBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMpCiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCiAJZGVidWcgKCJpbnNpZGUgaWJtcGhwX3Byb2JlXG4iKTsKIAkKLQlsaXN0X2Zvcl9lYWNoICh0bXAsICZlYmRhX2hwY19oZWFkKSB7Ci0JCWN0cmwgPSBsaXN0X2VudHJ5ICh0bXAsIHN0cnVjdCBjb250cm9sbGVyLCBlYmRhX2hwY19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZlYmRhX2hwY19oZWFkLCBlYmRhX2hwY19saXN0KSB7CiAJCWlmIChjdHJsLT5jdGxyX3R5cGUgPT0gMSkgewogCQkJaWYgKChkZXYtPmRldmZuID09IGN0cmwtPnUucGNpX2N0bHIuZGV2X2Z1bikgJiYgKGRldi0+YnVzLT5udW1iZXIgPT0gY3RybC0+dS5wY2lfY3Rsci5idXMpKSB7CiAJCQkJY3RybC0+Y3RybF9kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDVmODViMWIuLjJlNmM0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0xMDIsMTMgKzEwMiwxMyBAQAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyAqb3BzID0gc2xvdC0+b3BzOwkJCVwKIAlpbnQgcmV0dmFsID0gMDsJCQkJCQkJXAotCWlmICh0cnlfbW9kdWxlX2dldChvcHMtPm93bmVyKSkgewkJCQlcCi0JCWlmIChvcHMtPmdldF8jI25hbWUpCQkJCQlcCi0JCQlyZXR2YWwgPSBvcHMtPmdldF8jI25hbWUoc2xvdCwgdmFsdWUpOwkJXAotCQllbHNlCQkJCQkJCVwKLQkJCSp2YWx1ZSA9IHNsb3QtPmluZm8tPm5hbWU7CQkJXAotCQltb2R1bGVfcHV0KG9wcy0+b3duZXIpOwkJCQkJXAotCX0JCQkJCQkJCVwKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG9wcy0+b3duZXIpKQkJCQlcCisJCXJldHVybiAtRU5PREVWOwkJCQkJCVwKKwlpZiAob3BzLT5nZXRfIyNuYW1lKQkJCQkJCVwKKwkJcmV0dmFsID0gb3BzLT5nZXRfIyNuYW1lKHNsb3QsIHZhbHVlKTsJCQlcCisJZWxzZQkJCQkJCQkJXAorCQkqdmFsdWUgPSBzbG90LT5pbmZvLT5uYW1lOwkJCQlcCisJbW9kdWxlX3B1dChvcHMtPm93bmVyKTsJCQkJCQlcCiAJcmV0dXJuIHJldHZhbDsJCQkJCQkJXAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAppbmRleCA5ZTZjZWM2Li5jMzY3OTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKQEAgLTU3LDYgKzU3LDE5IEBACiAjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKIAorI2RlZmluZSBjdHJsX2RiZyhjdHJsLCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChwY2llaHBfZGVidWcpCQkJCQlcCisJCQlkZXZfcHJpbnRrKCwgJmN0cmwtPnBjaWUtPmRldmljZSwJCVwKKwkJCQkJZm9ybWF0LCAjIyBhcmcpOwkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGN0cmxfZXJyKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCWRldl9lcnIoJmN0cmwtPnBjaWUtPmRldmljZSwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGN0cmxfaW5mbyhjdHJsLCBmb3JtYXQsIGFyZy4uLikJCQkJCVwKKwlkZXZfaW5mbygmY3RybC0+cGNpZS0+ZGV2aWNlLCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgY3RybF93YXJuKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorCWRldl93YXJuKCZjdHJsLT5wY2llLT5kZXZpY2UsIGZvcm1hdCwgIyMgYXJnKQorCiAjZGVmaW5lIFNMT1RfTkFNRV9TSVpFIDEwCiBzdHJ1Y3Qgc2xvdCB7CiAJdTggYnVzOwpAQCAtODcsNiArMTAwLDcgQEAKIAlpbnQgbnVtX3Nsb3RzOwkJCS8qIE51bWJlciBvZiBzbG90cyBvbiBjdGxyICovCiAJaW50IHNsb3RfbnVtX2luYzsJCS8qIDEgb3IgLTEgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzdHJ1Y3QgcGNpZV9kZXZpY2UgKnBjaWU7CS8qIFBDSSBFeHByZXNzIHBvcnQgc2VydmljZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc2xvdF9saXN0OwogCXN0cnVjdCBocGNfb3BzICpocGNfb3BzOwogCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwkvKiBzbGVlcCAmIHdha2UgcHJvY2VzcyAqLwpAQCAtMTcwLDcgKzE4NCw3IEBACiAJCQlyZXR1cm4gc2xvdDsKIAl9CiAKLQllcnIoIiVzOiBzbG90IChkZXZpY2U9MHgleCkgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXywgZGV2aWNlKTsKKwljdHJsX2VycihjdHJsLCAiJXM6IHNsb3QgKGRldmljZT0weCV4KSBub3QgZm91bmRcbiIsIF9fZnVuY19fLCBkZXZpY2UpOwogCXJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKaW5kZXggNGZkNTM1NS4uYzc0OGExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwpAQCAtMTQ0LDkgKzE0NCwxMCBAQAogICogc3lzZnMgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB0b2dnbGUgdGhlIEVsZWN0cm8gTWVjaGFuaWNhbAogICogSW50ZXJsb2NrLiAgVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXIgMCBvciAxLiAgMCA9PSB1bmxvY2ssIDEgPT0gbG9jawogICovCi1zdGF0aWMgc3NpemVfdCBsb2NrX3dyaXRlX2ZpbGUoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBsb2NrX3dyaXRlX2ZpbGUoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGxsb2NrOwogCXU4IGxvY2s7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogCXN3aXRjaCAobG9jaykgewogCQljYXNlIDA6CiAJCWNhc2UgMToKLQkJCXJldHZhbCA9IHNldF9sb2NrX3N0YXR1cyhzbG90LCBsb2NrKTsKKwkJCXJldHZhbCA9IHNldF9sb2NrX3N0YXR1cyhob3RwbHVnX3Nsb3QsIGxvY2spOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIgKCIlZCBpcyBhbiBpbnZhbGlkIGxvY2sgdmFsdWVcbiIsIGxvY2spOworCQkJY3RybF9lcnIoc2xvdC0+Y3RybCwgIiVkIGlzIGFuIGludmFsaWQgbG9jayB2YWx1ZVxuIiwKKwkJCQkgbG9jayk7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCX0KIAlpZiAocmV0dmFsKQpAQCAtMTgwLDcgKzE4MiwxMCBAQAogICovCiBzdGF0aWMgdm9pZCByZWxlYXNlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KQogewotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOworCisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlrZnJlZShob3RwbHVnX3Nsb3QtPmluZm8pOwogCWtmcmVlKGhvdHBsdWdfc2xvdCk7CkBAIC0yMTUsOSArMjIwLDkgQEAKIAkJZ2V0X2FkYXB0ZXJfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmFkYXB0ZXJfc3RhdHVzKTsKIAkJc2xvdC0+aG90cGx1Z19zbG90ID0gaG90cGx1Z19zbG90OwogCi0JCWRiZygiUmVnaXN0ZXJpbmcgYnVzPSV4IGRldj0leCBocF9zbG90PSV4IHN1bj0leCAiCi0JCSAgICAic2xvdF9kZXZpY2Vfb2Zmc2V0PSV4XG4iLCBzbG90LT5idXMsIHNsb3QtPmRldmljZSwKLQkJICAgIHNsb3QtPmhwX3Nsb3QsIHNsb3QtPm51bWJlciwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKKwkJY3RybF9kYmcoY3RybCwgIlJlZ2lzdGVyaW5nIGJ1cz0leCBkZXY9JXggaHBfc2xvdD0leCBzdW49JXggIgorCQkJICJzbG90X2RldmljZV9vZmZzZXQ9JXhcbiIsIHNsb3QtPmJ1cywgc2xvdC0+ZGV2aWNlLAorCQkJIHNsb3QtPmhwX3Nsb3QsIHNsb3QtPm51bWJlciwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIGR1cGxpY2F0ZV9uYW1lOgogCQlyZXR2YWwgPSBwY2lfaHBfcmVnaXN0ZXIoaG90cGx1Z19zbG90LAogCQkJCQkgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsCkBAIC0yMzMsOSArMjM4LDExIEBACiAJCQkJaWYgKGxlbiA8IFNMT1RfTkFNRV9TSVpFKQogCQkJCQlnb3RvIGR1cGxpY2F0ZV9uYW1lOwogCQkJCWVsc2UKLQkJCQkJZXJyKCJkdXBsaWNhdGUgc2xvdCBuYW1lIG92ZXJmbG93XG4iKTsKKwkJCQkJY3RybF9lcnIoY3RybCwgImR1cGxpY2F0ZSBzbG90IG5hbWUgIgorCQkJCQkJICJvdmVyZmxvd1xuIik7CiAJCQl9Ci0JCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJCWN0cmxfZXJyKGN0cmwsICJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsCisJCQkJIHJldHZhbCk7CiAJCQlnb3RvIGVycm9yX2luZm87CiAJCX0KIAkJLyogY3JlYXRlIGFkZGl0aW9uYWwgc3lzZnMgZW50cmllcyAqLwpAQCAtMjQ0LDcgKzI1MSw4IEBACiAJCQkJJmhvdHBsdWdfc2xvdF9hdHRyX2xvY2suYXR0cik7CiAJCQlpZiAocmV0dmFsKSB7CiAJCQkJcGNpX2hwX2RlcmVnaXN0ZXIoaG90cGx1Z19zbG90KTsKLQkJCQllcnIoImNhbm5vdCBjcmVhdGUgYWRkaXRpb25hbCBzeXNmcyBlbnRyaWVzXG4iKTsKKwkJCQljdHJsX2VycihjdHJsLCAiY2Fubm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN5c2ZzICIKKwkJCQkJICJlbnRyaWVzXG4iKTsKIAkJCQlnb3RvIGVycm9yX2luZm87CiAJCQl9CiAJCX0KQEAgLTI3OCw3ICsyODYsOCBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJaG90cGx1Z19zbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gc3RhdHVzOwogCkBAIC0yOTMsNyArMzAyLDggQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dXJuIHBjaWVocF9zeXNmc19lbmFibGVfc2xvdChzbG90KTsKIH0KQEAgLTMwMyw3ICszMTMsOCBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dXJuIHBjaWVocF9zeXNmc19kaXNhYmxlX3Nsb3Qoc2xvdCk7CiB9CkBAIC0zMTMsNyArMzI0LDggQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0zMjcsNyArMzM5LDggQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2F0dGVudGlvbl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzQxLDcgKzM1NCw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0zNTUsNyArMzY5LDggQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAorCQkgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzcwLDcgKzM4NSw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzg0LDcgKzQwMCw4IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKKwkJIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtNDAyLDE0ICs0MTksMTUgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cG9ydDsKIAogCWlmIChwY2llaHBfZm9yY2UpCi0JCWRiZygiQnlwYXNzaW5nIEJJT1MgY2hlY2sgZm9yIHBjaWVocCB1c2Ugb24gJXNcbiIsCi0JCSAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9pbmZvKCZkZXYtPmRldmljZSwKKwkJCSAiQnlwYXNzaW5nIEJJT1MgY2hlY2sgZm9yIHBjaWVocCB1c2Ugb24gJXNcbiIsCisJCQkgcGNpX25hbWUocGRldikpOwogCWVsc2UgaWYgKHBjaWVocF9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHBkZXYpKQogCQlnb3RvIGVycl9vdXRfbm9uZTsKIAogCWN0cmwgPSBwY2llX2luaXQoZGV2KTsKIAlpZiAoIWN0cmwpIHsKLQkJZGJnKCIlczogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIFBDSUVfTU9EVUxFX05BTUUpOworCQlkZXZfZXJyKCZkZXYtPmRldmljZSwgImNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfb3V0X25vbmU7CiAJfQogCXNldF9zZXJ2aWNlX2RhdGEoZGV2LCBjdHJsKTsKQEAgLTQxOCwxMSArNDM2LDEwIEBACiAJcmMgPSBpbml0X3Nsb3RzKGN0cmwpOwogCWlmIChyYykgewogCQlpZiAocmMgPT0gLUVCVVNZKQotCQkJd2FybigiJXM6IHNsb3QgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IGFub3RoZXIgIgotCQkJCSJob3RwbHVnIGRyaXZlclxuIiwgUENJRV9NT0RVTEVfTkFNRSk7CisJCQljdHJsX3dhcm4oY3RybCwgInNsb3QgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IGFub3RoZXIgIgorCQkJCSAgImhvdHBsdWcgZHJpdmVyXG4iKTsKIAkJZWxzZQotCQkJZXJyKCIlczogc2xvdCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCi0JCQkJUENJRV9NT0RVTEVfTkFNRSk7CisJCQljdHJsX2VycihjdHJsLCAic2xvdCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9jdGxyOwogCX0KIApAQCAtNDYxLDEzICs0NzgsMTMgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcGNpZWhwX3N1c3BlbmQgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcHJpbnRrKCIlcyBFTlRSWVxuIiwgX19mdW5jX18pOworCWRldl9pbmZvKCZkZXYtPmRldmljZSwgIiVzIEVOVFJZXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGNpZWhwX3Jlc3VtZSAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCIlcyBFTlRSWVxuIiwgX19mdW5jX18pOworCWRldl9pbmZvKCZkZXYtPmRldmljZSwgIiVzIEVOVFJZXG4iLCBfX2Z1bmNfXyk7CiAJaWYgKHBjaWVocF9mb3JjZSkgewogCQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGdldF9zZXJ2aWNlX2RhdGEoZGV2KTsKIAkJc3RydWN0IHNsb3QgKnRfc2xvdDsKQEAgLTQ5NywxMCArNTE0LDkgQEAKIAkuZHJpdmVyX2RhdGEgPQkwLAogCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KIH07Ci1zdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfbmFtZVtdID0gImhwZHJpdmVyIjsKIAogc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgaHBkcml2ZXJfcG9ydGRydiA9IHsKLQkubmFtZQkJPSAoY2hhciAqKWRldmljZV9uYW1lLAorCS5uYW1lCQk9IFBDSUVfTU9EVUxFX05BTUUsCiAJLmlkX3RhYmxlCT0gJnBvcnRfcGNpX2lkc1swXSwKIAogCS5wcm9iZQkJPSBwY2llaHBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggOTZhNWQ1NS4uYWNiN2Y5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtNTgsMTQgKzU4LDE1IEBACiB1OCBwY2llaHBfaGFuZGxlX2F0dGVudGlvbl9idXR0b24oc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAl1MzIgZXZlbnRfdHlwZTsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCS8qIEF0dGVudGlvbiBCdXR0b24gQ2hhbmdlICovCi0JZGJnKCJwY2llaHA6ICBBdHRlbnRpb24gYnV0dG9uIGludGVycnVwdCByZWNlaXZlZC5cbiIpOworCWN0cmxfZGJnKGN0cmwsICJBdHRlbnRpb24gYnV0dG9uIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCiAJLyoKIAkgKiAgQnV0dG9uIHByZXNzZWQgLSBTZWUgaWYgbmVlZCB0byBUQUtFIEFDVElPTiEhIQogCSAqLwotCWluZm8oIkJ1dHRvbiBwcmVzc2VkIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCWN0cmxfaW5mbyhjdHJsLCAiQnV0dG9uIHByZXNzZWQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CiAJZXZlbnRfdHlwZSA9IElOVF9CVVRUT05fUFJFU1M7CiAKIAlxdWV1ZV9pbnRlcnJ1cHRfZXZlbnQocF9zbG90LCBldmVudF90eXBlKTsKQEAgLTc3LDIyICs3OCwyMyBAQAogewogCXU4IGdldHN0YXR1czsKIAl1MzIgZXZlbnRfdHlwZTsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCS8qIFN3aXRjaCBDaGFuZ2UgKi8KLQlkYmcoInBjaWVocDogIFN3aXRjaCBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKKwljdHJsX2RiZyhjdHJsLCAiU3dpdGNoIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKGdldHN0YXR1cykgewogCQkvKgogCQkgKiBTd2l0Y2ggb3BlbmVkCiAJCSAqLwotCQlpbmZvKCJMYXRjaCBvcGVuIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkxhdGNoIG9wZW4gb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWV2ZW50X3R5cGUgPSBJTlRfU1dJVENIX09QRU47CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogIFN3aXRjaCBjbG9zZWQKIAkJICovCi0JCWluZm8oIkxhdGNoIGNsb3NlIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkxhdGNoIGNsb3NlIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOwogCQlldmVudF90eXBlID0gSU5UX1NXSVRDSF9DTE9TRTsKIAl9CiAKQEAgLTEwNSw5ICsxMDcsMTAgQEAKIHsKIAl1MzIgZXZlbnRfdHlwZTsKIAl1OCBwcmVzZW5jZV9zYXZlOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJLyogUHJlc2VuY2UgQ2hhbmdlICovCi0JZGJnKCJwY2llaHA6ICBQcmVzZW5jZS9Ob3RpZnkgaW5wdXQgY2hhbmdlLlxuIik7CisJY3RybF9kYmcoY3RybCwgIlByZXNlbmNlL05vdGlmeSBpbnB1dCBjaGFuZ2UuXG4iKTsKIAogCS8qIFN3aXRjaCBpcyBvcGVuLCBhc3N1bWUgYSBwcmVzZW5jZSBjaGFuZ2UKIAkgKiBTYXZlIHRoZSBwcmVzZW5jZSBzdGF0ZQpAQCAtMTE3LDEzICsxMjAsMTMgQEAKIAkJLyoKIAkJICogQ2FyZCBQcmVzZW50CiAJCSAqLwotCQlpbmZvKCJDYXJkIHByZXNlbnQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQ2FyZCBwcmVzZW50IG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOwogCQlldmVudF90eXBlID0gSU5UX1BSRVNFTkNFX09OOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIE5vdCBQcmVzZW50CiAJCSAqLwotCQlpbmZvKCJDYXJkIG5vdCBwcmVzZW50IG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkNhcmQgbm90IHByZXNlbnQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWV2ZW50X3R5cGUgPSBJTlRfUFJFU0VOQ0VfT0ZGOwogCX0KIApAQCAtMTM1LDIzICsxMzgsMjUgQEAKIHU4IHBjaWVocF9oYW5kbGVfcG93ZXJfZmF1bHQoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAl1MzIgZXZlbnRfdHlwZTsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCS8qIHBvd2VyIGZhdWx0ICovCi0JZGJnKCJwY2llaHA6ICBQb3dlciBmYXVsdCBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKKwljdHJsX2RiZyhjdHJsLCAiUG93ZXIgZmF1bHQgaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CiAKIAlpZiAoICEocF9zbG90LT5ocGNfb3BzLT5xdWVyeV9wb3dlcl9mYXVsdChwX3Nsb3QpKSkgewogCQkvKgogCQkgKiBwb3dlciBmYXVsdCBDbGVhcmVkCiAJCSAqLwotCQlpbmZvKCJQb3dlciBmYXVsdCBjbGVhcmVkIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIlBvd2VyIGZhdWx0IGNsZWFyZWQgb24gU2xvdCglcylcbiIsCisJCQkgIHBfc2xvdC0+bmFtZSk7CiAJCWV2ZW50X3R5cGUgPSBJTlRfUE9XRVJfRkFVTFRfQ0xFQVI7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogICBwb3dlciBmYXVsdAogCQkgKi8KLQkJaW5mbygiUG93ZXIgZmF1bHQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiUG93ZXIgZmF1bHQgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWV2ZW50X3R5cGUgPSBJTlRfUE9XRVJfRkFVTFQ7Ci0JCWluZm8oInBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIDApOworCQljdHJsX2luZm8oY3RybCwgInBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIDApOwogCX0KIAogCXF1ZXVlX2ludGVycnVwdF9ldmVudChwX3Nsb3QsIGV2ZW50X3R5cGUpOwpAQCAtMTY4LDggKzE3Myw5IEBACiAJLyogdHVybiBvZmYgc2xvdCwgdHVybiBvbiBBbWJlciBMRUQsIHR1cm4gb2ZmIEdyZWVuIExFRCBpZiBzdXBwb3J0ZWQqLwogCWlmIChQT1dFUl9DVFJMKGN0cmwpKSB7CiAJCWlmIChwc2xvdC0+aHBjX29wcy0+cG93ZXJfb2ZmX3Nsb3QocHNsb3QpKSB7Ci0JCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IFBvd2VyIE9mZiBjb21tYW5kIGZhaWxlZFxuIiwKLQkJCSAgICBfX2Z1bmNfXyk7CisJCQljdHJsX2VycihjdHJsLAorCQkJCSAiJXM6IElzc3VlIG9mIFNsb3QgUG93ZXIgT2ZmIGNvbW1hbmQgZmFpbGVkXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xODYsOCArMTkyLDggQEAKIAogCWlmIChBVFROX0xFRChjdHJsKSkgewogCQlpZiAocHNsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBzbG90LCAxKSkgewotCQkJZXJyKCIlczogSXNzdWUgb2YgU2V0IEF0dGVudGlvbiBMZWQgY29tbWFuZCBmYWlsZWRcbiIsCi0JCQkgICAgX19mdW5jX18pOworCQkJY3RybF9lcnIoY3RybCwgIiVzOiBJc3N1ZSBvZiBTZXQgQXR0ZW50aW9uICIKKwkJCQkgIkxlZCBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMjA1LDkgKzIxMSw5IEBACiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKLQlkYmcoIiVzOiBzbG90IGRldmljZSwgc2xvdCBvZmZzZXQsIGhwIHNsb3QgPSAlZCwgJWQgLCVkXG4iLAotCQkJX19mdW5jX18sIHBfc2xvdC0+ZGV2aWNlLAotCQkJY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBwX3Nsb3QtPmhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsICIlczogc2xvdCBkZXZpY2UsIHNsb3Qgb2Zmc2V0LCBocCBzbG90ID0gJWQsICVkICwlZFxuIiwKKwkJIF9fZnVuY19fLCBwX3Nsb3QtPmRldmljZSwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LAorCQkgcF9zbG90LT5ocF9zbG90KTsKIAogCWlmIChQT1dFUl9DVFJMKGN0cmwpKSB7CiAJCS8qIFBvd2VyIG9uIHNsb3QgKi8KQEAgLTIyNSwyMiArMjMxLDIyIEBACiAJLyogQ2hlY2sgbGluayB0cmFpbmluZyBzdGF0dXMgKi8KIAlyZXR2YWwgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2xua19zdGF0dXMoY3RybCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBGYWlsZWQgdG8gY2hlY2sgbGluayBzdGF0dXNcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBGYWlsZWQgdG8gY2hlY2sgbGluayBzdGF0dXNcbiIsIF9fZnVuY19fKTsKIAkJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCiAJLyogQ2hlY2sgZm9yIGEgcG93ZXIgZmF1bHQgKi8KIAlpZiAocF9zbG90LT5ocGNfb3BzLT5xdWVyeV9wb3dlcl9mYXVsdChwX3Nsb3QpKSB7Ci0JCWRiZygiJXM6IHBvd2VyIGZhdWx0IGRldGVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZGJnKGN0cmwsICIlczogcG93ZXIgZmF1bHQgZGV0ZWN0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gUE9XRVJfRkFJTFVSRTsKIAkJZ290byBlcnJfZXhpdDsKIAl9CiAKIAlyZXR2YWwgPSBwY2llaHBfY29uZmlndXJlX2RldmljZShwX3Nsb3QpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJDYW5ub3QgYWRkIGRldmljZSAweCV4OiV4XG4iLCBwX3Nsb3QtPmJ1cywKLQkJICAgIHBfc2xvdC0+ZGV2aWNlKTsKKwkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCBhZGQgZGV2aWNlIDB4JXg6JXhcbiIsCisJCQkgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAkJZ290byBlcnJfZXhpdDsKIAl9CiAKQEAgLTI3MiwxNCArMjc4LDE0IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWRiZygiSW4gJXMsIGhwX3Nsb3QgPSAlZFxuIiwgX19mdW5jX18sIHBfc2xvdC0+aHBfc2xvdCk7CisJY3RybF9kYmcoY3RybCwgIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fZnVuY19fLCBwX3Nsb3QtPmhwX3Nsb3QpOwogCiAJaWYgKFBPV0VSX0NUUkwoY3RybCkpIHsKIAkJLyogcG93ZXIgb2ZmIHNsb3QgKi8KIAkJcmV0dmFsID0gcF9zbG90LT5ocGNfb3BzLT5wb3dlcl9vZmZfc2xvdChwX3Nsb3QpOwogCQlpZiAocmV0dmFsKSB7Ci0JCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIsCi0JCQkgICAgX19mdW5jX18pOworCQkJY3RybF9lcnIoY3RybCwgIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCAiCisJCQkJICJmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KIAl9CkBAIC0zMjAsOCArMzI2LDggQEAKIAlzd2l0Y2ggKHBfc2xvdC0+c3RhdGUpIHsKIAljYXNlIFBPV0VST0ZGX1NUQVRFOgogCQltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7Ci0JCWRiZygiJXM6IGRpc2FibGluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwKLQkJICAgIF9fZnVuY19fLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQljdHJsX2RiZyhwX3Nsb3QtPmN0cmwsICIlczogZGlzYWJsaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLAorCQkJIF9fZnVuY19fLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCQlwY2llaHBfZGlzYWJsZV9zbG90KHBfc2xvdCk7CiAJCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CkBAIC0zNDksNyArMzU1LDggQEAKIAogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykgewotCQllcnIoIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKHBfc2xvdC0+Y3RybCwgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlpbmZvLT5wX3Nsb3QgPSBwX3Nsb3Q7CkBAIC00MDMsMTIgKzQxMCwxNCBAQAogCQlwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKGdldHN0YXR1cykgewogCQkJcF9zbG90LT5zdGF0ZSA9IEJMSU5LSU5HT0ZGX1NUQVRFOwotCQkJaW5mbygiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb2ZmIGR1ZSB0byBidXR0b24gIgotCQkJICAgICAicHJlc3MuXG4iLCBwX3Nsb3QtPm5hbWUpOworCQkJY3RybF9pbmZvKGN0cmwsCisJCQkJICAiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb2ZmIGR1ZSB0byBidXR0b24gIgorCQkJCSAgInByZXNzLlxuIiwgcF9zbG90LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCXBfc2xvdC0+c3RhdGUgPSBCTElOS0lOR09OX1NUQVRFOwotCQkJaW5mbygiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb24gZHVlIHRvIGJ1dHRvbiAiCi0JCQkgICAgICJwcmVzcy5cbiIsIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwKKwkJCQkgICJQQ0kgc2xvdCAjJXMgLSBwb3dlcmluZyBvbiBkdWUgdG8gYnV0dG9uICIKKwkJCQkgICJwcmVzcy5cbiIsIHBfc2xvdC0+bmFtZSk7CiAJCX0KIAkJLyogYmxpbmsgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiBhbWJlciAqLwogCQlpZiAoUFdSX0xFRChjdHJsKSkKQEAgLTQyNSw4ICs0MzQsOCBAQAogCQkgKiBwcmVzcyB0aGUgYXR0ZW50aW9uIGFnYWluIGJlZm9yZSB0aGUgNSBzZWMuIGxpbWl0CiAJCSAqIGV4cGlyZXMgdG8gY2FuY2VsIGhvdC1hZGQgb3IgaG90LXJlbW92ZQogCQkgKi8KLQkJaW5mbygiQnV0dG9uIGNhbmNlbCBvbiBTbG90KCVzKVxuIiwgcF9zbG90LT5uYW1lKTsKLQkJZGJnKCIlczogYnV0dG9uIGNhbmNlbFxuIiwgX19mdW5jX18pOworCQljdHJsX2luZm8oY3RybCwgIkJ1dHRvbiBjYW5jZWwgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfZGJnKGN0cmwsICIlczogYnV0dG9uIGNhbmNlbFxuIiwgX19mdW5jX18pOwogCQljYW5jZWxfZGVsYXllZF93b3JrKCZwX3Nsb3QtPndvcmspOwogCQlpZiAocF9zbG90LT5zdGF0ZSA9PSBCTElOS0lOR09GRl9TVEFURSkgewogCQkJaWYgKFBXUl9MRUQoY3RybCkpCkBAIC00MzcsOCArNDQ2LDggQEAKIAkJfQogCQlpZiAoQVRUTl9MRUQoY3RybCkpCiAJCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMCk7Ci0JCWluZm8oIlBDSSBzbG90ICMlcyAtIGFjdGlvbiBjYW5jZWxlZCBkdWUgdG8gYnV0dG9uIHByZXNzXG4iLAotCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiUENJIHNsb3QgIyVzIC0gYWN0aW9uIGNhbmNlbGVkICIKKwkJCSAgImR1ZSB0byBidXR0b24gcHJlc3NcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJPRkZfU1RBVEU6CkBAIC00NDgsMTEgKzQ1NywxMSBAQAogCQkgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIHByZXZpb3VzIGF0dGVudGlvbiBidXR0b24gYWN0aW9uCiAJCSAqIHRvIGhvdC1hZGQgb3IgaG90LXJlbW92ZSBpcyB1bmRlcmdvaW5nCiAJCSAqLwotCQlpbmZvKCJCdXR0b24gaWdub3JlIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIkJ1dHRvbiBpZ25vcmUgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJd2FybigiTm90IGEgdmFsaWQgc3RhdGVcbiIpOworCQljdHJsX3dhcm4oY3RybCwgIk5vdCBhIHZhbGlkIHN0YXRlXG4iKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNDY3LDcgKzQ3Niw4IEBACiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pIHsKLQkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihwX3Nsb3QtPmN0cmwsICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJaW5mby0+cF9zbG90ID0gcF9zbG90OwpAQCAtNTA1LDcgKzUxNSw3IEBACiAJY2FzZSBJTlRfUFJFU0VOQ0VfT0ZGOgogCQlpZiAoIUhQX1NVUFJfUk0oY3RybCkpCiAJCQlicmVhazsKLQkJZGJnKCJTdXJwcmlzZSBSZW1vdmFsXG4iKTsKKwkJY3RybF9kYmcoY3RybCwgIlN1cnByaXNlIFJlbW92YWxcbiIpOwogCQl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7CiAJCWhhbmRsZV9zdXJwcmlzZV9ldmVudChwX3Nsb3QpOwogCQlicmVhazsKQEAgLTUyMiwyMiArNTMyLDIzIEBACiB7CiAJdTggZ2V0c3RhdHVzID0gMDsKIAlpbnQgcmM7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgKGxhdGNoIGNsb3NlZCwgY2FyZCBwcmVzZW50LCBwb3dlciBvZmYpICovCiAJbXV0ZXhfbG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCAhZ2V0c3RhdHVzKSB7Ci0JCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLCBfX2Z1bmNfXywKLQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLAorCQkJICBfX2Z1bmNfXywgcF9zbG90LT5uYW1lKTsKIAkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoTVJMX1NFTlMocF9zbG90LT5jdHJsKSkgewogCQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmMgfHwgZ2V0c3RhdHVzKSB7Ci0JCQlpbmZvKCIlczogbGF0Y2ggb3BlbiBvbiBzbG90KCVzKVxuIiwgX19mdW5jX18sCi0JCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwgIiVzOiBsYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLAorCQkJCSAgX19mdW5jX18sIHBfc2xvdC0+bmFtZSk7CiAJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC01NDYsOCArNTU3LDggQEAKIAlpZiAoUE9XRVJfQ1RSTChwX3Nsb3QtPmN0cmwpKSB7CiAJCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCWlmIChyYyB8fCBnZXRzdGF0dXMpIHsKLQkJCWluZm8oIiVzOiBhbHJlYWR5IGVuYWJsZWQgb24gc2xvdCglcylcbiIsIF9fZnVuY19fLAotCQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQkJY3RybF9pbmZvKGN0cmwsICIlczogYWxyZWFkeSBlbmFibGVkIG9uIHNsb3QoJXMpXG4iLAorCQkJCSAgX19mdW5jX18sIHBfc2xvdC0+bmFtZSk7CiAJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC01NzEsNiArNTgyLDcgQEAKIHsKIAl1OCBnZXRzdGF0dXMgPSAwOwogCWludCByZXQgPSAwOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJaWYgKCFwX3Nsb3QtPmN0cmwpCiAJCXJldHVybiAxOwpAQCAtNTgxLDggKzU5Myw4IEBACiAJaWYgKCFIUF9TVVBSX1JNKHBfc2xvdC0+Y3RybCkpIHsKIAkJcmV0ID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJldCB8fCAhZ2V0c3RhdHVzKSB7Ci0JCQlpbmZvKCIlczogbm8gYWRhcHRlciBvbiBzbG90KCVzKVxuIiwgX19mdW5jX18sCi0JCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCQljdHJsX2luZm8oY3RybCwgIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLAorCQkJCSAgX19mdW5jX18sIHBfc2xvdC0+bmFtZSk7CiAJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC01OTEsOCArNjAzLDggQEAKIAlpZiAoTVJMX1NFTlMocF9zbG90LT5jdHJsKSkgewogCQlyZXQgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJldCB8fCBnZXRzdGF0dXMpIHsKLQkJCWluZm8oIiVzOiBsYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLCBfX2Z1bmNfXywKLQkJCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJCWN0cmxfaW5mbyhjdHJsLCAiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCglcylcbiIsCisJCQkJICBfX2Z1bmNfXywgcF9zbG90LT5uYW1lKTsKIAkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTYwMSw4ICs2MTMsOCBAQAogCWlmIChQT1dFUl9DVFJMKHBfc2xvdC0+Y3RybCkpIHsKIAkJcmV0ID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCWlmIChyZXQgfHwgIWdldHN0YXR1cykgewotCQkJaW5mbygiJXM6IGFscmVhZHkgZGlzYWJsZWQgc2xvdCglcylcbiIsIF9fZnVuY19fLAotCQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQkJY3RybF9pbmZvKGN0cmwsICIlczogYWxyZWFkeSBkaXNhYmxlZCBzbG90KCVzKVxuIiwKKwkJCQkgIF9fZnVuY19fLCBwX3Nsb3QtPm5hbWUpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNjE4LDYgKzYzMCw3IEBACiBpbnQgcGNpZWhwX3N5c2ZzX2VuYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAltdXRleF9sb2NrKCZwX3Nsb3QtPmxvY2spOwogCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgewpAQCAtNjMxLDE1ICs2NDQsMTUgQEAKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUk9OX1NUQVRFOgotCQlpbmZvKCJTbG90ICVzIGlzIGFscmVhZHkgaW4gcG93ZXJpbmcgb24gc3RhdGVcbiIsCi0JCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJTbG90ICVzIGlzIGFscmVhZHkgaW4gcG93ZXJpbmcgb24gc3RhdGVcbiIsCisJCQkgIHBfc2xvdC0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgQkxJTktJTkdPRkZfU1RBVEU6CiAJY2FzZSBQT1dFUk9GRl9TVEFURToKLQkJaW5mbygiQWxyZWFkeSBlbmFibGVkIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWN0cmxfaW5mbyhjdHJsLCAiQWxyZWFkeSBlbmFibGVkIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiTm90IGEgdmFsaWQgc3RhdGUgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9lcnIoY3RybCwgIk5vdCBhIHZhbGlkIHN0YXRlIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7CkBAIC02NTAsNiArNjYzLDcgQEAKIGludCBwY2llaHBfc3lzZnNfZGlzYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAltdXRleF9sb2NrKCZwX3Nsb3QtPmxvY2spOwogCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgewpAQCAtNjYzLDE1ICs2NzcsMTUgQEAKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUk9GRl9TVEFURToKLQkJaW5mbygiU2xvdCAlcyBpcyBhbHJlYWR5IGluIHBvd2VyaW5nIG9mZiBzdGF0ZVxuIiwKLQkJICAgICBwX3Nsb3QtPm5hbWUpOworCQljdHJsX2luZm8oY3RybCwgIlNsb3QgJXMgaXMgYWxyZWFkeSBpbiBwb3dlcmluZyBvZmYgc3RhdGVcbiIsCisJCQkgIHBfc2xvdC0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgQkxJTktJTkdPTl9TVEFURToKIAljYXNlIFBPV0VST05fU1RBVEU6Ci0JCWluZm8oIkFscmVhZHkgZGlzYWJsZWQgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9pbmZvKGN0cmwsICJBbHJlYWR5IGRpc2FibGVkIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiTm90IGEgdmFsaWQgc3RhdGUgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJY3RybF9lcnIoY3RybCwgIk5vdCBhIHZhbGlkIHN0YXRlIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDlkOTM0ZGQuLjhlOTUzMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcGNpZWhwX3JlcXVlc3RfaXJxKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCWludCByZXR2YWwsIGlycSA9IGN0cmwtPnBjaV9kZXYtPmlycTsKKwlpbnQgcmV0dmFsLCBpcnEgPSBjdHJsLT5wY2llLT5pcnE7CiAKIAkvKiBJbnN0YWxsIGludGVycnVwdCBwb2xsaW5nIHRpbWVyLiBTdGFydCB3aXRoIDEwIHNlYyBkZWxheSAqLwogCWlmIChwY2llaHBfcG9sbF9tb2RlKSB7CkBAIC0yMzUsNyArMjM1LDggQEAKIAkvKiBJbnN0YWxscyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHBjaWVfaXNyLCBJUlFGX1NIQVJFRCwgTVlfTkFNRSwgY3RybCk7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCJDYW5ub3QgZ2V0IGlycSAlZCBmb3IgdGhlIGhvdHBsdWcgY29udHJvbGxlclxuIiwgaXJxKTsKKwkJY3RybF9lcnIoY3RybCwgIkNhbm5vdCBnZXQgaXJxICVkIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iLAorCQkJIGlycSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjQ0LDcgKzI0NSw3IEBACiAJaWYgKHBjaWVocF9wb2xsX21vZGUpCiAJCWRlbF90aW1lcl9zeW5jKCZjdHJsLT5wb2xsX3RpbWVyKTsKIAllbHNlCi0JCWZyZWVfaXJxKGN0cmwtPnBjaV9kZXYtPmlycSwgY3RybCk7CisJCWZyZWVfaXJxKGN0cmwtPnBjaWUtPmlycSwgY3RybCk7CiB9CiAKIHN0YXRpYyBpbnQgcGNpZV9wb2xsX2NtZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKQEAgLTI4Miw3ICsyODMsNyBAQAogCWVsc2UKIAkJcmMgPSB3YWl0X2V2ZW50X3RpbWVvdXQoY3RybC0+cXVldWUsICFjdHJsLT5jbWRfYnVzeSwgdGltZW91dCk7CiAJaWYgKCFyYykKLQkJZGJnKCJDb21tYW5kIG5vdCBjb21wbGV0ZWQgaW4gMTAwMCBtc2VjXG4iKTsKKwkJY3RybF9kYmcoY3RybCwgIkNvbW1hbmQgbm90IGNvbXBsZXRlZCBpbiAxMDAwIG1zZWNcbiIpOwogfQogCiAvKioKQEAgLTMwMSw3ICszMDIsOCBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzEyLDI2ICszMTQsMjggQEAKIAkJCSAqIHByb2NlZWQgZm9yd2FyZCB0byBpc3N1ZSB0aGUgbmV4dCBjb21tYW5kIGFjY29yZGluZwogCQkJICogdG8gc3BlYy4gSnVzdCBwcmludCBvdXQgdGhlIGVycm9yIG1lc3NhZ2UuCiAJCQkgKi8KLQkJCWRiZygiJXM6IENNRF9DT01QTEVURUQgbm90IGNsZWFyIGFmdGVyIDEgc2VjLlxuIiwKLQkJCSAgICBfX2Z1bmNfXyk7CisJCQljdHJsX2RiZyhjdHJsLAorCQkJCSAiJXM6IENNRF9DT01QTEVURUQgbm90IGNsZWFyIGFmdGVyIDEgc2VjLlxuIiwKKwkJCQkgX19mdW5jX18pOwogCQl9IGVsc2UgaWYgKCFOT19DTURfQ01QTChjdHJsKSkgewogCQkJLyoKIAkJCSAqIFRoaXMgY29udHJvbGxlciBzZW1tcyB0byBub3RpZnkgb2YgY29tbWFuZCBjb21wbGV0ZWQKIAkJCSAqIGV2ZW50IGV2ZW4gdGhvdWdoIGl0IHN1cHBvcnRzIG5vbmUgb2YgcG93ZXIKIAkJCSAqIGNvbnRyb2xsZXIsIGF0dGVudGlvbiBsZWQsIHBvd2VyIGxlZCBhbmQgRU1JLgogCQkJICovCi0JCQlkYmcoIiVzOiBVbmV4cGVjdGVkIENNRF9DT01QTEVURUQuIE5lZWQgdG8gd2FpdCBmb3IgIgotCQkJICAgICJjb21tYW5kIGNvbXBsZXRlZCBldmVudC5cbiIsIF9fZnVuY19fKTsKKwkJCWN0cmxfZGJnKGN0cmwsICIlczogVW5leHBlY3RlZCBDTURfQ09NUExFVEVELiBOZWVkIHRvICIKKwkJCQkgIndhaXQgZm9yIGNvbW1hbmQgY29tcGxldGVkIGV2ZW50LlxuIiwKKwkJCQkgX19mdW5jX18pOwogCQkJY3RybC0+bm9fY21kX2NvbXBsZXRlID0gMDsKIAkJfSBlbHNlIHsKLQkJCWRiZygiJXM6IFVuZXhwZWN0ZWQgQ01EX0NPTVBMRVRFRC4gTWF5YmUgdGhlICIKLQkJCSAgICAiY29udHJvbGxlciBpcyBicm9rZW4uXG4iLCBfX2Z1bmNfXyk7CisJCQljdHJsX2RiZyhjdHJsLCAiJXM6IFVuZXhwZWN0ZWQgQ01EX0NPTVBMRVRFRC4gTWF5YmUgIgorCQkJCSAidGhlIGNvbnRyb2xsZXIgaXMgYnJva2VuLlxuIiwgX19mdW5jX18pOwogCQl9CiAJfQogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RDVFJMLCAmc2xvdF9jdHJsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zNDEsNyArMzQ1LDggQEAKIAlzbXBfbWIoKTsKIAlyZXR2YWwgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RDVFJMLCBzbG90X2N0cmwpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UQ1RSTCByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIFdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4KQEAgLTM3MCwxNCArMzc1LDE1IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgTE5LU1RBVFVTLCAmbG5rX3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWRiZygiJXM6IGxua19zdGF0dXMgPSAleFxuIiwgX19mdW5jX18sIGxua19zdGF0dXMpOworCWN0cmxfZGJnKGN0cmwsICIlczogbG5rX3N0YXR1cyA9ICV4XG4iLCBfX2Z1bmNfXywgbG5rX3N0YXR1cyk7CiAJaWYgKCAobG5rX3N0YXR1cyAmIExOS19UUk4pIHx8IChsbmtfc3RhdHVzICYgTE5LX1RSTl9FUlIpIHx8CiAJCSEobG5rX3N0YXR1cyAmIE5FR19MSU5LX1dEKSkgewotCQllcnIoIiVzIDogTGluayBUcmFpbmluZyBFcnJvciBvY2N1cnMgXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlcyA6IExpbmsgVHJhaW5pbmcgRXJyb3Igb2NjdXJzIFxuIiwgX19mdW5jX18pOwogCQlyZXR2YWwgPSAtMTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CkBAIC0zOTQsMTIgKzQwMCwxMiBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RDVFJMLCAmc2xvdF9jdHJsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCwgdmFsdWUgcmVhZCAleFxuIiwKLQkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY3RybCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCwgdmFsdWUgcmVhZCAleFxuIiwKKwkJIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2N0cmwpOwogCiAJYXR0ZW5fbGVkX3N0YXRlID0gKHNsb3RfY3RybCAmIEFUVE5fTEVEX0NUUkwpID4+IDY7CiAKQEAgLTQzMywxMSArNDM5LDExIEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVENUUkwsICZzbG90X2N0cmwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB2YWx1ZSByZWFkICV4XG4iLAotCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHZhbHVlIHJlYWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKIAogCXB3cl9zdGF0ZSA9IChzbG90X2N0cmwgJiBQV1JfQ1RSTCkgPj4gMTA7CiAKQEAgLTQ2NCw3ICs0NzAsOCBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC00ODIsNyArNDg5LDggQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmc2xvdF9zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAljYXJkX3N0YXRlID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQUlNOX1NUQVRFKSA+PiA2KTsKQEAgLTUwMCw3ICs1MDgsNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgY2hlY2sgZm9yIHBvd2VyIGZhdWx0XG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IGNoZWNrIGZvciBwb3dlciBmYXVsdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlwd3JfZmF1bHQgPSAodTgpKChzbG90X3N0YXR1cyAmIFBXUl9GQVVMVF9ERVRFQ1RFRCkgPj4gMSk7CkBAIC01MTYsNyArNTI0LDcgQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmc2xvdF9zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyA6IENhbm5vdCBjaGVjayBFTUkgc3RhdHVzXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlcyA6IENhbm5vdCBjaGVjayBFTUkgc3RhdHVzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCSpzdGF0dXMgPSAoc2xvdF9zdGF0dXMgJiBFTUlfU1RBVEUpID4+IEVNSV9TVEFUVVNfQklUOwpAQCAtNTYwLDggKzU2OCw4IEBACiAJCQlyZXR1cm4gLTE7CiAJfQogCXJjID0gcGNpZV93cml0ZV9jbWQoY3RybCwgc2xvdF9jbWQsIGNtZF9tYXNrKTsKLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtNTc1LDggKzU4Myw4IEBACiAJc2xvdF9jbWQgPSAweDAxMDA7CiAJY21kX21hc2sgPSBQV1JfTEVEX0NUUkw7CiAJcGNpZV93cml0ZV9jbWQoY3RybCwgc2xvdF9jbWQsIGNtZF9tYXNrKTsKLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogfQogCiBzdGF0aWMgdm9pZCBocGNfc2V0X2dyZWVuX2xlZF9vZmYoc3RydWN0IHNsb3QgKnNsb3QpCkBAIC01ODgsOCArNTk2LDggQEAKIAlzbG90X2NtZCA9IDB4MDMwMDsKIAljbWRfbWFzayA9IFBXUl9MRURfQ1RSTDsKIAlwY2llX3dyaXRlX2NtZChjdHJsLCBzbG90X2NtZCwgY21kX21hc2spOwotCWRiZygiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKLQkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKKwkJIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwY19zZXRfZ3JlZW5fbGVkX2JsaW5rKHN0cnVjdCBzbG90ICpzbG90KQpAQCAtNjAxLDggKzYwOSw4IEBACiAJc2xvdF9jbWQgPSAweDAyMDA7CiAJY21kX21hc2sgPSBQV1JfTEVEX0NUUkw7CiAJcGNpZV93cml0ZV9jbWQoY3RybCwgc2xvdF9jbWQsIGNtZF9tYXNrKTsKLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogfQogCiBzdGF0aWMgaW50IGhwY19wb3dlcl9vbl9zbG90KHN0cnVjdCBzbG90ICogc2xvdCkKQEAgLTYxMywyMCArNjIxLDIyIEBACiAJdTE2IHNsb3Rfc3RhdHVzOwogCWludCByZXR2YWwgPSAwOwogCi0JZGJnKCIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsICIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOwogCiAJLyogQ2xlYXIgc3RpY2t5IHBvd2VyLWZhdWx0IGJpdCBmcm9tIHByZXZpb3VzIHBvd2VyIGZhaWx1cmVzICovCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCXNsb3Rfc3RhdHVzICY9IFBXUl9GQVVMVF9ERVRFQ1RFRDsKIAlpZiAoc2xvdF9zdGF0dXMpIHsKIAkJcmV0dmFsID0gcGNpZWhwX3dyaXRldyhjdHJsLCBTTE9UU1RBVFVTLCBzbG90X3N0YXR1cyk7CiAJCWlmIChyZXR2YWwpIHsKLQkJCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLAotCQkJICAgIF9fZnVuY19fKTsKKwkJCWN0cmxfZXJyKGN0cmwsCisJCQkJICIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsCisJCQkJIF9fZnVuY19fKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KIAl9CkBAIC02NDQsMTEgKzY1NCwxMiBAQAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7CiAKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IFdyaXRlICV4IGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18sIHNsb3RfY21kKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsCisJCQkgX19mdW5jX18sIHNsb3RfY21kKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTY5NCw3ICs3MDUsNyBAQAogCWludCByZXR2YWwgPSAwOwogCWludCBjaGFuZ2VkOwogCi0JZGJnKCIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOworCWN0cmxfZGJnKGN0cmwsICIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOwogCiAJLyoKIAkgKiBTZXQgQmFkIERMTFAgTWFzayBiaXQgaW4gQ29ycmVjdGFibGUgRXJyb3IgTWFzawpAQCAtNzIyLDEyICs3MzMsMTIgQEAKIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLTE7CiAJCWdvdG8gb3V0OwogCX0KLQlkYmcoIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCi0JICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsCisJCSBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jbWQpOwogIG91dDoKIAlpZiAoY2hhbmdlZCkKIAkJcGNpZV91bm1hc2tfYmFkX2RsbHAoY3RybCk7CkBAIC03NDksNyArNzYwLDggQEAKIAlpbnRyX2xvYyA9IDA7CiAJZG8gewogCQlpZiAocGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZkZXRlY3RlZCkpIHsKLQkJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVNcbiIsIF9fZnVuY19fKTsKKwkJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVU1xuIiwKKwkJCQkgX19mdW5jX18pOwogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9CiAKQEAgLTc2MCwxMiArNzcyLDEzIEBACiAJCWlmICghaW50cl9sb2MpCiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCWlmIChkZXRlY3RlZCAmJiBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RTVEFUVVMsIGRldGVjdGVkKSkgewotCQkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RTVEFUVVNcbiIsIF9fZnVuY19fKTsKKwkJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RTVEFUVVNcbiIsCisJCQkJIF9fZnVuY19fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCX0gd2hpbGUgKGRldGVjdGVkKTsKIAotCWRiZygiJXM6IGludHJfbG9jICV4XG4iLCBfX0ZVTkNUSU9OX18sIGludHJfbG9jKTsKKwljdHJsX2RiZyhjdHJsLCAiJXM6IGludHJfbG9jICV4XG4iLCBfX2Z1bmNfXywgaW50cl9sb2MpOwogCiAJLyogQ2hlY2sgQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQgUGVuZGluZyAqLwogCWlmIChpbnRyX2xvYyAmIENNRF9DT01QTEVURUQpIHsKQEAgLTgwNyw3ICs4MjAsNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWRsKGN0cmwsIExOS0NBUCwgJmxua19jYXApOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgTE5LQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC04MjEsNyArODM0LDcgQEAKIAl9CiAKIAkqdmFsdWUgPSBsbmtfc3BlZWQ7Ci0JZGJnKCJNYXggbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOworCWN0cmxfZGJnKGN0cmwsICJNYXggbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTgzNiw3ICs4NDksNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWRsKGN0cmwsIExOS0NBUCwgJmxua19jYXApOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgTE5LQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC04NzEsNyArODg0LDcgQEAKIAl9CiAKIAkqdmFsdWUgPSBsbmtfd2R0aDsKLQlkYmcoIk1heCBsaW5rIHdpZHRoID0gJWRcbiIsIGxua193ZHRoKTsKKwljdHJsX2RiZyhjdHJsLCAiTWF4IGxpbmsgd2lkdGggPSAlZFxuIiwgbG5rX3dkdGgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTg4NSw3ICs4OTgsOCBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIExOS1NUQVRVUywgJmxua19zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgTE5LU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LU1RBVFVTIHJlZ2lzdGVyXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTg5OSw3ICs5MTMsNyBAQAogCX0KIAogCSp2YWx1ZSA9IGxua19zcGVlZDsKLQlkYmcoIkN1cnJlbnQgbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOworCWN0cmxfZGJnKGN0cmwsICJDdXJyZW50IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC05MTQsNyArOTI4LDggQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBMTktTVEFUVVMsICZsbmtfc3RhdHVzKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC05NDksNyArOTY0LDcgQEAKIAl9CiAKIAkqdmFsdWUgPSBsbmtfd2R0aDsKLQlkYmcoIkN1cnJlbnQgbGluayB3aWR0aCA9ICVkXG4iLCBsbmtfd2R0aCk7CisJY3RybF9kYmcoY3RybCwgIkN1cnJlbnQgbGluayB3aWR0aCA9ICVkXG4iLCBsbmtfd2R0aCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTk4LDcgKzEwMTMsOCBAQAogCSAgICAgICBQV1JfRkFVTFRfREVURUNUX0VOQUJMRSB8IEhQX0lOVFJfRU5BQkxFIHwgQ01EX0NNUExfSU5UUl9FTkFCTEU7CiAKIAlpZiAocGNpZV93cml0ZV9jbWQoY3RybCwgY21kLCBtYXNrKSkgewotCQllcnIoIiVzOiBDYW5ub3QgZW5hYmxlIHNvZnR3YXJlIG5vdGlmaWNhdGlvblxuIiwgX19mdW5jX18pOworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCBlbmFibGUgc29mdHdhcmUgbm90aWZpY2F0aW9uXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMTAsNyArMTAyNiw4IEBACiAJbWFzayA9IFBSU05fREVURUNUX0VOQUJMRSB8IEFUVE5fQlVUVE5fRU5BQkxFIHwgTVJMX0RFVEVDVF9FTkFCTEUgfAogCSAgICAgICBQV1JfRkFVTFRfREVURUNUX0VOQUJMRSB8IEhQX0lOVFJfRU5BQkxFIHwgQ01EX0NNUExfSU5UUl9FTkFCTEU7CiAJaWYgKHBjaWVfd3JpdGVfY21kKGN0cmwsIDAsIG1hc2spKQotCQl3YXJuKCIlczogQ2Fubm90IGRpc2FibGUgc29mdHdhcmUgbm90aWZpY2F0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfd2FybihjdHJsLCAiJXM6IENhbm5vdCBkaXNhYmxlIHNvZnR3YXJlIG5vdGlmaWNhdGlvblxuIiwKKwkJCSAgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IHBjaWVfaW5pdF9ub3RpZmljYXRpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCkBAIC0xMDcxLDM0ICsxMDg4LDQ1IEBACiAJaWYgKCFwY2llaHBfZGVidWcpCiAJCXJldHVybjsKIAotCWRiZygiSG90cGx1ZyBDb250cm9sbGVyOlxuIik7Ci0JZGJnKCIgIFNlZy9CdXMvRGV2L0Z1bmMvSVJRIDogJXMgSVJRICVkXG4iLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKLQlkYmcoIiAgVmVuZG9yIElEICAgICAgICAgICAgOiAweCUwNHhcbiIsIHBkZXYtPnZlbmRvcik7Ci0JZGJnKCIgIERldmljZSBJRCAgICAgICAgICAgIDogMHglMDR4XG4iLCBwZGV2LT5kZXZpY2UpOwotCWRiZygiICBTdWJzeXN0ZW0gSUQgICAgICAgICA6IDB4JTA0eFxuIiwgcGRldi0+c3Vic3lzdGVtX2RldmljZSk7Ci0JZGJnKCIgIFN1YnN5c3RlbSBWZW5kb3IgSUQgIDogMHglMDR4XG4iLCBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yKTsKLQlkYmcoIiAgUENJZSBDYXAgb2Zmc2V0ICAgICAgOiAweCUwMnhcbiIsIGN0cmwtPmNhcF9iYXNlKTsKKwljdHJsX2luZm8oY3RybCwgIkhvdHBsdWcgQ29udHJvbGxlcjpcbiIpOworCWN0cmxfaW5mbyhjdHJsLCAiICBTZWcvQnVzL0Rldi9GdW5jL0lSUSA6ICVzIElSUSAlZFxuIiwKKwkJICBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKKwljdHJsX2luZm8oY3RybCwgIiAgVmVuZG9yIElEICAgICAgICAgICAgOiAweCUwNHhcbiIsIHBkZXYtPnZlbmRvcik7CisJY3RybF9pbmZvKGN0cmwsICIgIERldmljZSBJRCAgICAgICAgICAgIDogMHglMDR4XG4iLCBwZGV2LT5kZXZpY2UpOworCWN0cmxfaW5mbyhjdHJsLCAiICBTdWJzeXN0ZW0gSUQgICAgICAgICA6IDB4JTA0eFxuIiwKKwkJICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwljdHJsX2luZm8oY3RybCwgIiAgU3Vic3lzdGVtIFZlbmRvciBJRCAgOiAweCUwNHhcbiIsCisJCSAgcGRldi0+c3Vic3lzdGVtX3ZlbmRvcik7CisJY3RybF9pbmZvKGN0cmwsICIgIFBDSWUgQ2FwIG9mZnNldCAgICAgIDogMHglMDJ4XG4iLCBjdHJsLT5jYXBfYmFzZSk7CiAJZm9yIChpID0gMDsgaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaSsrKSB7CiAJCWlmICghcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSkKIAkJCWNvbnRpbnVlOwotCQlkYmcoIiAgUENJIHJlc291cmNlIFslZF0gICAgIDogMHglbGx4QDB4JWxseFxuIiwgaSwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpKTsKKwkJY3RybF9pbmZvKGN0cmwsICIgIFBDSSByZXNvdXJjZSBbJWRdICAgICA6IDB4JWxseEAweCVsbHhcbiIsCisJCQkgIGksICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSkpOwogCX0KLQlkYmcoIlNsb3QgQ2FwYWJpbGl0aWVzICAgICAgOiAweCUwOHhcbiIsIGN0cmwtPnNsb3RfY2FwKTsKLQlkYmcoIiAgUGh5c2ljYWwgU2xvdCBOdW1iZXIgOiAlZFxuIiwgY3RybC0+Zmlyc3Rfc2xvdCk7Ci0JZGJnKCIgIEF0dGVudGlvbiBCdXR0b24gICAgIDogJTNzXG4iLCBBVFROX0JVVFROKGN0cmwpID8gInllcyIgOiAibm8iKTsKLQlkYmcoIiAgUG93ZXIgQ29udHJvbGxlciAgICAgOiAlM3NcbiIsIFBPV0VSX0NUUkwoY3RybCkgPyAieWVzIiA6ICJubyIpOwotCWRiZygiICBNUkwgU2Vuc29yICAgICAgICAgICA6ICUzc1xuIiwgTVJMX1NFTlMoY3RybCkgICA/ICJ5ZXMiIDogIm5vIik7Ci0JZGJnKCIgIEF0dGVudGlvbiBJbmRpY2F0b3IgIDogJTNzXG4iLCBBVFROX0xFRChjdHJsKSAgID8gInllcyIgOiAibm8iKTsKLQlkYmcoIiAgUG93ZXIgSW5kaWNhdG9yICAgICAgOiAlM3NcbiIsIFBXUl9MRUQoY3RybCkgICAgPyAieWVzIiA6ICJubyIpOwotCWRiZygiICBIb3QtUGx1ZyBTdXJwcmlzZSAgICA6ICUzc1xuIiwgSFBfU1VQUl9STShjdHJsKSA/ICJ5ZXMiIDogIm5vIik7Ci0JZGJnKCIgIEVNSSBQcmVzZW50ICAgICAgICAgIDogJTNzXG4iLCBFTUkoY3RybCkgICAgICAgID8gInllcyIgOiAibm8iKTsKLQlkYmcoIiAgQ29tbWFuZCBDb21wbGV0ZWQgICAgOiAlM3NcbiIsIE5PX0NNRF9DTVBMKGN0cmwpPyAibm8iIDogInllcyIpOworCWN0cmxfaW5mbyhjdHJsLCAiU2xvdCBDYXBhYmlsaXRpZXMgICAgICA6IDB4JTA4eFxuIiwgY3RybC0+c2xvdF9jYXApOworCWN0cmxfaW5mbyhjdHJsLCAiICBQaHlzaWNhbCBTbG90IE51bWJlciA6ICVkXG4iLCBjdHJsLT5maXJzdF9zbG90KTsKKwljdHJsX2luZm8oY3RybCwgIiAgQXR0ZW50aW9uIEJ1dHRvbiAgICAgOiAlM3NcbiIsCisJCSAgQVRUTl9CVVRUTihjdHJsKSA/ICJ5ZXMiIDogIm5vIik7CisJY3RybF9pbmZvKGN0cmwsICIgIFBvd2VyIENvbnRyb2xsZXIgICAgIDogJTNzXG4iLAorCQkgIFBPV0VSX0NUUkwoY3RybCkgPyAieWVzIiA6ICJubyIpOworCWN0cmxfaW5mbyhjdHJsLCAiICBNUkwgU2Vuc29yICAgICAgICAgICA6ICUzc1xuIiwKKwkJICBNUkxfU0VOUyhjdHJsKSAgID8gInllcyIgOiAibm8iKTsKKwljdHJsX2luZm8oY3RybCwgIiAgQXR0ZW50aW9uIEluZGljYXRvciAgOiAlM3NcbiIsCisJCSAgQVRUTl9MRUQoY3RybCkgICA/ICJ5ZXMiIDogIm5vIik7CisJY3RybF9pbmZvKGN0cmwsICIgIFBvd2VyIEluZGljYXRvciAgICAgIDogJTNzXG4iLAorCQkgIFBXUl9MRUQoY3RybCkgICAgPyAieWVzIiA6ICJubyIpOworCWN0cmxfaW5mbyhjdHJsLCAiICBIb3QtUGx1ZyBTdXJwcmlzZSAgICA6ICUzc1xuIiwKKwkJICBIUF9TVVBSX1JNKGN0cmwpID8gInllcyIgOiAibm8iKTsKKwljdHJsX2luZm8oY3RybCwgIiAgRU1JIFByZXNlbnQgICAgICAgICAgOiAlM3NcbiIsCisJCSAgRU1JKGN0cmwpICAgICAgICA/ICJ5ZXMiIDogIm5vIik7CisJY3RybF9pbmZvKGN0cmwsICIgIENvbW1hbmQgQ29tcGxldGVkICAgIDogJTNzXG4iLAorCQkgIE5PX0NNRF9DTVBMKGN0cmwpID8gIm5vIiA6ICJ5ZXMiKTsKIAlwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnJlZzE2KTsKLQlkYmcoIlNsb3QgU3RhdHVzICAgICAgICAgICAgOiAweCUwNHhcbiIsIHJlZzE2KTsKKwljdHJsX2luZm8oY3RybCwgIlNsb3QgU3RhdHVzICAgICAgICAgICAgOiAweCUwNHhcbiIsIHJlZzE2KTsKIAlwY2llaHBfcmVhZHcoY3RybCwgU0xPVENUUkwsICZyZWcxNik7Ci0JZGJnKCJTbG90IENvbnRyb2wgICAgICAgICAgIDogMHglMDR4XG4iLCByZWcxNik7CisJY3RybF9pbmZvKGN0cmwsICJTbG90IENvbnRyb2wgICAgICAgICAgIDogMHglMDR4XG4iLCByZWcxNik7CiB9CiAKIHN0cnVjdCBjb250cm9sbGVyICpwY2llX2luaXQoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCkBAIC0xMTA5LDE5ICsxMTM3LDIxIEBACiAKIAljdHJsID0ga3phbGxvYyhzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0cmwpIHsKLQkJZXJyKCIlcyA6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmZGV2LT5kZXZpY2UsICIlcyA6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJmN0cmwtPnNsb3RfbGlzdCk7CiAKKwljdHJsLT5wY2llID0gZGV2OwogCWN0cmwtPnBjaV9kZXYgPSBwZGV2OwogCWN0cmwtPmNhcF9iYXNlID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CiAJaWYgKCFjdHJsLT5jYXBfYmFzZSkgewotCQllcnIoIiVzOiBDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5XG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eVxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCWlmIChwY2llaHBfcmVhZGwoY3RybCwgU0xPVENBUCwgJnNsb3RfY2FwKSkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgU0xPVENBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlnb3RvIGFib3J0OwogCX0KIApAQCAtMTE2MSw5ICsxMTkxLDkgQEAKIAkJCWdvdG8gYWJvcnRfY3RybDsKIAl9CiAKLQlpbmZvKCJIUEMgdmVuZG9yX2lkICV4IGRldmljZV9pZCAleCBzc192aWQgJXggc3NfZGlkICV4XG4iLAotCSAgICAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsCi0JICAgICBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwljdHJsX2luZm8oY3RybCwgIkhQQyB2ZW5kb3JfaWQgJXggZGV2aWNlX2lkICV4IHNzX3ZpZCAleCBzc19kaWQgJXhcbiIsCisJCSAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCisJCSAgcGRldi0+c3Vic3lzdGVtX2RldmljZSk7CiAKIAlpZiAocGNpZV9pbml0X3Nsb3QoY3RybCkpCiAJCWdvdG8gYWJvcnRfY3RybDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKaW5kZXggNjA0MGRjYy4uZmZkMTExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKQEAgLTE5OCwxOCArMTk4LDIwIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKIAlpbnQgbnVtLCBmbjsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAogCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTihwX3Nsb3QtPmRldmljZSwgMCkpOwogCWlmIChkZXYpIHsKLQkJZXJyKCJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHMgYXQgJXg6JXgsIGNhbm5vdCBob3QtYWRkXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWN0cmxfZXJyKGN0cmwsCisJCQkgIkRldmljZSAlcyBhbHJlYWR5IGV4aXN0cyBhdCAleDoleCwgY2Fubm90IGhvdC1hZGRcbiIsCisJCQkgcGNpX25hbWUoZGV2KSwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbnVtID0gcGNpX3NjYW5fc2xvdChwYXJlbnQsIFBDSV9ERVZGTihwX3Nsb3QtPmRldmljZSwgMCkpOwogCWlmIChudW0gPT0gMCkgewotCQllcnIoIk5vIG5ldyBkZXZpY2UgZm91bmRcbiIpOworCQljdHJsX2VycihjdHJsLCAiTm8gbmV3IGRldmljZSBmb3VuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjE4LDggKzIyMCw4IEBACiAJCWlmICghZGV2KQogCQkJY29udGludWU7CiAJCWlmICgoZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgewotCQkJZXJyKCJDYW5ub3QgaG90LWFkZCBkaXNwbGF5IGRldmljZSAlc1xuIiwKLQkJCQkJcGNpX25hbWUoZGV2KSk7CisJCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IGhvdC1hZGQgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJIHBjaV9uYW1lKGRldikpOwogCQkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yNDQsOSArMjQ2LDEwIEBACiAJdTggcHJlc2VuY2UgPSAwOwogCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwogCXUxNiBjb21tYW5kOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCi0JZGJnKCIlczogYnVzL2RldiA9ICV4LyV4XG4iLCBfX2Z1bmNfXywgcF9zbG90LT5idXMsCi0JCQkJcF9zbG90LT5kZXZpY2UpOworCWN0cmxfZGJnKGN0cmwsICIlczogYnVzL2RldiA9ICV4LyV4XG4iLCBfX2Z1bmNfXywKKwkJIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAJcmV0ID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmcHJlc2VuY2UpOwogCWlmIChyZXQpCiAJCXByZXNlbmNlID0gMDsKQEAgLTI1NywxNiArMjYwLDE3IEBACiAJCWlmICghdGVtcCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKHRlbXAtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7Ci0JCQllcnIoIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCi0JCQkJCXBjaV9uYW1lKHRlbXApKTsKKwkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCSBwY2lfbmFtZSh0ZW1wKSk7CiAJCQlwY2lfZGV2X3B1dCh0ZW1wKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICh0ZW1wLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFICYmIHByZXNlbmNlKSB7CiAJCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh0ZW1wLCBQQ0lfQlJJREdFX0NPTlRST0wsICZiY3RsKTsKIAkJCWlmIChiY3RsICYgUENJX0JSSURHRV9DVExfVkdBKSB7Ci0JCQkJZXJyKCJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAotCQkJCSAgICBwY2lfbmFtZSh0ZW1wKSk7CisJCQkJY3RybF9lcnIoY3RybCwKKwkJCQkJICJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCQkgcGNpX25hbWUodGVtcCkpOwogCQkJCXBjaV9kZXZfcHV0KHRlbXApOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwLmgKaW5kZXggN2Q1OTIxYi4uNDE5OTE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oCkBAIC00NiwxMCArNDYsMTAgQEAKICNkZWZpbmUgUFJFU0VOVCAgICAgICAgIDEJLyogQ2FyZCBpbiBzbG90ICovCiAKICNkZWZpbmUgTVlfTkFNRSAicnBhcGhwIgotZXh0ZXJuIGludCBkZWJ1ZzsKK2V4dGVybiBpbnQgcnBhcGhwX2RlYnVnOwogI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQlcCi0JCWlmIChkZWJ1ZykJCQkJCVwKKwkJaWYgKHJwYXBocF9kZWJ1ZykJCQkJCVwKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsCVwKIAkJCQlNWV9OQU1FICwgIyMgYXJnKTsgCQlcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwppbmRleCAxZjg0ZjQwLi45NWQwMmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCkBAIC0zNyw3ICszNyw3IEBACiAJCQkJLyogYW5kIHBjaV9kb19zY2FuX2J1cyAqLwogI2luY2x1ZGUgInJwYXBocC5oIgogCi1pbnQgZGVidWc7CitpbnQgcnBhcGhwX2RlYnVnOwogTElTVF9IRUFEKHJwYXBocF9zbG90X2hlYWQpOwogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjEiCkBAIC01MCw3ICs1MCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBycGFwaHBfZGVidWcsIGJvb2wsIDA2NDQpOwogCiAvKioKICAqIHNldF9hdHRlbnRpb25fc3RhdHVzIC0gc2V0IGF0dGVudGlvbiBMRUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMKaW5kZXggNWFjZmQ0Zi4uNTEzZTFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQkJc2xvdC0+c3RhdGUgPSBDT05GSUdVUkVEOwogCQl9CiAKLQkJaWYgKGRlYnVnKSB7CisJCWlmIChycGFwaHBfZGVidWcpIHsKIAkJCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJCQlkYmcoIiVzOiBwY2lfZGV2cyBvZiBzbG90WyVzXVxuIiwgX19mdW5jX18sIHNsb3QtPmRuLT5mdWxsX25hbWUpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2h0aXJxLmMgYi9kcml2ZXJzL3BjaS9odGlycS5jCmluZGV4IDI3OWM5NDAuLmJmN2Q2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2h0aXJxLmMKKysrIGIvZHJpdmVycy9wY2kvaHRpcnEuYwpAQCAtMTI2LDcgKzEyNiw4IEBACiAJY2ZnLT5tc2cuYWRkcmVzc19oaSA9IDB4ZmZmZmZmZmY7CiAKIAlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JaWYgKGlycSA8IDApIHsKKworCWlmIChpcnEgPD0gMCkgewogCQlrZnJlZShjZmcpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IGZjNWYyZGIuLjhiNTFlMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CiAKLQkvKiBmbHVzaCBjb250ZXh0IGVudHJ5IHdpbGwgaW1wbGljdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLworCS8qIGZsdXNoIGNvbnRleHQgZW50cnkgd2lsbCBpbXBsaWNpdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLwogCXJldHVybiAwOwogfQogCkBAIC02NTYsNyArNjU2LDcgQEAKIAlpZiAoRE1BX1RMQl9JQUlHKHZhbCkgIT0gRE1BX1RMQl9JSVJHKHR5cGUpKQogCQlwcl9kZWJ1ZygiSU9NTVU6IHRsYiBmbHVzaCByZXF1ZXN0ICVMeCwgYWN0dWFsICVMeFxuIiwKIAkJCURNQV9UTEJfSUlSRyh0eXBlKSwgRE1BX1RMQl9JQUlHKHZhbCkpOwotCS8qIGZsdXNoIGNvbnRleHQgZW50cnkgd2lsbCBpbXBsaWN0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCisJLyogZmx1c2ggaW90bGIgZW50cnkgd2lsbCBpbXBsaWNpdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA3MzhkNGM4Li4yZGU1YTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgpAQCAtMTEsNDEgKzEyLDY0IEBACiBzdGF0aWMgaW50IGlyX2lvYXBpY19udW07CiBpbnQgaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKIAotc3RhdGljIHN0cnVjdCB7CitzdHJ1Y3QgaXJxXzJfaW9tbXUgewogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJdTE2IGlydGVfaW5kZXg7CiAJdTE2IHN1Yl9oYW5kbGU7CiAJdTggIGlydGVfbWFzazsKLX0gaXJxXzJfaW9tbXVbTlJfSVJRU107Cit9OworCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11IGlycV8yX2lvbW11WFtOUl9JUlFTXTsKKworc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXUodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSA8IG5yX2lycXMpID8gaXJxXzJfaW9tbXVYICsgaXJxIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXVfYWxsb2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxXzJfaW9tbXUoaXJxKTsKK30KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfMl9pcl9sb2NrKTsKIAorc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqdmFsaWRfaXJxXzJfaW9tbXUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKworCWlycV9pb21tdSA9IGlycV8yX2lvbW11KGlycSk7CisKKwlpZiAoIWlycV9pb21tdSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlycV9pb21tdS0+aW9tbXUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlycV9pb21tdTsKK30KKwogaW50IGlycV9yZW1hcHBlZChpbnQgaXJxKQogewotCWlmIChpcnEgPiBOUl9JUlFTKQotCQlyZXR1cm4gMDsKLQotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKSAhPSBOVUxMOwogfQogCiBpbnQgZ2V0X2lydGUoaW50IGlycSwgc3RydWN0IGlydGUgKmVudHJ5KQogewogCWludCBpbmRleDsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKIAotCWlmICghZW50cnkgfHwgaXJxID4gTlJfSVJRUykKKwlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLTE7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW5kZXggPSBpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXggKyBpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGU7Ci0JKmVudHJ5ID0gKihpcnFfMl9pb21tdVtpcnFdLmlvbW11LT5pcl90YWJsZS0+YmFzZSArIGluZGV4KTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKKwkqZW50cnkgPSAqKGlycV9pb21tdS0+aW9tbXUtPmlyX3RhYmxlLT5iYXNlICsgaW5kZXgpOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCXJldHVybiAwOwpAQCAtNTQsNiArNzgsNyBAQAogaW50IGFsbG9jX2lydGUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IGlycSwgdTE2IGNvdW50KQogewogCXN0cnVjdCBpcl90YWJsZSAqdGFibGUgPSBpb21tdS0+aXJfdGFibGU7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAJdTE2IGluZGV4LCBzdGFydF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAJaW50IGk7CkBAIC02MSw2ICs4NiwxMCBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAtMTsKIAorCS8qIHByb3RlY3QgaXJxXzJfaW9tbXVfYWxsb2MgbGF0ZXIgKi8KKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybiAtMTsKKwogCS8qCiAJICogc3RhcnQgdGhlIElSVEUgc2VhcmNoIGZyb20gaW5kZXggMC4KIAkgKi8KQEAgLTEwMCwxMCArMTI5LDExIEBACiAJZm9yIChpID0gaW5kZXg7IGkgPCBpbmRleCArIGNvdW50OyBpKyspCiAJCXRhYmxlLT5iYXNlW2ldLnByZXNlbnQgPSAxOwogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IGlvbW11OwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9ICBpbmRleDsKLQlpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGUgPSAwOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrID0gbWFzazsKKwlpcnFfaW9tbXUgPSBpcnFfMl9pb21tdV9hbGxvYyhpcnEpOworCWlycV9pb21tdS0+aW9tbXUgPSBpb21tdTsKKwlpcnFfaW9tbXUtPmlydGVfaW5kZXggPSAgaW5kZXg7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKKwlpcnFfaW9tbXUtPmlydGVfbWFzayA9IG1hc2s7CiAKIAlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAKQEAgLTEyNCwzMSArMTU0LDMzIEBACiBpbnQgbWFwX2lycV90b19pcnRlX2hhbmRsZShpbnQgaXJxLCB1MTYgKnN1Yl9oYW5kbGUpCiB7CiAJaW50IGluZGV4OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCSpzdWJfaGFuZGxlID0gaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlOwotCWluZGV4ID0gaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4OworCSpzdWJfaGFuZGxlID0gaXJxX2lvbW11LT5zdWJfaGFuZGxlOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4OwogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAlyZXR1cm4gaW5kZXg7CiB9CiAKIGludCBzZXRfaXJ0ZV9pcnEoaW50IGlycSwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGluZGV4LCB1MTYgc3ViaGFuZGxlKQogewotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQorCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IGlvbW11OwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IGluZGV4OwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IHN1YmhhbmRsZTsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKworCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CisKKwlpcnFfaW9tbXUtPmlvbW11ID0gaW9tbXU7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gaW5kZXg7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gc3ViaGFuZGxlOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApAQCAtMTU3LDE2ICsxODksMTkgQEAKIAogaW50IGNsZWFyX2lydGVfaXJxKGludCBpcnEsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBpbmRleCkKIHsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwogCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFpcnFfMl9pb21tdVtpcnFdLmlvbW11KSB7CisJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKKwlpZiAoIWlycV9pb21tdSkgewogCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpcnFfMl9pb21tdVtpcnFdLmlvbW11ID0gTlVMTDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXggPSAwOwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2sgPSAwOworCWlycV9pb21tdS0+aW9tbXUgPSBOVUxMOworCWlycV9pb21tdS0+aXJ0ZV9pbmRleCA9IDA7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKKwlpcnFfMl9pb21tdShpcnEpLT5pcnRlX21hc2sgPSAwOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCkBAIC0xNzgsMTYgKzIxMywxOCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCBpcnRlX21vZGlmaWVkLT5sb3cgfCAoMSA8PCAxKSk7CkBAIC0yMDMsMTggKzI0MCwyMCBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAotCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrKTsKKwlxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yNDYsMjggKzI4NSwzMCBAQAogCWludCBpbmRleCwgaTsKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKLQlpZiAoIWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2spOyBpKyspCisJaWYgKCFpcnFfaW9tbXUtPnN1Yl9oYW5kbGUpIHsKKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsgaSsrKQogCQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgMCk7Ci0JCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrKTsKKwkJcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxX2lvbW11LT5pcnRlX21hc2spOwogCX0KIAotCWlycV8yX2lvbW11W2lycV0uaW9tbXUgPSBOVUxMOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlID0gMDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJaXJxX2lvbW11LT5pb21tdSA9IE5VTEw7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gMDsKKwlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCA0YTEwYjU2Li5kMjgxMjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMzc4LDIzICszNzgsMjEgQEAKIAllbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQgPSAxOwogCWVudHJ5LT5tc2lfYXR0cmliLmRlZmF1bHRfaXJxID0gZGV2LT5pcnE7CS8qIFNhdmUgSU9BUElDIElSUSAqLwogCWVudHJ5LT5tc2lfYXR0cmliLnBvcyA9IHBvczsKLQlpZiAoaXNfbWFza19iaXRfc3VwcG9ydChjb250cm9sKSkgeworCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7CiAJCWVudHJ5LT5tYXNrX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopKGxvbmcpbXNpX21hc2tfYml0c19yZWcocG9zLAotCQkJCWlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpOworCQkJCWVudHJ5LT5tc2lfYXR0cmliLmlzXzY0KTsKIAl9CiAJZW50cnktPmRldiA9IGRldjsKIAlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewogCQl1bnNpZ25lZCBpbnQgbWFza2JpdHMsIHRlbXA7CiAJCS8qIEFsbCBNU0lzIGFyZSB1bm1hc2tlZCBieSBkZWZhdWx0LCBNYXNrIHRoZW0gYWxsICovCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsCi0JCQltc2lfbWFza19iaXRzX3JlZyhwb3MsIGlzXzY0Yml0X2FkZHJlc3MoY29udHJvbCkpLAorCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBlbnRyeS0+bXNpX2F0dHJpYi5pc182NCksCiAJCQkmbWFza2JpdHMpOwogCQl0ZW1wID0gKDEgPDwgbXVsdGlfbXNpX2NhcGFibGUoY29udHJvbCkpOwogCQl0ZW1wID0gKCh0ZW1wIC0gMSkgJiB+dGVtcCk7CiAJCW1hc2tiaXRzIHw9IHRlbXA7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJbXNpX21hc2tfYml0c19yZWcocG9zLCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpKSwKLQkJCW1hc2tiaXRzKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGVudHJ5LT5tc2lfYXR0cmliLmlzXzY0LCBtYXNrYml0cyk7CiAJCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXRzX21hc2sgPSB0ZW1wOwogCX0KIAlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGExM2Y1MzQuLmI0Y2RkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTQzLDE4ICs0MywzMiBAQAogewogCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwogCXN0cnVjdCBwY2lfZHJpdmVyICpwZHJ2ID0gdG9fcGNpX2RyaXZlcihkcml2ZXIpOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMgPSBwZHJ2LT5pZF90YWJsZTsKIAlfX3UzMiB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yPVBDSV9BTllfSUQsCiAJCXN1YmRldmljZT1QQ0lfQU5ZX0lELCBjbGFzcz0wLCBjbGFzc19tYXNrPTA7CiAJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YT0wOwogCWludCBmaWVsZHM9MDsKLQlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsOwogCi0JZmllbGRzID0gc3NjYW5mKGJ1ZiwgIiV4ICV4ICV4ICV4ICV4ICV4ICVsdXgiLAorCWZpZWxkcyA9IHNzY2FuZihidWYsICIleCAleCAleCAleCAleCAleCAlbHgiLAogCQkJJnZlbmRvciwgJmRldmljZSwgJnN1YnZlbmRvciwgJnN1YmRldmljZSwKIAkJCSZjbGFzcywgJmNsYXNzX21hc2ssICZkcml2ZXJfZGF0YSk7CiAJaWYgKGZpZWxkcyA8IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogT25seSBhY2NlcHQgZHJpdmVyX2RhdGEgdmFsdWVzIHRoYXQgbWF0Y2ggYW4gZXhpc3RpbmcgaWRfdGFibGUKKwkgICBlbnRyeSAqLworCXJldHZhbCA9IC1FSU5WQUw7CisJd2hpbGUgKGlkcy0+dmVuZG9yIHx8IGlkcy0+c3VidmVuZG9yIHx8IGlkcy0+Y2xhc3NfbWFzaykgeworCQlpZiAoZHJpdmVyX2RhdGEgPT0gaWRzLT5kcml2ZXJfZGF0YSkgeworCQkJcmV0dmFsID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlkcysrOworCX0KKwlpZiAocmV0dmFsKQkvKiBObyBtYXRjaCAqLworCQlyZXR1cm4gcmV0dmFsOworCiAJZHluaWQgPSBremFsbG9jKHNpemVvZigqZHluaWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR5bmlkKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY1LDggKzc5LDcgQEAKIAlkeW5pZC0+aWQuc3ViZGV2aWNlID0gc3ViZGV2aWNlOwogCWR5bmlkLT5pZC5jbGFzcyA9IGNsYXNzOwogCWR5bmlkLT5pZC5jbGFzc19tYXNrID0gY2xhc3NfbWFzazsKLQlkeW5pZC0+aWQuZHJpdmVyX2RhdGEgPSBwZHJ2LT5keW5pZHMudXNlX2RyaXZlcl9kYXRhID8KLQkJZHJpdmVyX2RhdGEgOiAwVUw7CisJZHluaWQtPmlkLmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGE7CiAKIAlzcGluX2xvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZkeW5pZC0+bm9kZSwgJnBkcnYtPmR5bmlkcy5saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggNzdiYWZmMC4uMTEwMDIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogICogUmVhZHMgMSwgMiwgb3IgNCBieXRlcyBmcm9tIGxlZ2FjeSBJL08gcG9ydCBzcGFjZSB1c2luZyBhbiBhcmNoIHNwZWNpZmljCiAgKiBjYWxsYmFjayByb3V0aW5lIChwY2lfbGVnYWN5X3JlYWQpLgogICovCi1zc2l6ZV90CitzdGF0aWMgc3NpemVfdAogcGNpX3JlYWRfbGVnYWN5X2lvKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCSAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAgKiBXcml0ZXMgMSwgMiwgb3IgNCBieXRlcyBmcm9tIGxlZ2FjeSBJL08gcG9ydCBzcGFjZSB1c2luZyBhbiBhcmNoIHNwZWNpZmljCiAgKiBjYWxsYmFjayByb3V0aW5lIChwY2lfbGVnYWN5X3dyaXRlKS4KICAqLwotc3NpemVfdAorc3RhdGljIHNzaXplX3QKIHBjaV93cml0ZV9sZWdhY3lfaW8oc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewpAQCAtNDY4LDExICs0NjgsMTEgQEAKICAqIEBhdHRyOiBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBmb3IgdGhpcyBmaWxlCiAgKiBAdm1hOiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgcGFzc2VkIHRvIG1tYXAKICAqCi0gKiBVc2VzIGFuIGFyY2ggc3BlY2lmaWMgY2FsbGJhY2ssIHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlLCB0byBtbWFwCisgKiBVc2VzIGFuIGFyY2ggc3BlY2lmaWMgY2FsbGJhY2ssIHBjaV9tbWFwX2xlZ2FjeV9tZW1fcGFnZV9yYW5nZSwgdG8gbW1hcAogICogbGVnYWN5IG1lbW9yeSBzcGFjZSAoZmlyc3QgbWVnIG9mIGJ1cyBzcGFjZSkgaW50byBhcHBsaWNhdGlvbiB2aXJ0dWFsCiAgKiBtZW1vcnkgc3BhY2UuCiAgKi8KLWludAorc3RhdGljIGludAogcGNpX21tYXBfbGVnYWN5X21lbShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewpAQCAtNDgwLDcgKzQ4MCw5MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZSwKIAkJCQkJCSAgICAgIGtvYmopKTsKIAotICAgICAgICByZXR1cm4gcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2UoYnVzLCB2bWEpOworICAgICAgICByZXR1cm4gcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2UoYnVzLCB2bWEsIHBjaV9tbWFwX21lbSk7Cit9CisKKy8qKgorICogcGNpX21tYXBfbGVnYWN5X2lvIC0gbWFwIGxlZ2FjeSBQQ0kgSU8gaW50byB1c2VyIG1lbW9yeSBzcGFjZQorICogQGtvYmo6IGtvYmplY3QgY29ycmVzcG9uZGluZyB0byBkZXZpY2UgdG8gYmUgbWFwcGVkCisgKiBAYXR0cjogc3RydWN0IGJpbl9hdHRyaWJ1dGUgZm9yIHRoaXMgZmlsZQorICogQHZtYTogc3RydWN0IHZtX2FyZWFfc3RydWN0IHBhc3NlZCB0byBtbWFwCisgKgorICogVXNlcyBhbiBhcmNoIHNwZWNpZmljIGNhbGxiYWNrLCBwY2lfbW1hcF9sZWdhY3lfaW9fcGFnZV9yYW5nZSwgdG8gbW1hcAorICogbGVnYWN5IElPIHNwYWNlIChmaXJzdCBtZWcgb2YgYnVzIHNwYWNlKSBpbnRvIGFwcGxpY2F0aW9uIHZpcnR1YWwKKyAqIG1lbW9yeSBzcGFjZS4gUmV0dXJucyAtRU5PU1lTIGlmIHRoZSBvcGVyYXRpb24gaXNuJ3Qgc3VwcG9ydGVkCisgKi8KK3N0YXRpYyBpbnQKK3BjaV9tbWFwX2xlZ2FjeV9pbyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworICAgICAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gdG9fcGNpX2J1cyhjb250YWluZXJfb2Yoa29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2UsCisJCQkJCQkgICAgICBrb2JqKSk7CisKKyAgICAgICAgcmV0dXJuIHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKGJ1cywgdm1hLCBwY2lfbW1hcF9pbyk7Cit9CisKKy8qKgorICogcGNpX2NyZWF0ZV9sZWdhY3lfZmlsZXMgLSBjcmVhdGUgbGVnYWN5IEkvTyBwb3J0IGFuZCBtZW1vcnkgZmlsZXMKKyAqIEBiOiBidXMgdG8gY3JlYXRlIGZpbGVzIHVuZGVyCisgKgorICogU29tZSBwbGF0Zm9ybXMgYWxsb3cgYWNjZXNzIHRvIGxlZ2FjeSBJL08gcG9ydCBhbmQgSVNBIG1lbW9yeSBzcGFjZSBvbgorICogYSBwZXItYnVzIGJhc2lzLiAgVGhpcyByb3V0aW5lIGNyZWF0ZXMgdGhlIGZpbGVzIGFuZCB0aWVzIHRoZW0gaW50bworICogdGhlaXIgYXNzb2NpYXRlZCByZWFkLCB3cml0ZSBhbmQgbW1hcCBmaWxlcyBmcm9tIHBjaS1zeXNmcy5jCisgKgorICogT24gZXJyb3IgdW53aW5kLCBidXQgZG9uJ3QgcHJvcG9nYXRlIHRoZSBlcnJvciB0byB0aGUgY2FsbGVyCisgKiBhcyBpdCBpcyBvayB0byBzZXQgdXAgdGhlIFBDSSBidXMgd2l0aG91dCB0aGVzZSBmaWxlcy4KKyAqLwordm9pZCBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyhzdHJ1Y3QgcGNpX2J1cyAqYikKK3sKKwlpbnQgZXJyb3I7CisKKwliLT5sZWdhY3lfaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmluX2F0dHJpYnV0ZSkgKiAyLAorCQkJICAgICAgIEdGUF9BVE9NSUMpOworCWlmICghYi0+bGVnYWN5X2lvKQorCQlnb3RvIGt6YWxsb2NfZXJyOworCisJYi0+bGVnYWN5X2lvLT5hdHRyLm5hbWUgPSAibGVnYWN5X2lvIjsKKwliLT5sZWdhY3lfaW8tPnNpemUgPSAweGZmZmY7CisJYi0+bGVnYWN5X2lvLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKKwliLT5sZWdhY3lfaW8tPnJlYWQgPSBwY2lfcmVhZF9sZWdhY3lfaW87CisJYi0+bGVnYWN5X2lvLT53cml0ZSA9IHBjaV93cml0ZV9sZWdhY3lfaW87CisJYi0+bGVnYWN5X2lvLT5tbWFwID0gcGNpX21tYXBfbGVnYWN5X2lvOworCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOworCWlmIChlcnJvcikKKwkJZ290byBsZWdhY3lfaW9fZXJyOworCisJLyogQWxsb2NhdGVkIGFib3ZlIGFmdGVyIHRoZSBsZWdhY3lfaW8gc3RydWN0ICovCisJYi0+bGVnYWN5X21lbSA9IGItPmxlZ2FjeV9pbyArIDE7CisJYi0+bGVnYWN5X21lbS0+YXR0ci5uYW1lID0gImxlZ2FjeV9tZW0iOworCWItPmxlZ2FjeV9tZW0tPnNpemUgPSAxMDI0KjEwMjQ7CisJYi0+bGVnYWN5X21lbS0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CisJYi0+bGVnYWN5X21lbS0+bW1hcCA9IHBjaV9tbWFwX2xlZ2FjeV9tZW07CisJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9tZW0pOworCWlmIChlcnJvcikKKwkJZ290byBsZWdhY3lfbWVtX2VycjsKKworCXJldHVybjsKKworbGVnYWN5X21lbV9lcnI6CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOworbGVnYWN5X2lvX2VycjoKKwlrZnJlZShiLT5sZWdhY3lfaW8pOworCWItPmxlZ2FjeV9pbyA9IE5VTEw7CitremFsbG9jX2VycjoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwY2k6IHdhcm5pbmc6IGNvdWxkIG5vdCBjcmVhdGUgbGVnYWN5IEkvTyBwb3J0ICIKKwkgICAgICAgImFuZCBJU0EgbWVtb3J5IHJlc291cmNlcyB0byBzeXNmc1xuIik7CisJcmV0dXJuOworfQorCit2b2lkIHBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpiKQoreworCWlmIChiLT5sZWdhY3lfaW8pIHsKKwkJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOworCQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9tZW0pOworCQlrZnJlZShiLT5sZWdhY3lfaW8pOyAvKiBib3RoIGFyZSBhbGxvY2F0ZWQgaGVyZSAqLworCX0KIH0KICNlbmRpZiAvKiBIQVZFX1BDSV9MRUdBQ1kgKi8KIApAQCAtNzE1LDcgKzc5OCw3IEBACiAJCS5uYW1lID0gImNvbmZpZyIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCiAJfSwKLQkuc2l6ZSA9IDI1NiwKKwkuc2l6ZSA9IFBDSV9DRkdfU1BBQ0VfU0laRSwKIAkucmVhZCA9IHBjaV9yZWFkX2NvbmZpZywKIAkud3JpdGUgPSBwY2lfd3JpdGVfY29uZmlnLAogfTsKQEAgLTcyNSw3ICs4MDgsNyBAQAogCQkubmFtZSA9ICJjb25maWciLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAogCX0sCi0JLnNpemUgPSA0MDk2LAorCS5zaXplID0gUENJX0NGR19TUEFDRV9FWFBfU0laRSwKIAkucmVhZCA9IHBjaV9yZWFkX2NvbmZpZywKIAkud3JpdGUgPSBwY2lfd3JpdGVfY29uZmlnLAogfTsKQEAgLTczNSw4NiArODE4LDEwMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBjaV9jcmVhdGVfY2FwYWJpbGl0aWVzX3N5c2ZzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cjsKKworCS8qIElmIHRoZSBkZXZpY2UgaGFzIFZQRCwgdHJ5IHRvIGV4cG9zZSBpdCBpbiBzeXNmcy4gKi8KKwlpZiAoZGV2LT52cGQpIHsKKwkJYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyKSwgR0ZQX0FUT01JQyk7CisJCWlmICghYXR0cikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWF0dHItPnNpemUgPSBkZXYtPnZwZC0+bGVuOworCQlhdHRyLT5hdHRyLm5hbWUgPSAidnBkIjsKKwkJYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CisJCWF0dHItPnJlYWQgPSBwY2lfcmVhZF92cGQ7CisJCWF0dHItPndyaXRlID0gcGNpX3dyaXRlX3ZwZDsKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZkZXYtPmRldi5rb2JqLCBhdHRyKTsKKwkJaWYgKHJldHZhbCkgeworCQkJa2ZyZWUoZGV2LT52cGQtPmF0dHIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlkZXYtPnZwZC0+YXR0ciA9IGF0dHI7CisJfQorCisJLyogQWN0aXZlIFN0YXRlIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlwY2llX2FzcG1fY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBfX211c3RfY2hlY2sgcGNpX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyID0gTlVMTDsKIAlpbnQgcmV0dmFsOworCWludCByb21fc2l6ZSA9IDA7CisJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHI7CiAKIAlpZiAoIXN5c2ZzX2luaXRpYWxpemVkKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWlmIChwZGV2LT5jZmdfc2l6ZSA8IDQwOTYpCisJaWYgKHBkZXYtPmNmZ19zaXplIDwgUENJX0NGR19TUEFDRV9FWFBfU0laRSkKIAkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaV9jb25maWdfYXR0cik7CiAJZWxzZQogCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmcGNpZV9jb25maWdfYXR0cik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnI7CiAKLQkvKiBJZiB0aGUgZGV2aWNlIGhhcyBWUEQsIHRyeSB0byBleHBvc2UgaXQgaW4gc3lzZnMuICovCi0JaWYgKHBkZXYtPnZwZCkgewotCQlhdHRyID0ga3phbGxvYyhzaXplb2YoKmF0dHIpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGF0dHIpIHsKLQkJCXBkZXYtPnZwZC0+YXR0ciA9IGF0dHI7Ci0JCQlhdHRyLT5zaXplID0gcGRldi0+dnBkLT5sZW47Ci0JCQlhdHRyLT5hdHRyLm5hbWUgPSAidnBkIjsKLQkJCWF0dHItPmF0dHIubW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSOwotCQkJYXR0ci0+cmVhZCA9IHBjaV9yZWFkX3ZwZDsKLQkJCWF0dHItPndyaXRlID0gcGNpX3dyaXRlX3ZwZDsKLQkJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlnb3RvIGVycl92cGQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBlcnJfY29uZmlnX2ZpbGU7Ci0JCX0KLQl9Ci0KIAlyZXR2YWwgPSBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHBkZXYpOwogCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX3ZwZF9maWxlOworCQlnb3RvIGVycl9jb25maWdfZmlsZTsKKworCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKQorCQlyb21fc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgUENJX1JPTV9SRVNPVVJDRSk7CisJZWxzZSBpZiAocGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9TSEFET1cpCisJCXJvbV9zaXplID0gMHgyMDAwMDsKIAogCS8qIElmIHRoZSBkZXZpY2UgaGFzIGEgUk9NLCB0cnkgdG8gZXhwb3NlIGl0IGluIHN5c2ZzLiAqLwotCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpIHx8Ci0JICAgIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykpIHsKKwlpZiAocm9tX3NpemUpIHsKIAkJYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyKSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChhdHRyKSB7Ci0JCQlwZGV2LT5yb21fYXR0ciA9IGF0dHI7Ci0JCQlhdHRyLT5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKTsKLQkJCWF0dHItPmF0dHIubmFtZSA9ICJyb20iOwotCQkJYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUjsKLQkJCWF0dHItPnJlYWQgPSBwY2lfcmVhZF9yb207Ci0JCQlhdHRyLT53cml0ZSA9IHBjaV93cml0ZV9yb207Ci0JCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBhdHRyKTsKLQkJCWlmIChyZXR2YWwpCi0JCQkJZ290byBlcnJfcm9tOwotCQl9IGVsc2UgeworCQlpZiAoIWF0dHIpIHsKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9yZXNvdXJjZV9maWxlczsKIAkJfQorCQlhdHRyLT5zaXplID0gcm9tX3NpemU7CisJCWF0dHItPmF0dHIubmFtZSA9ICJyb20iOworCQlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOworCQlhdHRyLT5yZWFkID0gcGNpX3JlYWRfcm9tOworCQlhdHRyLT53cml0ZSA9IHBjaV93cml0ZV9yb207CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOworCQlpZiAocmV0dmFsKSB7CisJCQlrZnJlZShhdHRyKTsKKwkJCWdvdG8gZXJyX3Jlc291cmNlX2ZpbGVzOworCQl9CisJCXBkZXYtPnJvbV9hdHRyID0gYXR0cjsKIAl9CisKIAkvKiBhZGQgcGxhdGZvcm0tc3BlY2lmaWMgYXR0cmlidXRlcyAqLwotCWlmIChwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHBkZXYpKQorCXJldHZhbCA9IHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMocGRldik7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfcm9tX2ZpbGU7CiAKLQlwY2llX2FzcG1fY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhwZGV2KTsKKwkvKiBhZGQgc3lzZnMgZW50cmllcyBmb3IgdmFyaW91cyBjYXBhYmlsaXRpZXMgKi8KKwlyZXR2YWwgPSBwY2lfY3JlYXRlX2NhcGFiaWxpdGllc19zeXNmcyhwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9yb21fZmlsZTsKIAogCXJldHVybiAwOwogCiBlcnJfcm9tX2ZpbGU6Ci0JaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgUENJX1JPTV9SRVNPVVJDRSkpCisJaWYgKHJvbV9zaXplKSB7CiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnJvbV9hdHRyKTsKLWVycl9yb206Ci0Ja2ZyZWUocGRldi0+cm9tX2F0dHIpOworCQlrZnJlZShwZGV2LT5yb21fYXR0cik7CisJCXBkZXYtPnJvbV9hdHRyID0gTlVMTDsKKwl9CiBlcnJfcmVzb3VyY2VfZmlsZXM6CiAJcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKLWVycl92cGRfZmlsZToKLQlpZiAocGRldi0+dnBkKSB7Ci0JCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnZwZC0+YXR0cik7Ci1lcnJfdnBkOgotCQlrZnJlZShwZGV2LT52cGQtPmF0dHIpOwotCX0KIGVycl9jb25maWdfZmlsZToKLQlpZiAocGRldi0+Y2ZnX3NpemUgPCA0MDk2KQorCWlmIChwZGV2LT5jZmdfc2l6ZSA8IFBDSV9DRkdfU1BBQ0VfRVhQX1NJWkUpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOwogCWVsc2UKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaWVfY29uZmlnX2F0dHIpOwpAQCAtODIyLDYgKzkyMiwxNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9yZW1vdmVfY2FwYWJpbGl0aWVzX3N5c2ZzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+dnBkICYmIGRldi0+dnBkLT5hdHRyKSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5kZXYua29iaiwgZGV2LT52cGQtPmF0dHIpOworCQlrZnJlZShkZXYtPnZwZC0+YXR0cik7CisJfQorCisJcGNpZV9hc3BtX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoZGV2KTsKK30KKwogLyoqCiAgKiBwY2lfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyAtIGNsZWFudXAgUENJIHNwZWNpZmljIHN5c2ZzIGZpbGVzCiAgKiBAcGRldjogZGV2aWNlIHdob3NlIGVudHJpZXMgd2Ugc2hvdWxkIGZyZWUKQEAgLTgzMCwyNyArOTQwLDI4IEBACiAgKi8KIHZvaWQgcGNpX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJaW50IHJvbV9zaXplID0gMDsKKwogCWlmICghc3lzZnNfaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKIAotCXBjaWVfYXNwbV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHBkZXYpOworCXBjaV9yZW1vdmVfY2FwYWJpbGl0aWVzX3N5c2ZzKHBkZXYpOwogCi0JaWYgKHBkZXYtPnZwZCkgewotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBwZGV2LT52cGQtPmF0dHIpOwotCQlrZnJlZShwZGV2LT52cGQtPmF0dHIpOwotCX0KLQlpZiAocGRldi0+Y2ZnX3NpemUgPCA0MDk2KQorCWlmIChwZGV2LT5jZmdfc2l6ZSA8IFBDSV9DRkdfU1BBQ0VfRVhQX1NJWkUpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOwogCWVsc2UKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaWVfY29uZmlnX2F0dHIpOwogCiAJcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKIAotCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKSB7Ci0JCWlmIChwZGV2LT5yb21fYXR0cikgewotCQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcGRldi0+cm9tX2F0dHIpOwotCQkJa2ZyZWUocGRldi0+cm9tX2F0dHIpOwotCQl9CisJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgUENJX1JPTV9SRVNPVVJDRSkpCisJCXJvbV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKTsKKwllbHNlIGlmIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykKKwkJcm9tX3NpemUgPSAweDIwMDAwOworCisJaWYgKHJvbV9zaXplICYmIHBkZXYtPnJvbV9hdHRyKSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnJvbV9hdHRyKTsKKwkJa2ZyZWUocGRldi0+cm9tX2F0dHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBjOTg4NGJiLi40ZGIyNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMjEzLDEwICsyMTMsMTMgQEAKIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKQogewogCXUzMiBoZWFkZXI7Ci0JaW50IHR0bCA9IDQ4MDsgLyogMzg0MCBieXRlcywgbWluaW11bSA4IGJ5dGVzIHBlciBjYXBhYmlsaXR5ICovCi0JaW50IHBvcyA9IDB4MTAwOworCWludCB0dGw7CisJaW50IHBvcyA9IFBDSV9DRkdfU1BBQ0VfU0laRTsKIAotCWlmIChkZXYtPmNmZ19zaXplIDw9IDI1NikKKwkvKiBtaW5pbXVtIDggYnl0ZXMgcGVyIGNhcGFiaWxpdHkgKi8KKwl0dGwgPSAoUENJX0NGR19TUEFDRV9FWFBfU0laRSAtIFBDSV9DRkdfU1BBQ0VfU0laRSkgLyA4OworCisJaWYgKGRldi0+Y2ZnX3NpemUgPD0gUENJX0NGR19TUEFDRV9TSVpFKQogCQlyZXR1cm4gMDsKIAogCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZoZWFkZXIpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKQEAgLTIzNCw3ICsyMzcsNyBAQAogCQkJcmV0dXJuIHBvczsKIAogCQlwb3MgPSBQQ0lfRVhUX0NBUF9ORVhUKGhlYWRlcik7Ci0JCWlmIChwb3MgPCAweDEwMCkKKwkJaWYgKHBvcyA8IFBDSV9DRkdfU1BBQ0VfU0laRSkKIAkJCWJyZWFrOwogCiAJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZoZWFkZXIpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKQEAgLTExMjcsNiArMTEzMCwyNyBAQAogfQogCiAvKioKKyAqIHBjaV93YWtlX2Zyb21fZDMgLSBlbmFibGUvZGlzYWJsZSBkZXZpY2UgdG8gd2FrZSB1cCBmcm9tIEQzX2hvdCBvciBEM19jb2xkCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIHByZXBhcmUKKyAqIEBlbmFibGU6IFRydWUgdG8gZW5hYmxlIHdha2UtdXAgZXZlbnQgZ2VuZXJhdGlvbjsgZmFsc2UgdG8gZGlzYWJsZQorICoKKyAqIE1hbnkgZHJpdmVycyB3YW50IHRoZSBkZXZpY2UgdG8gd2FrZSB1cCB0aGUgc3lzdGVtIGZyb20gRDNfaG90IG9yIEQzX2NvbGQKKyAqIGFuZCB0aGlzIGZ1bmN0aW9uIGFsbG93cyB0aGVtIHRvIHNldCB0aGF0IHVwIGNsZWFubHkgLSBwY2lfZW5hYmxlX3dha2UoKQorICogc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UgaW4gYSByb3cgdG8gZW5hYmxlIHdha2UtdXAgZHVlIHRvIFBDSSBQTSB2cyBBQ1BJCisgKiBvcmRlcmluZyBjb25zdHJhaW50cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyBlcnJvciBjb2RlIGlmIHRoZSBkZXZpY2UgaXMgbm90IGNhcGFibGUgb2YKKyAqIGdlbmVyYXRpbmcgUE1FIyBmcm9tIGJvdGggRDNfaG90IGFuZCBEM19jb2xkLCBhbmQgdGhlIHBsYXRmb3JtIGlzIHVuYWJsZSB0bworICogZW5hYmxlIHdha2UtdXAgcG93ZXIgZm9yIGl0LgorICovCitpbnQgcGNpX3dha2VfZnJvbV9kMyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gcGNpX3BtZV9jYXBhYmxlKGRldiwgUENJX0QzY29sZCkgPworCQkJcGNpX2VuYWJsZV93YWtlKGRldiwgUENJX0QzY29sZCwgZW5hYmxlKSA6CisJCQlwY2lfZW5hYmxlX3dha2UoZGV2LCBQQ0lfRDNob3QsIGVuYWJsZSk7Cit9CisKKy8qKgogICogcGNpX3RhcmdldF9zdGF0ZSAtIGZpbmQgYW4gYXBwcm9wcmlhdGUgbG93IHBvd2VyIHN0YXRlIGZvciBhIGdpdmVuIFBDSSBkZXYKICAqIEBkZXY6IFBDSSBkZXZpY2UKICAqCkBAIC0xMjQyLDI1ICsxMjY2LDI1IEBACiAJZGV2LT5kMV9zdXBwb3J0ID0gZmFsc2U7CiAJZGV2LT5kMl9zdXBwb3J0ID0gZmFsc2U7CiAJaWYgKCFwY2lfbm9fZDFkMihkZXYpKSB7Ci0JCWlmIChwbWMgJiBQQ0lfUE1fQ0FQX0QxKSB7Ci0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInN1cHBvcnRzIEQxXG4iKTsKKwkJaWYgKHBtYyAmIFBDSV9QTV9DQVBfRDEpCiAJCQlkZXYtPmQxX3N1cHBvcnQgPSB0cnVlOwotCQl9Ci0JCWlmIChwbWMgJiBQQ0lfUE1fQ0FQX0QyKSB7Ci0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInN1cHBvcnRzIEQyXG4iKTsKKwkJaWYgKHBtYyAmIFBDSV9QTV9DQVBfRDIpCiAJCQlkZXYtPmQyX3N1cHBvcnQgPSB0cnVlOwotCQl9CisKKwkJaWYgKGRldi0+ZDFfc3VwcG9ydCB8fCBkZXYtPmQyX3N1cHBvcnQpCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInN1cHBvcnRzJXMlc1xuIiwKKwkJCQkgICBkZXYtPmQxX3N1cHBvcnQgPyAiIEQxIiA6ICIiLAorCQkJCSAgIGRldi0+ZDJfc3VwcG9ydCA/ICIgRDIiIDogIiIpOwogCX0KIAogCXBtYyAmPSBQQ0lfUE1fQ0FQX1BNRV9NQVNLOwogCWlmIChwbWMpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwKLQkJCSJQTUUjIHN1cHBvcnRlZCBmcm9tJXMlcyVzJXMlc1xuIiwKLQkJCShwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMCkgPyAiIEQwIiA6ICIiLAotCQkJKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QxKSA/ICIgRDEiIDogIiIsCi0JCQkocG1jICYgUENJX1BNX0NBUF9QTUVfRDIpID8gIiBEMiIgOiAiIiwKLQkJCShwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMykgPyAiIEQzaG90IiA6ICIiLAotCQkJKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QzY29sZCkgPyAiIEQzY29sZCIgOiAiIik7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIlBNRSMgc3VwcG9ydGVkIGZyb20lcyVzJXMlcyVzXG4iLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMCkgPyAiIEQwIiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMSkgPyAiIEQxIiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMikgPyAiIEQyIiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMykgPyAiIEQzaG90IiA6ICIiLAorCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EM2NvbGQpID8gIiBEM2NvbGQiIDogIiIpOwogCQlkZXYtPnBtZV9zdXBwb3J0ID0gcG1jID4+IFBDSV9QTV9DQVBfUE1FX1NISUZUOwogCQkvKgogCQkgKiBNYWtlIGRldmljZSdzIFBNIGZsYWdzIHJlZmxlY3QgdGhlIHdha2UtdXAgY2FwYWJpbGl0eSwgYnV0CkBAIC0xMjc1LDYgKzEyOTksMzggQEAKIAl9CiB9CiAKKy8qKgorICogcGNpX2VuYWJsZV9hcmkgLSBlbmFibGUgQVJJIGZvcndhcmRpbmcgaWYgaGFyZHdhcmUgc3VwcG9ydCBpdAorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqLwordm9pZCBwY2lfZW5hYmxlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3M7CisJdTMyIGNhcDsKKwl1MTYgY3RybDsKKworCWlmICghZGV2LT5pc19wY2llKQorCQlyZXR1cm47CisKKwlpZiAoZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCAmJgorCSAgICBkZXYtPnBjaWVfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSkKKwkJcmV0dXJuOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZDQVAyLCAmY2FwKTsKKwlpZiAoIShjYXAgJiBQQ0lfRVhQX0RFVkNBUDJfQVJJKSkKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVkNUTDIsICZjdHJsKTsKKwljdHJsIHw9IFBDSV9FWFBfREVWQ1RMMl9BUkk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZDVEwyLCBjdHJsKTsKKworCWRldi0+YXJpX2VuYWJsZWQgPSAxOworfQorCiBpbnQKIHBjaV9nZXRfaW50ZXJydXB0X3BpbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqKmJyaWRnZSkKIHsKQEAgLTEzNTgsMTEgKzE0MTQsMTAgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKLQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCByZXNlcnZlICVzIHJlZ2lvbiBbJSNsbHgtJSNsbHhdXG4iLAorCWRldl93YXJuKCZwZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IHJlc2VydmUgJXMgcmVnaW9uICVwUlxuIiwKIAkJIGJhciwKIAkJIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIGJhcikpOworCQkgJnBkZXYtPnJlc291cmNlW2Jhcl0pOwogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTE5NDMsNiArMTk5OCw3IEBACiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfY2FwYWJsZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfYWN0aXZlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV93YWtlKTsKK0VYUE9SVF9TWU1CT0wocGNpX3dha2VfZnJvbV9kMyk7CiBFWFBPUlRfU1lNQk9MKHBjaV90YXJnZXRfc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcHJlcGFyZV90b19zbGVlcCk7CiBFWFBPUlRfU1lNQk9MKHBjaV9iYWNrX2Zyb21fc2xlZXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBkODA3Y2Q3Li5iMjA1YWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMSwzICsxLDkgQEAKKyNpZm5kZWYgRFJJVkVSU19QQ0lfSAorI2RlZmluZSBEUklWRVJTX1BDSV9ICisKKyNkZWZpbmUgUENJX0NGR19TUEFDRV9TSVpFCTI1NgorI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX0VYUF9TSVpFCTQwOTYKKwogLyogRnVuY3Rpb25zIGludGVybmFsIHRvIHRoZSBQQ0kgY29yZSBjb2RlICovCiAKIGV4dGVybiBpbnQgcGNpX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7CkBAIC03Niw3ICs4MiwxMyBAQAogLyogRnVuY3Rpb25zIGZvciBQQ0kgSG90cGx1ZyBkcml2ZXJzIHRvIHVzZSAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2lfZG9fc2Nhbl9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAKKyNpZmRlZiBIQVZFX1BDSV9MRUdBQ1kKK2V4dGVybiB2b2lkIHBjaV9jcmVhdGVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9jcmVhdGVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbW92ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmJ1cykgeyByZXR1cm47IH0KKyNlbmRpZgogCiAvKiBMb2NrIGZvciByZWFkL3dyaXRlIGFjY2VzcyB0byBwY2kgZGV2aWNlIGFuZCBidXMgbGlzdHMgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHBjaV9idXNfc2VtOwpAQCAtMTA5LDYgKzEyMSw3IEBACiBleHRlcm4gaW50IHBjaWVfbWNoX3F1aXJrOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjaV9kZXZfYXR0cnNbXTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jcHVhZmZpbml0eTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jcHVsaXN0YWZmaW5pdHk7CiAKIC8qKgogICogcGNpX21hdGNoX29uZV9kZXZpY2UgLSBUZWxsIGlmIGEgUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcKQEAgLTE0NCwzICsxNTcsMTYgQEAKIH07CiAjZGVmaW5lIHRvX3BjaV9zbG90X2F0dHIocykgY29udGFpbmVyX29mKHMsIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUsIGF0dHIpCiAKK2V4dGVybiB2b2lkIHBjaV9lbmFibGVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworLyoqCisgKiBwY2lfYXJpX2VuYWJsZWQgLSBxdWVyeSBBUkkgZm9yd2FyZGluZyBzdGF0dXMKKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCisgKgorICogUmV0dXJucyAxIGlmIEFSSSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIG9yIDAgaWYgbm90IGVuYWJsZWQ7CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hcmlfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPmFyaV9lbmFibGVkOworfQorCisjZW5kaWYgLyogRFJJVkVSU19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCA3NzAzNmY0Li5lMzkwNzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcG9zOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldi0+cG9ydCk7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldi0+cG9ydCwgUENJX0VYVF9DQVBfSURfRVJSKTsKIAkvKgogCSAqIE11c3QgbG9jayBhY2Nlc3MgdG8gUm9vdCBFcnJvciBTdGF0dXMgUmVnLCBSb290IEVycm9yIElEIFJlZywKIAkgKiBhbmQgUm9vdCBlcnJvciBwcm9kdWNlci9jb25zdW1lciBpbmRleApAQCAtMjUyLDcgKzI1Miw3IEBACiAJdTMyIHN0YXR1czsKIAlpbnQgcG9zOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAKIAkvKiBEaXNhYmxlIFJvb3QncyBpbnRlcnJ1cHQgaW4gcmVzcG9uc2UgdG8gZXJyb3IgbWVzc2FnZXMgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9ST09UX0NPTU1BTkQsIDApOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZTVEEsIHJlZzE2KTsKIAogCS8qIENsZWFuIEFFUiBSb290IEVycm9yIFN0YXR1cyAqLwotCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfVU5DT1JfU1RBVFVTLCAmc3RhdHVzKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfRVJSX1VOQ09SX1NFVkVSLCAmbWFzayk7CiAJaWYgKGRldi0+ZXJyb3Jfc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKaW5kZXggZWU1ZTdiNS4uZGZjNjNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCkBAIC0yOCw0MSArMjgsMTUgQEAKIHN0YXRpYyBpbnQgZm9yY2Vsb2FkOwogbW9kdWxlX3BhcmFtKGZvcmNlbG9hZCwgYm9vbCwgMCk7CiAKLSNkZWZpbmUgUENJX0NGR19TUEFDRV9TSVpFCSgweDEwMCkKLWludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBwb3M7Ci0JdTMyIHJlZzMyID0gMDsKLQotCS8qIENoZWNrIGlmIGl0J3MgYSBwY2ktZXhwcmVzcyBkZXZpY2UgKi8KLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOwotCWlmICghcG9zKQotCQlyZXR1cm4gMDsKLQotCS8qIENoZWNrIGlmIGl0IHN1cHBvcnRzIHBjaS1leHByZXNzIEFFUiAqLwotCXBvcyA9IFBDSV9DRkdfU1BBQ0VfU0laRTsKLQl3aGlsZSAocG9zKSB7Ci0JCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZyZWczMikpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBzb21lIGJyb2tlbiBib2FyZHMgcmV0dXJuIH4wICovCi0JCWlmIChyZWczMiA9PSAweGZmZmZmZmZmKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKFBDSV9FWFRfQ0FQX0lEKHJlZzMyKSA9PSBQQ0lfRVhUX0NBUF9JRF9FUlIpCi0JCQlicmVhazsKLQotCQlwb3MgPSByZWczMiA+PiAyMDsKLQl9Ci0KLQlyZXR1cm4gcG9zOwotfQotCiBpbnQgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUxNiByZWcxNiA9IDA7CiAJaW50IHBvczsKIAorCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfRVJSKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FSU87CisKIAlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmICghcG9zKQogCQlyZXR1cm4gLUVJTzsKQEAgLTEwMiw3ICs3Niw3IEBACiAJaW50IHBvczsKIAl1MzIgc3RhdHVzLCBtYXNrOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAJaWYgKCFwb3MpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMjMsNyArOTcsNyBAQAogCWludCBwb3M7CiAJdTMyIHN0YXR1czsKIAotCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCWlmICghcG9zKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNTAyLDcgKzQ3Niw3IEBACiAJCSAqIENvcnJlY3RhYmxlIGVycm9yIGRvZXMgbm90IG5lZWQgc29mdHdhcmUgaW50ZXZlbnRpb24uCiAJCSAqIE5vIG5lZWQgdG8gZ28gdGhyb3VnaCBlcnJvciByZWNvdmVyeSBwcm9jZXNzLgogCQkgKi8KLQkJcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwkJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCQlpZiAocG9zKQogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfQ09SX1NUQVRVUywKIAkJCQkJaW5mby5zdGF0dXMpOwpAQCAtNTQyLDcgKzUxNiw3IEBACiAJcmVnMTYgJj0gfihTWVNURU1fRVJST1JfSU5UUl9PTl9NRVNHX01BU0spOwogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX1JUQ1RMLCByZWcxNik7CiAKLQlhZXJfcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldik7CisJYWVyX3BvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CiAJLyogQ2xlYXIgZXJyb3Igc3RhdHVzICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFlcl9wb3MgKyBQQ0lfRVJSX1JPT1RfU1RBVFVTLCAmcmVnMzIpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWVyX3BvcyArIFBDSV9FUlJfUk9PVF9TVEFUVVMsIHJlZzMyKTsKQEAgLTU3OSw3ICs1NTMsNyBAQAogCXUzMiByZWczMjsKIAlpbnQgcG9zOwogCi0JcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfRVJSKTsKIAkvKiBEaXNhYmxlIFJvb3QncyBpbnRlcnJ1cHQgaW4gcmVzcG9uc2UgdG8gZXJyb3IgbWVzc2FnZXMgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIFBDSV9FUlJfUk9PVF9DT01NQU5ELCAwKTsKIApAQCAtNjE4LDcgKzU5Miw3IEBACiB7CiAJaW50IHBvczsKIAotCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9FUlIpOwogCiAJLyogVGhlIGRldmljZSBtaWdodCBub3Qgc3VwcG9ydCBBRVIgKi8KIAlpZiAoIXBvcykKQEAgLTc1NSw3ICs3MjksNiBAQAogCXJldHVybiBBRVJfU1VDQ0VTUzsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkpOwogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCmluZGV4IDg1MWY1YjguLjhmNjNmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCkBAIC01MjgsOSArNTI4LDkgQEAKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGNoaWxkX2RldiwgY2hpbGRfcG9zICsgUENJX0VYUF9ERVZDQVAsCiAJCQkmcmVnMzIpOwogCQlpZiAoIShyZWczMiAmIFBDSV9FWFBfREVWQ0FQX1JCRVIpICYmICFhc3BtX2ZvcmNlKSB7Ci0JCQlwcmludGsoIlByZS0xLjEgUENJZSBkZXZpY2UgZGV0ZWN0ZWQsICIKLQkJCQkiZGlzYWJsZSBBU1BNIGZvciAlcy4gSXQgY2FuIGJlIGVuYWJsZWQgZm9yY2VkbHkiCi0JCQkJIiB3aXRoICdwY2llX2FzcG09Zm9yY2UnXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmNoaWxkX2Rldi0+ZGV2LCAiZGlzYWJsaW5nIEFTUE0iCisJCQkJIiBvbiBwcmUtMS4xIFBDSWUgZGV2aWNlLiAgWW91IGNhbiBlbmFibGUgaXQiCisJCQkJIiB3aXRoICdwY2llX2FzcG09Zm9yY2UnXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmggYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAppbmRleCAzNjU2ZTAzLi4yNTI5ZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaApAQCAtMjUsNyArMjUsNiBAQAogI2RlZmluZSBQQ0lFX0NBUEFCSUxJVElFU19SRUcJCTB4MgogI2RlZmluZSBQQ0lFX1NMT1RfQ0FQQUJJTElUSUVTX1JFRwkweDE0CiAjZGVmaW5lIFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVMJNAotI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX1NJWkUJCTI1NgogCiAjZGVmaW5lIGdldF9kZXNjcmlwdG9yX2lkKHR5cGUsIHNlcnZpY2UpICgoKHR5cGUgLSA0KSA8PCA0KSB8IHNlcnZpY2UpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IDg5MGYwZDIuLjJlMDkxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTk1LDI0ICsxOTUsMTEgQEAKIAkvKiBQTUUgQ2FwYWJsZSAtIHJvb3QgcG9ydCBjYXBhYmlsaXR5ICovCiAJaWYgKCgocmVnMTYgPj4gNCkgJiBQT1JUX1RZUEVfTUFTSykgPT0gUENJRV9SQ19QT1JUKQogCQlzZXJ2aWNlcyB8PSBQQ0lFX1BPUlRfU0VSVklDRV9QTUU7Ci0JCi0JcG9zID0gUENJX0NGR19TUEFDRV9TSVpFOwotCXdoaWxlIChwb3MpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmcmVnMzIpOwotCQlzd2l0Y2ggKHJlZzMyICYgMHhmZmZmKSB7Ci0JCWNhc2UgUENJX0VYVF9DQVBfSURfRVJSOgotCQkJc2VydmljZXMgfD0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSOwotCQkJcG9zID0gcmVnMzIgPj4gMjA7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfRVhUX0NBUF9JRF9WQzoKLQkJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDOwotCQkJcG9zID0gcmVnMzIgPj4gMjA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBvcyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KKworCWlmIChwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUikpCisJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUjsKKwlpZiAocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9WQykpCisJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDOwogCiAJcmV0dXJuIHNlcnZpY2VzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDM2N2M5YzIuLjU4NDQyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkKIAlwY2lfc2V0X21hc3RlcihkZXYpOwogICAgICAgICBpZiAoIWRldi0+aXJxICYmIGRldi0+cGluKSB7Ci0JCWRldl93YXJuKCZkZXYtPmRldiwgImRldmljZSBbJTA0eC8lMDR4XSBoYXMgaW52YWxpZCBJUlE7ICIKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiZGV2aWNlIFslMDR4OiUwNHhdIGhhcyBpbnZhbGlkIElSUTsgIgogCQkJICJjaGVjayB2ZW5kb3IgQklPU1xuIiwgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlKTsKIAl9CiAJaWYgKHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggZGQ5MTYxYTA1Li5hYWFmMGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTE0LDggKzE0LDYgQEAKIAogI2RlZmluZSBDQVJEQlVTX0xBVEVOQ1lfVElNRVIJMTc2CS8qIHNlY29uZGFyeSBsYXRlbmN5IHRpbWVyICovCiAjZGVmaW5lIENBUkRCVVNfUkVTRVJWRV9CVVNOUgkzCi0jZGVmaW5lIFBDSV9DRkdfU1BBQ0VfU0laRQkyNTYKLSNkZWZpbmUgUENJX0NGR19TUEFDRV9FWFBfU0laRQk0MDk2CiAKIC8qIFVnaC4gIE5lZWQgdG8gc3RvcCBleHBvcnRpbmcgdGhpcyB0byBtb2R1bGVzLiAqLwogTElTVF9IRUFEKHBjaV9yb290X2J1c2VzKTsKQEAgLTQ0LDcyICs0Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5vX3BjaV9kZXZpY2VzKTsKIAotI2lmZGVmIEhBVkVfUENJX0xFR0FDWQotLyoqCi0gKiBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyAtIGNyZWF0ZSBsZWdhY3kgSS9PIHBvcnQgYW5kIG1lbW9yeSBmaWxlcwotICogQGI6IGJ1cyB0byBjcmVhdGUgZmlsZXMgdW5kZXIKLSAqCi0gKiBTb21lIHBsYXRmb3JtcyBhbGxvdyBhY2Nlc3MgdG8gbGVnYWN5IEkvTyBwb3J0IGFuZCBJU0EgbWVtb3J5IHNwYWNlIG9uCi0gKiBhIHBlci1idXMgYmFzaXMuICBUaGlzIHJvdXRpbmUgY3JlYXRlcyB0aGUgZmlsZXMgYW5kIHRpZXMgdGhlbSBpbnRvCi0gKiB0aGVpciBhc3NvY2lhdGVkIHJlYWQsIHdyaXRlIGFuZCBtbWFwIGZpbGVzIGZyb20gcGNpLXN5c2ZzLmMKLSAqCi0gKiBPbiBlcnJvciB1bndpbmQsIGJ1dCBkb24ndCBwcm9wb2dhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXIKLSAqIGFzIGl0IGlzIG9rIHRvIHNldCB1cCB0aGUgUENJIGJ1cyB3aXRob3V0IHRoZXNlIGZpbGVzLgotICovCi1zdGF0aWMgdm9pZCBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyhzdHJ1Y3QgcGNpX2J1cyAqYikKLXsKLQlpbnQgZXJyb3I7Ci0KLQliLT5sZWdhY3lfaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmluX2F0dHJpYnV0ZSkgKiAyLAotCQkJICAgICAgIEdGUF9BVE9NSUMpOwotCWlmICghYi0+bGVnYWN5X2lvKQotCQlnb3RvIGt6YWxsb2NfZXJyOwotCi0JYi0+bGVnYWN5X2lvLT5hdHRyLm5hbWUgPSAibGVnYWN5X2lvIjsKLQliLT5sZWdhY3lfaW8tPnNpemUgPSAweGZmZmY7Ci0JYi0+bGVnYWN5X2lvLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKLQliLT5sZWdhY3lfaW8tPnJlYWQgPSBwY2lfcmVhZF9sZWdhY3lfaW87Ci0JYi0+bGVnYWN5X2lvLT53cml0ZSA9IHBjaV93cml0ZV9sZWdhY3lfaW87Ci0JZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9pbyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGxlZ2FjeV9pb19lcnI7Ci0KLQkvKiBBbGxvY2F0ZWQgYWJvdmUgYWZ0ZXIgdGhlIGxlZ2FjeV9pbyBzdHJ1Y3QgKi8KLQliLT5sZWdhY3lfbWVtID0gYi0+bGVnYWN5X2lvICsgMTsKLQliLT5sZWdhY3lfbWVtLT5hdHRyLm5hbWUgPSAibGVnYWN5X21lbSI7Ci0JYi0+bGVnYWN5X21lbS0+c2l6ZSA9IDEwMjQqMTAyNDsKLQliLT5sZWdhY3lfbWVtLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKLQliLT5sZWdhY3lfbWVtLT5tbWFwID0gcGNpX21tYXBfbGVnYWN5X21lbTsKLQllcnJvciA9IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoJmItPmRldiwgYi0+bGVnYWN5X21lbSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGxlZ2FjeV9tZW1fZXJyOwotCi0JcmV0dXJuOwotCi1sZWdhY3lfbWVtX2VycjoKLQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9pbyk7Ci1sZWdhY3lfaW9fZXJyOgotCWtmcmVlKGItPmxlZ2FjeV9pbyk7Ci0JYi0+bGVnYWN5X2lvID0gTlVMTDsKLWt6YWxsb2NfZXJyOgotCXByaW50ayhLRVJOX1dBUk5JTkcgInBjaTogd2FybmluZzogY291bGQgbm90IGNyZWF0ZSBsZWdhY3kgSS9PIHBvcnQgIgotCSAgICAgICAiYW5kIElTQSBtZW1vcnkgcmVzb3VyY2VzIHRvIHN5c2ZzXG4iKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgcGNpX3JlbW92ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmIpCi17Ci0JaWYgKGItPmxlZ2FjeV9pbykgewotCQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9pbyk7Ci0JCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoJmItPmRldiwgYi0+bGVnYWN5X21lbSk7Ci0JCWtmcmVlKGItPmxlZ2FjeV9pbyk7IC8qIGJvdGggYXJlIGFsbG9jYXRlZCBoZXJlICovCi0JfQotfQotI2Vsc2UgLyogIUhBVkVfUENJX0xFR0FDWSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBjaV9jcmVhdGVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgcmV0dXJuOyB9Ci12b2lkIHBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgcmV0dXJuOyB9Ci0jZW5kaWYgLyogSEFWRV9QQ0lfTEVHQUNZICovCi0KIC8qCiAgKiBQQ0kgQnVzIENsYXNzIERldmljZXMKICAqLwpAQCAtMjE5LDcgKzE1MSw3IEBACiAKIAlyZXMtPmZsYWdzID0gYmFyICYgflBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CiAKLQlpZiAocmVzLT5mbGFncyA9PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KQorCWlmIChyZXMtPmZsYWdzICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkKIAkJcmV0dXJuIHBjaV9iYXJfbWVtNjQ7CiAJcmV0dXJuIHBjaV9iYXJfbWVtMzI7CiB9CkBAIC0zMDQsOSArMjM2LDggQEAKIAkJfSBlbHNlIHsKIAkJCXJlcy0+c3RhcnQgPSBsNjQ7CiAJCQlyZXMtPmVuZCA9IGw2NCArIHN6NjQ7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggNjRiaXQgbW1pbzogWyVsbHgsICVsbHhdXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJInJlZyAleCA2NGJpdCBtbWlvOiAlcFJcbiIsIHBvcywgcmVzKTsKIAkJfQogCX0gZWxzZSB7CiAJCXN6ID0gcGNpX3NpemUobCwgc3osIG1hc2spOwpAQCAtMzE2LDkgKzI0NywxMCBAQAogCiAJCXJlcy0+c3RhcnQgPSBsOwogCQlyZXMtPmVuZCA9IGwgKyBzejsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMgcmVnICV4ICVzOiBbJWxseCwgJWxseF1cbiIsIHBjaV9uYW1lKGRldiksCi0JCQlwb3MsIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCI6IjMyYml0IG1taW8iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInJlZyAleCAlczogJXBSXG4iLCBwb3MsCisJCQkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiIDogIjMyYml0IG1taW8iLAorCQkJcmVzKTsKIAl9CiAKICBvdXQ6CkBAIC0zODksOSArMzIxLDcgQEAKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgaW8gcG9ydDogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJicmlkZ2UgaW8gcG9ydDogJXBSXG4iLCByZXMpOwogCX0KIAogCXJlcyA9IGNoaWxkLT5yZXNvdXJjZVsxXTsKQEAgLTQwMyw5ICszMzMsOCBAQAogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0spIHwgSU9SRVNPVVJDRV9NRU07CiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzIDMyYml0IG1taW86IFslbGx4LCAlbGx4XVxuIiwKLQkJCXBjaV9uYW1lKGRldiksICh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPmVuZCk7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiYnJpZGdlIDMyYml0IG1taW86ICVwUlxuIiwKKwkJCXJlcyk7CiAJfQogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwpAQCAtNDQxLDkgKzM3MCw5IEBACiAJCXJlcy0+ZmxhZ3MgPSAobWVtX2Jhc2VfbG8gJiBQQ0lfTUVNT1JZX1JBTkdFX1RZUEVfTUFTSykgfCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzICVzYml0IG1taW8gcHJlZjogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHJlcy0+ZmxhZ3MgJiBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSA/ICI2NCIgOiAiMzIiLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImJyaWRnZSAlc2JpdCBtbWlvIHByZWY6ICVwUlxuIiwKKwkJCShyZXMtPmZsYWdzICYgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkgPyAiNjQiIDogIjMyIiwKKwkJCXJlcyk7CiAJfQogfQogCkBAIC03NjQsNyArNjkzLDcgQEAKIAlkZXYtPmNsYXNzID0gY2xhc3M7CiAJY2xhc3MgPj49IDg7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgImZvdW5kIFslMDR4LyUwNHhdIGNsYXNzICUwNnggaGVhZGVyIHR5cGUgJTAyeFxuIiwKKwlkZXZfZGJnKCZkZXYtPmRldiwgImZvdW5kIFslMDR4OiUwNHhdIGNsYXNzICUwNnggaGVhZGVyIHR5cGUgJTAyeFxuIiwKIAkJIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSwgY2xhc3MsIGRldi0+aGRyX3R5cGUpOwogCiAJLyogIlVua25vd24gcG93ZXIgc3RhdGUiICovCkBAIC04NDYsNiArNzc1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV92cGRfcmVsZWFzZShkZXYpOworfQorCiAvKioKICAqIHBjaV9yZWxlYXNlX2RldiAtIGZyZWUgYSBwY2kgZGV2aWNlIHN0cnVjdHVyZSB3aGVuIGFsbCB1c2VycyBvZiBpdCBhcmUgZmluaXNoZWQuCiAgKiBAZGV2OiBkZXZpY2UgdGhhdCdzIGJlZW4gZGlzY29ubmVjdGVkCkBAIC04NTgsNyArNzkyLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAogCXBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7Ci0JcGNpX3ZwZF9yZWxlYXNlKHBjaV9kZXYpOworCXBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTsKIAlrZnJlZShwY2lfZGV2KTsKIH0KIApAQCAtODg5LDggKzgyMyw5IEBACiBpbnQgcGNpX2NmZ19zcGFjZV9zaXplX2V4dChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiBzdGF0dXM7CisJaW50IHBvcyA9IFBDSV9DRkdfU1BBQ0VfU0laRTsKIAotCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAyNTYsICZzdGF0dXMpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmc3RhdHVzKSAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCiAJCWdvdG8gZmFpbDsKIAlpZiAoc3RhdHVzID09IDB4ZmZmZmZmZmYpCiAJCWdvdG8gZmFpbDsKQEAgLTkzOCw4ICs4NzMsNiBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+YnVzX2xpc3QpOwogCi0JcGNpX21zaV9pbml0X3BjaV9kZXYoZGV2KTsKLQogCXJldHVybiBkZXY7CiB9CiBFWFBPUlRfU1lNQk9MKGFsbG9jX3BjaV9kZXYpOwpAQCAtOTUxLDYgKzg4NCw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBjaV9zY2FuX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3Q7CiAJdTMyIGw7CiAJdTggaGRyX3R5cGU7CiAJaW50IGRlbGF5ID0gMTsKQEAgLTk5OSw2ICs5MzMsMTAgQEAKIAlkZXYtPmVycm9yX3N0YXRlID0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsOwogCXNldF9wY2llX3BvcnRfdHlwZShkZXYpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmYnVzLT5zbG90cywgbGlzdCkKKwkJaWYgKFBDSV9TTE9UKGRldmZuKSA9PSBzbG90LT5udW1iZXIpCisJCQlkZXYtPnNsb3QgPSBzbG90OworCiAJLyogQXNzdW1lIDMyLWJpdCBQQ0k7IGxldCA2NC1iaXQgUENJIGNhcmRzICh3aGljaCBhcmUgZmFyIHJhcmVyKQogCSAgIHNldCB0aGlzIGhpZ2hlciwgYXNzdW1pbmcgdGhlIHN5c3RlbSBldmVuIHN1cHBvcnRzIGl0LiAgKi8KIAlkZXYtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKQEAgLTEwMDcsOSArOTQ1LDIyIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCXJldHVybiBkZXY7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9pbml0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIE1TSS9NU0ktWCBsaXN0ICovCisJcGNpX21zaV9pbml0X3BjaV9kZXYoZGV2KTsKKworCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlwY2lfcG1faW5pdChkZXYpOworCisJLyogVml0YWwgUHJvZHVjdCBEYXRhICovCiAJcGNpX3ZwZF9wY2kyMl9pbml0KGRldik7CiAKLQlyZXR1cm4gZGV2OworCS8qIEFsdGVybmF0aXZlIFJvdXRpbmctSUQgRm9yd2FyZGluZyAqLworCXBjaV9lbmFibGVfYXJpKGRldik7CiB9CiAKIHZvaWQgcGNpX2RldmljZV9hZGQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9idXMgKmJ1cykKQEAgLTEwMjgsOCArOTc5LDggQEAKIAkvKiBGaXggdXAgYnJva2VuIGhlYWRlcnMgKi8KIAlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9oZWFkZXIsIGRldik7CiAKLQkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgb2YgdGhlIGRldmljZSAqLwotCXBjaV9wbV9pbml0KGRldik7CisJLyogSW5pdGlhbGl6ZSB2YXJpb3VzIGNhcGFiaWxpdGllcyAqLworCXBjaV9pbml0X2NhcGFiaWxpdGllcyhkZXYpOwogCiAJLyoKIAkgKiBBZGQgdGhlIGRldmljZSB0byBvdXIgbGlzdCBvZiBkaXNjb3ZlcmVkIGRldmljZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggZTg3MmFjOS4uYmJmNjZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTI0LDYgKzI0LDE0IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlICJwY2kuaCIKIAoraW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OworRVhQT1JUX1NZTUJPTChpc2FfZG1hX2JyaWRnZV9idWdneSk7CitpbnQgcGNpX3BjaV9wcm9ibGVtczsKK0VYUE9SVF9TWU1CT0wocGNpX3BjaV9wcm9ibGVtcyk7CitpbnQgcGNpZV9tY2hfcXVpcms7CitFWFBPUlRfU1lNQk9MKHBjaWVfbWNoX3F1aXJrKTsKKworI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCiAvKiBUaGUgTWVsbGFub3ggVGF2b3IgZGV2aWNlIGdpdmVzIGZhbHNlIHBvc2l0aXZlIHBhcml0eSBlcnJvcnMKICAqIE1hcmsgdGhpcyBkZXZpY2Ugd2l0aCBhIGJyb2tlbl9wYXJpdHlfc3RhdHVzLCB0byBhbGxvdwogICogUENJIHNjYW5uaW5nIGNvZGUgdG8gInNraXAiIHRoaXMgbm93IGJsYWNrbGlzdGVkIGRldmljZS4KQEAgLTYyLDggKzcwLDYgQEAKICAgICAKICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgQklPUyBub3QgdmVyc2lvbiBkZXBlbmRlbnQuIFNvIHByZXN1bWFibHkgdGhlcmUgaXMgYSAKICAgICBjaGlwc2V0IGxldmVsIGZpeCAqLwotaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwotRVhQT1JUX1NZTUJPTChpc2FfZG1hX2JyaWRnZV9idWdneSk7CiAgICAgCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfaXNhX2RtYV9oYW5ncyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtODQsOSArOTAsNiBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9ORUMsCVBDSV9ERVZJQ0VfSURfTkVDX0NCVVNfMiwJcXVpcmtfaXNhX2RtYV9oYW5ncyk7CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05FQywJUENJX0RFVklDRV9JRF9ORUNfQ0JVU18zLAlxdWlya19pc2FfZG1hX2hhbmdzKTsKIAotaW50IHBjaV9wY2lfcHJvYmxlbXM7Ci1FWFBPUlRfU1lNQk9MKHBjaV9wY2lfcHJvYmxlbXMpOwotCiAvKgogICoJQ2hpcHNldHMgd2hlcmUgUENJLT5QQ0kgdHJhbnNmZXJzIHZhbmlzaCBvciBoYW5nCiAgKi8KQEAgLTEzNjIsOSArMTM2NSw2IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9FRVNTQywJcXVpcmtfYWxkZXJfaW9hcGljKTsKICNlbmRpZgogCi1pbnQgcGNpZV9tY2hfcXVpcms7Ci1FWFBPUlRfU1lNQk9MKHBjaWVfbWNoX3F1aXJrKTsKLQogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3BjaWVfbWNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXBjaWVfbWNoX3F1aXJrID0gMTsKQEAgLTE1NTUsODQgKzE1NTUsNiBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkNSLCBQQ0lfREVWSUNFX0lEX05DUl81M0M4MTAsIGZpeHVwX3JldjFfNTNjODEwKTsKIAotc3RhdGljIHZvaWQgcGNpX2RvX2ZpeHVwcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2ZpeHVwICpmLCBzdHJ1Y3QgcGNpX2ZpeHVwICplbmQpCi17Ci0Jd2hpbGUgKGYgPCBlbmQpIHsKLQkJaWYgKChmLT52ZW5kb3IgPT0gZGV2LT52ZW5kb3IgfHwgZi0+dmVuZG9yID09ICh1MTYpIFBDSV9BTllfSUQpICYmCi0gCQkgICAgKGYtPmRldmljZSA9PSBkZXYtPmRldmljZSB8fCBmLT5kZXZpY2UgPT0gKHUxNikgUENJX0FOWV9JRCkpIHsKLSNpZmRlZiBERUJVRwotCQkJZGV2X2RiZygmZGV2LT5kZXYsICJjYWxsaW5nICVwRlxuIiwgZi0+aG9vayk7Ci0jZW5kaWYKLQkJCWYtPmhvb2soZGV2KTsKLQkJfQotCQlmKys7Ci0JfQotfQotCi1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfZWFybHlbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZWFybHlbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19oZWFkZXJbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfaGVhZGVyW107Ci1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfZmluYWxbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZmluYWxbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19lbmFibGVbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZW5hYmxlW107Ci1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lW107Ci1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZVtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX3Jlc3VtZV9lYXJseVtdOwotZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19yZXN1bWVfZWFybHlbXTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19zdXNwZW5kW107Ci1leHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3N1c3BlbmRbXTsKLQotCi12b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBwY2lfZml4dXAgKnN0YXJ0LCAqZW5kOwotCi0Jc3dpdGNoKHBhc3MpIHsKLQljYXNlIHBjaV9maXh1cF9lYXJseToKLQkJc3RhcnQgPSBfX3N0YXJ0X3BjaV9maXh1cHNfZWFybHk7Ci0JCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfZWFybHk7Ci0JCWJyZWFrOwotCi0JY2FzZSBwY2lfZml4dXBfaGVhZGVyOgotCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19oZWFkZXI7Ci0JCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfaGVhZGVyOwotCQlicmVhazsKLQotCWNhc2UgcGNpX2ZpeHVwX2ZpbmFsOgotCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19maW5hbDsKLQkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19maW5hbDsKLQkJYnJlYWs7Ci0KLQljYXNlIHBjaV9maXh1cF9lbmFibGU6Ci0JCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX2VuYWJsZTsKLQkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19lbmFibGU7Ci0JCWJyZWFrOwotCi0JY2FzZSBwY2lfZml4dXBfcmVzdW1lOgotCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWU7Ci0JCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lOwotCQlicmVhazsKLQotCWNhc2UgcGNpX2ZpeHVwX3Jlc3VtZV9lYXJseToKLQkJc3RhcnQgPSBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lX2Vhcmx5OwotCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZV9lYXJseTsKLQkJYnJlYWs7Ci0KLQljYXNlIHBjaV9maXh1cF9zdXNwZW5kOgotCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19zdXNwZW5kOwotCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX3N1c3BlbmQ7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJLyogc3R1cGlkIGNvbXBpbGVyIHdhcm5pbmcsIHlvdSB3b3VsZCB0aGluayB3aXRoIGFuIGVudW0uLi4gKi8KLQkJcmV0dXJuOwotCX0KLQlwY2lfZG9fZml4dXBzKGRldiwgc3RhcnQsIGVuZCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwotCiAvKiBFbmFibGUgMWsgSS9PIHNwYWNlIGdyYW51bGFyaXR5IG9uIHRoZSBJbnRlbCBQNjRIMiAqLwogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3A2NGgyXzFrX2lvKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0yMDA2LDMgKzE5MjgsODIgQEAKIAkJCXF1aXJrX21zaV9pbnR4X2Rpc2FibGVfYnVnKTsKIAogI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCisKK3N0YXRpYyB2b2lkIHBjaV9kb19maXh1cHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9maXh1cCAqZiwgc3RydWN0IHBjaV9maXh1cCAqZW5kKQoreworCXdoaWxlIChmIDwgZW5kKSB7CisJCWlmICgoZi0+dmVuZG9yID09IGRldi0+dmVuZG9yIHx8IGYtPnZlbmRvciA9PSAodTE2KSBQQ0lfQU5ZX0lEKSAmJgorIAkJICAgIChmLT5kZXZpY2UgPT0gZGV2LT5kZXZpY2UgfHwgZi0+ZGV2aWNlID09ICh1MTYpIFBDSV9BTllfSUQpKSB7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhbGxpbmcgJXBGXG4iLCBmLT5ob29rKTsKKwkJCWYtPmhvb2soZGV2KTsKKwkJfQorCQlmKys7CisJfQorfQorCitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfZWFybHlbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZWFybHlbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19oZWFkZXJbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfaGVhZGVyW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfZmluYWxbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZmluYWxbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19lbmFibGVbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZW5hYmxlW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZVtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19zdGFydF9wY2lfZml4dXBzX3Jlc3VtZV9lYXJseVtdOworZXh0ZXJuIHN0cnVjdCBwY2lfZml4dXAgX19lbmRfcGNpX2ZpeHVwc19yZXN1bWVfZWFybHlbXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19zdXNwZW5kW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3N1c3BlbmRbXTsKKworCit2b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfZml4dXAgKnN0YXJ0LCAqZW5kOworCisJc3dpdGNoKHBhc3MpIHsKKwljYXNlIHBjaV9maXh1cF9lYXJseToKKwkJc3RhcnQgPSBfX3N0YXJ0X3BjaV9maXh1cHNfZWFybHk7CisJCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfZWFybHk7CisJCWJyZWFrOworCisJY2FzZSBwY2lfZml4dXBfaGVhZGVyOgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19oZWFkZXI7CisJCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfaGVhZGVyOworCQlicmVhazsKKworCWNhc2UgcGNpX2ZpeHVwX2ZpbmFsOgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19maW5hbDsKKwkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19maW5hbDsKKwkJYnJlYWs7CisKKwljYXNlIHBjaV9maXh1cF9lbmFibGU6CisJCXN0YXJ0ID0gX19zdGFydF9wY2lfZml4dXBzX2VuYWJsZTsKKwkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19lbmFibGU7CisJCWJyZWFrOworCisJY2FzZSBwY2lfZml4dXBfcmVzdW1lOgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWU7CisJCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lOworCQlicmVhazsKKworCWNhc2UgcGNpX2ZpeHVwX3Jlc3VtZV9lYXJseToKKwkJc3RhcnQgPSBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lX2Vhcmx5OworCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZV9lYXJseTsKKwkJYnJlYWs7CisKKwljYXNlIHBjaV9maXh1cF9zdXNwZW5kOgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19zdXNwZW5kOworCQllbmQgPSBfX2VuZF9wY2lfZml4dXBzX3N1c3BlbmQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogc3R1cGlkIGNvbXBpbGVyIHdhcm5pbmcsIHlvdSB3b3VsZCB0aGluayB3aXRoIGFuIGVudW0uLi4gKi8KKwkJcmV0dXJuOworCX0KKwlwY2lfZG9fZml4dXBzKGRldiwgc3RhcnQsIGVuZCk7Cit9CisjZWxzZQordm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KKyNlbmRpZgorRVhQT1JUX1NZTUJPTChwY2lfZml4dXBfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JlbW92ZS5jIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKaW5kZXggYmRjMmE0NC4uMDQyZTA4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcmVtb3ZlLmMKKysrIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKQEAgLTczLDYgKzczLDcgQEAKIAl1cF93cml0ZSgmcGNpX2J1c19zZW0pOwogCXBjaV9yZW1vdmVfbGVnYWN5X2ZpbGVzKHBjaV9idXMpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmcGNpX2J1cy0+ZGV2LCAmZGV2X2F0dHJfY3B1YWZmaW5pdHkpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGNpX2J1cy0+ZGV2LCAmZGV2X2F0dHJfY3B1bGlzdGFmZmluaXR5KTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmcGNpX2J1cy0+ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX3JlbW92ZV9idXMpOwpAQCAtMTE0LDEzICsxMTUsOSBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOwogCi0JaWYgKGRldi0+c3Vib3JkaW5hdGUpIHsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKGwsIG4sICZkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSB7Ci0JCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcGNpX2Rldl9iKGwpOwotCi0JCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKLQkJfQotCX0KKwlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKGwsIG4sICZkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKQorCQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKHBjaV9kZXZfYihsKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjaV9zdG9wX2J1c19kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9yb20uYyBiL2RyaXZlcnMvcGNpL3JvbS5jCmluZGV4IGJkNWMwZTAuLjFmNWY2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3JvbS5jCisrKyBiL2RyaXZlcnMvcGNpL3JvbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBiZXR3ZWVuIHRoZSBST00gYW5kIG90aGVyIHJlc291cmNlcywgc28gZW5hYmxpbmcgaXQgbWF5IGRpc2FibGUgYWNjZXNzCiAgKiB0byBNTUlPIHJlZ2lzdGVycyBvciBvdGhlciBjYXJkIG1lbW9yeS4KICAqLwotc3RhdGljIGludCBwY2lfZW5hYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK2ludCBwY2lfZW5hYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlICsgUENJX1JPTV9SRVNPVVJDRTsKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwpAQCAtNDUsNyArNDUsNyBAQAogICogRGlzYWJsZSBST00gZGVjb2Rpbmcgb24gYSBQQ0kgZGV2aWNlIGJ5IHR1cm5pbmcgb2ZmIHRoZSBsYXN0IGJpdCBpbiB0aGUKICAqIFJPTSBCQVIuCiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9kaXNhYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3ZvaWQgcGNpX2Rpc2FibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXUzMiByb21fYWRkcjsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0+cm9tX2Jhc2VfcmVnLCAmcm9tX2FkZHIpOwpAQCAtMjYwLDMgKzI2MCw1IEBACiAKIEVYUE9SVF9TWU1CT0wocGNpX21hcF9yb20pOwogRVhQT1JUX1NZTUJPTChwY2lfdW5tYXBfcm9tKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9lbmFibGVfcm9tKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9kaXNhYmxlX3JvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IGQ1ZTIxMDYuLmVhOTc5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAogCQkJaWYgKHItPnBhcmVudCB8fCAhKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpCiAJCQkJY29udGludWU7Ci0JCQlyX3NpemUgPSByLT5lbmQgLSByLT5zdGFydCArIDE7CisJCQlyX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOwogCiAJCQlpZiAocl9zaXplIDwgMHg0MDApCiAJCQkJLyogTWlnaHQgYmUgcmUtYWxpZ25lZCBmb3IgSVNBICovCkBAIC0zNTAsMTYgKzM1MCwxMyBAQAogCiAJCQlpZiAoci0+cGFyZW50IHx8IChyLT5mbGFncyAmIG1hc2spICE9IHR5cGUpCiAJCQkJY29udGludWU7Ci0JCQlyX3NpemUgPSByLT5lbmQgLSByLT5zdGFydCArIDE7CisJCQlyX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOwogCQkJLyogRm9yIGJyaWRnZXMgc2l6ZSAhPSBhbGlnbm1lbnQgKi8KIAkJCWFsaWduID0gcmVzb3VyY2VfYWxpZ25tZW50KHIpOwogCQkJb3JkZXIgPSBfX2ZmcyhhbGlnbikgLSAyMDsKIAkJCWlmIChvcmRlciA+IDExKSB7CiAJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQkFSICVkIGJhZCBhbGlnbm1lbnQgJWxseDogIgotCQkJCSAgICAgICAiJSMwMTZsbHgtJSMwMTZsbHhcbiIsIGksCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+c3RhcnQsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kKTsKKwkJCQkJICIlcFJcbiIsIGksICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sIHIpOwogCQkJCXItPmZsYWdzID0gMDsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTUzOSwxMSArNTM2LDkgQEAKICAgICAgICAgICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0JCXByaW50ayhLRVJOX0lORk8gImJ1czogJTAyeCBpbmRleCAleCAlczogWyVsbHgsICVsbHhdXG4iLAotCQkJYnVzLT5udW1iZXIsIGksCi0JCQkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiIDogIm1taW8iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYnVzOiAlMDJ4IGluZGV4ICV4ICVzOiAlcFJcbiIsCisJCSAgICAgICBidXMtPm51bWJlciwgaSwKKwkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCIgOiAibW1pbyIsIHJlcyk7CiAgICAgICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCAxYTVmYzgzLi4yZGJkOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtNDksMTAgKzQ5LDggQEAKIAogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGRldiwgJnJlZ2lvbiwgcmVzKTsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzIFslI2xseC0lI2xseF0gYnVzIFslI2xseC0lI2xseF0gIgotCQkiZmxhZ3MgJSNseFxuIiwgcmVzbm8sCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzICVwUiBidXMgWyUjbGx4LSUjbGx4XSAiCisJCSJmbGFncyAlI2x4XG4iLCByZXNubywgcmVzLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24uc3RhcnQsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi5lbmQsCiAJCSAodW5zaWduZWQgbG9uZylyZXMtPmZsYWdzKTsKQEAgLTExNCwxMyArMTEyLDExIEBACiAJCWVyciA9IGluc2VydF9yZXNvdXJjZShyb290LCByZXMpOwogCiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogJXMgb2YgJXMgWyUjbGx4LSUjbGx4XVxuIiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6ICVzIG9mICVzICVwUlxuIiwKIAkJCXJlc291cmNlLAogCQkJcm9vdCA/ICJhZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiIgOgogCQkJCSJubyBwYXJlbnQgZm91bmQgZm9yIiwKLQkJCWR0eXBlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCQlkdHlwZSwgcmVzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTMzLDE1ICsxMjksMTQgQEAKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgbWluLCBhbGlnbjsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAltaW4gPSAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gUENJQklPU19NSU5fSU8gOiBQQ0lCSU9TX01JTl9NRU07CiAKIAlhbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyZXMpOwogCWlmICghYWxpZ24pIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlIHJlc291cmNlIChib2d1cyAiCi0JCQkiYWxpZ25tZW50KSBbJSNsbHgtJSNsbHhdIGZsYWdzICUjbHhcbiIsCi0JCQlyZXNubywgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwgcmVzLT5mbGFncyk7CisJCQkiYWxpZ25tZW50KSAlcFIgZmxhZ3MgJSNseFxuIiwKKwkJCXJlc25vLCByZXMsIHJlcy0+ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2MiwxMSArMTU3LDggQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAiCi0JCQkiWyUjbGx4LSUjbGx4XVxuIiwgcmVzbm8sCi0JCQlyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKKwkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7CiAJfSBlbHNlIHsKIAkJcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9TVEFSVEFMSUdOOwogCQlpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykKQEAgLTIwMiwxMSArMTk0LDggQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAiCi0JCQkiWyUjbGx4LSUjbGx4XG5dIiwgcmVzbm8sCi0JCQlyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKKwkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7CiAJfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CiAJCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXMsIHJlc25vKTsKIAl9CkBAIC0yMzcsOSArMjI2LDggQEAKIAkJcl9hbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyKTsKIAkJaWYgKCFyX2FsaWduKSB7CiAJCQlkZXZfd2FybigmZGV2LT5kZXYsICJCQVIgJWQ6IGJvZ3VzIGFsaWdubWVudCAiCi0JCQkJIlslI2xseC0lI2xseF0gZmxhZ3MgJSNseFxuIiwKLQkJCQlpLCAodW5zaWduZWQgbG9uZyBsb25nKXItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kLCByLT5mbGFncyk7CisJCQkJIiVwUiBmbGFncyAlI2x4XG4iLAorCQkJCWksIHIsIHItPmZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWZvciAobGlzdCA9IGhlYWQ7IDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKQEAgLTI4Nyw5ICsyNzUsNyBAQAogCiAJCWlmICghci0+cGFyZW50KSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZSBub3QgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgIgotCQkJCSJCQVIgJWQgWyUjbGx4LSUjbGx4XSBjb2xsaXNpb25zXG4iLCBpLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHItPmVuZCk7CisJCQkJIkJBUiAlZCAlcFIgY29sbGlzaW9uc1xuIiwgaSwgcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zbG90LmMgYi9kcml2ZXJzL3BjaS9zbG90LmMKaW5kZXggN2U1Yjg1Yy4uMGM2ZGIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2xvdC5jCisrKyBiL2RyaXZlcnMvcGNpL3Nsb3QuYwpAQCAtNDksMTEgKzQ5LDE2IEBACiAKIHN0YXRpYyB2b2lkIHBjaV9zbG90X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QgPSB0b19wY2lfc2xvdChrb2JqKTsKIAogCXByX2RlYnVnKCIlczogcmVsZWFzaW5nIHBjaV9zbG90IG9uICV4OiVkXG4iLCBfX2Z1bmNfXywKIAkJIHNsb3QtPmJ1cy0+bnVtYmVyLCBzbG90LT5udW1iZXIpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzbG90LT5idXMtPmRldmljZXMsIGJ1c19saXN0KQorCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gc2xvdC0+bnVtYmVyKQorCQkJZGV2LT5zbG90ID0gTlVMTDsKKwogCWxpc3RfZGVsKCZzbG90LT5saXN0KTsKIAogCWtmcmVlKHNsb3QpOwpAQCAtMTA4LDYgKzExMyw3IEBACiBzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9jcmVhdGVfc2xvdChzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBpbnQgc2xvdF9uciwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKIAlpbnQgZXJyOwogCkBAIC0xNTAsNiArMTU2LDEwIEBACiAJSU5JVF9MSVNUX0hFQUQoJnNsb3QtPmxpc3QpOwogCWxpc3RfYWRkKCZzbG90LT5saXN0LCAmcGFyZW50LT5zbG90cyk7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBhcmVudC0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSBzbG90X25yKQorCQkJZGV2LT5zbG90ID0gc2xvdDsKKwogCS8qIERvbid0IGNhcmUgaWYgZGVidWcgcHJpbnRrIGhhcyBhIC0xIGZvciBzbG90X25yICovCiAJcHJfZGVidWcoIiVzOiBjcmVhdGVkIHBjaV9zbG90IG9uICUwNHg6JTAyeDolMDJ4XG4iLAogCQkgX19mdW5jX18sIHBjaV9kb21haW5fbnIocGFyZW50KSwgcGFyZW50LT5udW1iZXIsIHNsb3RfbnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IGEwZmZiOGUuLjllMTE0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQkJZ290byBmYWlsMGQ7CiAJCWNmLT5zb2NrZXQucGNpX2lycSA9IGJvYXJkLT5pcnFfcGluOwogCX0gZWxzZQotCQljZi0+c29ja2V0LnBjaV9pcnEgPSBOUl9JUlFTICsgMTsKKwkJY2YtPnNvY2tldC5wY2lfaXJxID0gbnJfaXJxcyArIDE7CiAKIAkvKiBwY21jaWEgbGF5ZXIgb25seSByZW1hcHMgInJlYWwiIG1lbW9yeSBub3QgaW9zcGFjZSAqLwogCWNmLT5zb2NrZXQuaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMgYi9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMKaW5kZXggMTE3ZGMxMi4uOWVmNjljZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYwpAQCAtMjMzLDE1ICsyMzMsMTggQEAKICAqLwogc3RhdGljIHZvaWQgaHNfbWFwX2lycShoc19zb2NrZXRfdCAqc3AsIHVuc2lnbmVkIGludCBpcnEpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCiAgICAgCURQUklOVEsoImhzX21hcF9pcnEoc29jaz0lZCBpcnE9JWQpXG4iLCBzcC0+bnVtYmVyLCBpcnEpOwogCQogCWlmIChpcnEgPj0gSFNfTlVNX01BUFBFRF9JUlFTKQogCSAgICByZXR1cm47CiAKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKICAgICAJaHNfbWFwcGVkX2lycVtpcnFdLnNvY2sgPSBzcDsKIAkvKiBpbnNlcnQgb3Vyc2VsdmVzIGFzIHRoZSBpcnEgY29udHJvbGxlciAqLwotCWhzX21hcHBlZF9pcnFbaXJxXS5vbGRfaGFuZGxlciA9IGlycV9kZXNjW2lycV0uY2hpcDsKLQlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmaGQ2NDQ2NV9zc19pcnFfdHlwZTsKKwloc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXIgPSBkZXNjLT5jaGlwOworCWRlc2MtPmNoaXAgPSAmaGQ2NDQ2NV9zc19pcnFfdHlwZTsKIH0KIAogCkBAIC0yNTAsMTMgKzI1MywxNiBAQAogICovCiBzdGF0aWMgdm9pZCBoc191bm1hcF9pcnEoaHNfc29ja2V0X3QgKnNwLCB1bnNpZ25lZCBpbnQgaXJxKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwogICAgIAlEUFJJTlRLKCJoc191bm1hcF9pcnEoc29jaz0lZCBpcnE9JWQpXG4iLCBzcC0+bnVtYmVyLCBpcnEpOwogCQogCWlmIChpcnEgPj0gSFNfTlVNX01BUFBFRF9JUlFTKQogCSAgICByZXR1cm47CiAJCQorCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCS8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGlycSBjb250cm9sbGVyICovCi0JaXJxX2Rlc2NbaXJxXS5jaGlwID0gaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyOworCWRlc2MtPmNoaXAgPSBoc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXI7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggZWVlMmYxYy4uYjJjNDEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTYzOSw3ICs2MzksNyBAQAogCQlpbnQgaXJxOwogCQlvcHRpb25zICs9IDQ7CiAJCWlycSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsICZvcHRpb25zLCAwKTsKLQkJaWYgKGlycSA+PSAwICYmIGlycSA8IE5SX0lSUVMpCisJCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBucl9pcnFzKQogCQkJdnJjNDE3MV9pcnEgPSBpcnE7CiAKIAkJaWYgKCpvcHRpb25zICE9ICcsJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCA2M2JiNTc5Li44ZTBjMmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC01MSw3ICs1MSw3IEBACiAKIGNvbmZpZyBCQVRURVJZX1RPU0EKIAl0cmlzdGF0ZSAiU2hhcnAgU0wtNjAwMCAodG9zYSkgYmF0dGVyeSIKLQlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIKKwlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIgJiYgVE9VQ0hTQ1JFRU5fV005N1hYCiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBiYXR0ZXJ5IG9uIHRoZSBTaGFycCBaYXVydXMKIAkgIFNMLTYwMDAgKHRvc2EpIG1vZGVscy4KQEAgLTYyLDQgKzYyLDEwIEBACiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcnkgbWVhc3VyZWQgYnkgV005N3h4IGF1eCBwb3J0LgogCitjb25maWcgQkFUVEVSWV9CUTI3eDAwCisJdHJpc3RhdGUgIkJRMjcyMDAgYmF0dGVyeSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJpZXMgd2l0aCBCUTI3MjAwKEkyQykgY2hpcC4KKwogZW5kaWYgIyBQT1dFUl9TVVBQTFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCmluZGV4IDRlMjAwMjYuLmU4ZjFlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQpAQCAtMjEsNCArMjEsNSBAQAogb2JqLSQoQ09ORklHX0JBVFRFUllfUE1VKQkrPSBwbXVfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9PTFBDKQkrPSBvbHBjX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfVE9TQSkJKz0gdG9zYV9iYXR0ZXJ5Lm8KLW9iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubworb2JqLSQoQ09ORklHX0JBVFRFUllfQlEyN3gwMCkJKz0gYnEyN3gwMF9iYXR0ZXJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQlEyN3gwMCBiYXR0ZXJ5IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFdXJvdGVjaCBTLnAuQS4gPGluZm9AZXVyb3RlY2guaXQ+CisgKgorICogQmFzZWQgb24gYSBwcmV2aW91cyB3b3JrIGJ5IENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjAuMCIKKworI2RlZmluZSBCUTI3eDAwX1JFR19URU1QCQkweDA2CisjZGVmaW5lIEJRMjd4MDBfUkVHX1ZPTFQJCTB4MDgKKyNkZWZpbmUgQlEyN3gwMF9SRUdfUlNPQwkJMHgwQiAvKiBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UgKi8KKyNkZWZpbmUgQlEyN3gwMF9SRUdfQUkJCQkweDE0CisjZGVmaW5lIEJRMjd4MDBfUkVHX0ZMQUdTCQkweDBBCisKKy8qIElmIHRoZSBzeXN0ZW0gaGFzIHNldmVyYWwgYmF0dGVyaWVzIHdlIG5lZWQgYSBkaWZmZXJlbnQgbmFtZSBmb3IgZWFjaAorICogb2YgdGhlbS4uLgorICovCitzdGF0aWMgREVGSU5FX0lEUihiYXR0ZXJ5X2lkKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmF0dGVyeV9tdXRleCk7CisKK3N0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvOworc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMgeworCWludCAoKnJlYWQpKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpOworfTsKKworc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8geworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OworCWludAkJCWlkOworCWludAkJCXZvbHRhZ2VfdVY7CisJaW50CQkJY3VycmVudF91QTsKKwlpbnQJCQl0ZW1wX0M7CisJaW50CQkJY2hhcmdlX3Jzb2M7CisJc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMJKmJ1czsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWJhdDsKKworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7Cit9OworCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorfTsKKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBCUTI3eDAwIGRldmljZXMKKyAqLworCitzdGF0aWMgaW50IGJxMjd4MDBfcmVhZCh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKKwkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGktPmJ1cy0+cmVhZChyZWcsIHJ0X3ZhbHVlLCBiX3NpbmdsZSwgZGkpOworCSpydF92YWx1ZSA9IGJlMTZfdG9fY3B1KCpydF92YWx1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlIGluIENlbGNpdXMgZGVncmVlcworICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdGVtcGVyYXR1cmUoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHRlbXAgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1RFTVAsICZ0ZW1wLCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHRlbXBlcmF0dXJlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gKHRlbXAgPj4gMikgLSAyNzM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgVm9sdGFnZSBpbiBtaWxpdm9sdHMKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2Uoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHZvbHQgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1ZPTFQsICZ2b2x0LCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHZvbHRhZ2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB2b2x0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IGF2ZXJhZ2UgY3VycmVudAorICogTm90ZSB0aGF0IGN1cnJlbnQgY2FuIGJlIG5lZ2F0aXZlIHNpZ25lZCBhcyB3ZWxsCisgKiBPciAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfY3VycmVudChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgY3VyciA9IDA7CisJaW50IGZsYWdzID0gMDsKKworCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19BSSwgJmN1cnIsIDAsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgY3VycmVudFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfRkxBR1MsICZmbGFncywgMCwgZGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgZmxhZ3NcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKChmbGFncyAmICgxIDw8IDcpKSAhPSAwKSB7CisJCWRldl9kYmcoZGktPmRldiwgIm5lZ2F0aXZlIGN1cnJlbnQhXG4iKTsKKwkJcmV0dXJuIC1jdXJyOworCX0KKwlyZXR1cm4gY3VycjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgYmF0dGVyeSBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3Jzb2Moc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHJzb2MgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1JTT0MsICZyc29jLCAxLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJzb2MgPj4gODsKK30KKworI2RlZmluZSB0b19icTI3eDAwX2RldmljZV9pbmZvKHgpIGNvbnRhaW5lcl9vZigoeCksIFwKKwkJCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbywgYmF0KTsKKworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSA9IHRvX2JxMjd4MDBfZGV2aWNlX2luZm8ocHN5KTsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2UoZGkpOworCQlpZiAocHNwID09IFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQpCisJCQl2YWwtPmludHZhbCA9IHZhbC0+aW50dmFsIDw9IDAgPyAwIDogMTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfY3VycmVudChkaSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3Jzb2MoZGkpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKGRpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJxMjd4MDBfcG93ZXJzdXBwbHlfaW5pdChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJZGktPmJhdC50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwlkaS0+YmF0LnByb3BlcnRpZXMgPSBicTI3eDAwX2JhdHRlcnlfcHJvcHM7CisJZGktPmJhdC5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzKTsKKwlkaS0+YmF0LmdldF9wcm9wZXJ0eSA9IGJxMjd4MDBfYmF0dGVyeV9nZXRfcHJvcGVydHk7CisJZGktPmJhdC5leHRlcm5hbF9wb3dlcl9jaGFuZ2VkID0gTlVMTDsKK30KKworLyoKKyAqIEJRMjcyMDAgc3BlY2lmaWMgY29kZQorICovCisKK3N0YXRpYyBpbnQgYnEyNzIwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkaS0+Y2xpZW50OworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMl07CisJaW50IGVycjsKKworCWlmICghY2xpZW50LT5hZGFwdGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1zZy0+YWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmxlbiA9IDE7CisJbXNnLT5idWYgPSBkYXRhOworCisJZGF0YVswXSA9IHJlZzsKKwllcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOworCisJaWYgKGVyciA+PSAwKSB7CisJCWlmICghYl9zaW5nbGUpCisJCQltc2ctPmxlbiA9IDI7CisJCWVsc2UKKwkJCW1zZy0+bGVuID0gMTsKKworCQltc2ctPmZsYWdzID0gSTJDX01fUkQ7CisJCWVyciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisJCWlmIChlcnIgPj0gMCkgeworCQkJaWYgKCFiX3NpbmdsZSkKKwkJCQkqcnRfdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7CisJCQllbHNlCisJCQkJKnJ0X3ZhbHVlID0gZGF0YVswXTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWNoYXIgKm5hbWU7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpOworCXN0cnVjdCBicTI3eDAwX2FjY2Vzc19tZXRob2RzICpidXM7CisJaW50IG51bTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIEdldCBuZXcgSUQgZm9yIHRoZSBuZXcgYmF0dGVyeSBkZXZpY2UgKi8KKwlyZXR2YWwgPSBpZHJfcHJlX2dldCgmYmF0dGVyeV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZiYXR0ZXJ5X211dGV4KTsKKwlyZXR2YWwgPSBpZHJfZ2V0X25ldygmYmF0dGVyeV9pZCwgY2xpZW50LCAmbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYnEyNzIwMC0lZCIsIG51bSk7CisJaWYgKCFuYW1lKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBuYW1lXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8xOworCX0KKworCWRpID0ga3phbGxvYyhzaXplb2YoKmRpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkaSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgaW5mbyBkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8yOworCX0KKwlkaS0+aWQgPSBudW07CisKKwlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgYWNjZXNzIG1ldGhvZCAiCisJCQkJCSJkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8zOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRpKTsKKwlkaS0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWRpLT5iYXQubmFtZSA9IG5hbWU7CisJYnVzLT5yZWFkID0gJmJxMjcyMDBfcmVhZDsKKwlkaS0+YnVzID0gYnVzOworCWRpLT5jbGllbnQgPSBjbGllbnQ7CisKKwlicTI3eDAwX3Bvd2Vyc3VwcGx5X2luaXQoZGkpOworCisJcmV0dmFsID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgJmRpLT5iYXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmF0dGVyeVxuIik7CisJCWdvdG8gYmF0dF9mYWlsZWRfNDsKKwl9CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJzdXBwb3J0IHZlci4gJXMgZW5hYmxlZFxuIiwgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CisKK2JhdHRfZmFpbGVkXzQ6CisJa2ZyZWUoYnVzKTsKK2JhdHRfZmFpbGVkXzM6CisJa2ZyZWUoZGkpOworYmF0dF9mYWlsZWRfMjoKKwlrZnJlZShuYW1lKTsKK2JhdHRfZmFpbGVkXzE6CisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGktPmJhdCk7CisKKwlrZnJlZShkaS0+YmF0Lm5hbWUpOworCisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgZGktPmlkKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJa2ZyZWUoZGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb2R1bGUgc3R1ZmYKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnEyNzIwMF9pZFtdID0geworCXsgImJxMjcyMDAiLCAwIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJicTI3MjAwLWJhdHRlcnkiLAorCX0sCisJLnByb2JlID0gYnEyNzIwMF9iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUgPSBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJxMjcyMDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicTI3eDAwX2JhdHRlcnlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgQlEyNzIwMCBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGJxMjd4MDBfYmF0dGVyeV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGJxMjd4MDBfYmF0dGVyeV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmJxMjcyMDBfYmF0dGVyeV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYnEyN3gwMF9iYXR0ZXJ5X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQlEyN3gwMCBiYXR0ZXJ5IG1vbml0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jIGIvZHJpdmVycy9wb3dlci9wZGFfcG93ZXIuYwppbmRleCAwNDcxZWM3Li5kMzBiYjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcGRhX3Bvd2VyLmMKQEAgLTMzNCwxMyArMzM0LDE2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWNfd2FrZXVwX2VuYWJsZWQ7CitzdGF0aWMgaW50IHVzYl93YWtldXBfZW5hYmxlZDsKKwogc3RhdGljIGludCBwZGFfcG93ZXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CiAJCWlmIChhY19pcnEpCi0JCQllbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CisJCQlhY193YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CiAJCWlmICh1c2JfaXJxKQotCQkJZW5hYmxlX2lycV93YWtlKHVzYl9pcnEtPnN0YXJ0KTsKKwkJCXVzYl93YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzQ5LDkgKzM1Miw5IEBACiBzdGF0aWMgaW50IHBkYV9wb3dlcl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKLQkJaWYgKHVzYl9pcnEpCisJCWlmICh1c2JfaXJxICYmIHVzYl93YWtldXBfZW5hYmxlZCkKIAkJCWRpc2FibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwotCQlpZiAoYWNfaXJxKQorCQlpZiAoYWNfaXJxICYmIGFjX3dha2V1cF9lbmFibGVkKQogCQkJZGlzYWJsZV9pcnFfd2FrZShhY19pcnEtPnN0YXJ0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwppbmRleCAzMDA3Njk1Li41NTIwMDQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwpAQCAtODcsNiArODcsMzAgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgX19wb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCByZXQgPSB7MCx9OworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHBzeS0+dHlwZSAhPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZKSB7CisJCWlmIChwc3ktPmdldF9wcm9wZXJ0eShwc3ksIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwgJnJldCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHJldC5pbnR2YWwpCisJCQlyZXR1cm4gcmV0LmludHZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBjbGFzc19mb3JfZWFjaF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgIF9fcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGludCBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpCiB7CiAJaW50IHJjID0gMDsKQEAgLTE0OCw2ICsxNzIsNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfY2hhbmdlZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfYW1faV9zdXBwbGllZCk7CitFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfdW5yZWdpc3Rlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCmluZGV4IGZlMmFlYjEuLjIzYWU4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYwpAQCAtMzAsNyArMzAsNyBAQAogCiAjZGVmaW5lIFBPV0VSX1NVUFBMWV9BVFRSKF9uYW1lKQkJCQkJXAogewkJCQkJCQkJCVwKLQkuYXR0ciA9IHsgLm5hbWUgPSAjX25hbWUsIC5tb2RlID0gMDQ0NCwgLm93bmVyID0gVEhJU19NT0RVTEUgfSwJXAorCS5hdHRyID0geyAubmFtZSA9ICNfbmFtZSwgLm1vZGUgPSAwNDQ0IH0sCVwKIAkuc2hvdyA9IHBvd2VyX3N1cHBseV9zaG93X3Byb3BlcnR5LAkJCQlcCiAJLnN0b3JlID0gTlVMTCwJCQkJCQkJXAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzYXYuYyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKaW5kZXggNmYyZjkwZS4uMDY4NDhiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzYXYuYworKysgYi9kcml2ZXJzL3BzMy9wczNhdi5jCkBAIC05MTUsNiArOTE1LDIyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHBzM2F2X3ZpZGVvX211dGUpOwogCisvKiBtdXRlIGFuYWxvZyBvdXRwdXQgb25seSAqLworaW50IHBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKGludCBtdXRlKQoreworCWludCBpLCByZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHMzYXYtPmF2X2h3X2NvbmYubnVtX29mX2F2bXVsdGk7IGkrKykgeworCQlyZXMgPSBwczNhdl9jbWRfYXZfYXVkaW9fbXV0ZSgxLAorCQkJJnBzM2F2LT5hdl9wb3J0W2kgKyBwczNhdi0+YXZfaHdfY29uZi5udW1fb2ZfaGRtaV0sCisJCQltdXRlKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2cpOworCiBpbnQgcHMzYXZfYXVkaW9fbXV0ZShpbnQgbXV0ZSkKIHsKIAlyZXR1cm4gcHMzYXZfc2V0X2F1ZGlvX211dGUobXV0ZSA/IFBTM0FWX0NNRF9NVVRFX09OCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYyBiL2RyaXZlcnMvcHMzL3BzM2F2X2NtZC5jCmluZGV4IDdmODgwYzIuLjExZWI1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzM2F2X2NtZC5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2X2NtZC5jCkBAIC02NjAsOSArNjYwLDEwIEBACiB9CiAKIC8qIGRlZmF1bHQgY3MgdmFsICovCi1zdGF0aWMgY29uc3QgdTggcHMzYXZfbW9kZV9jc19pbmZvW10gPSB7Cit1OCBwczNhdl9tb2RlX2NzX2luZm9bXSA9IHsKIAkweDAwLCAweDA5LCAweDAwLCAweDAyLCAweDAxLCAweDAwLCAweDAwLCAweDAwCiB9OworRVhQT1JUX1NZTUJPTF9HUEwocHMzYXZfbW9kZV9jc19pbmZvKTsKIAogI2RlZmluZSBDU180NAkweDAwCiAjZGVmaW5lIENTXzQ4CTB4MDIKQEAgLTY3Nyw3ICs2NzgsNyBAQAogCQkJICAgICAgdTMyIGNoLCB1MzIgZnMsIHUzMiB3b3JkX2JpdHMsIHUzMiBmb3JtYXQsCiAJCQkgICAgICB1MzIgc291cmNlKQogewotCWludCBzcGRpZl90aHJvdWdoLCBzcGRpZl9iaXRzdHJlYW07CisJaW50IHNwZGlmX3Rocm91Z2g7CiAJaW50IGk7CiAKIAlpZiAoIShjaCB8IGZzIHwgZm9ybWF0IHwgd29yZF9iaXRzIHwgc291cmNlKSkgewpAQCAtNjg3LDcgKzY4OCw2IEBACiAJCWZvcm1hdCA9IFBTM0FWX0NNRF9BVURJT19GT1JNQVRfUENNOwogCQlzb3VyY2UgPSBQUzNBVl9DTURfQVVESU9fU09VUkNFX1NFUklBTDsKIAl9Ci0Jc3BkaWZfdGhyb3VnaCA9IHNwZGlmX2JpdHN0cmVhbSA9IDA7CS8qIFhYWCBub3Qgc3VwcG9ydGVkICovCiAKIAkvKiBhdWRpbyBtb2RlICovCiAJbWVtc2V0KGF1ZGlvLCAwLCBzaXplb2YoKmF1ZGlvKSk7CkBAIC03NzcsMTYgKzc3NywxNyBAQAogCQlicmVhazsKIAl9CiAKKwkvKiBub24tYXVkaW8gYml0ICovCisJc3BkaWZfdGhyb3VnaCA9IGF1ZGlvLT5hdWRpb19jc19pbmZvWzBdICYgMHgwMjsKKwogCS8qIHBhc3MgdGhyb3VnaCBzZXR0aW5nICovCiAJaWYgKHNwZGlmX3Rocm91Z2ggJiYKIAkgICAgKGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX1NQRElGXzAgfHwKLQkgICAgIGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX1NQRElGXzEpKSB7CisJICAgICBhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9TUERJRl8xIHx8CisJICAgICBhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9IRE1JXzAgfHwKKwkgICAgIGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX0hETUlfMSkpIHsKIAkJYXVkaW8tPmF1ZGlvX3dvcmRfYml0cyA9IFBTM0FWX0NNRF9BVURJT19XT1JEX0JJVFNfMTY7Ci0JCWF1ZGlvLT5hdWRpb19zb3VyY2UgPSBQUzNBVl9DTURfQVVESU9fU09VUkNFX1NQRElGOwotCQlpZiAoc3BkaWZfYml0c3RyZWFtKSB7Ci0JCQlhdWRpby0+YXVkaW9fZm9ybWF0ID0gUFMzQVZfQ01EX0FVRElPX0ZPUk1BVF9CSVRTVFJFQU07Ci0JCQlhdWRpby0+YXVkaW9fY3NfaW5mb1swXSB8PSBDU19CSVQ7Ci0JCX0KKwkJYXVkaW8tPmF1ZGlvX2Zvcm1hdCA9IFBTM0FWX0NNRF9BVURJT19GT1JNQVRfQklUU1RSRUFNOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggZjY2MGVmMy4uODE0ZjQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC02MTAsNiArNjEwLDE0IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBSaWNvaCBSUzVDMzEzIFJUQyBjaGlwcy4KIAorY29uZmlnIFJUQ19EUlZfUEFSSVNDCisJdHJpc3RhdGUgIlBBLVJJU0MgZmlybXdhcmUgUlRDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQVJJU0MKKwloZWxwCisJICBTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIFJUQyBzdXBwb3J0IG9uIFBBLVJJU0Mgc3lzdGVtcyB1c2luZworCSAgZmlybXdhcmUgY2FsbHMuIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQKKwkgIGp1c3Qgc2F5IFkuCisKIGNvbmZpZyBSVENfRFJWX1BQQwogICAgICAgIHRyaXN0YXRlICJQb3dlclBDIG1hY2hpbmUgZGVwZW5kZW50IFJUQyBzdXBwb3J0IgogICAgICAgIGRlcGVuZHMgb24gUFBDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGQwNTkyOGIuLmQ2YTlhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC01MSw2ICs1MSw3IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzKQkrPSBydGMtcGNmODU4My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMCkJKz0gcnRjLXBsMDMwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BMMDMxKQkrPSBydGMtcGwwMzEubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUEFSSVNDKQkrPSBydGMtcGFyaXNjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BQQykJKz0gcnRjLXBwYy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9SOTcwMSkJKz0gcnRjLXI5NzAxLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1JTNUMzMTMpCSs9IHJ0Yy1yczVjMzEzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IDM3MDgyNjEuLmI1YmY5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtNTMsMjEgKzUzLDIxIEBACiAJfSB3aGlsZSAoKHRpbWUgIT0gYXQ5MV9zeXNfcmVhZCh0aW1lcmVnKSkgfHwKIAkJCShkYXRlICE9IGF0OTFfc3lzX3JlYWQoY2FscmVnKSkpOwogCi0JdG0tPnRtX3NlYyAgPSBCQ0QyQklOKCh0aW1lICYgQVQ5MV9SVENfU0VDKSA+PiAwKTsKLQl0bS0+dG1fbWluICA9IEJDRDJCSU4oKHRpbWUgJiBBVDkxX1JUQ19NSU4pID4+IDgpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTigodGltZSAmIEFUOTFfUlRDX0hPVVIpID4+IDE2KTsKKwl0bS0+dG1fc2VjICA9IGJjZDJiaW4oKHRpbWUgJiBBVDkxX1JUQ19TRUMpID4+IDApOworCXRtLT50bV9taW4gID0gYmNkMmJpbigodGltZSAmIEFUOTFfUlRDX01JTikgPj4gOCk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKCh0aW1lICYgQVQ5MV9SVENfSE9VUikgPj4gMTYpOwogCiAJLyoKIAkgKiBUaGUgQ2FsZW5kYXIgQWxhcm0gcmVnaXN0ZXIgZG9lcyBub3QgaGF2ZSBhIGZpZWxkIGZvcgogCSAqIHRoZSB5ZWFyIC0gc28gdGhlc2Ugd2lsbCByZXR1cm4gYW4gaW52YWxpZCB2YWx1ZS4gIFdoZW4gYW4KIAkgKiBhbGFybSBpcyBzZXQsIGF0OTFfYWxhcm1feWVhciB3aWxsZSBzdG9yZSB0aGUgY3VycmVudCB5ZWFyLgogCSAqLwotCXRtLT50bV95ZWFyICA9IEJDRDJCSU4oZGF0ZSAmIEFUOTFfUlRDX0NFTlQpICogMTAwOwkvKiBjZW50dXJ5ICovCi0JdG0tPnRtX3llYXIgKz0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX1lFQVIpID4+IDgpOwkvKiB5ZWFyICovCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbihkYXRlICYgQVQ5MV9SVENfQ0VOVCkgKiAxMDA7CS8qIGNlbnR1cnkgKi8KKwl0bS0+dG1feWVhciArPSBiY2QyYmluKChkYXRlICYgQVQ5MV9SVENfWUVBUikgPj4gOCk7CS8qIHllYXIgKi8KIAotCXRtLT50bV93ZGF5ID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX0RBWSkgPj4gMjEpIC0gMTsJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLwotCXRtLT50bV9tb24gID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX01PTlRIKSA+PiAxNikgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX0RBVEUpID4+IDI0KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19EQVkpID4+IDIxKSAtIDE7CS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwl0bS0+dG1fbW9uICA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19NT05USCkgPj4gMTYpIC0gMTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19EQVRFKSA+PiAyNCk7CiB9CiAKIC8qCkBAIC0xMDYsMTYgKzEwNiwxNiBAQAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUNLVVBEKTsKIAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1RJTVIsCi0JCQkgIEJJTjJCQ0QodG0tPnRtX3NlYykgPDwgMAotCQkJfCBCSU4yQkNEKHRtLT50bV9taW4pIDw8IDgKLQkJCXwgQklOMkJDRCh0bS0+dG1faG91cikgPDwgMTYpOworCQkJICBiaW4yYmNkKHRtLT50bV9zZWMpIDw8IDAKKwkJCXwgYmluMmJjZCh0bS0+dG1fbWluKSA8PCA4CisJCQl8IGJpbjJiY2QodG0tPnRtX2hvdXIpIDw8IDE2KTsKIAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0NBTFIsCi0JCQkgIEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApCS8qIGNlbnR1cnkgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCkgPDwgOAkvKiB5ZWFyICovCi0JCQl8IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fd2RheSArIDEpIDw8IDIxCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fbWRheSkgPDwgMjQpOworCQkJICBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKQkvKiBjZW50dXJ5ICovCisJCQl8IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApIDw8IDgJLyogeWVhciAqLworCQkJfCBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCQl8IGJpbjJiY2QodG0tPnRtX3dkYXkgKyAxKSA8PCAyMQkvKiBkYXkgb2YgdGhlIHdlZWsgWzAtNl0sIFN1bmRheT0wICovCisJCQl8IGJpbjJiY2QodG0tPnRtX21kYXkpIDw8IDI0KTsKIAogCS8qIFJlc3RhcnQgVGltZS9DYWxlbmRhciAqLwogCWNyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19DUik7CkBAIC0xNjIsMTMgKzE2MiwxMyBAQAogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfVElNQUxSLAotCQkgIEJJTjJCQ0QodG0udG1fc2VjKSA8PCAwCi0JCXwgQklOMkJDRCh0bS50bV9taW4pIDw8IDgKLQkJfCBCSU4yQkNEKHRtLnRtX2hvdXIpIDw8IDE2CisJCSAgYmluMmJjZCh0bS50bV9zZWMpIDw8IDAKKwkJfCBiaW4yYmNkKHRtLnRtX21pbikgPDwgOAorCQl8IGJpbjJiY2QodG0udG1faG91cikgPDwgMTYKIAkJfCBBVDkxX1JUQ19IT1VSRU4gfCBBVDkxX1JUQ19NSU5FTiB8IEFUOTFfUlRDX1NFQ0VOKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19DQUxBTFIsCi0JCSAgQklOMkJDRCh0bS50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCi0JCXwgQklOMkJDRCh0bS50bV9tZGF5KSA8PCAyNAorCQkgIGJpbjJiY2QodG0udG1fbW9uICsgMSkgPDwgMTYJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCQl8IGJpbjJiY2QodG0udG1fbWRheSkgPDwgMjQKIAkJfCBBVDkxX1JUQ19EQVRFRU4gfCBBVDkxX1JUQ19NVEhFTik7CiAKIAlpZiAoYWxybS0+ZW5hYmxlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jIGIvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jCmluZGV4IDE4OWEwMTguLmQwMGEyNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMKQEAgLTcxLDE0ICs3MSwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOwogCi0JQkNEX1RPX0JJTih0bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9taW4pOwotCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4odG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4odG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTih0bS0+dG1feWVhcik7Ci0JQkNEX1RPX0JJTih0bS0+dG1fd2RheSk7Ci0JQkNEX1RPX0JJTihjZW50dXJ5KTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4odG0tPnRtX3dkYXkpOworCWNlbnR1cnkgPSBiY2QyYmluKGNlbnR1cnkpOwogCiAJdG0tPnRtX3llYXIgKz0gKGNlbnR1cnkgKiAxMDApOwogCXRtLT50bV95ZWFyIC09IDE5MDA7CkBAIC0xMDYsMTMgKzEwNiwxMyBAQAogCW1pbiA9IHRtLT50bV9taW47CiAJc2VjID0gdG0tPnRtX3NlYzsKIAotCUJJTl9UT19CQ0Qoc2VjKTsKLQlCSU5fVE9fQkNEKG1pbik7Ci0JQklOX1RPX0JDRChocnMpOwotCUJJTl9UT19CQ0QoZGF5KTsKLQlCSU5fVE9fQkNEKG1vbik7Ci0JQklOX1RPX0JDRCh5cnMpOwotCUJJTl9UT19CQ0QoY2VudHVyeSk7CisJc2VjID0gYmluMmJjZChzZWMpOworCW1pbiA9IGJpbjJiY2QobWluKTsKKwlocnMgPSBiaW4yYmNkKGhycyk7CisJZGF5ID0gYmluMmJjZChkYXkpOworCW1vbiA9IGJpbjJiY2QobW9uKTsKKwl5cnMgPSBiaW4yYmNkKHlycyk7CisJY2VudHVyeSA9IGJpbjJiY2QoY2VudHVyeSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwppbmRleCA5NjNhZDBiLi41NTQ5MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKQEAgLTE0Myw2ICsxNDMsNDMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmZGVmIFJUQ19QT1JUCisKKy8qIE1vc3QgbmV3ZXIgeDg2IHN5c3RlbXMgaGF2ZSB0d28gcmVnaXN0ZXIgYmFua3MsIHRoZSBmaXJzdCB1c2VkCisgKiBmb3IgUlRDIGFuZCBOVlJBTSBhbmQgdGhlIHNlY29uZCBvbmx5IGZvciBOVlJBTS4gIENhbGxlciBtdXN0CisgKiBvd24gcnRjX2xvY2sgLi4uIGFuZCB3ZSB3b24ndCB3b3JyeSBhYm91dCBhY2Nlc3MgZHVyaW5nIE5NSS4KKyAqLworI2RlZmluZSBjYW5fYmFuazIJdHJ1ZQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY21vc19yZWFkX2JhbmsyKHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwlvdXRiKGFkZHIsIFJUQ19QT1JUKDIpKTsKKwlyZXR1cm4gaW5iKFJUQ19QT1JUKDMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNtb3Nfd3JpdGVfYmFuazIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwlvdXRiKGFkZHIsIFJUQ19QT1JUKDIpKTsKKwlvdXRiKHZhbCwgUlRDX1BPUlQoMikpOworfQorCisjZWxzZQorCisjZGVmaW5lIGNhbl9iYW5rMglmYWxzZQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY21vc19yZWFkX2JhbmsyKHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNtb3Nfd3JpdGVfYmFuazIodW5zaWduZWQgY2hhciB2YWwsIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyBpbnQgY21vc19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCiB7CiAJLyogUkVWSVNJVDogIGlmIHRoZSBjbG9jayBoYXMgYSAiY2VudHVyeSIgcmVnaXN0ZXIsIHVzZQpAQCAtMjAzLDI2ICsyNDAsMjYgQEAKIAkvKiBSRVZJU0lUIHRoaXMgYXNzdW1lcyBQQyBzdHlsZSB1c2FnZTogIGFsd2F5cyBCQ0QgKi8KIAogCWlmICgoKHVuc2lnbmVkKXQtPnRpbWUudG1fc2VjKSA8IDB4NjApCi0JCXQtPnRpbWUudG1fc2VjID0gQkNEMkJJTih0LT50aW1lLnRtX3NlYyk7CisJCXQtPnRpbWUudG1fc2VjID0gYmNkMmJpbih0LT50aW1lLnRtX3NlYyk7CiAJZWxzZQogCQl0LT50aW1lLnRtX3NlYyA9IC0xOwogCWlmICgoKHVuc2lnbmVkKXQtPnRpbWUudG1fbWluKSA8IDB4NjApCi0JCXQtPnRpbWUudG1fbWluID0gQkNEMkJJTih0LT50aW1lLnRtX21pbik7CisJCXQtPnRpbWUudG1fbWluID0gYmNkMmJpbih0LT50aW1lLnRtX21pbik7CiAJZWxzZQogCQl0LT50aW1lLnRtX21pbiA9IC0xOwogCWlmICgoKHVuc2lnbmVkKXQtPnRpbWUudG1faG91cikgPCAweDI0KQotCQl0LT50aW1lLnRtX2hvdXIgPSBCQ0QyQklOKHQtPnRpbWUudG1faG91cik7CisJCXQtPnRpbWUudG1faG91ciA9IGJjZDJiaW4odC0+dGltZS50bV9ob3VyKTsKIAllbHNlCiAJCXQtPnRpbWUudG1faG91ciA9IC0xOwogCiAJaWYgKGNtb3MtPmRheV9hbHJtKSB7CiAJCWlmICgoKHVuc2lnbmVkKXQtPnRpbWUudG1fbWRheSkgPD0gMHgzMSkKLQkJCXQtPnRpbWUudG1fbWRheSA9IEJDRDJCSU4odC0+dGltZS50bV9tZGF5KTsKKwkJCXQtPnRpbWUudG1fbWRheSA9IGJjZDJiaW4odC0+dGltZS50bV9tZGF5KTsKIAkJZWxzZQogCQkJdC0+dGltZS50bV9tZGF5ID0gLTE7CiAJCWlmIChjbW9zLT5tb25fYWxybSkgewogCQkJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9tb24pIDw9IDB4MTIpCi0JCQkJdC0+dGltZS50bV9tb24gPSBCQ0QyQklOKHQtPnRpbWUudG1fbW9uKSAtIDE7CisJCQkJdC0+dGltZS50bV9tb24gPSBiY2QyYmluKHQtPnRpbWUudG1fbW9uKSAtIDE7CiAJCQllbHNlCiAJCQkJdC0+dGltZS50bV9tb24gPSAtMTsKIAkJfQpAQCAtMjk0LDE5ICszMzEsMTkgQEAKIAkvKiBXcml0aW5nIDB4ZmYgbWVhbnMgImRvbid0IGNhcmUiIG9yICJtYXRjaCBhbGwiLiAgKi8KIAogCW1vbiA9IHQtPnRpbWUudG1fbW9uICsgMTsKLQltb24gPSAobW9uIDw9IDEyKSA/IEJJTjJCQ0QobW9uKSA6IDB4ZmY7CisJbW9uID0gKG1vbiA8PSAxMikgPyBiaW4yYmNkKG1vbikgOiAweGZmOwogCiAJbWRheSA9IHQtPnRpbWUudG1fbWRheTsKLQltZGF5ID0gKG1kYXkgPj0gMSAmJiBtZGF5IDw9IDMxKSA/IEJJTjJCQ0QobWRheSkgOiAweGZmOworCW1kYXkgPSAobWRheSA+PSAxICYmIG1kYXkgPD0gMzEpID8gYmluMmJjZChtZGF5KSA6IDB4ZmY7CiAKIAlocnMgPSB0LT50aW1lLnRtX2hvdXI7Ci0JaHJzID0gKGhycyA8IDI0KSA/IEJJTjJCQ0QoaHJzKSA6IDB4ZmY7CisJaHJzID0gKGhycyA8IDI0KSA/IGJpbjJiY2QoaHJzKSA6IDB4ZmY7CiAKIAltaW4gPSB0LT50aW1lLnRtX21pbjsKLQltaW4gPSAobWluIDwgNjApID8gQklOMkJDRChtaW4pIDogMHhmZjsKKwltaW4gPSAobWluIDwgNjApID8gYmluMmJjZChtaW4pIDogMHhmZjsKIAogCXNlYyA9IHQtPnRpbWUudG1fc2VjOwotCXNlYyA9IChzZWMgPCA2MCkgPyBCSU4yQkNEKHNlYykgOiAweGZmOworCXNlYyA9IChzZWMgPCA2MCkgPyBiaW4yYmNkKHNlYykgOiAweGZmOwogCiAJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwogCkBAIC00OTEsMTIgKzUyOCwyMSBAQAogCiAJaWYgKHVubGlrZWx5KG9mZiA+PSBhdHRyLT5zaXplKSkKIAkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KG9mZiA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKG9mZiArIGNvdW50KSA+IGF0dHItPnNpemUpCiAJCWNvdW50ID0gYXR0ci0+c2l6ZSAtIG9mZjsKIAorCW9mZiArPSBOVlJBTV9PRkZTRVQ7CiAJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCWZvciAocmV0dmFsID0gMCwgb2ZmICs9IE5WUkFNX09GRlNFVDsgY291bnQtLTsgcmV0dmFsKyssIG9mZisrKQotCQkqYnVmKysgPSBDTU9TX1JFQUQob2ZmKTsKKwlmb3IgKHJldHZhbCA9IDA7IGNvdW50OyBjb3VudC0tLCBvZmYrKywgcmV0dmFsKyspIHsKKwkJaWYgKG9mZiA8IDEyOCkKKwkJCSpidWYrKyA9IENNT1NfUkVBRChvZmYpOworCQllbHNlIGlmIChjYW5fYmFuazIpCisJCQkqYnVmKysgPSBjbW9zX3JlYWRfYmFuazIob2ZmKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTUxMiw2ICs1NTgsOCBAQAogCWNtb3MgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKIAlpZiAodW5saWtlbHkob2ZmID49IGF0dHItPnNpemUpKQogCQlyZXR1cm4gLUVGQklHOworCWlmICh1bmxpa2VseShvZmYgPCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKChvZmYgKyBjb3VudCkgPiBhdHRyLT5zaXplKQogCQljb3VudCA9IGF0dHItPnNpemUgLSBvZmY7CiAKQEAgLTUyMCwxNSArNTY4LDIwIEBACiAJICogaGVyZS4gIElmIHVzZXJzcGFjZSBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB3aGF0IGZpZWxkcyBvZgogCSAqIE5WUkFNIHRvIHVwZGF0ZSwgdXBkYXRpbmcgY2hlY2tzdW1zIGlzIGFsc28gcGFydCBvZiBpdHMgam9iLgogCSAqLworCW9mZiArPSBOVlJBTV9PRkZTRVQ7CiAJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCWZvciAocmV0dmFsID0gMCwgb2ZmICs9IE5WUkFNX09GRlNFVDsgY291bnQtLTsgcmV0dmFsKyssIG9mZisrKSB7CisJZm9yIChyZXR2YWwgPSAwOyBjb3VudDsgY291bnQtLSwgb2ZmKyssIHJldHZhbCsrKSB7CiAJCS8qIGRvbid0IHRyYXNoIFJUQyByZWdpc3RlcnMgKi8KIAkJaWYgKG9mZiA9PSBjbW9zLT5kYXlfYWxybQogCQkJCXx8IG9mZiA9PSBjbW9zLT5tb25fYWxybQogCQkJCXx8IG9mZiA9PSBjbW9zLT5jZW50dXJ5KQogCQkJYnVmKys7Ci0JCWVsc2UKKwkJZWxzZSBpZiAob2ZmIDwgMTI4KQogCQkJQ01PU19XUklURSgqYnVmKyssIG9mZik7CisJCWVsc2UgaWYgKGNhbl9iYW5rMikKKwkJCWNtb3Nfd3JpdGVfYmFuazIoKmJ1ZisrLCBvZmYpOworCQllbHNlCisJCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKQEAgLTUzOSw3ICs1OTIsNiBAQAogCS5hdHRyID0gewogCQkubmFtZQk9ICJudnJhbSIsCiAJCS5tb2RlCT0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAKIAkucmVhZAk9IGNtb3NfbnZyYW1fcmVhZCwKQEAgLTYzMSw4ICs2ODMsOCBAQAogCiAJLyogSGV1cmlzdGljIHRvIGRlZHVjZSBOVlJBTSBzaXplIC4uLiBkbyB3aGF0IHRoZSBsZWdhY3kgTlZSQU0KIAkgKiBkcml2ZXIgZGlkLCBidXQgZG9uJ3QgcmVqZWN0IHVua25vd24gY29uZmlncy4gICBPbGQgaGFyZHdhcmUKLQkgKiB3b24ndCBhZGRyZXNzIDEyOCBieXRlcywgYW5kIGZvciBub3cgd2UgaWdub3JlIHRoZSB3YXkgbmV3ZXIKLQkgKiBjaGlwcyBjYW4gYWRkcmVzcyAyNTYgYnl0ZXMgKHVzaW5nIHR3byBtb3JlIGkvbyBwb3J0cykuCisJICogd29uJ3QgYWRkcmVzcyAxMjggYnl0ZXMuICBOZXdlciBjaGlwcyBoYXZlIG11bHRpcGxlIGJhbmtzLAorCSAqIHRob3VnaCB0aGV5IG1heSBub3QgYmUgbGlzdGVkIGluIG9uZSBJL08gcmVzb3VyY2UuCiAJICovCiAjaWYJZGVmaW5lZChDT05GSUdfQVRBUkkpCiAJYWRkcmVzc19zcGFjZSA9IDY0OwpAQCAtNjQyLDYgKzY5NCw4IEBACiAjd2FybmluZyBBc3N1bWluZyAxMjggYnl0ZXMgb2YgUlRDK05WUkFNIGFkZHJlc3Mgc3BhY2UsIG5vdCA2NCBieXRlcy4KIAlhZGRyZXNzX3NwYWNlID0gMTI4OwogI2VuZGlmCisJaWYgKGNhbl9iYW5rMiAmJiBwb3J0cy0+ZW5kID4gKHBvcnRzLT5zdGFydCArIDEpKQorCQlhZGRyZXNzX3NwYWNlID0gMjU2OwogCiAJLyogRm9yIEFDUEkgc3lzdGVtcyBleHRlbnNpb24gaW5mbyBjb21lcyBmcm9tIHRoZSBGQURULiAgT24gb3RoZXJzLAogCSAqIGJvYXJkIHNwZWNpZmljIHNldHVwIHByb3ZpZGVzIGl0IGFzIGFwcHJvcHJpYXRlLiAgU3lzdGVtcyB3aGVyZQpAQCAtNzQwLDcgKzc5NCw3IEBACiAJCWdvdG8gY2xlYW51cDI7CiAJfQogCi0JcHJfaW5mbygiJXM6IGFsYXJtcyB1cCB0byBvbmUgJXMlcyVzXG4iLAorCXByX2luZm8oIiVzOiBhbGFybXMgdXAgdG8gb25lICVzJXMsICV6ZCBieXRlcyBudnJhbSwgJXMgaXJxc1xuIiwKIAkJCWNtb3NfcnRjLnJ0Yy0+ZGV2LmJ1c19pZCwKIAkJCWlzX3ZhbGlkX2lycShydGNfaXJxKQogCQkJCT8gIChjbW9zX3J0Yy5tb25fYWxybQpAQCAtNzQ5LDYgKzgwMyw3IEBACiAJCQkJCQk/ICJtb250aCIgOiAiZGF5IikpCiAJCQkJOiAibm8iLAogCQkJY21vc19ydGMuY2VudHVyeSA/ICIsIHkzayIgOiAiIiwKKwkJCW52cmFtLnNpemUsCiAJCQlpc19ocGV0X2VuYWJsZWQoKSA/ICIsIGhwZXQgaXJxcyIgOiAiIik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYwppbmRleCAwYjE3NzcwLi45YTIzNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jCkBAIC04NiwxOSArODYsMTkgQEAKIAlkczEyMTZfc3dpdGNoX2RzX3RvX2Nsb2NrKHByaXYtPmlvYWRkcik7CiAJZHMxMjE2X3JlYWQocHJpdi0+aW9hZGRyLCAodTggKikmcmVncyk7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzLnNlYyk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocmVncy5taW4pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3Muc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyZWdzLm1pbik7CiAJaWYgKHJlZ3MuaG91ciAmIERTMTIxNl9IT1VSXzEyMjQpIHsKIAkJLyogQU0vUE0gbW9kZSAqLwotCQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVncy5ob3VyICYgMHgxZik7CisJCXRtLT50bV9ob3VyID0gYmNkMmJpbihyZWdzLmhvdXIgJiAweDFmKTsKIAkJaWYgKHJlZ3MuaG91ciAmIERTMTIxNl9IT1VSX0FNUE0pCiAJCQl0bS0+dG1faG91ciArPSAxMjsKIAl9IGVsc2UKLQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3MuaG91ciAmIDB4M2YpOworCQl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVncy5ob3VyICYgMHgzZik7CiAJdG0tPnRtX3dkYXkgPSAocmVncy53ZGF5ICYgNykgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzLm1kYXkgJiAweDNmKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihyZWdzLm1vbnRoICYgMHgxZik7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3MueWVhcik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJlZ3MubWRheSAmIDB4M2YpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJlZ3MubW9udGggJiAweDFmKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocmVncy55ZWFyKTsKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwogCXJldHVybiAwOwpAQCAtMTE0LDE5ICsxMTQsMTkgQEAKIAlkczEyMTZfcmVhZChwcml2LT5pb2FkZHIsICh1OCAqKSZyZWdzKTsKIAogCXJlZ3MudHNlYyA9IDA7IC8qIGNsZWFyIDAuMSBhbmQgMC4wMSBzZWNvbmRzICovCi0JcmVncy5zZWMgPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXJlZ3MubWluID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlyZWdzLnNlYyA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJcmVncy5taW4gPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCXJlZ3MuaG91ciAmPSBEUzEyMTZfSE9VUl8xMjI0OwogCWlmIChyZWdzLmhvdXIgJiYgdG0tPnRtX2hvdXIgPiAxMikgewogCQlyZWdzLmhvdXIgfD0gRFMxMjE2X0hPVVJfQU1QTTsKIAkJdG0tPnRtX2hvdXIgLT0gMTI7CiAJfQotCXJlZ3MuaG91ciB8PSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwlyZWdzLmhvdXIgfD0gYmluMmJjZCh0bS0+dG1faG91cik7CiAJcmVncy53ZGF5ICY9IH43OwogCXJlZ3Mud2RheSB8PSB0bS0+dG1fd2RheTsKLQlyZWdzLm1kYXkgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlyZWdzLm1vbnRoID0gQklOMkJDRCh0bS0+dG1fbW9uKTsKLQlyZWdzLnllYXIgPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlyZWdzLm1kYXkgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlyZWdzLm1vbnRoID0gYmluMmJjZCh0bS0+dG1fbW9uKTsKKwlyZWdzLnllYXIgPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAogCWRzMTIxNl9zd2l0Y2hfZHNfdG9fY2xvY2socHJpdi0+aW9hZGRyKTsKIAlkczEyMTZfd3JpdGUocHJpdi0+aW9hZGRyLCAodTggKikmcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMKaW5kZXggYjkzOTc4MS4uMTg0NTU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZQlSVENfU0NMSwkweDA0MDAKIAogI2lmZGVmIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMAotI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci5oPgorI2luY2x1ZGUgPG1hY2gvc25hcGdlYXIuaD4KICNkZWZpbmUgc2V0X2RwKHgpCVNFQ1VSRUVER0VfV1JJVEVfSU9QT1JUKHgsIDB4MWMwMCkKICNkZWZpbmUgZ2V0X2RwKCkJU0VDVVJFRURHRV9SRUFEX0lPUE9SVCgpCiAjZWxzZQpAQCAtMTA3LDEzICsxMDcsMTMgQEAKIAogCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CiAKLQl0bS0+dG1fc2VjCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSk7Ci0JdG0tPnRtX21pbgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01JTikpOwotCXRtLT50bV9ob3VyCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfSE9VUikpOwotCXRtLT50bV93ZGF5CT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFZKSk7Ci0JdG0tPnRtX21kYXkJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9EQVRFKSk7Ci0JdG0tPnRtX21vbgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01PTikpIC0gMTsKLQl0bS0+dG1feWVhcgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1lFQVIpKTsKKwl0bS0+dG1fc2VjCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSk7CisJdG0tPnRtX21pbgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01JTikpOworCXRtLT50bV9ob3VyCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfSE9VUikpOworCXRtLT50bV93ZGF5CT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFZKSk7CisJdG0tPnRtX21kYXkJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9EQVRFKSk7CisJdG0tPnRtX21vbgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01PTikpIC0gMTsKKwl0bS0+dG1feWVhcgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1lFQVIpKTsKIAogCWlmICh0bS0+dG1feWVhciA8IDcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CkBAIC0xNDEsMTMgKzE0MSwxMyBAQAogCS8qIFN0b3AgUlRDICovCiAJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpIHwgMHg4MCk7CiAKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgQklOMkJDRCh0bS0+dG1fc2VjKSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NSU4sIEJJTjJCQ0QodG0tPnRtX21pbikpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfSE9VUiwgQklOMkJDRCh0bS0+dG1faG91cikpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFZLCBCSU4yQkNEKHRtLT50bV93ZGF5KSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9EQVRFLCBCSU4yQkNEKHRtLT50bV9tZGF5KSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NT04sIEJJTjJCQ0QodG0tPnRtX21vbiArIDEpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1lFQVIsIEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgYmluMmJjZCh0bS0+dG1fc2VjKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NSU4sIGJpbjJiY2QodG0tPnRtX21pbikpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfSE9VUiwgYmluMmJjZCh0bS0+dG1faG91cikpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFZLCBiaW4yYmNkKHRtLT50bV93ZGF5KSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9EQVRFLCBiaW4yYmNkKHRtLT50bV9tZGF5KSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NT04sIGJpbjJiY2QodG0tPnRtX21vbiArIDEpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1lFQVIsIGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApKTsKIAogCS8qIFN0YXJ0IFJUQyAqLwogCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfU0VDLCBkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSAmIH4weDgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwppbmRleCBiOTFkMDJhLi5mYzM3MmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCkBAIC0xMTQsMTAgKzExNCwxMCBAQAogCQkJaG91ciA9IDEyOwogCQkJYmNkICY9IH5EUzEzMDVfSFJfUE07CiAJCX0KLQkJaG91ciArPSBCQ0QyQklOKGJjZCk7CisJCWhvdXIgKz0gYmNkMmJpbihiY2QpOwogCQlyZXR1cm4gaG91ciAtIDE7CiAJfQotCXJldHVybiBCQ0QyQklOKGJjZCk7CisJcmV0dXJuIGJjZDJiaW4oYmNkKTsKIH0KIAogc3RhdGljIHU4IGhvdXIyYmNkKGJvb2wgaHIxMiwgaW50IGhvdXIpCkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogCWlmIChocjEyKSB7CiAJCWhvdXIrKzsKIAkJaWYgKGhvdXIgPD0gMTIpCi0JCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgQklOMkJDRChob3VyKTsKKwkJCXJldHVybiBEUzEzMDVfSFJfMTIgfCBiaW4yYmNkKGhvdXIpOwogCQlob3VyIC09IDEyOwotCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgRFMxMzA1X0hSX1BNIHwgQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IERTMTMwNV9IUl9QTSB8IGJpbjJiY2QoaG91cik7CiAJfQotCXJldHVybiBCSU4yQkNEKGhvdXIpOworCXJldHVybiBiaW4yYmNkKGhvdXIpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjA2LDEzICsyMDYsMTMgQEAKIAkJYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CiAKIAkvKiBEZWNvZGUgdGhlIHJlZ2lzdGVycyAqLwotCXRpbWUtPnRtX3NlYyA9IEJDRDJCSU4oYnVmW0RTMTMwNV9TRUNdKTsKLQl0aW1lLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTUlOXSk7CisJdGltZS0+dG1fc2VjID0gYmNkMmJpbihidWZbRFMxMzA1X1NFQ10pOworCXRpbWUtPnRtX21pbiA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NSU5dKTsKIAl0aW1lLT50bV9ob3VyID0gYmNkMmhvdXIoYnVmW0RTMTMwNV9IT1VSXSk7CiAJdGltZS0+dG1fd2RheSA9IGJ1ZltEUzEzMDVfV0RBWV0gLSAxOwotCXRpbWUtPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTURBWV0pOwotCXRpbWUtPnRtX21vbiA9IEJDRDJCSU4oYnVmW0RTMTMwNV9NT05dKSAtIDE7Ci0JdGltZS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW0RTMTMwNV9ZRUFSXSkgKyAxMDA7CisJdGltZS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NREFZXSk7CisJdGltZS0+dG1fbW9uID0gYmNkMmJpbihidWZbRFMxMzA1X01PTl0pIC0gMTsKKwl0aW1lLT50bV95ZWFyID0gYmNkMmJpbihidWZbRFMxMzA1X1lFQVJdKSArIDEwMDsKIAogCWRldl92ZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKIAkJImhvdXJzPSVkLCBtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0yMzksMTMgKzIzOSwxMyBAQAogCS8qIFdyaXRlIHJlZ2lzdGVycyBzdGFydGluZyBhdCB0aGUgZmlyc3QgdGltZS9kYXRlIGFkZHJlc3MuICovCiAJKmJwKysgPSBEUzEzMDVfV1JJVEUgfCBEUzEzMDVfU0VDOwogCi0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX3NlYyk7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX21pbik7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX3NlYyk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX21pbik7CiAJKmJwKysgPSBob3VyMmJjZChkczEzMDUtPmhyMTIsIHRpbWUtPnRtX2hvdXIpOwogCSpicCsrID0gKHRpbWUtPnRtX3dkYXkgPCA3KSA/ICh0aW1lLT50bV93ZGF5ICsgMSkgOiAxOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9tZGF5KTsKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1fbW9uICsgMSk7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX3llYXIgLSAxMDApOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9tZGF5KTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1fbW9uICsgMSk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX3llYXIgLSAxMDApOwogCiAJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCSJ3cml0ZSIsIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCkBAIC0zMjksOCArMzI5LDggQEAKIAkgKiBmaWxsIGluIHRoZSByZXN0IC4uLiBhbmQgYWxzbyBoYW5kbGUgcm9sbG92ZXIgdG8gdG9tb3Jyb3cgd2hlbgogCSAqIHRoYXQncyBuZWVkZWQuCiAJICovCi0JYWxtLT50aW1lLnRtX3NlYyA9IEJDRDJCSU4oYnVmW0RTMTMwNV9TRUNdKTsKLQlhbG0tPnRpbWUudG1fbWluID0gQkNEMkJJTihidWZbRFMxMzA1X01JTl0pOworCWFsbS0+dGltZS50bV9zZWMgPSBiY2QyYmluKGJ1ZltEUzEzMDVfU0VDXSk7CisJYWxtLT50aW1lLnRtX21pbiA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NSU5dKTsKIAlhbG0tPnRpbWUudG1faG91ciA9IGJjZDJob3VyKGJ1ZltEUzEzMDVfSE9VUl0pOwogCWFsbS0+dGltZS50bV9tZGF5ID0gLTE7CiAJYWxtLT50aW1lLnRtX21vbiA9IC0xOwpAQCAtMzg3LDggKzM4Nyw4IEBACiAKIAkvKiB3cml0ZSBhbGFybSAqLwogCWJ1ZlswXSA9IERTMTMwNV9XUklURSB8IERTMTMwNV9BTE0wKERTMTMwNV9TRUMpOwotCWJ1ZlsxICsgRFMxMzA1X1NFQ10gPSBCSU4yQkNEKGFsbS0+dGltZS50bV9zZWMpOwotCWJ1ZlsxICsgRFMxMzA1X01JTl0gPSBCSU4yQkNEKGFsbS0+dGltZS50bV9taW4pOworCWJ1ZlsxICsgRFMxMzA1X1NFQ10gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9zZWMpOworCWJ1ZlsxICsgRFMxMzA1X01JTl0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9taW4pOwogCWJ1ZlsxICsgRFMxMzA1X0hPVVJdID0gaG91cjJiY2QoZHMxMzA1LT5ocjEyLCBhbG0tPnRpbWUudG1faG91cik7CiAJYnVmWzEgKyBEUzEzMDVfV0RBWV0gPSBEUzEzMDVfQUxNX0RJU0FCTEU7CiAKQEAgLTYwNiw3ICs2MDYsNiBAQAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIG52cmFtID0gewogCS5hdHRyLm5hbWUJPSAibnZyYW0iLAogCS5hdHRyLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkuYXR0ci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGRzMTMwNV9udnJhbV9yZWFkLAogCS53cml0ZQkJPSBkczEzMDVfbnZyYW1fd3JpdGUsCiAJLnNpemUJCT0gRFMxMzA1X05WUkFNX0xFTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwppbmRleCA0ZmNmMDczLi4xNjIzMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCkBAIC0yMjIsMTcgKzIyMiwxNyBAQAogCQkJZHMxMzA3LT5yZWdzWzRdLCBkczEzMDctPnJlZ3NbNV0sCiAJCQlkczEzMDctPnJlZ3NbNl0pOwogCi0JdC0+dG1fc2VjID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19TRUNTXSAmIDB4N2YpOwotCXQtPnRtX21pbiA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTUlOXSAmIDB4N2YpOworCXQtPnRtX3NlYyA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfU0VDU10gJiAweDdmKTsKKwl0LT50bV9taW4gPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01JTl0gJiAweDdmKTsKIAl0bXAgPSBkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19IT1VSXSAmIDB4M2Y7Ci0JdC0+dG1faG91ciA9IEJDRDJCSU4odG1wKTsKLQl0LT50bV93ZGF5ID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19XREFZXSAmIDB4MDcpIC0gMTsKLQl0LT50bV9tZGF5ID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOworCXQtPnRtX2hvdXIgPSBiY2QyYmluKHRtcCk7CisJdC0+dG1fd2RheSA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfV0RBWV0gJiAweDA3KSAtIDE7CisJdC0+dG1fbWRheSA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKIAl0bXAgPSBkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NT05USF0gJiAweDFmOwotCXQtPnRtX21vbiA9IEJDRDJCSU4odG1wKSAtIDE7CisJdC0+dG1fbW9uID0gYmNkMmJpbih0bXApIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIERTMTMzN19CSVRfQ0VOVFVSWSAqLwotCXQtPnRtX3llYXIgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1lFQVJdKSArIDEwMDsKKwl0LT50bV95ZWFyID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKIAkJImhvdXJzPSVkLCBtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0yNTgsMTYgKzI1OCwxNiBAQAogCQl0LT50bV9tb24sIHQtPnRtX3llYXIsIHQtPnRtX3dkYXkpOwogCiAJKmJ1ZisrID0gMDsJCS8qIGZpcnN0IHJlZ2lzdGVyIGFkZHIgKi8KLQlidWZbRFMxMzA3X1JFR19TRUNTXSA9IEJJTjJCQ0QodC0+dG1fc2VjKTsKLQlidWZbRFMxMzA3X1JFR19NSU5dID0gQklOMkJDRCh0LT50bV9taW4pOwotCWJ1ZltEUzEzMDdfUkVHX0hPVVJdID0gQklOMkJDRCh0LT50bV9ob3VyKTsKLQlidWZbRFMxMzA3X1JFR19XREFZXSA9IEJJTjJCQ0QodC0+dG1fd2RheSArIDEpOwotCWJ1ZltEUzEzMDdfUkVHX01EQVldID0gQklOMkJDRCh0LT50bV9tZGF5KTsKLQlidWZbRFMxMzA3X1JFR19NT05USF0gPSBCSU4yQkNEKHQtPnRtX21vbiArIDEpOworCWJ1ZltEUzEzMDdfUkVHX1NFQ1NdID0gYmluMmJjZCh0LT50bV9zZWMpOworCWJ1ZltEUzEzMDdfUkVHX01JTl0gPSBiaW4yYmNkKHQtPnRtX21pbik7CisJYnVmW0RTMTMwN19SRUdfSE9VUl0gPSBiaW4yYmNkKHQtPnRtX2hvdXIpOworCWJ1ZltEUzEzMDdfUkVHX1dEQVldID0gYmluMmJjZCh0LT50bV93ZGF5ICsgMSk7CisJYnVmW0RTMTMwN19SRUdfTURBWV0gPSBiaW4yYmNkKHQtPnRtX21kYXkpOworCWJ1ZltEUzEzMDdfUkVHX01PTlRIXSA9IGJpbjJiY2QodC0+dG1fbW9uICsgMSk7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSAqLwogCXRtcCA9IHQtPnRtX3llYXIgLSAxMDA7Ci0JYnVmW0RTMTMwN19SRUdfWUVBUl0gPSBCSU4yQkNEKHRtcCk7CisJYnVmW0RTMTMwN19SRUdfWUVBUl0gPSBiaW4yYmNkKHRtcCk7CiAKIAlzd2l0Y2ggKGRzMTMwNy0+dHlwZSkgewogCWNhc2UgZHNfMTMzNzoKQEAgLTU1MSw3ICs1NTEsNiBAQAogCS5hdHRyID0gewogCQkubmFtZQk9ICJudnJhbSIsCiAJCS5tb2RlCT0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAKIAkucmVhZAk9IGRzMTMwN19udnJhbV9yZWFkLApAQCAtNzA5LDE4ICs3MDgsMTggQEAKIAl9CiAKIAl0bXAgPSBkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19TRUNTXTsKLQl0bXAgPSBCQ0QyQklOKHRtcCAmIDB4N2YpOworCXRtcCA9IGJjZDJiaW4odG1wICYgMHg3Zik7CiAJaWYgKHRtcCA+IDYwKQogCQlnb3RvIGV4aXRfYmFkOwotCXRtcCA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTUlOXSAmIDB4N2YpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTUlOXSAmIDB4N2YpOwogCWlmICh0bXAgPiA2MCkKIAkJZ290byBleGl0X2JhZDsKIAotCXRtcCA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKKwl0bXAgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01EQVldICYgMHgzZik7CiAJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDMxKQogCQlnb3RvIGV4aXRfYmFkOwogCi0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NT05USF0gJiAweDFmKTsKKwl0bXAgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01PTlRIXSAmIDB4MWYpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAxMikKIAkJZ290byBleGl0X2JhZDsKIApAQCAtNzM5LDE0ICs3MzgsMTQgQEAKIAkJLyogQmUgc3VyZSB3ZSdyZSBpbiAyNCBob3VyIG1vZGUuICBNdWx0aS1tYXN0ZXIgc3lzdGVtcwogCQkgKiB0YWtlIG5vdGUuLi4KIAkJICovCi0JCXRtcCA9IEJDRDJCSU4odG1wICYgMHgxZik7CisJCXRtcCA9IGJjZDJiaW4odG1wICYgMHgxZik7CiAJCWlmICh0bXAgPT0gMTIpCiAJCQl0bXAgPSAwOwogCQlpZiAoZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfSE9VUl0gJiBEUzEzMDdfQklUX1BNKQogCQkJdG1wICs9IDEyOwogCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQlEUzEzMDdfUkVHX0hPVVIsCi0JCQkJQklOMkJDRCh0bXApKTsKKwkJCQliaW4yYmNkKHRtcCkpOwogCX0KIAogCWRzMTMwNy0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYwppbmRleCA4Njk4MWQzLi4yNWNhYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCkBAIC0xNTMsOCArMTUzLDggQEAKIAkvKgogCSAqIHNldCB0aGUgd2RvZyB2YWx1ZXMgaW4gdGhlIHdkb2cgcmVnaXN0ZXJzCiAJICovCi0JcnRjX3dyaXRlKEJJTjJCQ0QoZGVjaXNlY29uZHMgJSAxMDApLCBEUzE1MTFfV0RfTVNFQyk7Ci0JcnRjX3dyaXRlKEJJTjJCQ0QoZGVjaXNlY29uZHMgLyAxMDApLCBEUzE1MTFfV0RfU0VDKTsKKwlydGNfd3JpdGUoYmluMmJjZChkZWNpc2Vjb25kcyAlIDEwMCksIERTMTUxMV9XRF9NU0VDKTsKKwlydGNfd3JpdGUoYmluMmJjZChkZWNpc2Vjb25kcyAvIDEwMCksIERTMTUxMV9XRF9TRUMpOwogCS8qCiAJICogc2V0IHdkb2cgZW5hYmxlIGFuZCB3ZG9nICdzdGVlcmluZycgYml0IHRvIGlzc3VlIGEgcmVzZXQKIAkgKi8KQEAgLTIyMCwxMyArMjIwLDEzIEBACiAJLyoKIAkgKiBlYWNoIHJlZ2lzdGVyIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiB2YWxpZCBiaXRzCiAJICovCi0Jc2VjID0gQklOMkJDRChzZWMpICYgMHg3ZjsKLQltaW4gPSBCSU4yQkNEKG1pbikgJiAweDdmOwotCWhycyA9IEJJTjJCQ0QoaHJzKSAmIDB4M2Y7Ci0JZGF5ID0gQklOMkJDRChkYXkpICYgMHgzZjsKLQltb24gPSBCSU4yQkNEKG1vbikgJiAweDFmOwotCXlycyA9IEJJTjJCQ0QoeXJzKSAmIDB4ZmY7Ci0JY2VuID0gQklOMkJDRChjZW4pICYgMHhmZjsKKwlzZWMgPSBiaW4yYmNkKHNlYykgJiAweDdmOworCW1pbiA9IGJpbjJiY2QobWluKSAmIDB4N2Y7CisJaHJzID0gYmluMmJjZChocnMpICYgMHgzZjsKKwlkYXkgPSBiaW4yYmNkKGRheSkgJiAweDNmOworCW1vbiA9IGJpbjJiY2QobW9uKSAmIDB4MWY7CisJeXJzID0gYmluMmJjZCh5cnMpICYgMHhmZjsKKwljZW4gPSBiaW4yYmNkKGNlbikgJiAweGZmOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRzMTUxMV9sb2NrLCBmbGFncyk7CiAJcnRjX2Rpc2FibGVfdXBkYXRlKCk7CkBAIC0yNjQsMTQgKzI2NCwxNCBAQAogCXJ0Y19lbmFibGVfdXBkYXRlKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxNTExX2xvY2ssIGZsYWdzKTsKIAotCXJ0Y190bS0+dG1fc2VjID0gQkNEMkJJTihydGNfdG0tPnRtX3NlYyk7Ci0JcnRjX3RtLT50bV9taW4gPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWluKTsKLQlydGNfdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ0Y190bS0+dG1faG91cik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX21kYXkpOwotCXJ0Y190bS0+dG1fd2RheSA9IEJDRDJCSU4ocnRjX3RtLT50bV93ZGF5KTsKLQlydGNfdG0tPnRtX21vbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9tb24pOwotCXJ0Y190bS0+dG1feWVhciA9IEJDRDJCSU4ocnRjX3RtLT50bV95ZWFyKTsKLQljZW50dXJ5ID0gQkNEMkJJTihjZW50dXJ5KSAqIDEwMDsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fd2RheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CisJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSkgKiAxMDA7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC0zMDQsMTYgKzMwNCwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CiAJcnRjX3dyaXRlKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSkgJiAweDNmLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9tZGF5KSAmIDB4M2YsCiAJICAgICAgIFJUQ19BTEFSTV9EQVRFKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSAmIDB4M2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpICYgMHgzZiwKIAkgICAgICAgUlRDX0FMQVJNX0hPVVIpOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSAmIDB4N2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21pbikgJiAweDdmLAogCSAgICAgICBSVENfQUxBUk1fTUlOKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1fc2VjIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX3NlYykgJiAweDdmLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpICYgMHg3ZiwKIAkgICAgICAgUlRDX0FMQVJNX1NFQyk7CiAJcnRjX3dyaXRlKHJ0Y19yZWFkKFJUQ19DTUQpIHwgKHBkYXRhLT5pcnFlbiA/IFJUQ19USUUgOiAwKSwgUlRDX0NNRCk7CiAJcnRjX3JlYWQoUlRDX0NNRDEpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC00ODEsNyArNDgxLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVUdPLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gRFMxNTExX1JBTV9NQVgsCiAJLnJlYWQgPSBkczE1MTFfbnZyYW1fcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwppbmRleCA0ZWY1OTI4Li5iOTQ3NWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCkBAIC03OCwxNyArNzgsMTcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAJdTggY2VudHVyeTsKIAotCWNlbnR1cnkgPSBCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKKwljZW50dXJ5ID0gYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CiAKIAl3cml0ZWIoUlRDX1dSSVRFLCBwZGF0YS0+aW9hZGRyICsgUlRDX0NPTlRST0wpOwogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CiAKIAkvKiBSVENfQ0VOVFVSWSBhbmQgUlRDX0NPTlRST0wgc2hhcmUgc2FtZSByZWdpc3RlciAqLwogCXdyaXRlYihSVENfV1JJVEUgfCAoY2VudHVyeSAmIFJUQ19DRU5UVVJZX01BU0spLCBpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogCXllYXIgPSByZWFkYihpb2FkZHIgKyBSVENfWUVBUik7CiAJY2VudHVyeSA9IHJlYWRiKGlvYWRkciArIFJUQ19DRU5UVVJZKSAmIFJUQ19DRU5UVVJZX01BU0s7CiAJd3JpdGViKDAsIGlvYWRkciArIFJUQ19DT05UUk9MKTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihzZWNvbmQpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKG1pbnV0ZSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGhvdXIpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihkYXkpOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTih3ZWVrKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihtb250aCkgLSAxOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHNlY29uZCk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4obWludXRlKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oaG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGRheSk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspOworCXRtLT50bV9tb24gPSBiY2QyYmluKG1vbnRoKSAtIDE7CiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oeWVhcikgKyBCQ0QyQklOKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oeWVhcikgKyBiY2QyYmluKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKIAogCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewogCQlkZXZfZXJyKGRldiwgInJldHJpZXZlZCBkYXRlL3RpbWUgaXMgbm90IHZhbGlkLlxuIik7CkBAIC0xNDEsMTYgKzE0MSwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpLAogCSAgICAgICBpb2FkZHIgKyBSVENfREFURV9BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX2hvdXIgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1faG91ciksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpLAogCSAgICAgICBpb2FkZHIgKyBSVENfSE9VUlNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX01JTlVURVNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fc2VjKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+aXJxZW4gPyBSVENfSU5UU19BRSA6IDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKIAlyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKaW5kZXggMjRkMzVlZGUuLjhiYzg1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKQEAgLTY2LDE3ICs2NiwxNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcl9ydGM7CiAJdTggY2VudHVyeTsKIAotCWNlbnR1cnkgPSBCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKKwljZW50dXJ5ID0gYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CiAKIAl3cml0ZWIoUlRDX1dSSVRFLCBpb2FkZHIgKyBSVENfQ09OVFJPTCk7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIHJlZ2lzdGVyICovCiAJd3JpdGViKFJUQ19XUklURSB8IChjZW50dXJ5ICYgUlRDX0NFTlRVUllfTUFTSyksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKQEAgLTEwNiwxNCArMTA2LDE0IEBACiAJeWVhciA9IHJlYWRiKGlvYWRkciArIFJUQ19ZRUFSKTsKIAljZW50dXJ5ID0gcmVhZGIoaW9hZGRyICsgUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKIAl3cml0ZWIoMCwgaW9hZGRyICsgUlRDX0NPTlRST0wpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHNlY29uZCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4obWludXRlKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRheSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHdlZWspOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKG1vbnRoKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oc2Vjb25kKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihtaW51dGUpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4obW9udGgpIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih5ZWFyKSArIEJDRDJCSU4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGJjZDJiaW4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwppbmRleCBhYmZkZmNiLi4zYTdiZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCkBAIC0xMzEsMTcgKzEzMSwxNyBAQAogCQkJZm0zMTMwLT5yZWdzWzB4Y10sIGZtMzEzMC0+cmVnc1sweGRdLAogCQkJZm0zMTMwLT5yZWdzWzB4ZV0pOwogCi0JdC0+dG1fc2VjID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19TRUNPTkRTXSAmIDB4N2YpOwotCXQtPnRtX21pbiA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKKwl0LT50bV9zZWMgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1NFQ09ORFNdICYgMHg3Zik7CisJdC0+dG1fbWluID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NSU5VVEVTXSAmIDB4N2YpOwogCXRtcCA9IGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0hPVVJTXSAmIDB4M2Y7Ci0JdC0+dG1faG91ciA9IEJDRDJCSU4odG1wKTsKLQl0LT50bV93ZGF5ID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVldICYgMHgwNykgLSAxOwotCXQtPnRtX21kYXkgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBVEVdICYgMHgzZik7CisJdC0+dG1faG91ciA9IGJjZDJiaW4odG1wKTsKKwl0LT50bV93ZGF5ID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVldICYgMHgwNykgLSAxOworCXQtPnRtX21kYXkgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBVEVdICYgMHgzZik7CiAJdG1wID0gZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTU9OVEhTXSAmIDB4MWY7Ci0JdC0+dG1fbW9uID0gQkNEMkJJTih0bXApIC0gMTsKKwl0LT50bV9tb24gPSBiY2QyYmluKHRtcCkgLSAxOwogCiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVksIGFuZCBpZ25vcmUgQ0YgYml0ICovCi0JdC0+dG1feWVhciA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfWUVBUlNdKSArIDEwMDsKKwl0LT50bV95ZWFyID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19ZRUFSU10pICsgMTAwOwogCiAJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCiAJCSJob3Vycz0lZCwgbWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMTY3LDE2ICsxNjcsMTYgQEAKIAkJdC0+dG1fbW9uLCB0LT50bV95ZWFyLCB0LT50bV93ZGF5KTsKIAogCS8qIGZpcnN0IHJlZ2lzdGVyIGFkZHIgKi8KLQlidWZbRk0zMTMwX1JUQ19TRUNPTkRTXSA9IEJJTjJCQ0QodC0+dG1fc2VjKTsKLQlidWZbRk0zMTMwX1JUQ19NSU5VVEVTXSA9IEJJTjJCQ0QodC0+dG1fbWluKTsKLQlidWZbRk0zMTMwX1JUQ19IT1VSU10gPSBCSU4yQkNEKHQtPnRtX2hvdXIpOwotCWJ1ZltGTTMxMzBfUlRDX0RBWV0gPSBCSU4yQkNEKHQtPnRtX3dkYXkgKyAxKTsKLQlidWZbRk0zMTMwX1JUQ19EQVRFXSA9IEJJTjJCQ0QodC0+dG1fbWRheSk7Ci0JYnVmW0ZNMzEzMF9SVENfTU9OVEhTXSA9IEJJTjJCQ0QodC0+dG1fbW9uICsgMSk7CisJYnVmW0ZNMzEzMF9SVENfU0VDT05EU10gPSBiaW4yYmNkKHQtPnRtX3NlYyk7CisJYnVmW0ZNMzEzMF9SVENfTUlOVVRFU10gPSBiaW4yYmNkKHQtPnRtX21pbik7CisJYnVmW0ZNMzEzMF9SVENfSE9VUlNdID0gYmluMmJjZCh0LT50bV9ob3VyKTsKKwlidWZbRk0zMTMwX1JUQ19EQVldID0gYmluMmJjZCh0LT50bV93ZGF5ICsgMSk7CisJYnVmW0ZNMzEzMF9SVENfREFURV0gPSBiaW4yYmNkKHQtPnRtX21kYXkpOworCWJ1ZltGTTMxMzBfUlRDX01PTlRIU10gPSBiaW4yYmNkKHQtPnRtX21vbiArIDEpOwogCiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVkgKi8KIAl0bXAgPSB0LT50bV95ZWFyIC0gMTAwOwotCWJ1ZltGTTMxMzBfUlRDX1lFQVJTXSA9IEJJTjJCQ0QodG1wKTsKKwlidWZbRk0zMTMwX1JUQ19ZRUFSU10gPSBiaW4yYmNkKHRtcCk7CiAKIAlkZXZfZGJnKGRldiwgIiVzOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IgogCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLApAQCAtMjIyLDExICsyMjIsMTEgQEAKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTU9OVEhTXSk7CiAKIAotCXRtLT50bV9zZWMJPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fU0VDT05EU10gJiAweDdGKTsKLQl0bS0+dG1fbWluCT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01JTlVURVNdICYgMHg3Rik7Ci0JdG0tPnRtX2hvdXIJPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fSE9VUlNdICYgMHgzRik7Ci0JdG0tPnRtX21kYXkJPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fREFURV0gJiAweDNGKTsKLQl0bS0+dG1fbW9uCT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10gJiAweDFGKTsKKwl0bS0+dG1fc2VjCT0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdICYgMHg3Rik7CisJdG0tPnRtX21pbgk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NSU5VVEVTXSAmIDB4N0YpOworCXRtLT50bV9ob3VyCT0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0hPVVJTXSAmIDB4M0YpOworCXRtLT50bV9tZGF5CT0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0RBVEVdICYgMHgzRik7CisJdG0tPnRtX21vbgk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdICYgMHgxRik7CiAJaWYgKHRtLT50bV9tb24gPiAwKQogCQl0bS0+dG1fbW9uIC09IDE7IC8qIFJUQyBpcyAxLTEyLCB0bV9tb24gaXMgMC0xMSAqLwogCWRldl9kYmcoZGV2LCAiJXMgc2Vjcz0lZCwgbWlucz0lZCwgIgpAQCAtMjUyLDIzICsyNTIsMjMgQEAKIAogCWlmICh0bS0+dG1fc2VjICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdID0KLQkJCUJJTjJCQ0QodG0tPnRtX3NlYykgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1fc2VjKSB8IDB4ODA7CiAKIAlpZiAodG0tPnRtX21pbiAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NSU5VVEVTXSA9Ci0JCQlCSU4yQkNEKHRtLT50bV9taW4pIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX21pbikgfCAweDgwOwogCiAJaWYgKHRtLT50bV9ob3VyICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0hPVVJTXSA9Ci0JCQlCSU4yQkNEKHRtLT50bV9ob3VyKSB8IDB4ODA7CisJCQliaW4yYmNkKHRtLT50bV9ob3VyKSB8IDB4ODA7CiAKIAlpZiAodG0tPnRtX21kYXkgIT0gLTEpCiAJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fREFURV0gPQotCQkJQklOMkJDRCh0bS0+dG1fbWRheSkgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1fbWRheSkgfCAweDgwOwogCiAJaWYgKHRtLT50bV9tb24gIT0gLTEpCiAJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTU9OVEhTXSA9Ci0JCQlCSU4yQkNEKHRtLT50bV9tb24gKyAxKSB8IDB4ODA7CisJCQliaW4yYmNkKHRtLT50bV9tb24gKyAxKSB8IDB4ODA7CiAKIAlkZXZfZGJnKGRldiwgImFsYXJtIHdyaXRlICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fU0VDT05EU10sCkBAIC00MTQsMTggKzQxNCwxOCBAQAogCS8qIFRPRE8gKi8KIAkvKiBUT0RPIG5lZWQgdG8gc2FuaXR5IGNoZWNrIGFsYXJtICovCiAJdG1wID0gZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfU0VDT05EU107Ci0JdG1wID0gQkNEMkJJTih0bXAgJiAweDdmKTsKKwl0bXAgPSBiY2QyYmluKHRtcCAmIDB4N2YpOwogCWlmICh0bXAgPiA2MCkKIAkJZ290byBleGl0X2JhZDsKLQl0bXAgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01JTlVURVNdICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NSU5VVEVTXSAmIDB4N2YpOwogCWlmICh0bXAgPiA2MCkKIAkJZ290byBleGl0X2JhZDsKIAotCXRtcCA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFURV0gJiAweDNmKTsKKwl0bXAgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBVEVdICYgMHgzZik7CiAJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDMxKQogCQlnb3RvIGV4aXRfYmFkOwogCi0JdG1wID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NT05USFNdICYgMHgxZik7CisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NT05USFNdICYgMHgxZik7CiAJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDEyKQogCQlnb3RvIGV4aXRfYmFkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jIGIvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYwppbmRleCBhODFhZGFiLi4yY2Q3N2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMKQEAgLTI1OSwyNiArMjU5LDI2IEBACiAJCXJldHVybiBzcjsKIAl9CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX1NDXSk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19NTl0pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfU0NdKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX01OXSk7CiAKIAkvKiBIUiBmaWVsZCBoYXMgYSBtb3JlIGNvbXBsZXggaW50ZXJwcmV0YXRpb24gKi8KIAl7CiAJCWNvbnN0IHU4IF9ociA9IHJlZ3NbSVNMMTIwOF9SRUdfSFJdOwogCQlpZiAoX2hyICYgSVNMMTIwOF9SRUdfSFJfTUlMKQkvKiAyNGggZm9ybWF0ICovCi0JCQl0bS0+dG1faG91ciA9IEJDRDJCSU4oX2hyICYgMHgzZik7CisJCQl0bS0+dG1faG91ciA9IGJjZDJiaW4oX2hyICYgMHgzZik7CiAJCWVsc2UgewogCQkJLyogMTJoIGZvcm1hdCAqLwotCQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKF9ociAmIDB4MWYpOworCQkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKF9ociAmIDB4MWYpOwogCQkJaWYgKF9ociAmIElTTDEyMDhfUkVHX0hSX1BNKQkvKiBQTSBmbGFnIHNldCAqLwogCQkJCXRtLT50bV9ob3VyICs9IDEyOwogCQl9CiAJfQogCi0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfRFRdKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX01PXSkgLSAxOwkvKiBydGMgc3RhcnRzIGF0IDEgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19ZUl0pICsgMTAwOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0RXXSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfRFRdKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX01PXSkgLSAxOwkvKiBydGMgc3RhcnRzIGF0IDEgKi8KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19ZUl0pICsgMTAwOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0RXXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwNSwxMyArMzA1LDEzIEBACiAJfQogCiAJLyogTVNCIG9mIGVhY2ggYWxhcm0gcmVnaXN0ZXIgaXMgYW4gZW5hYmxlIGJpdCAqLwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfU0NBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4N2YpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfTU5BIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4N2YpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0hSQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDNmKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19EVEEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgzZik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19TQ0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHg3Zik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19NTkEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHg3Zik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfSFJBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4M2YpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0RUQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDNmKTsKIAl0bS0+dG1fbW9uID0KLQkJQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX01PQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDFmKSAtIDE7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfRFdBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4MDMpOworCQliY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfTU9BIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4MWYpIC0gMTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19EV0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgwMyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyOCwxNSArMzI4LDE1IEBACiAJaW50IHNyOwogCXU4IHJlZ3NbSVNMMTIwOF9SVENfU0VDVElPTl9MRU5dID0geyAwLCB9OwogCi0JcmVnc1tJU0wxMjA4X1JFR19TQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXJlZ3NbSVNMMTIwOF9SRUdfTU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlyZWdzW0lTTDEyMDhfUkVHX0hSXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpIHwgSVNMMTIwOF9SRUdfSFJfTUlMOworCXJlZ3NbSVNMMTIwOF9SRUdfU0NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlyZWdzW0lTTDEyMDhfUkVHX01OXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJcmVnc1tJU0wxMjA4X1JFR19IUl0gPSBiaW4yYmNkKHRtLT50bV9ob3VyKSB8IElTTDEyMDhfUkVHX0hSX01JTDsKIAotCXJlZ3NbSVNMMTIwOF9SRUdfRFRdID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JcmVnc1tJU0wxMjA4X1JFR19NT10gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlyZWdzW0lTTDEyMDhfUkVHX1lSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApOworCXJlZ3NbSVNMMTIwOF9SRUdfRFRdID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcmVnc1tJU0wxMjA4X1JFR19NT10gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlyZWdzW0lTTDEyMDhfUkVHX1lSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOwogCi0JcmVnc1tJU0wxMjA4X1JFR19EV10gPSBCSU4yQkNEKHRtLT50bV93ZGF5ICYgNyk7CisJcmVnc1tJU0wxMjA4X1JFR19EV10gPSBiaW4yYmNkKHRtLT50bV93ZGF5ICYgNyk7CiAKIAlzciA9IGlzbDEyMDhfaTJjX2dldF9zcihjbGllbnQpOwogCWlmIChzciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA0NzBmYjJkLi44OTNmN2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC0xMTAsMTUgKzExMCwxNSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19TRUNdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfTUlOXSAmIDB4N2YpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19IT1VSXSAmIDB4M2YpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19EQVldICYgMHgzZik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfU0VDXSAmIDB4N2YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX01JTl0gJiAweDdmKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfSE9VUl0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfREFZXSAmIDB4M2YpOwogCXRtLT50bV93ZGF5ID0gYnVmW000MVQ4MF9SRUdfV0RBWV0gJiAweDA3OwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX01PTl0gJiAweDFmKSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfTU9OXSAmIDB4MWYpIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIHRoZSBDZW50dXJ5IEJpdCAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX1lFQVJdKSArIDEwMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxLDE5ICsxNjEsMTkgQEAKIAkvKiBNZXJnZSB0aW1lLWRhdGEgYW5kIHJlZ2lzdGVyIGZsYWdzIGludG8gYnVmWzAuLjddICovCiAJYnVmW000MVQ4MF9SRUdfU1NFQ10gPSAwOwogCWJ1ZltNNDFUODBfUkVHX1NFQ10gPQotCQlCSU4yQkNEKHRtLT50bV9zZWMpIHwgKGJ1ZltNNDFUODBfUkVHX1NFQ10gJiB+MHg3Zik7CisJCWJpbjJiY2QodG0tPnRtX3NlYykgfCAoYnVmW000MVQ4MF9SRUdfU0VDXSAmIH4weDdmKTsKIAlidWZbTTQxVDgwX1JFR19NSU5dID0KLQkJQklOMkJDRCh0bS0+dG1fbWluKSB8IChidWZbTTQxVDgwX1JFR19NSU5dICYgfjB4N2YpOworCQliaW4yYmNkKHRtLT50bV9taW4pIHwgKGJ1ZltNNDFUODBfUkVHX01JTl0gJiB+MHg3Zik7CiAJYnVmW000MVQ4MF9SRUdfSE9VUl0gPQotCQlCSU4yQkNEKHRtLT50bV9ob3VyKSB8IChidWZbTTQxVDgwX1JFR19IT1VSXSAmIH4weDNmKSA7CisJCWJpbjJiY2QodG0tPnRtX2hvdXIpIHwgKGJ1ZltNNDFUODBfUkVHX0hPVVJdICYgfjB4M2YpIDsKIAlidWZbTTQxVDgwX1JFR19XREFZXSA9CiAJCSh0bS0+dG1fd2RheSAmIDB4MDcpIHwgKGJ1ZltNNDFUODBfUkVHX1dEQVldICYgfjB4MDcpOwogCWJ1ZltNNDFUODBfUkVHX0RBWV0gPQotCQlCSU4yQkNEKHRtLT50bV9tZGF5KSB8IChidWZbTTQxVDgwX1JFR19EQVldICYgfjB4M2YpOworCQliaW4yYmNkKHRtLT50bV9tZGF5KSB8IChidWZbTTQxVDgwX1JFR19EQVldICYgfjB4M2YpOwogCWJ1ZltNNDFUODBfUkVHX01PTl0gPQotCQlCSU4yQkNEKHRtLT50bV9tb24gKyAxKSB8IChidWZbTTQxVDgwX1JFR19NT05dICYgfjB4MWYpOworCQliaW4yYmNkKHRtLT50bV9tb24gKyAxKSB8IChidWZbTTQxVDgwX1JFR19NT05dICYgfjB4MWYpOwogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZICovCi0JYnVmW000MVQ4MF9SRUdfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlidWZbTTQxVDgwX1JFR19ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCiAJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpICE9IDEpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3cml0ZSBlcnJvclxuIik7CkBAIC0yODgsMTUgKzI4OCwxNSBAQAogCiAJd2J1ZlswXSA9IE00MVQ4MF9SRUdfQUxBUk1fTU9OOyAvKiBvZmZzZXQgaW50byBydGMncyByZWdzICovCiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fU0VDXSB8PSB0LT50aW1lLnRtX3NlYyA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX3NlYykgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fc2VjKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSB8PSB0LT50aW1lLnRtX21pbiA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX21pbikgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fbWluKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gfD0gdC0+dGltZS50bV9ob3VyID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1faG91cikgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1faG91cikgOiAweDgwOwogCXJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gfD0gdC0+dGltZS50bV9tZGF5ID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1fbWRheSkgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fbWRheSkgOiAweDgwOwogCWlmICh0LT50aW1lLnRtX21vbiA+PSAwKQotCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dIHw9IEJJTjJCQ0QodC0+dGltZS50bV9tb24gKyAxKTsKKwkJcmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSB8PSBiaW4yYmNkKHQtPnRpbWUudG1fbW9uICsgMSk7CiAJZWxzZQogCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldIHw9IDB4NDA7CiAKQEAgLTM0NywxNSArMzQ3LDE1IEBACiAJdC0+dGltZS50bV9tZGF5ID0gLTE7CiAJdC0+dGltZS50bV9tb24gPSAtMTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg4MCkpCi0JCXQtPnRpbWUudG1fc2VjID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg3Zik7CisJCXQtPnRpbWUudG1fc2VjID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg3Zik7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4ODApKQotCQl0LT50aW1lLnRtX21pbiA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4N2YpOworCQl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4N2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0hPVVJdICYgMHg4MCkpCi0JCXQtPnRpbWUudG1faG91ciA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gJiAweDNmKTsKKwkJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9IT1VSXSAmIDB4M2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDgwKSkKLQkJdC0+dGltZS50bV9tZGF5ID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldICYgMHgzZik7CisJCXQtPnRpbWUudG1fbWRheSA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSAmIDB4M2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDQwKSkKLQkJdC0+dGltZS50bV9tb24gPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01PTl0gJiAweDFmKSAtIDE7CisJCXQtPnRpbWUudG1fbW9uID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dICYgMHgxZikgLSAxOwogCXQtPnRpbWUudG1feWVhciA9IC0xOwogCXQtPnRpbWUudG1fd2RheSA9IC0xOwogCXQtPnRpbWUudG1feWRheSA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCmluZGV4IDliMTk0OTkuLmMzYTE4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKQEAgLTQxLDE3ICs0MSwxNyBAQAogCQl0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJYnVmWzBdID0gMHg4MCB8IE00MVQ5NF9SRUdfU0VDT05EUzsgLyogd3JpdGUgdGltZSArIGRhdGUgKi8KLQlidWZbTTQxVDk0X1JFR19TRUNPTkRTXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JYnVmW000MVQ5NF9SRUdfTUlOVVRFU10gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSAgID0gQklOMkJDRCh0bS0+dG1faG91cik7Ci0JYnVmW000MVQ5NF9SRUdfV0RBWV0gICAgPSBCSU4yQkNEKHRtLT50bV93ZGF5ICsgMSk7Ci0JYnVmW000MVQ5NF9SRUdfREFZXSAgICAgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlidWZbTTQxVDk0X1JFR19NT05USF0gICA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCWJ1ZltNNDFUOTRfUkVHX1NFQ09ORFNdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlidWZbTTQxVDk0X1JFR19NSU5VVEVTXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJYnVmW000MVQ5NF9SRUdfSE9VUlNdICAgPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKKwlidWZbTTQxVDk0X1JFR19XREFZXSAgICA9IGJpbjJiY2QodG0tPnRtX3dkYXkgKyAxKTsKKwlidWZbTTQxVDk0X1JFR19EQVldICAgICA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCWJ1ZltNNDFUOTRfUkVHX01PTlRIXSAgID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKIAlidWZbTTQxVDk0X1JFR19IT1VSU10gfD0gTTQxVDk0X0JJVF9DRUI7CiAJaWYgKHRtLT50bV95ZWFyID49IDEwMCkKIAkJYnVmW000MVQ5NF9SRUdfSE9VUlNdIHw9IE00MVQ5NF9CSVRfQ0I7Ci0JYnVmW000MVQ5NF9SRUdfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlidWZbTTQxVDk0X1JFR19ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCiAJcmV0dXJuIHNwaV93cml0ZShzcGksIGJ1ZiwgOCk7CiB9CkBAIC04MiwxNCArODIsMTQgQEAKIAkJc3BpX3dyaXRlKHNwaSwgYnVmLCAyKTsKIAl9CiAKLQl0bS0+dG1fc2VjICA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1NFQ09ORFMpKTsKLQl0bS0+dG1fbWluICA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX01JTlVURVMpKTsKKwl0bS0+dG1fc2VjICA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1NFQ09ORFMpKTsKKwl0bS0+dG1fbWluICA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX01JTlVURVMpKTsKIAlob3VyID0gc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX0hPVVJTKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91ciAmIDB4M2YpOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfV0RBWSkpIC0gMTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX0RBWSkpOwotCXRtLT50bV9tb24gID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTU9OVEgpKSAtIDE7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19ZRUFSKSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIgJiAweDNmKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1dEQVkpKSAtIDE7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19EQVkpKTsKKwl0bS0+dG1fbW9uICA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX01PTlRIKSkgLSAxOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfWUVBUikpOwogCWlmICgoaG91ciAmIE00MVQ5NF9CSVRfQ0IpIHx8ICEoaG91ciAmIE00MVQ5NF9CSVRfQ0VCKSkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKaW5kZXggY2U0ZWZmNi4uMDRiNjNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAJLyogSXNzdWUgdGhlIFJFQUQgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CiAKLQl0bS0+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+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CiAJfQogCiAJLyogdXBkYXRlIGVuZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwppbmRleCAxMmM5Y2QyLi44MDc4Mjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMKQEAgLTE1MCwxNCArMTUwLDE0IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19TQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfTU5dKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19IUl0gJiAweDNmKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19EVF0pOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfTU9dKSAtIDE7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfWVJdKSArCi0JICAgIEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19TQ10pOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfTU5dKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19IUl0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19EVF0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfTU9dKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfWVJdKSArCisJCSAgICAgIGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NCwxNCArMTg0LDE0IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmVnc1tNQVg2OTAwX1JFR19TQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXJlZ3NbTUFYNjkwMF9SRUdfTU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlyZWdzW01BWDY5MDBfUkVHX0hSXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOwotCXJlZ3NbTUFYNjkwMF9SRUdfRFRdID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JcmVnc1tNQVg2OTAwX1JFR19NT10gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlyZWdzW01BWDY5MDBfUkVHX0RXXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOwotCXJlZ3NbTUFYNjkwMF9SRUdfWVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7Ci0JcmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCXJlZ3NbTUFYNjkwMF9SRUdfU0NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlyZWdzW01BWDY5MDBfUkVHX01OXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJcmVnc1tNQVg2OTAwX1JFR19IUl0gPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKKwlyZWdzW01BWDY5MDBfUkVHX0RUXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCXJlZ3NbTUFYNjkwMF9SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJcmVnc1tNQVg2OTAwX1JFR19EV10gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKKwlyZWdzW01BWDY5MDBfUkVHX1lSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOworCXJlZ3NbTUFYNjkwMF9SRUdfQ0VOVFVSWV0gPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAkvKiBzZXQgd3JpdGUgcHJvdGVjdCAqLwogCXJlZ3NbTUFYNjkwMF9SRUdfQ1RdID0gTUFYNjkwMF9SRUdfQ1RfV1A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCmluZGV4IDc4YjI1NTEuLjJmNjUwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYwpAQCAtMTI0LDE1ICsxMjQsMTUgQEAKIAogCS8qIFRoZSBjaGlwIHNlbmRzIGRhdGEgaW4gdGhpcyBvcmRlcjoKIAkgKiBTZWNvbmRzLCBNaW51dGVzLCBIb3VycywgRGF0ZSwgTW9udGgsIERheSwgWWVhciAqLwotCWR0LT50bV9zZWMJPSBCQ0QyQklOKGNoaXAtPmJ1ZlsxXSk7Ci0JZHQtPnRtX21pbgk9IEJDRDJCSU4oY2hpcC0+YnVmWzJdKTsKLQlkdC0+dG1faG91cgk9IEJDRDJCSU4oY2hpcC0+YnVmWzNdKTsKLQlkdC0+dG1fbWRheQk9IEJDRDJCSU4oY2hpcC0+YnVmWzRdKTsKLQlkdC0+dG1fbW9uCT0gQkNEMkJJTihjaGlwLT5idWZbNV0pIC0gMTsKLQlkdC0+dG1fd2RheQk9IEJDRDJCSU4oY2hpcC0+YnVmWzZdKTsKLQlkdC0+dG1feWVhciA9IEJDRDJCSU4oY2hpcC0+YnVmWzddKTsKKwlkdC0+dG1fc2VjCT0gYmNkMmJpbihjaGlwLT5idWZbMV0pOworCWR0LT50bV9taW4JPSBiY2QyYmluKGNoaXAtPmJ1ZlsyXSk7CisJZHQtPnRtX2hvdXIJPSBiY2QyYmluKGNoaXAtPmJ1ZlszXSk7CisJZHQtPnRtX21kYXkJPSBiY2QyYmluKGNoaXAtPmJ1Zls0XSk7CisJZHQtPnRtX21vbgk9IGJjZDJiaW4oY2hpcC0+YnVmWzVdKSAtIDE7CisJZHQtPnRtX3dkYXkJPSBiY2QyYmluKGNoaXAtPmJ1Zls2XSk7CisJZHQtPnRtX3llYXIgPSBiY2QyYmluKGNoaXAtPmJ1Zls3XSk7CiAKLQljZW50dXJ5ID0gQkNEMkJJTih0bXApICogMTAwOworCWNlbnR1cnkgPSBiY2QyYmluKHRtcCkgKiAxMDA7CiAKIAlkdC0+dG1feWVhciArPSBjZW50dXJ5OwogCWR0LT50bV95ZWFyIC09IDE5MDA7CkBAIC0xNjgsMTUgKzE2OCwxNSBAQAogCS8qIFJlbW92ZSB3cml0ZSBwcm90ZWN0aW9uICovCiAJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHhGLCAwKTsKIAotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDEsIEJJTjJCQ0QoZHQtPnRtX3NlYykpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDMsIEJJTjJCQ0QoZHQtPnRtX21pbikpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDUsIEJJTjJCQ0QoZHQtPnRtX2hvdXIpKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDAxLCBiaW4yYmNkKGR0LT50bV9zZWMpKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDAzLCBiaW4yYmNkKGR0LT50bV9taW4pKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA1LCBiaW4yYmNkKGR0LT50bV9ob3VyKSk7CiAKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA3LCBCSU4yQkNEKGR0LT50bV9tZGF5KSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwOSwgQklOMkJDRChkdC0+dG1fbW9uKzEpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDBCLCBCSU4yQkNEKGR0LT50bV93ZGF5KSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwRCwgQklOMkJDRChkdC0+dG1feWVhciUxMDApKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDEzLCBCSU4yQkNEKGR0LT50bV95ZWFyLzEwMCkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDcsIGJpbjJiY2QoZHQtPnRtX21kYXkpKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA5LCBiaW4yYmNkKGR0LT50bV9tb24rMSkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEIsIGJpbjJiY2QoZHQtPnRtX3dkYXkpKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDBELCBiaW4yYmNkKGR0LT50bV95ZWFyJTEwMCkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MTMsIGJpbjJiY2QoZHQtPnRtX3llYXIvMTAwKSk7CiAKIAkvKiBDb21wdWxhYiB1c2VkIGEgZGVsYXkgaGVyZS4gSG93ZXZlciwgdGhlIGRhdGFzaGVldAogCSAqIGRvZXMgbm90IG1lbnRpb24gYSBkZWxheSBiZWluZyByZXF1aXJlZCBhbnl3aGVyZS4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggODg3NjYwNWQuLjJjYmViMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtMTg2LDMwICsxODYsMzAgQEAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXRtLT50bV9zZWMgPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXRtLT50bV9taW4gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCXRtLT50bV9ob3VyID0gQklOMkJDRCh0bS0+dG1faG91cik7Ci0JdG0tPnRtX21kYXkgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fc2VjID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CiAKLQl0bS0+dG1fbW9uID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJdG0tPnRtX21vbiA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJLyogZXBvY2ggPT0gMTkwMCAqLwogCWlmICh0bS0+dG1feWVhciA8IDEwMCB8fCB0bS0+dG1feWVhciA+IDE5OSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JdG0tPnRtX3llYXIgPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKKwl0bS0+dG1feWVhciA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJjZDJ0bShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHRtLT50bV9zZWMpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHRtLT50bV9taW4pOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTih0bS0+dG1faG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHRtLT50bV9tZGF5KTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTih0bS0+dG1fbW9uKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pIC0gMTsKIAkvKiBlcG9jaCA9PSAxOTAwICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHRtLT50bV95ZWFyKSArIDEwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpICsgMTAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDZkNjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBhcmlzYy5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBydGMtcGFyaXNjOiBSVEMgZm9yIEhQIFBBLVJJU0MgZmlybXdhcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorCisvKiBhcyBzaW1wbGUgYXMgY2FuIGJlLCBhbmQgbm8gc2ltcGxlci4gKi8KK3N0cnVjdCBwYXJpc2NfcnRjIHsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBpbnQgcGFyaXNjX2dldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgcGFyaXNjX3J0YyAqcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gZ2V0X3J0Y190aW1lKHRtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV0ICYgUlRDX0JBVFRfQkFEKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJpc2Nfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBwYXJpc2NfcnRjICpwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFncywgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBzZXRfcnRjX3RpbWUodG0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBhcmlzY19ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBwYXJpc2NfZ2V0X3RpbWUsCisJLnNldF90aW1lID0gcGFyaXNjX3NldF90aW1lLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcGFyaXNjX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBhcmlzY19ydGMgKnA7CisKKwlwID0ga3phbGxvYyhzaXplb2YgKCpwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKKworCXAtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1wYXJpc2MiLCAmZGV2LT5kZXYsICZwYXJpc2NfcnRjX29wcywKKwkJCQkJVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocC0+cnRjKSkgeworCQlpbnQgZXJyID0gUFRSX0VSUihwLT5ydGMpOworCQlrZnJlZShwKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBhcmlzY19ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGFyaXNjX3J0YyAqcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocC0+cnRjKTsKKwlrZnJlZShwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYXJpc2NfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydGMtcGFyaXNjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBwYXJpc2NfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChwYXJpc2NfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYXJpc2NfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwYXJpc2NfcnRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYXJpc2NfcnRjX2Zpbmkodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGFyaXNjX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwYXJpc2NfcnRjX2luaXQpOworbW9kdWxlX2V4aXQocGFyaXNjX3J0Y19maW5pKTsKKworTU9EVUxFX0FVVEhPUigiS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSFAgUEEtUklTQyBSVEMgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwppbmRleCBhODI5ZjIwLi5iNzI1OTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKQEAgLTk3LDEzICs5NywxMyBAQAogCQlidWZbOF0pOwogCiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfU0NdICYgMHg3Rik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX01OXSAmIDB4N0YpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfSFJdICYgMHgzRik7IC8qIHJ0YyBociAwLTIzICovCi0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19ETV0gJiAweDNGKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfU0NdICYgMHg3Rik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX01OXSAmIDB4N0YpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfSFJdICYgMHgzRik7IC8qIHJ0YyBociAwLTIzICovCisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19ETV0gJiAweDNGKTsKIAl0bS0+dG1fd2RheSA9IGJ1ZltQQ0Y4NTYzX1JFR19EV10gJiAweDA3OwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19NT10gJiAweDFGKSAtIDE7IC8qIHJ0YyBtbiAxLTEyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19ZUl0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19NT10gJiAweDFGKSAtIDE7IC8qIHJ0YyBtbiAxLTEyICovCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19ZUl0pOwogCWlmICh0bS0+dG1feWVhciA8IDcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CS8qIGFzc3VtZSB3ZSBhcmUgaW4gMTk3MC4uLjIwNjkgKi8KIAkvKiBkZXRlY3QgdGhlIHBvbGFyaXR5IGhldXJpc3RpY2FsbHkuIHNlZSBub3RlIGFib3ZlLiAqLwpAQCAtMTM4LDE3ICsxMzgsMTcgQEAKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKIAkvKiBob3VycywgbWludXRlcyBhbmQgc2Vjb25kcyAqLwotCWJ1ZltQQ0Y4NTYzX1JFR19TQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZltQQ0Y4NTYzX1JFR19NTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZltQQ0Y4NTYzX1JFR19IUl0gPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwlidWZbUENGODU2M19SRUdfU0NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlidWZbUENGODU2M19SRUdfTU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlidWZbUENGODU2M19SRUdfSFJdID0gYmluMmJjZCh0bS0+dG1faG91cik7CiAKLQlidWZbUENGODU2M19SRUdfRE1dID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJYnVmW1BDRjg1NjNfUkVHX0RNXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCiAJLyogbW9udGgsIDEgLSAxMiAqLwotCWJ1ZltQQ0Y4NTYzX1JFR19NT10gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlidWZbUENGODU2M19SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKIAkvKiB5ZWFyIGFuZCBjZW50dXJ5ICovCi0JYnVmW1BDRjg1NjNfUkVHX1lSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCWJ1ZltQQ0Y4NTYzX1JFR19ZUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAlpZiAocGNmODU2My0+Y19wb2xhcml0eSA/ICh0bS0+dG1feWVhciA+PSAxMDApIDogKHRtLT50bV95ZWFyIDwgMTAwKSkKIAkJYnVmW1BDRjg1NjNfUkVHX01PXSB8PSBQQ0Y4NTYzX01PX0M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCmluZGV4IGQzODhjNjYuLjdkMzNjZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYwpAQCAtNzYsMTEgKzc2LDExIEBACiAJCWJ1Zls0XSAmPSAweDNmOwogCQlidWZbNV0gJj0gMHgxZjsKIAotCQlkdC0+dG1fc2VjID0gQkNEMkJJTihidWZbMV0pOwotCQlkdC0+dG1fbWluID0gQkNEMkJJTihidWZbMl0pOwotCQlkdC0+dG1faG91ciA9IEJDRDJCSU4oYnVmWzNdKTsKLQkJZHQtPnRtX21kYXkgPSBCQ0QyQklOKGJ1Zls0XSk7Ci0JCWR0LT50bV9tb24gPSBCQ0QyQklOKGJ1Zls1XSkgLSAxOworCQlkdC0+dG1fc2VjID0gYmNkMmJpbihidWZbMV0pOworCQlkdC0+dG1fbWluID0gYmNkMmJpbihidWZbMl0pOworCQlkdC0+dG1faG91ciA9IGJjZDJiaW4oYnVmWzNdKTsKKwkJZHQtPnRtX21kYXkgPSBiY2QyYmluKGJ1Zls0XSk7CisJCWR0LT50bV9tb24gPSBiY2QyYmluKGJ1Zls1XSkgLSAxOwogCX0KIAogCXJldHVybiByZXQgPT0gMiA/IDAgOiAtRUlPOwpAQCAtOTQsMTQgKzk0LDE0IEBACiAJYnVmWzBdID0gMDsKIAlidWZbMV0gPSBnZXRfY3RybChjbGllbnQpIHwgMHg4MDsKIAlidWZbMl0gPSAwOwotCWJ1ZlszXSA9IEJJTjJCQ0QoZHQtPnRtX3NlYyk7Ci0JYnVmWzRdID0gQklOMkJDRChkdC0+dG1fbWluKTsKLQlidWZbNV0gPSBCSU4yQkNEKGR0LT50bV9ob3VyKTsKKwlidWZbM10gPSBiaW4yYmNkKGR0LT50bV9zZWMpOworCWJ1Zls0XSA9IGJpbjJiY2QoZHQtPnRtX21pbik7CisJYnVmWzVdID0gYmluMmJjZChkdC0+dG1faG91cik7CiAKIAlpZiAoZGF0ZXRvbykgewogCQlsZW4gPSA4OwotCQlidWZbNl0gPSBCSU4yQkNEKGR0LT50bV9tZGF5KSB8IChkdC0+dG1feWVhciA8PCA2KTsKLQkJYnVmWzddID0gQklOMkJDRChkdC0+dG1fbW9uICsgMSkgIHwgKGR0LT50bV93ZGF5IDw8IDUpOworCQlidWZbNl0gPSBiaW4yYmNkKGR0LT50bV9tZGF5KSB8IChkdC0+dG1feWVhciA8PCA2KTsKKwkJYnVmWzddID0gYmluMmJjZChkdC0+dG1fbW9uICsgMSkgIHwgKGR0LT50bV93ZGF5IDw8IDUpOwogCX0KIAogCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjaGFyICopYnVmLCBsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYwppbmRleCAzOTU5ODViLi40MjAyOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYwpAQCAtODAsMTMgKzgwLDEzIEBACiAKIAltZW1zZXQoZHQsIDAsIHNpemVvZigqZHQpKTsKIAotCWR0LT50bV9zZWMgPSBCQ0QyQklOKGJ1ZlswXSk7IC8qIFJTRUNDTlQgKi8KLQlkdC0+dG1fbWluID0gQkNEMkJJTihidWZbMV0pOyAvKiBSTUlOQ05UICovCi0JZHQtPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZlsyXSk7IC8qIFJIUkNOVCAqLworCWR0LT50bV9zZWMgPSBiY2QyYmluKGJ1ZlswXSk7IC8qIFJTRUNDTlQgKi8KKwlkdC0+dG1fbWluID0gYmNkMmJpbihidWZbMV0pOyAvKiBSTUlOQ05UICovCisJZHQtPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZlsyXSk7IC8qIFJIUkNOVCAqLwogCi0JZHQtPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZlszXSk7IC8qIFJEQVlDTlQgKi8KLQlkdC0+dG1fbW9uID0gQkNEMkJJTihidWZbNF0pIC0gMTsgLyogUk1PTkNOVCAqLwotCWR0LT50bV95ZWFyID0gQkNEMkJJTihidWZbNV0pICsgMTAwOyAvKiBSWVJDTlQgKi8KKwlkdC0+dG1fbWRheSA9IGJjZDJiaW4oYnVmWzNdKTsgLyogUkRBWUNOVCAqLworCWR0LT50bV9tb24gPSBiY2QyYmluKGJ1Zls0XSkgLSAxOyAvKiBSTU9OQ05UICovCisJZHQtPnRtX3llYXIgPSBiY2QyYmluKGJ1Zls1XSkgKyAxMDA7IC8qIFJZUkNOVCAqLwogCiAJLyogdGhlIHJ0YyBkZXZpY2UgbWF5IGNvbnRhaW4gaWxsZWdhbCB2YWx1ZXMgb24gcG93ZXIgdXAKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIGRhdGEgc2hlZXQuIG1ha2Ugc3VyZSB0aGV5IGFyZSB2YWxpZC4KQEAgLTEwMywxMiArMTAzLDEyIEBACiAJaWYgKHllYXIgPj0gMjEwMCB8fCB5ZWFyIDwgMjAwMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSB3cml0ZV9yZWcoZGV2LCBSSFJDTlQsIEJJTjJCQ0QoZHQtPnRtX2hvdXIpKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSTUlOQ05ULCBCSU4yQkNEKGR0LT50bV9taW4pKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSU0VDQ05ULCBCSU4yQkNEKGR0LT50bV9zZWMpKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSREFZQ05ULCBCSU4yQkNEKGR0LT50bV9tZGF5KSk7Ci0JcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUk1PTkNOVCwgQklOMkJDRChkdC0+dG1fbW9uICsgMSkpOwotCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJZUkNOVCwgQklOMkJDRChkdC0+dG1feWVhciAtIDEwMCkpOworCXJldCA9IHdyaXRlX3JlZyhkZXYsIFJIUkNOVCwgYmluMmJjZChkdC0+dG1faG91cikpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJNSU5DTlQsIGJpbjJiY2QoZHQtPnRtX21pbikpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJTRUNDTlQsIGJpbjJiY2QoZHQtPnRtX3NlYykpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJEQVlDTlQsIGJpbjJiY2QoZHQtPnRtX21kYXkpKTsKKwlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSTU9OQ05ULCBiaW4yYmNkKGR0LT50bV9tb24gKyAxKSk7CisJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUllSQ05ULCBiaW4yYmNkKGR0LT50bV95ZWFyIC0gMTAwKSk7CiAJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUldLQ05ULCAxIDw8IGR0LT50bV93ZGF5KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYwppbmRleCAxYzE0ZDQ0Li5lNmVhM2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzEzLmMKQEAgLTIzNSwzMyArMjM1LDMzIEBACiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfU0VDKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9TRUMxMCkgPDwgNCk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTUlOKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NSU4xMCkgPDwgNCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfSE9VUik7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfSE9VUjEwKSA8PCA0KTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGRhdGEpOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX0RBWSk7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfREFZMTApIDw8IDQpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTU9OKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NT04xMCkgPDwgNCk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oZGF0YSkgLSAxOworCXRtLT50bV9tb24gPSBiY2QyYmluKGRhdGEpIC0gMTsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9ZRUFSKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9ZRUFSMTApIDw8IDQpOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oZGF0YSk7CiAKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX1dFRUspOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oZGF0YSk7CiAKIAlSUzVDMzEzX0NFRElTQUJMRTsKIAluZGVsYXkoNzAwKTsJCS8qIENFOkwgKi8KQEAgLTI5NCwzMSArMjk0LDMxIEBACiAJCX0KIAl9CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfU0VDLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfU0VDMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9taW4pOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NSU4sIGRhdGEgKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfTUlOMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1faG91cik7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0hPVVIsIGRhdGEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9IT1VSMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0RBWSwgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0RBWTEwLCAoZGF0YT4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01PTiwgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01PTjEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9ZRUFSLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfWUVBUjEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9XRUVLLCBkYXRhKTsKIAogCVJTNUMzMTNfQ0VESVNBQkxFOwkvKiBDRTpIICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYwppbmRleCA4Mzk0NjI2Li5kZDFlMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKQEAgLTc0LDIwICs3NCwyMCBAQAogCXR4YnVmWzNdID0gMDsJLyogZHVtbXkgKi8KIAl0eGJ1Zls0XSA9IFJTNUMzNDhfQ01EX01XKFJTNUMzNDhfUkVHX1NFQ1MpOyAvKiBjbWQsIHNlYywgLi4uICovCiAJdHhwID0gJnR4YnVmWzVdOwotCXR4cFtSUzVDMzQ4X1JFR19TRUNTXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JdHhwW1JTNUMzNDhfUkVHX01JTlNdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwl0eHBbUlM1QzM0OF9SRUdfU0VDU10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXR4cFtSUzVDMzQ4X1JFR19NSU5TXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAJaWYgKHBkYXRhLT5ydGNfMjRoKSB7Ci0JCXR4cFtSUzVDMzQ4X1JFR19IT1VSU10gPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCX0gZWxzZSB7CiAJCS8qIGhvdXIgMCBpcyBBTTEyLCBub29uIGlzIFBNMTIgKi8KLQkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IEJJTjJCQ0QoKHRtLT50bV9ob3VyICsgMTEpICUgMTIgKyAxKSB8CisJCXR4cFtSUzVDMzQ4X1JFR19IT1VSU10gPSBiaW4yYmNkKCh0bS0+dG1faG91ciArIDExKSAlIDEyICsgMSkgfAogCQkJKHRtLT50bV9ob3VyID49IDEyID8gUlM1QzM0OF9CSVRfUE0gOiAwKTsKIAl9Ci0JdHhwW1JTNUMzNDhfUkVHX1dEQVldID0gQklOMkJDRCh0bS0+dG1fd2RheSk7Ci0JdHhwW1JTNUMzNDhfUkVHX0RBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQl0eHBbUlM1QzM0OF9SRUdfTU9OVEhdID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgfAorCXR4cFtSUzVDMzQ4X1JFR19XREFZXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCXR4cFtSUzVDMzQ4X1JFR19EQVldID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJdHhwW1JTNUMzNDhfUkVHX01PTlRIXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpIHwKIAkJKHRtLT50bV95ZWFyID49IDEwMCA/IFJTNUMzNDhfQklUX1kySyA6IDApOwotCXR4cFtSUzVDMzQ4X1JFR19ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCXR4cFtSUzVDMzQ4X1JFR19ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCS8qIHdyaXRlIGluIG9uZSB0cmFuc2ZlciB0byBhdm9pZCBkYXRhIGluY29uc2lzdGVuY3kgKi8KIAlyZXQgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgdHhidWYsIHNpemVvZih0eGJ1ZiksIE5VTEwsIDApOwogCXVkZWxheSg2Mik7CS8qIFRjc3IgNjJ1cyAqLwpAQCAtMTE2LDIwICsxMTYsMjAgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX1NFQ1NdICYgUlM1QzM0OF9TRUNTX01BU0spOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX01JTlNdICYgUlM1QzM0OF9NSU5TX01BU0spOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19IT1VSU10gJiBSUzVDMzQ4X0hPVVJTX01BU0spOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX1NFQ1NdICYgUlM1QzM0OF9TRUNTX01BU0spOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX01JTlNdICYgUlM1QzM0OF9NSU5TX01BU0spOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19IT1VSU10gJiBSUzVDMzQ4X0hPVVJTX01BU0spOwogCWlmICghcGRhdGEtPnJ0Y18yNGgpIHsKIAkJdG0tPnRtX2hvdXIgJT0gMTI7CiAJCWlmIChyeGJ1ZltSUzVDMzQ4X1JFR19IT1VSU10gJiBSUzVDMzQ4X0JJVF9QTSkKIAkJCXRtLT50bV9ob3VyICs9IDEyOwogCX0KLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfV0RBWV0gJiBSUzVDMzQ4X1dEQVlfTUFTSyk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX0RBWV0gJiBSUzVDMzQ4X0RBWV9NQVNLKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfV0RBWV0gJiBSUzVDMzQ4X1dEQVlfTUFTSyk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX0RBWV0gJiBSUzVDMzQ4X0RBWV9NQVNLKTsKIAl0bS0+dG1fbW9uID0KLQkJQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19NT05USF0gJiBSUzVDMzQ4X01PTlRIX01BU0spIC0gMTsKKwkJYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19NT05USF0gJiBSUzVDMzQ4X01PTlRIX01BU0spIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19ZRUFSXSkgKworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19ZRUFSXSkgKwogCQkoKHJ4YnVmW1JTNUMzNDhfUkVHX01PTlRIXSAmIFJTNUMzNDhfQklUX1kySykgPyAxMDAgOiAwKTsKIAogCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggOGI1NjE5NS4uMmYyYzY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAl1bnNpZ25lZAlob3VyOwogCiAJaWYgKHJzNWMtPnRpbWUyNCkKLQkJcmV0dXJuIEJDRDJCSU4ocmVnICYgMHgzZik7CisJCXJldHVybiBiY2QyYmluKHJlZyAmIDB4M2YpOwogCi0JaG91ciA9IEJDRDJCSU4ocmVnICYgMHgxZik7CisJaG91ciA9IGJjZDJiaW4ocmVnICYgMHgxZik7CiAJaWYgKGhvdXIgPT0gMTIpCiAJCWhvdXIgPSAwOwogCWlmIChyZWcgJiAweDIwKQpAQCAtMTYxLDE1ICsxNjEsMTUgQEAKIHN0YXRpYyB1bnNpZ25lZCByczVjX2hyMnJlZyhzdHJ1Y3QgcnM1YzM3MiAqcnM1YywgdW5zaWduZWQgaG91cikKIHsKIAlpZiAocnM1Yy0+dGltZTI0KQotCQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIGJpbjJiY2QoaG91cik7CiAKIAlpZiAoaG91ciA+IDEyKQotCQlyZXR1cm4gMHgyMCB8IEJJTjJCQ0QoaG91ciAtIDEyKTsKKwkJcmV0dXJuIDB4MjAgfCBiaW4yYmNkKGhvdXIgLSAxMik7CiAJaWYgKGhvdXIgPT0gMTIpCi0JCXJldHVybiAweDIwIHwgQklOMkJDRCgxMik7CisJCXJldHVybiAweDIwIHwgYmluMmJjZCgxMik7CiAJaWYgKGhvdXIgPT0gMCkKLQkJcmV0dXJuIEJJTjJCQ0QoMTIpOwotCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZCgxMik7CisJcmV0dXJuIGJpbjJiY2QoaG91cik7CiB9CiAKIHN0YXRpYyBpbnQgcnM1YzM3Ml9nZXRfZGF0ZXRpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTE4MCwxOCArMTgwLDE4IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1NFQ1NdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NSU5TXSAmIDB4N2YpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfU0VDU10gJiAweDdmKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01JTlNdICYgMHg3Zik7CiAJdG0tPnRtX2hvdXIgPSByczVjX3JlZzJocihyczVjLCByczVjLT5yZWdzW1JTNUMzNzJfUkVHX0hPVVJTXSk7CiAKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19XREFZXSAmIDB4MDcpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX0RBWV0gJiAweDNmKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19XREFZXSAmIDB4MDcpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX0RBWV0gJiAweDNmKTsKIAogCS8qIHRtLT50bV9tb24gaXMgemVyby1iYXNlZCAqLwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTU9OVEhdICYgMHgxZikgLSAxOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTU9OVEhdICYgMHgxZikgLSAxOwogCiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfWUVBUl0pICsgMTAwOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTIxNiwxMyArMjE2LDEzIEBACiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJYWRkciAgID0gUlM1Q19BRERSKFJTNUMzNzJfUkVHX1NFQ1MpOwotCWJ1ZlswXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JYnVmWzFdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlidWZbMF0gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZlsxXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAJYnVmWzJdID0gcnM1Y19ocjJyZWcocnM1YywgdG0tPnRtX2hvdXIpOwotCWJ1ZlszXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOwotCWJ1Zls0XSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCWJ1Zls1XSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCWJ1Zls2XSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApOworCWJ1ZlszXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCWJ1Zls0XSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCWJ1Zls1XSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOworCWJ1Zls2XSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOwogCiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIGFkZHIsIHNpemVvZihidWYpLCBidWYpIDwgMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiB3cml0ZSBlcnJvclxuIiwgX19mdW5jX18pOwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAKIAkvKiByZXBvcnQgYWxhcm0gdGltZSAqLwogCXQtPnRpbWUudG1fc2VjID0gMDsKLQl0LT50aW1lLnRtX21pbiA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX01JTl0gJiAweDdmKTsKKwl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX01JTl0gJiAweDdmKTsKIAl0LT50aW1lLnRtX2hvdXIgPSByczVjX3JlZzJocihyczVjLCByczVjLT5yZWdzW1JTNUNfUkVHX0FMQVJNX0FfSE9VUlNdKTsKIAl0LT50aW1lLnRtX21kYXkgPSAtMTsKIAl0LT50aW1lLnRtX21vbiA9IC0xOwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJfQogCiAJLyogc2V0IGFsYXJtICovCi0JYnVmWzBdID0gQklOMkJDRCh0LT50aW1lLnRtX21pbik7CisJYnVmWzBdID0gYmluMmJjZCh0LT50aW1lLnRtX21pbik7CiAJYnVmWzFdID0gcnM1Y19ocjJyZWcocnM1YywgdC0+dGltZS50bV9ob3VyKTsKIAlidWZbMl0gPSAweDdmOwkvKiBhbnkvYWxsIGRheXMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMKaW5kZXggYTZmYTFmMi4uZGVmNGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCkBAIC0xMDQsMTIgKzEwNCwxMiBAQAogc3RhdGljIGNoYXIgczM1MzkwYV9ocjJyZWcoc3RydWN0IHMzNTM5MGEgKnMzNTM5MGEsIGludCBob3VyKQogewogCWlmIChzMzUzOTBhLT50d2VudHlmb3VyaG91cikKLQkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKGhvdXIpOwogCiAJaWYgKGhvdXIgPCAxMikKLQkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKGhvdXIpOwogCi0JcmV0dXJuIDB4NDAgfCBCSU4yQkNEKGhvdXIgLSAxMik7CisJcmV0dXJuIDB4NDAgfCBiaW4yYmNkKGhvdXIgLSAxMik7CiB9CiAKIHN0YXRpYyBpbnQgczM1MzkwYV9yZWcyaHIoc3RydWN0IHMzNTM5MGEgKnMzNTM5MGEsIGNoYXIgcmVnKQpAQCAtMTE3LDkgKzExNyw5IEBACiAJdW5zaWduZWQgaG91cjsKIAogCWlmIChzMzUzOTBhLT50d2VudHlmb3VyaG91cikKLQkJcmV0dXJuIEJDRDJCSU4ocmVnICYgMHgzZik7CisJCXJldHVybiBiY2QyYmluKHJlZyAmIDB4M2YpOwogCi0JaG91ciA9IEJDRDJCSU4ocmVnICYgMHgzZik7CisJaG91ciA9IGJjZDJiaW4ocmVnICYgMHgzZik7CiAJaWYgKHJlZyAmIDB4NDApCiAJCWhvdXIgKz0gMTI7CiAKQEAgLTEzNywxMyArMTM3LDEzIEBACiAJCXRtLT50bV9taW4sIHRtLT50bV9ob3VyLCB0bS0+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+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX0FMTUhPVVIpOwogCX0KIAogCXByX2RlYnVnKCJzZXR0aW5nIFMzQzI0MTBfUlRDQUxNIHRvICUwOHhcbiIsIGFscm1fZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCBmY2VhZDRjLi5hYWY5ZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMzI0LDIzICszMjQsMjMgQEAKIAogCQlzZWMxMjggPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSNjRDTlQpOwogCi0JCXRtLT50bV9zZWMJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpKTsKLQkJdG0tPnRtX21pbgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1JTkNOVCkpOwotCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkhSQ05UKSk7Ci0JCXRtLT50bV93ZGF5CT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpKTsKLQkJdG0tPnRtX21kYXkJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpKTsKLQkJdG0tPnRtX21vbgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1PTkNOVCkpIC0gMTsKKwkJdG0tPnRtX3NlYwk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUlNFQ0NOVCkpOworCQl0bS0+dG1fbWluCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKSk7CisJCXRtLT50bV9ob3VyCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpKTsKKwkJdG0tPnRtX3dkYXkJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCkpOworCQl0bS0+dG1fbWRheQk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkRBWUNOVCkpOworCQl0bS0+dG1fbW9uCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKSkgLSAxOwogCiAJCWlmIChydGMtPmNhcGFiaWxpdGllcyAmIFJUQ19DQVBfNF9ESUdJVF9ZRUFSKSB7CiAJCQl5ciAgPSByZWFkdyhydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOwotCQkJeXIxMDAgPSBCQ0QyQklOKHlyID4+IDgpOworCQkJeXIxMDAgPSBiY2QyYmluKHlyID4+IDgpOwogCQkJeXIgJj0gMHhmZjsKIAkJfSBlbHNlIHsKIAkJCXlyICA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7Ci0JCQl5cjEwMCA9IEJDRDJCSU4oKHlyID09IDB4OTkpID8gMHgxOSA6IDB4MjApOworCQkJeXIxMDAgPSBiY2QyYmluKCh5ciA9PSAweDk5KSA/IDB4MTkgOiAweDIwKTsKIAkJfQogCi0JCXRtLT50bV95ZWFyID0gKHlyMTAwICogMTAwICsgQkNEMkJJTih5cikpIC0gMTkwMDsKKwkJdG0tPnRtX3llYXIgPSAoeXIxMDAgKiAxMDAgKyBiY2QyYmluKHlyKSkgLSAxOTAwOwogCiAJCXNlYzIgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSNjRDTlQpOwogCQljZl9iaXQgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKSAmIFJDUjFfQ0Y7CkBAIC0zODIsMjAgKzM4MiwyMCBAQAogCXRtcCAmPSB+UkNSMl9TVEFSVDsKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCAgcnRjLT5yZWdiYXNlICsgUlNFQ0NOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksICBydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgcnRjLT5yZWdiYXNlICsgUkRBWUNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSwgIHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCAgcnRjLT5yZWdiYXNlICsgUk1JTkNOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV93ZGF5KSwgcnRjLT5yZWdiYXNlICsgUldLQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgcnRjLT5yZWdiYXNlICsgUk1PTkNOVCk7CiAKIAlpZiAocnRjLT5jYXBhYmlsaXRpZXMgJiBSVENfQ0FQXzRfRElHSVRfWUVBUikgewotCQl5ZWFyID0gKEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApIDw8IDgpIHwKLQkJCUJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCQl5ZWFyID0gKGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApIDw8IDgpIHwKKwkJCWJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCQl3cml0ZXcoeWVhciwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKIAl9IGVsc2UgewogCQl5ZWFyID0gdG0tPnRtX3llYXIgJSAxMDA7Ci0JCXdyaXRlYihCSU4yQkNEKHllYXIpLCBydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOworCQl3cml0ZWIoYmluMmJjZCh5ZWFyKSwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKIAl9CiAKIAkvKiBTdGFydCBSVEMgKi8KQEAgLTQxNyw3ICs0MTcsNyBAQAogCWJ5dGUgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIAlpZiAoYnl0ZSAmIEFSX0VOQikgewogCQlieXRlICY9IH5BUl9FTkI7CS8qIHN0cmlwIHRoZSBlbmFibGUgYml0ICovCi0JCXZhbHVlID0gQkNEMkJJTihieXRlKTsKKwkJdmFsdWUgPSBiY2QyYmluKGJ5dGUpOwogCX0KIAogCXJldHVybiB2YWx1ZTsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWlmICh2YWx1ZSA8IDApCiAJCXdyaXRlYigwLCBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIAllbHNlCi0JCXdyaXRlYihCSU4yQkNEKHZhbHVlKSB8IEFSX0VOQiwgIHJ0Yy0+cmVnYmFzZSArIHJlZ19vZmYpOworCQl3cml0ZWIoYmluMmJjZCh2YWx1ZSkgfCBBUl9FTkIsICBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIH0KIAogc3RhdGljIGludCBzaF9ydGNfY2hlY2tfYWxhcm0oc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTU2OCw3ICs1NjgsNyBAQAogCXN0cnVjdCBzaF9ydGMgKnJ0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgdG1wOwotCWludCByZXQgPSAtRU5PRU5UOworCWludCByZXQ7CiAKIAlydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFydGMpKQpAQCAtNTc3LDI2ICs1NzcsMzMgQEAKIAlzcGluX2xvY2tfaW5pdCgmcnRjLT5sb2NrKTsKIAogCS8qIGdldCBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCi0JcnRjLT5wZXJpb2RpY19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICh1bmxpa2VseShydGMtPnBlcmlvZGljX2lycSA8IDApKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBwZXJpb2RcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQorCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcmV0OwogCi0JcnRjLT5jYXJyeV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmICh1bmxpa2VseShydGMtPmNhcnJ5X2lycSA8IDApKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBjYXJyeVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CisJcnRjLT5jYXJyeV9pcnEgPSByZXQ7CiAKLQlydGMtPmFsYXJtX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7Ci0JaWYgKHVubGlrZWx5KHJ0Yy0+YWxhcm1faXJxIDwgMCkpIHsKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlyZXQgPSAtRU5PRU5UOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGFsYXJtXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KKwlydGMtPmFsYXJtX2lycSA9IHJldDsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElPIHJlc291cmNlXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jIGIvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKaW5kZXggOWE3ZTkyMC4uZjRjZDQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKQEAgLTgyLDE0ICs4MiwxNCBAQAogCWZsYWdzID0gcmVhZGIocGRhdGEtPmlvYWRkciArIFJUQ19GTEFHUyk7CiAJd3JpdGViKGZsYWdzIHwgUlRDX1dSSVRFLCBwZGF0YS0+aW9hZGRyICsgUlRDX0ZMQUdTKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOwotCXdyaXRlYihCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOworCXdyaXRlYihiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOwogCiAJd3JpdGViKGZsYWdzICYgflJUQ19XUklURSwgcGRhdGEtPmlvYWRkciArIFJUQ19GTEFHUyk7CiAJcmV0dXJuIDA7CkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogCXllYXIgPSByZWFkYihpb2FkZHIgKyBSVENfWUVBUik7CiAJY2VudHVyeSA9IHJlYWRiKGlvYWRkciArIFJUQ19DRU5UVVJZKTsKIAl3cml0ZWIoZmxhZ3MgJiB+UlRDX1JFQUQsIGlvYWRkciArIFJUQ19GTEFHUyk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oc2Vjb25kKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihtaW51dGUpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oZGF5KTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4od2Vlayk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4obW9udGgpIC0gMTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCXRtLT50bV9taW4gPSBiY2QyYmluKG1pbnV0ZSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihtb250aCkgLSAxOwogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHllYXIpICsgQkNEMkJJTihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHllYXIpICsgYmNkMmJpbihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJyZXRyaWV2ZWQgZGF0ZS90aW1lIGlzIG5vdCB2YWxpZC5cbiIpOwpAQCAtMTQ4LDE2ICsxNDgsMTYgQEAKIAl3cml0ZWIoZmxhZ3MgfCBSVENfV1JJVEUsIGlvYWRkciArIFJUQ19GTEFHUyk7CiAKIAl3cml0ZWIocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9tZGF5KSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWRheSksCiAJICAgICAgIGlvYWRkciArIFJUQ19EQVRFX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1faG91ciksCiAJICAgICAgIGlvYWRkciArIFJUQ19IT1VSU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21pbiA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9taW4pLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9taW4pLAogCSAgICAgICBpb2FkZHIgKyBSVENfTUlOVVRFU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX3NlYyA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9zZWMpLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpLAogCSAgICAgICBpb2FkZHIgKyBSVENfU0VDT05EU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5pcnFlbiA/IFJUQ19JTlRTX0FJRSA6IDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKIAlyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC0yODAsNyArMjgwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gUlRDX09GRlNFVCwKIAkucmVhZCA9IHN0azE3dGE4X252cmFtX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCmluZGV4IDEwMDI1ZDguLjE0ZDRmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCkBAIC05MiwxOSArOTIsMTkgQEAKIAogCS8qIC4uLmFuZCB0aGVuIHJlYWQgY29uc3RhbnQgdmFsdWVzLiAqLwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUyk7Ci0JZHQtPnRtX3NlYwk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fc2VjCT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfTUlOVVRFUyk7Ci0JZHQtPnRtX21pbgk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fbWluCT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfSE9VUlMpOwotCWR0LT50bV9ob3VyCT0gQkNEMkJJTih0bXApOworCWR0LT50bV9ob3VyCT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEhfREFZKTsKLQlkdC0+dG1fbWRheQk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fbWRheQk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRIKTsKLQlkdC0+dG1fbW9uICAgID0gQkNEMkJJTih0bXApIC0gMTsKKwlkdC0+dG1fbW9uICAgID0gYmNkMmJpbih0bXApIC0gMTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1dFRUtfREFZKTsKLQlkdC0+dG1fd2RheQk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fd2RheQk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1lFQVIpOwotCWR0LT50bV95ZWFyID0gQkNEMkJJTih0bXApKzEwMDsKKwlkdC0+dG1feWVhciA9IGJjZDJiaW4odG1wKSsxMDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiXG4lcyA6IFJlYWQgUlRDIHZhbHVlc1xuIixfX2Z1bmNfXyk7CkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogI2VuZGlmCiAKIAkvKiBXcml0ZSBhbGwgdGhlIHZhbHVlcyB0byByYW0uLi4gKi8KLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMsIAlCSU4yQkNEKGR0LT50bV9zZWMpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01JTlVURVMsIAlCSU4yQkNEKGR0LT50bV9taW4pKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX0hPVVJTLCAJQklOMkJDRChkdC0+dG1faG91cikpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEhfREFZLAlCSU4yQkNEKGR0LT50bV9tZGF5KSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USCwgICAgIEJJTjJCQ0QoZHQtPnRtX21vbiArIDEpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1dFRUtfREFZLCAJQklOMkJDRChkdC0+dG1fd2RheSkpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfWUVBUiwgCUJJTjJCQ0QoZHQtPnRtX3llYXIgJSAxMDApKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMsIAliaW4yYmNkKGR0LT50bV9zZWMpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01JTlVURVMsIAliaW4yYmNkKGR0LT50bV9taW4pKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX0hPVVJTLCAJYmluMmJjZChkdC0+dG1faG91cikpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEhfREFZLAliaW4yYmNkKGR0LT50bV9tZGF5KSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USCwgICAgIGJpbjJiY2QoZHQtPnRtX21vbiArIDEpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1dFRUtfREFZLCAJYmluMmJjZChkdC0+dG1fd2RheSkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfWUVBUiwgCWJpbjJiY2QoZHQtPnRtX3llYXIgJSAxMDApKTsKIAogCS8qIC4uLmFuZCBzZXQgdGhlIGNsb2NrLiAqLwogCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfQ01EX1JBTTJDTE9DSywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKaW5kZXggODg0YjYzNS4uODM0ZGNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKIAlhaWVfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoYWllX2lycSA8IDAgfHwgYWllX2lycSA+PSBOUl9JUlFTKSB7CisJaWYgKGFpZV9pcnEgPCAwIHx8IGFpZV9pcnEgPj0gbnJfaXJxcykgewogCQlyZXR2YWwgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2RldmljZV91bnJlZ2lzdGVyOwogCX0KQEAgLTM3MSw3ICszNzEsNyBAQAogCQlnb3RvIGVycl9kZXZpY2VfdW5yZWdpc3RlcjsKIAogCXBpZV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmIChwaWVfaXJxIDwgMCB8fCBwaWVfaXJxID49IE5SX0lSUVMpCisJaWYgKHBpZV9pcnEgPCAwIHx8IHBpZV9pcnEgPj0gbnJfaXJxcykKIAkJZ290byBlcnJfZnJlZV9pcnE7CiAKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShwaWVfaXJxLCBydGNsb25nMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCmluZGV4IDdkY2ZiYTEuLjMxMGMxMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykKIAkJCWJ1ZltpXSAmPSAweDdGOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW0NDUl9TRUNdKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihidWZbQ0NSX01JTl0pOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbQ0NSX0hPVVJdICYgMHgzRik7IC8qIGhyIGlzIDAtMjMgKi8KLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oYnVmW0NDUl9NREFZXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW0NDUl9NT05USF0pIC0gMTsgLyogbW9uIGlzIDAtMTEgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW0NDUl9ZRUFSXSkKLQkJCSsgKEJDRDJCSU4oYnVmW0NDUl9ZMktdKSAqIDEwMCkgLSAxOTAwOworCXRtLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltDQ1JfU0VDXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW0NDUl9NSU5dKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW0NDUl9IT1VSXSAmIDB4M0YpOyAvKiBociBpcyAwLTIzICovCisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltDQ1JfTURBWV0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltDQ1JfTU9OVEhdKSAtIDE7IC8qIG1vbiBpcyAwLTExICovCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltDQ1JfWUVBUl0pCisJCQkrIChiY2QyYmluKGJ1ZltDQ1JfWTJLXSkgKiAxMDApIC0gMTkwMDsKIAl0bS0+dG1fd2RheSA9IGJ1ZltDQ1JfV0RBWV07CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgpAQCAtMTc0LDExICsxNzQsMTEgQEAKIAkJX19mdW5jX18sCiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyKTsKIAotCWJ1ZltDQ1JfU0VDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JYnVmW0NDUl9NSU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlidWZbQ0NSX1NFQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZltDQ1JfTUlOXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAKIAkvKiBzZXQgaG91ciBhbmQgMjRociBiaXQgKi8KLQlidWZbQ0NSX0hPVVJdID0gQklOMkJDRCh0bS0+dG1faG91cikgfCBYMTIwNV9IUl9NSUw7CisJYnVmW0NDUl9IT1VSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpIHwgWDEyMDVfSFJfTUlMOwogCiAJLyogc2hvdWxkIHdlIGFsc28gc2V0IHRoZSBkYXRlPyAqLwogCWlmIChkYXRldG9vKSB7CkBAIC0xODcsMTUgKzE4NywxNSBAQAogCQkJX19mdW5jX18sCiAJCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAotCQlidWZbQ0NSX01EQVldID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJCWJ1ZltDQ1JfTURBWV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAogCQkvKiBtb250aCwgMSAtIDEyICovCi0JCWJ1ZltDQ1JfTU9OVEhdID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJCWJ1ZltDQ1JfTU9OVEhdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKIAkJLyogeWVhciwgc2luY2UgdGhlIHJ0YyBlcG9jaCovCi0JCWJ1ZltDQ1JfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwkJYnVmW0NDUl9ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCQlidWZbQ0NSX1dEQVldID0gdG0tPnRtX3dkYXkgJiAweDA3OwotCQlidWZbQ0NSX1kyS10gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC8gMTAwKTsKKwkJYnVmW0NDUl9ZMktdID0gYmluMmJjZCh0bS0+dG1feWVhciAvIDEwMCk7CiAJfQogCiAJLyogSWYgd3JpdGluZyBhbGFybSByZWdpc3RlcnMsIHNldCBjb21wYXJlIGJpdHMgb24gcmVnaXN0ZXJzIDAtNCAqLwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCXZhbHVlID0gQkNEMkJJTihyZWcgJiBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5tYXNrKTsKKwkJdmFsdWUgPSBiY2QyYmluKHJlZyAmIHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1hc2spOwogCiAJCWlmICh2YWx1ZSA+IHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1heCB8fAogCQkJdmFsdWUgPCBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5taW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCA4NWZjYjQzLi43ODQ0NDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC01NDQsNyArNTQ0LDcgQEAKIAl9CiAJY3FyLT5yZXRyaWVzID0gRElBR19NQVhfUkVUUklFUzsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7Ci0JaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQorCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkpCiAJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKIAljcXItPnN0YXJ0ZGV2ID0gbWVtZGV2OwogCWNxci0+bWVtZGV2ID0gbWVtZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDQ5ZjlkMjIuLjJlNjBkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTE3MDAsNyArMTcwMCw3IEBACiAJCQlyZWNpZCsrOwogCQl9CiAJfQotCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OwogCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCmluZGV4IDkzZDliNjQuLjdkNDQyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCXJlY2lkKys7CiAJCX0KIAl9Ci0JaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQorCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkpCiAJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKIAljcXItPnN0YXJ0ZGV2ID0gbWVtZGV2OwogCWNxci0+bWVtZGV2ID0gbWVtZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggOGExMzA3MS4uOWNlNGM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC01ODMsNiArNTgzLDggQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgICAgIGlzc3VlZDsgICAgICAgICAvKiByZXF1ZXN0IHNlbnQgdGltZSAoU1RDSykgKi8KIAlzdHJ1Y3QgemZjcF91bml0ICAgICAgICp1bml0OwogCXZvaWQJCQkoKmhhbmRsZXIpKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CisJdTE2CQkJcWRpb19vdXRiX3VzYWdlOy8qIHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlICovCisJdTE2CQkJcWRpb19pbmJfdXNhZ2U7CS8qIHVzYWdlIG9mIGluYm91bmQgcXVldWUgKi8KIH07CiAKIC8qIGRyaXZlciBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCA3MzkzNTZhLi41YWUxZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtNzc3LDYgKzc3OCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwogCisJcmVxLT5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmcmVxX3EtPmNvdW50KTsKIAlyZXEtPmlzc3VlZCA9IGdldF9jbG9jaygpOwogCWlmICh6ZmNwX3FkaW9fc2VuZChyZXEpKSB7CiAJCS8qIFF1ZXVlcyBhcmUgZG93bi4uLi4uICovCkBAIC0yMDgyLDYgKzIwODQsMzYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bml0LT5sYXRlbmNpZXMubG9jaywgZmxhZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UKK3N0YXRpYyB2b2lkIHpmY3BfZnNmX3RyYWNlX2xhdGVuY3koc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKKwlzdHJ1Y3QgZnNmX3F1YWxfbGF0ZW5jeV9pbmZvICpsYXRfaW5mOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZnNmX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gc2NzaV9jbW5kLT5yZXF1ZXN0OworCXN0cnVjdCB6ZmNwX2Jsa19kcnZfZGF0YSB0cmFjZTsKKwlpbnQgdGlja3MgPSBmc2ZfcmVxLT5hZGFwdGVyLT50aW1lcl90aWNrczsKKworCXRyYWNlLmZsYWdzID0gMDsKKwl0cmFjZS5tYWdpYyA9IFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDOworCWlmIChmc2ZfcmVxLT5hZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTUVBU1VSRU1FTlRfREFUQSkgeworCQl0cmFjZS5mbGFncyB8PSBaRkNQX0JMS19MQVRfVkFMSUQ7CisJCWxhdF9pbmYgPSAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwubGF0ZW5jeV9pbmZvOworCQl0cmFjZS5jaGFubmVsX2xhdCA9IGxhdF9pbmYtPmNoYW5uZWxfbGF0ICogdGlja3M7CisJCXRyYWNlLmZhYnJpY19sYXQgPSBsYXRfaW5mLT5mYWJyaWNfbGF0ICogdGlja3M7CisJfQorCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpCisJCXRyYWNlLmZsYWdzIHw9IFpGQ1BfQkxLX1JFUV9FUlJPUjsKKwl0cmFjZS5pbmJfdXNhZ2UgPSBmc2ZfcmVxLT5xZGlvX2luYl91c2FnZTsKKwl0cmFjZS5vdXRiX3VzYWdlID0gZnNmX3JlcS0+cWRpb19vdXRiX3VzYWdlOworCisJYmxrX2FkZF9kcml2ZXJfZGF0YShyZXEtPnEsIHJlcSwgJnRyYWNlLCBzaXplb2YodHJhY2UpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9mc2ZfdHJhY2VfbGF0ZW5jeShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFza19oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCA9IHJlcS0+ZGF0YTsKQEAgLTIxMTQsNiArMjE0Niw4IEBACiAJaWYgKHJlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpCiAJCXpmY3BfZnNmX3JlcV9sYXRlbmN5KHJlcSk7CiAKKwl6ZmNwX2ZzZl90cmFjZV9sYXRlbmN5KHJlcSk7CisKIAlpZiAodW5saWtlbHkoZmNwX3JzcF9pdS0+dmFsaWRpdHkuYml0cy5mY3BfcnNwX2xlbl92YWxpZCkpIHsKIAkJaWYgKGZjcF9yc3BfaW5mb1szXSA9PSBSU1BfQ09ERV9HT09EKQogCQkJc2V0X2hvc3RfYnl0ZShzY3BudCwgRElEX09LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCmluZGV4IGZkM2E4ODcuLmZhMmEzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaApAQCAtNDM5LDQgKzQzOSwxNiBAQAogCXU4IGxvZ1tGU0ZfUVRDQl9MT0dfU0laRV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHpmY3BfYmxrX2Rydl9kYXRhIHsKKyNkZWZpbmUgWkZDUF9CTEtfRFJWX0RBVEFfTUFHSUMJCQkweDEKKwl1MzIgbWFnaWM7CisjZGVmaW5lIFpGQ1BfQkxLX0xBVF9WQUxJRAkJCTB4MQorI2RlZmluZSBaRkNQX0JMS19SRVFfRVJST1IJCQkweDIKKwl1MTYgZmxhZ3M7CisJdTggaW5iX3VzYWdlOworCXU4IG91dGJfdXNhZ2U7CisJdTY0IGNoYW5uZWxfbGF0OworCXU2NCBmYWJyaWNfbGF0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKICNlbmRpZgkJCQkvKiBGU0ZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAzZTA1MDgwLi42NjQ3NTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMTE1LDYgKzExNSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJZnNmX3JlcS0+c2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OworCWZzZl9yZXEtPnFkaW9faW5iX3VzYWdlID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlc3BfcS5jb3VudCk7CiAJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwppbmRleCBiNWE4NjhkLi4xZTU0NzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogI2Vsc2UKICNkZWZpbmUgSVJRX01JTiA5CiAjaWYgZGVmaW5lZChfX1BQQykKLSNkZWZpbmUgSVJRX01BWCAoTlJfSVJRUy0xKQorI2RlZmluZSBJUlFfTUFYIChucl9pcnFzLTEpCiAjZWxzZQogI2RlZmluZSBJUlFfTUFYIDEyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwppbmRleCA2OWY4MzQ2Li41ODc3ZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCkBAIC0xODksNyArMTg5LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfcmVhZCIsCiAJCS5tb2RlID0gU19JUlVTUiAsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS5yZWFkID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX3JlYWQsCkBAIC0xOTksNyArMTk4LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfd3JpdGUiLAogCQkubW9kZSA9IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS53cml0ZSA9IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV93cml0ZSwKQEAgLTIwOSw3ICsyMDcsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV9jbGVhciIsCiAJCS5tb2RlID0gU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEsCiAJLndyaXRlID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX2NsZWFyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDk3ODVkNzMuLjQwMDNkZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTEzNjQsNyArMTM2NCw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RieXRlX3RhYmxlW109ewogIkRJRF9PSyIsICJESURfTk9fQ09OTkVDVCIsICJESURfQlVTX0JVU1kiLCAiRElEX1RJTUVfT1VUIiwgIkRJRF9CQURfVEFSR0VUIiwKICJESURfQUJPUlQiLCAiRElEX1BBUklUWSIsICJESURfRVJST1IiLCAiRElEX1JFU0VUIiwgIkRJRF9CQURfSU5UUiIsCi0iRElEX1BBU1NUSFJPVUdIIiwgIkRJRF9TT0ZUX0VSUk9SIiwgIkRJRF9JTU1fUkVUUlkiLCAiRElEX1JFUVVFVUUifTsKKyJESURfUEFTU1RIUk9VR0giLCAiRElEX1NPRlRfRVJST1IiLCAiRElEX0lNTV9SRVRSWSIsICJESURfUkVRVUVVRSIsCisiRElEX1RSQU5TUE9SVF9ESVNSVVBURUQiLCAiRElEX1RSQU5TUE9SVF9GQUlMRkFTVCIgfTsKICNkZWZpbmUgTlVNX0hPU1RCWVRFX1NUUlMgQVJSQVlfU0laRShob3N0Ynl0ZV90YWJsZSkKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkcml2ZXJieXRlX3RhYmxlW109ewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IDcwOGU0NzUuLmUzNTZiNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTEwOSw3ICsxMDksOCBAQAogCX0KIAogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUIHwgUkVRX05PTUVSR0U7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlycS0+cmV0cmllcyA9IEFMVUFfRkFJTE9WRVJfUkVUUklFUzsKIAlycS0+dGltZW91dCA9IEFMVUFfRkFJTE9WRVJfVElNRU9VVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwppbmRleCA4ZjQ1NTcwLi4wZTU3MmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwpAQCAtMzAzLDcgKzMwMyw4IEBACiAKIAlycS0+Y21kWzRdID0gbGVuOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcnEtPnRpbWVvdXQgPSBDTEFSSUlPTl9USU1FT1VUOwogCXJxLT5yZXRyaWVzID0gQ0xBUklJT05fUkVUUklFUzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKaW5kZXggNWU5M2M4OC4uOWFlYzRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAkJcmV0dXJuIFNDU0lfREhfUkVTX1RFTVBfVU5BVkFJTDsKIAogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJICBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJlcS0+Y21kX2xlbiA9IENPTU1BTkRfU0laRShURVNUX1VOSVRfUkVBRFkpOwogCXJlcS0+Y21kWzBdID0gVEVTVF9VTklUX1JFQURZOwogCXJlcS0+dGltZW91dCA9IEhQX1NXX1RJTUVPVVQ7CkBAIC0yMDQsNyArMjA1LDggQEAKIAkJcmV0dXJuIFNDU0lfREhfUkVTX1RFTVBfVU5BVkFJTDsKIAogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJICBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJlcS0+Y21kX2xlbiA9IENPTU1BTkRfU0laRShTVEFSVF9TVE9QKTsKIAlyZXEtPmNtZFswXSA9IFNUQVJUX1NUT1A7CiAJcmVxLT5jbWRbNF0gPSAxOwkvKiBTdGFydCBzcGluIGN5Y2xlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggNTBiZjk1Zi4uYTQzYzNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMjI2LDcgKzIyNiw4IEBACiAJfQogCiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1QgfCBSRVFfTk9NRVJHRTsKKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJxLT5yZXRyaWVzID0gUkRBQ19SRVRSSUVTOwogCXJxLT50aW1lb3V0ID0gUkRBQ19USU1FT1VUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKaW5kZXggNGUwYjdjOC4uNzY1MDcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwpAQCAtMjAzMSw4ICsyMDMxLDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlCiAJCWlibXZmY19pc3N1ZV9mY19ob3N0X2xpcChzaG9zdCk7Ci0KLQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKIAlMRUFWRTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwppbmRleCA3NDBiYWQ0Li5hZmM5NmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtMzQzLDYgKzM0MywxMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBpZGVzY3NpX3Byb2NbXSA9IHsKKwl7ICJjYXBhY2l0eSIsIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAorCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Cit9OworCiAjZGVmaW5lIGlkZV9zY3NpX2RldnNldF9nZXQobmFtZSwgZmllbGQpIFwKIHN0YXRpYyBpbnQgZ2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUpIFwKIHsgXApAQCAtMzc4LDYgKzM4MywxNiBAQAogCUlERV9QUk9DX0RFVlNFVCh0cmFuc2Zvcm0sIDAsCSAzKSwKIAl7IDAgfSwKIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfc2NzaV9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVzY3NpX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfc2NzaV9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVzY3NpX3NldHRpbmdzOworfQogI2VuZGlmCiAKIC8qCkBAIC00MTksMTMgKzQzNCw2IEBACiAKIHN0YXRpYyBpbnQgaWRlX3Njc2lfcHJvYmUoaWRlX2RyaXZlX3QgKik7CiAKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLXN0YXRpYyBpZGVfcHJvY19lbnRyeV90IGlkZXNjc2lfcHJvY1tdID0gewotCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5LCBOVUxMIH0sCi0JeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KLX07Ci0jZW5kaWYKLQogc3RhdGljIGlkZV9kcml2ZXJfdCBpZGVzY3NpX2RyaXZlciA9IHsKIAkuZ2VuX2RyaXZlciA9IHsKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtNDM5LDggKzQ0Nyw4IEBACiAJLmVuZF9yZXF1ZXN0CQk9IGlkZXNjc2lfZW5kX3JlcXVlc3QsCiAJLmVycm9yICAgICAgICAgICAgICAgICAgPSBpZGVzY3NpX2F0YXBpX2Vycm9yLAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVzY3NpX3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZXNjc2lfc2V0dGluZ3MsCisJLnByb2NfZW50cmllcwkJPSBpZGVfc2NzaV9wcm9jX2VudHJpZXMsCisJLnByb2NfZGV2c2V0cwkJPSBpZGVfc2NzaV9wcm9jX2RldnNldHMsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCBkMzBlYjdiLi4wOTg3MzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC03ODU5LDcgKzc4NTksNiBAQAogCS5yZW1vdmUgPSBpcHJfcmVtb3ZlLAogCS5zaHV0ZG93biA9IGlwcl9zaHV0ZG93biwKIAkuZXJyX2hhbmRsZXIgPSAmaXByX2Vycl9oYW5kbGVyLAotCS5keW5pZHMudXNlX2RyaXZlcl9kYXRhID0gMQogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggMmEyZjAwOS4uZWQ2YzU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtNTIzLDIyICs1MjMsMjAgQEAKIH0KIAogLyoqCi0gKiBpc2NzaV9kYXRhX3JzcCAtIFNDU0kgRGF0YS1JbiBSZXNwb25zZSBwcm9jZXNzaW5nCisgKiBpc2NzaV9kYXRhX2luIC0gU0NTSSBEYXRhLUluIFJlc3BvbnNlIHByb2Nlc3NpbmcKICAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCiAgKiBAdGFzazogc2NzaSBjb21tYW5kIHRhc2sKICAqKi8KIHN0YXRpYyBpbnQKLWlzY3NpX2RhdGFfcnNwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK2lzY3NpX2RhdGFfaW4oc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQogewogCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV9kYXRhX3JzcCAqcmhkciA9IChzdHJ1Y3QgaXNjc2lfZGF0YV9yc3AgKil0Y3BfY29ubi0+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+bGF0X2RhdGEpOworCQluZGxwLT5sYXRfZGF0YSA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oCmluZGV4IDk2YzQ0NTMuLjkwODI4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmgKQEAgLTExMiw0ICsxMTIsOCBAQAogdm9pZCBscGZjX3Zwb3J0X3NldF9zdGF0ZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCiAJCQkgIGVudW0gZmNfdnBvcnRfc3RhdGUgbmV3X3N0YXRlKTsKIAordm9pZCBscGZjX3Zwb3J0X3Jlc2V0X3N0YXRfZGF0YShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK3ZvaWQgbHBmY19hbGxvY19idWNrZXQoc3RydWN0IGxwZmNfdnBvcnQgKik7Cit2b2lkIGxwZmNfZnJlZV9idWNrZXQoc3RydWN0IGxwZmNfdnBvcnQgKik7CisKICNlbmRpZiAvKiBIX0xQRkNfVlBPUlQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDBkZGZlNzEuLmVkNzMxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMTAwNiw3ICsxMDA2LDYgQEAKIAl9CiAKIAlxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjcG9ydCk7Ci0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCA4M2M4MTkyLi5mMjVmNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0yMTA4LDcgKzIxMDgsNyBAQAogCiBzdHJ1Y3QgcWxhX21zaXhfZW50cnkgewogCWludCBoYXZlX2lycTsKLQl1aW50MTZfdCBtc2l4X3ZlY3RvcjsKKwl1aW50MzJfdCBtc2l4X3ZlY3RvcjsKIAl1aW50MTZfdCBtc2l4X2VudHJ5OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGZjNGJmYTcuLmE3NmVmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTExODcsNyArMTE4NywxMiBAQAogCQkgICAgY3AtPnNlcmlhbF9udW1iZXIsIGNvbXBfc3RhdHVzLAogCQkgICAgYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpKSk7CiAKLQkJY3AtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJLyoKKwkJICogV2UgYXJlIGdvaW5nIHRvIGhhdmUgdGhlIGZjIGNsYXNzIGJsb2NrIHRoZSBycG9ydAorCQkgKiB3aGlsZSB3ZSB0cnkgdG8gcmVjb3ZlciBzbyBpbnN0cnVjdCB0aGUgbWlkIGxheWVyCisJCSAqIHRvIHJlcXVldWUgdW50aWwgdGhlIGNsYXNzIGRlY2lkZXMgaG93IHRvIGhhbmRsZSB0aGlzLgorCQkgKi8KKwkJY3AtPnJlc3VsdCA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19PTkxJTkUpCiAJCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QoZmNwb3J0LT5oYSwgZmNwb3J0LCAxLCAxKTsKIAkJYnJlYWs7CkBAIC0xMjE0LDcgKzEyMTksMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENTX1RJTUVPVVQ6Ci0JCWNwLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCS8qCisJCSAqIFdlIGFyZSBnb2luZyB0byBoYXZlIHRoZSBmYyBjbGFzcyBibG9jayB0aGUgcnBvcnQKKwkJICogd2hpbGUgd2UgdHJ5IHRvIHJlY292ZXIgc28gaW5zdHJ1Y3QgdGhlIG1pZCBsYXllcgorCQkgKiB0byByZXF1ZXVlIHVudGlsIHRoZSBjbGFzcyBkZWNpZGVzIGhvdyB0byBoYW5kbGUgdGhpcy4KKwkJICovCisJCWNwLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAogCQlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkgewogCQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggMzQzMzQ0MS4uMjFkZDE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTM5NCwxMCArMzk0LDggQEAKIAl9CiAKIAkvKiBDbG9zZSB3aW5kb3cgb24gZmNwb3J0L3Jwb3J0IHN0YXRlLXRyYW5zaXRpb25pbmcuICovCi0JaWYgKGZjcG9ydC0+ZHJwb3J0KSB7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKLQkJZ290byBxY19mYWlsX2NvbW1hbmQ7Ci0JfQorCWlmIChmY3BvcnQtPmRycG9ydCkKKwkJZ290byBxY190YXJnZXRfYnVzeTsKIAogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfREVBRCB8fApAQCAtNDA1LDcgKzQwMyw3IEBACiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxY19mYWlsX2NvbW1hbmQ7CiAJCX0KLQkJZ290byBxY19ob3N0X2J1c3k7CisJCWdvdG8gcWNfdGFyZ2V0X2J1c3k7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtNDI4LDEwICs0MjYsMTEgQEAKIAogcWNfaG9zdF9idXN5X2xvY2s6CiAJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotcWNfaG9zdF9idXN5OgogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCitxY190YXJnZXRfYnVzeToKKwlyZXR1cm4gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOworCiBxY19mYWlsX2NvbW1hbmQ6CiAJZG9uZShjbWQpOwogCkBAIC00NjEsMTAgKzQ2MCw4IEBACiAJfQogCiAJLyogQ2xvc2Ugd2luZG93IG9uIGZjcG9ydC9ycG9ydCBzdGF0ZS10cmFuc2l0aW9uaW5nLiAqLwotCWlmIChmY3BvcnQtPmRycG9ydCkgewotCQljbWQtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7Ci0JCWdvdG8gcWMyNF9mYWlsX2NvbW1hbmQ7Ci0JfQorCWlmIChmY3BvcnQtPmRycG9ydCkKKwkJZ290byBxYzI0X3RhcmdldF9idXN5OwogCiAJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfT05MSU5FKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEIHx8CkBAIC00NzIsNyArNDY5LDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwogCQl9Ci0JCWdvdG8gcWMyNF9ob3N0X2J1c3k7CisJCWdvdG8gcWMyNF90YXJnZXRfYnVzeTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC00OTUsMTAgKzQ5MiwxMSBAQAogCiBxYzI0X2hvc3RfYnVzeV9sb2NrOgogCXNwaW5fbG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLXFjMjRfaG9zdF9idXN5OgogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCitxYzI0X3RhcmdldF9idXN5OgorCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CisKIHFjMjRfZmFpbF9jb21tYW5kOgogCWRvbmUoY21kKTsKIApAQCAtMTU2OCw5ICsxNTY2LDggQEAKIAkJCWdvdG8gcHJvYmVfb3V0OwogCX0KIAotCWlmIChwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShwZGV2KSkKLQkJaWYgKHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldikpCi0JCQlnb3RvIHByb2JlX291dDsKKwkvKiBUaGlzIG1heSBmYWlsIGJ1dCB0aGF0J3Mgb2sgKi8KKwlwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOwogCiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZihzY3NpX3FsYV9ob3N0X3QpKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKaW5kZXggYTkxYTU3Yy4uNzk5MTIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCQkgICAgICBoYS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmNoYW5uZWwsCiAJCQkgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pKTsKIAotCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAogCQkvKgogCQkgKiBNYXJrIGRldmljZSBtaXNzaW5nIHNvIHRoYXQgd2Ugd29uJ3QgY29udGludWUgdG8gc2VuZApAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmZGRiX2VudHJ5LT5zdGF0ZSkgPT0gRERCX1NUQVRFX09OTElORSkKIAkJCXFsYTR4eHhfbWFya19kZXZpY2VfbWlzc2luZyhoYSwgZGRiX2VudHJ5KTsKIAotCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAKIAljYXNlIFNDU19RVUVVRV9GVUxMOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCBkZTgyNzlhLi5kYjdlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCSAgICAgIGhhLT5ob3N0X25vLCBkZGJfZW50cnktPmJ1cywgZGRiX2VudHJ5LT50YXJnZXQsCiAJCSAgICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4KSk7CiAJaXNjc2lfYmxvY2tfc2Vzc2lvbihkZGJfZW50cnktPnNlc3MpOwotCWlzY3NpX2Nvbm5fZXJyb3IoZGRiX2VudHJ5LT5jb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCWlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoZGRiX2VudHJ5LT5jb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogfQogCiBzdGF0aWMgc3RydWN0IHNyYiogcWxhNHh4eF9nZXRfbmV3X3NyYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKIAkJfQotCQlnb3RvIHFjX2hvc3RfYnVzeTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IDJhYzNjYjIuLmY4Yjc5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtNzU0LDggKzc1NCwxMiBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWlmIChydG4pIHsKLQkJc2NzaV9xdWV1ZV9pbnNlcnQoY21kLCAocnRuID09IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSkgPwotCQkJCQkJcnRuIDogU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSk7CisJCWlmIChydG4gIT0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZICYmCisJCSAgICBydG4gIT0gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZKQorCQkJcnRuID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCQlzY3NpX3F1ZXVlX2luc2VydChjbWQsIHJ0bik7CisKIAkJU0NTSV9MT0dfTUxRVUVVRSgzLAogCQkgICAgcHJpbnRrKCJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7CiAJfQpAQCAtODAwLDYgKzgwNCw3IEBACiB2b2lkIHNjc2lfZmluaXNoX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRydjsKIAl1bnNpZ25lZCBpbnQgZ29vZF9ieXRlczsKQEAgLTgxNSw2ICs4MjAsNyBAQAogCSAqIFhYWChoY2gpOiBXaGF0IGFib3V0IGxvY2tpbmc/CiAgICAgICAgICAqLwogICAgICAgICBzaG9zdC0+aG9zdF9ibG9ja2VkID0gMDsKKwlzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCA9IDA7CiAgICAgICAgIHNkZXYtPmRldmljZV9ibG9ja2VkID0gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCBmZWNlZmEwLi45NGVkMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTEwNjUsMTAgKzEwNjUsMTAgQEAKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgKnRndHJfc2NtZCwgKm5leHQ7Ci0JdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBpZCA9IDA7CiAJaW50IHJ0bjsKIAotCWZvciAoaWQgPSAwOyBpZCA8PSBzaG9zdC0+bWF4X2lkOyBpZCsrKSB7CisJZG8gewogCQl0Z3RyX3NjbWQgPSBOVUxMOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsIHdvcmtfcSwgZWhfZW50cnkpIHsKIAkJCWlmIChpZCA9PSBzY21kX2lkKHNjbWQpKSB7CkBAIC0xMDc2LDggKzEwNzYsMTggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQlpZiAoIXRndHJfc2NtZCkgeworCQkJLyogbm90IG9uZSBleGFjdGx5IGVxdWFsOyBmaW5kIHRoZSBuZXh0IGhpZ2hlc3QgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NtZCwgd29ya19xLCBlaF9lbnRyeSkgeworCQkJCWlmIChzY21kX2lkKHNjbWQpID4gaWQgJiYKKwkJCQkgICAgKCF0Z3RyX3NjbWQgfHwKKwkJCQkgICAgIHNjbWRfaWQodGd0cl9zY21kKSA+IHNjbWRfaWQoc2NtZCkpKQorCQkJCQkJdGd0cl9zY21kID0gc2NtZDsKKwkJCX0KKwkJfQogCQlpZiAoIXRndHJfc2NtZCkKLQkJCWNvbnRpbnVlOworCQkJLyogbm8gbW9yZSBjb21tYW5kcywgdGhhdCdzIGl0ICovCisJCQlicmVhazsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTZW5kaW5nIHRhcmdldCByZXNldCAiCiAJCQkJCQkgICJ0byB0YXJnZXQgJWRcbiIsCkBAIC0xMDk2LDcgKzExMDYsOCBAQAogCQkJCQkJCSAgIiBmYWlsZWQgdGFyZ2V0OiAiCiAJCQkJCQkJICAiJWRcbiIsCiAJCQkJCQkJICBjdXJyZW50LT5jb21tLCBpZCkpOwotCX0KKwkJaWQrKzsKKwl9IHdoaWxlKGlkICE9IDApOwogCiAJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIH0KQEAgLTEyMTksNiArMTIzMCw0MCBAQAogfQogCiAvKioKKyAqIHNjc2lfbm9yZXRyeV9jbWQgLSBkZXRlcm1pbnRlIGlmIGNvbW1hbmQgc2hvdWxkIGJlIGZhaWxlZCBmYXN0CisgKiBAc2NtZDoJU0NTSSBjbWQgdG8gZXhhbWluZS4KKyAqLworaW50IHNjc2lfbm9yZXRyeV9jbWQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzd2l0Y2ggKGhvc3RfYnl0ZShzY21kLT5yZXN1bHQpKSB7CisJY2FzZSBESURfT0s6CisJCWJyZWFrOworCWNhc2UgRElEX0JVU19CVVNZOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChzY21kLT5yZXF1ZXN0KTsKKwljYXNlIERJRF9QQVJJVFk6CisJCXJldHVybiBibGtfZmFpbGZhc3RfZGV2KHNjbWQtPnJlcXVlc3QpOworCWNhc2UgRElEX0VSUk9SOgorCQlpZiAobXNnX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBDT01NQU5EX0NPTVBMRVRFICYmCisJCSAgICBzdGF0dXNfYnl0ZShzY21kLT5yZXN1bHQpID09IFJFU0VSVkFUSU9OX0NPTkZMSUNUKQorCQkJcmV0dXJuIDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRElEX1NPRlRfRVJST1I6CisJCXJldHVybiBibGtfZmFpbGZhc3RfZHJpdmVyKHNjbWQtPnJlcXVlc3QpOworCX0KKworCXN3aXRjaCAoc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSkgeworCWNhc2UgQ0hFQ0tfQ09ORElUSU9OOgorCQkvKgorCQkgKiBhc3N1bWUgY2FsbGVyIGhhcyBjaGVja2VkIHNlbnNlIGFuZCBkZXRlcm1pbnRlZAorCQkgKiB0aGUgY2hlY2sgY29uZGl0aW9uIHdhcyByZXRyeWFibGUuCisJCSAqLworCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RldihzY21kLT5yZXF1ZXN0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBzY3NpX2RlY2lkZV9kaXNwb3NpdGlvbiAtIERpc3Bvc2l0aW9uIGEgY21kIG9uIHJldHVybiBmcm9tIExMRC4KICAqIEBzY21kOglTQ1NJIGNtZCB0byBleGFtaW5lLgogICoKQEAgLTEyOTAsNyArMTMzNSwyMCBAQAogCiAJY2FzZSBESURfUkVRVUVVRToKIAkJcmV0dXJuIEFERF9UT19NTFFVRVVFOwotCisJY2FzZSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRDoKKwkJLyoKKwkJICogTExEL3RyYW5zcG9ydCB3YXMgZGlzcnVwdGVkIGR1cmluZyBwcm9jZXNzaW5nIG9mIHRoZSBJTy4KKwkJICogVGhlIHRyYW5zcG9ydCBjbGFzcyBpcyBub3cgYmxvY2tlZC9ibG9ja2luZywKKwkJICogYW5kIHRoZSB0cmFuc3BvcnQgd2lsbCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSBJTworCQkgKiBiYXNlZCBvbiBpdHMgdGltZXJzIGFuZCByZWNvdmVyeSBjYXBhYmxpbGl0aWVzLgorCQkgKi8KKwkJcmV0dXJuIEFERF9UT19NTFFVRVVFOworCWNhc2UgRElEX1RSQU5TUE9SVF9GQUlMRkFTVDoKKwkJLyoKKwkJICogVGhlIHRyYW5zcG9ydCBkZWNpZGVkIHRvIGZhaWxmYXN0IHRoZSBJTyAobW9zdCBsaWtlbHkKKwkJICogdGhlIGZhc3QgaW8gZmFpbCB0bW8gZmlyZWQpLCBzbyBzZW5kIElPIGRpcmVjdGx5IHVwd2FyZHMuCisJCSAqLworCQlyZXR1cm4gU1VDQ0VTUzsKIAljYXNlIERJRF9FUlJPUjoKIAkJaWYgKG1zZ19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gQ09NTUFORF9DT01QTEVURSAmJgogCQkgICAgc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBSRVNFUlZBVElPTl9DT05GTElDVCkKQEAgLTEzODMsNyArMTQ0MSw3IEBACiAJICogZXZlbiBpZiB0aGUgcmVxdWVzdCBpcyBtYXJrZWQgZmFzdCBmYWlsLCB3ZSBzdGlsbCByZXF1ZXVlCiAJICogZm9yIHF1ZXVlIGNvbmdlc3Rpb24gY29uZGl0aW9ucyAoUVVFVUVfRlVMTCBvciBCVVNZKSAqLwogCWlmICgoKytzY21kLT5yZXRyaWVzKSA8PSBzY21kLT5hbGxvd2VkCi0JICAgICYmICFibGtfbm9yZXRyeV9yZXF1ZXN0KHNjbWQtPnJlcXVlc3QpKSB7CisJICAgICYmICFzY3NpX25vcmV0cnlfY21kKHNjbWQpKSB7CiAJCXJldHVybiBORUVEU19SRVRSWTsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTUwOCw3ICsxNTY2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NtZCwgbmV4dCwgZG9uZV9xLCBlaF9lbnRyeSkgewogCQlsaXN0X2RlbF9pbml0KCZzY21kLT5laF9lbnRyeSk7CiAJCWlmIChzY3NpX2RldmljZV9vbmxpbmUoc2NtZC0+ZGV2aWNlKSAmJgotCQkgICAgIWJsa19ub3JldHJ5X3JlcXVlc3Qoc2NtZC0+cmVxdWVzdCkgJiYKKwkJICAgICFzY3NpX25vcmV0cnlfY21kKHNjbWQpICYmCiAJCSAgICAoKytzY21kLT5yZXRyaWVzIDw9IHNjbWQtPmFsbG93ZWQpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBmbHVzaCIKIAkJCQkJCQkgICIgcmV0cnkgY21kOiAlcFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggOThlZTU1Yy4uZTVhOTUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KGRldmljZSk7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkZXZpY2UtPnJlcXVlc3RfcXVldWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTMzLDEwICsxMzQsMTcgQEAKIAkgKiBpZiBhIGNvbW1hbmQgaXMgcmVxdWV1ZWQgd2l0aCBubyBvdGhlciBjb21tYW5kcyBvdXRzdGFuZGluZwogCSAqIGVpdGhlciBmb3IgdGhlIGRldmljZSBvciBmb3IgdGhlIGhvc3QuCiAJICovCi0JaWYgKHJlYXNvbiA9PSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZKQorCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOgogCQlob3N0LT5ob3N0X2Jsb2NrZWQgPSBob3N0LT5tYXhfaG9zdF9ibG9ja2VkOwotCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kpCisJCWJyZWFrOworCWNhc2UgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOgogCQlkZXZpY2UtPmRldmljZV9ibG9ja2VkID0gZGV2aWNlLT5tYXhfZGV2aWNlX2Jsb2NrZWQ7CisJCWJyZWFrOworCWNhc2UgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOgorCQlzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCA9IHN0YXJnZXQtPm1heF90YXJnZXRfYmxvY2tlZDsKKwkJYnJlYWs7CisJfQogCiAJLyoKIAkgKiBEZWNyZW1lbnQgdGhlIGNvdW50ZXJzLCBzaW5jZSB0aGVzZSBjb21tYW5kcyBhcmUgbm8gbG9uZ2VyCkBAIC00NjAsMTAgKzQ2OCwxMiBAQAogdm9pZCBzY3NpX2RldmljZV91bmJ1c3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXNob3N0LT5ob3N0X2J1c3ktLTsKKwlzdGFyZ2V0LT50YXJnZXRfYnVzeS0tOwogCWlmICh1bmxpa2VseShzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2hvc3QpICYmCiAJCSAgICAgKHNob3N0LT5ob3N0X2ZhaWxlZCB8fCBzaG9zdC0+aG9zdF9laF9zY2hlZHVsZWQpKSkKIAkJc2NzaV9laF93YWtldXAoc2hvc3QpOwpAQCAtNTE5LDYgKzUyOSwxMyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzY3NpX3RhcmdldF9pc19idXN5KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlyZXR1cm4gKChzdGFyZ2V0LT5jYW5fcXVldWUgPiAwICYmCisJCSBzdGFyZ2V0LT50YXJnZXRfYnVzeSA+PSBzdGFyZ2V0LT5jYW5fcXVldWUpIHx8CisJCSBzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCk7Cit9CisKIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV9ydW5fcXVldWUoKQogICoKQEAgLTUzMyw3ICs1NTAsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzdGFydmVkX2hlYWQgPSBOVUxMLCAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTYwLDYgKzU3NywyMSBAQAogCQkgKi8KIAkJc2RldiA9IGxpc3RfZW50cnkoc2hvc3QtPnN0YXJ2ZWRfbGlzdC5uZXh0LAogCQkJCQkgIHN0cnVjdCBzY3NpX2RldmljZSwgc3RhcnZlZF9lbnRyeSk7CisJCS8qCisJCSAqIFRoZSAqcXVldWVfcmVhZHkgZnVuY3Rpb25zIGNhbiBhZGQgYSBkZXZpY2UgYmFjayBvbnRvIHRoZQorCQkgKiBzdGFydmVkIGxpc3QncyB0YWlsLCBzbyB3ZSBtdXN0IGNoZWNrIGZvciBhIGluZmluaXRlIGxvb3AuCisJCSAqLworCQlpZiAoc2RldiA9PSBzdGFydmVkX2hlYWQpCisJCQlicmVhazsKKwkJaWYgKCFzdGFydmVkX2hlYWQpCisJCQlzdGFydmVkX2hlYWQgPSBzZGV2OworCisJCWlmIChzY3NpX3RhcmdldF9pc19idXN5KHNjc2lfdGFyZ2V0KHNkZXYpKSkgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgICZzaG9zdC0+c3RhcnZlZF9saXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CiAJCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC01NzUsMTMgKzYwNyw2IEBACiAJCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCiAJCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKLQkJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkpCi0JCQkvKgotCQkJICogc2RldiBsb3N0IGEgcmFjZSwgYW5kIHdhcyBwdXQgYmFjayBvbiB0aGUKLQkJCSAqIHN0YXJ2ZWQgbGlzdC4gVGhpcyBpcyB1bmxpa2VseSBidXQgd2l0aG91dCB0aGlzCi0JCQkgKiBpbiB0aGVvcnkgd2UgY291bGQgbG9vcCBmb3JldmVyLgotCQkJICovCi0JCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKQEAgLTY4MSw3ICs3MDYsNyBAQAogCQkJbGVmdG92ZXIgPSByZXEtPmRhdGFfbGVuOwogCiAJCS8qIGtpbGwgcmVtYWluZGVyIGlmIG5vIHJldHJ5cyAqLwotCQlpZiAoZXJyb3IgJiYgYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQorCQlpZiAoZXJyb3IgJiYgc2NzaV9ub3JldHJ5X2NtZChjbWQpKQogCQkJYmxrX2VuZF9yZXF1ZXN0KHJlcSwgZXJyb3IsIGxlZnRvdmVyKTsKIAkJZWxzZSB7CiAJCQlpZiAocmVxdWV1ZSkgewpAQCAtMTM0NCw2ICsxMzY5LDUyIEBACiAJcmV0dXJuIDE7CiB9CiAKKworLyoKKyAqIHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5OiBjaGVja3MgaWYgdGhlcmUgd2UgY2FuIHNlbmQgY29tbWFuZHMgdG8gdGFyZ2V0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugb24gc3RhcmdldCB0byBjaGVjay4KKyAqCisgKiBDYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisKKwlpZiAoc3RhcmdldC0+c2luZ2xlX2x1bikgeworCQlpZiAoc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgJiYKKwkJICAgIHN0YXJnZXQtPnN0YXJnZXRfc2Rldl91c2VyICE9IHNkZXYpCisJCQlyZXR1cm4gMDsKKwkJc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgPSBzZGV2OworCX0KKworCWlmIChzdGFyZ2V0LT50YXJnZXRfYnVzeSA9PSAwICYmIHN0YXJnZXQtPnRhcmdldF9ibG9ja2VkKSB7CisJCS8qCisJCSAqIHVuYmxvY2sgYWZ0ZXIgdGFyZ2V0X2Jsb2NrZWQgaXRlcmF0ZXMgdG8gemVybworCQkgKi8KKwkJaWYgKC0tc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPT0gMCkgeworCQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkJCSAidW5ibG9ja2luZyB0YXJnZXQgYXQgemVybyBkZXB0aFxuIikpOworCQl9IGVsc2UgeworCQkJYmxrX3BsdWdfZGV2aWNlKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoc2NzaV90YXJnZXRfaXNfYnVzeShzdGFyZ2V0KSkgeworCQlpZiAobGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgJnNob3N0LT5zdGFydmVkX2xpc3QpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBXZSdyZSBPSyB0byBwcm9jZXNzIHRoZSBjb21tYW5kLCBzbyB3ZSBjYW4ndCBiZSBzdGFydmVkICovCisJaWYgKCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkKKwkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBzY3NpX2hvc3RfcXVldWVfcmVhZHk6IGlmIHdlIGNhbiBzZW5kIHJlcXVlc3RzIHRvIHNob3N0LCByZXR1cm4gMSBlbHNlCiAgKiByZXR1cm4gMC4gV2UgbXVzdCBlbmQgdXAgcnVubmluZyB0aGUgcXVldWUgYWdhaW4gd2hlbmV2ZXIgMCBpcwpAQCAtMTM5MCw2ICsxNDYxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSByZXEtPnNwZWNpYWw7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCiAJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOwpAQCAtMTQxMyw2ICsxNDg1LDcgQEAKIAlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc2hvc3QtPmhvc3RfYnVzeSsrOworCXN0YXJnZXQtPnRhcmdldF9idXN5Kys7CiAJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCkBAIC0xNTUwLDE0ICsxNjIzLDEzIEBACiAJCQlnb3RvIG5vdF9yZWFkeTsKIAkJfQogCisJCWlmICghc2NzaV90YXJnZXRfcXVldWVfcmVhZHkoc2hvc3QsIHNkZXYpKQorCQkJZ290byBub3RfcmVhZHk7CisKIAkJaWYgKCFzY3NpX2hvc3RfcXVldWVfcmVhZHkocSwgc2hvc3QsIHNkZXYpKQogCQkJZ290byBub3RfcmVhZHk7Ci0JCWlmIChzY3NpX3RhcmdldChzZGV2KS0+c2luZ2xlX2x1bikgewotCQkJaWYgKHNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciAmJgotCQkJICAgIHNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciAhPSBzZGV2KQotCQkJCWdvdG8gbm90X3JlYWR5OwotCQkJc2NzaV90YXJnZXQoc2RldiktPnN0YXJnZXRfc2Rldl91c2VyID0gc2RldjsKLQkJfQorCisJCXNjc2lfdGFyZ2V0KHNkZXYpLT50YXJnZXRfYnVzeSsrOwogCQlzaG9zdC0+aG9zdF9idXN5Kys7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCA2Y2RkZDVkLi5lMTg1MDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC01OSw2ICs1OSw3IEBACiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpOwogaW50IHNjc2lfZWhfZ2V0X3NlbnNlKHN0cnVjdCBsaXN0X2hlYWQgKndvcmtfcSwKIAkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKTsKK2ludCBzY3NpX25vcmV0cnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpOwogCiAvKiBzY3NpX2xpYi5jICovCiBleHRlcm4gaW50IHNjc2lfbWF5YmVfdW5ibG9ja19ob3N0KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggMzM0ODYyZS4uYjE0ZGMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtNDE5LDYgKzQxOSw3IEBACiAJZGV2LT50eXBlID0gJnNjc2lfdGFyZ2V0X3R5cGU7CiAJc3RhcmdldC0+aWQgPSBpZDsKIAlzdGFyZ2V0LT5jaGFubmVsID0gY2hhbm5lbDsKKwlzdGFyZ2V0LT5jYW5fcXVldWUgPSAwOwogCUlOSVRfTElTVF9IRUFEKCZzdGFyZ2V0LT5zaWJsaW5ncyk7CiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPmRldmljZXMpOwogCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9DUkVBVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBkNWY3NjUzLi4xZTcxYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMjEzMyw4ICsyMTMzLDcgQEAKIAlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SRChyb2xlcyk7CiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQocG9ydF9zdGF0ZSk7CiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQoc2NzaV90YXJnZXRfaWQpOwotCWlmIChmdC0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmYXN0X2lvX2ZhaWxfdG1vKTsKKwlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmYXN0X2lvX2ZhaWxfdG1vKTsKIAogCUJVR19PTihjb3VudCA+IEZDX1JQT1JUX05VTV9BVFRSUyk7CiAKQEAgLTIzMjgsNiArMjMyNywyMiBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdmVfaG9zdCk7CiAKK3N0YXRpYyB2b2lkIGZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKKworCS8qIEludm9sdmUgdGhlIExMREQgaWYgcG9zc2libGUgdG8gdGVybWluYXRlIGFsbCBpbyBvbiB0aGUgcnBvcnQuICovCisJaWYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykKKwkJaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKKworCS8qCisJICogbXVzdCB1bmJsb2NrIHRvIGZsdXNoIHF1ZXVlZCBJTy4gVGhlIGNhbGxlciB3aWxsIGhhdmUgc2V0CisJICogdGhlIHBvcnRfc3RhdGUgb3IgZmxhZ3MsIHNvIHRoYXQgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkgd2lsbAorCSAqIGZhaWwgSU8uCisJICovCisJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7Cit9CiAKIC8qKgogICogZmNfc3RhcmdldF9kZWxldGUgLSBjYWxsZWQgdG8gZGVsZXRlIHRoZSBzY3NpIGRlY2VuZGVudHMgb2YgYW4gcnBvcnQKQEAgLTIzNDAsMTMgKzIzNTUsOCBAQAogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0LCBzdGd0X2RlbGV0ZV93b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKLQkvKiBJbnZvbHZlIHRoZSBMTEREIGlmIHBvc3NpYmxlIHRvIHRlcm1pbmF0ZSBhbGwgaW8gb24gdGhlIHJwb3J0LiAqLwotCWlmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pCi0JCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7Ci0KKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogCXNjc2lfcmVtb3ZlX3RhcmdldCgmcnBvcnQtPmRldik7CiB9CiAKQEAgLTIzNzIsMTAgKzIzODIsNyBAQAogCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcpCiAJCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CiAKLQkvKiBpbnZvbHZlIHRoZSBMTEREIHRvIHRlcm1pbmF0ZSBhbGwgcGVuZGluZyBpL28gKi8KLQlpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwotCisJZmNfdGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKIAkvKgogCSAqIENhbmNlbCBhbnkgb3V0c3RhbmRpbmcgdGltZXJzLiBUaGVzZSBzaG91bGQgcmVhbGx5IGV4aXN0CiAJICogb25seSB3aGVuIHJtbW9kJ2luZyB0aGUgTExERCBhbmQgd2UncmUgYXNraW5nIGZvcgpAQCAtMjYzOSw3ICsyNjQ2LDggQEAKIAogCQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCQkJCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCQkJCXJwb3J0LT5mbGFncyAmPSB+KEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVCB8CisJCQkJCQkgIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORyk7CiAKIAkJCQkvKiBpZiB0YXJnZXQsIGluaXRpYXRlIGEgc2NhbiAqLwogCQkJCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpIHsKQEAgLTI3MDIsNiArMjcxMCw3IEBACiAJCQlycG9ydC0+cG9ydF9pZCA9IGlkcy0+cG9ydF9pZDsKIAkJCXJwb3J0LT5yb2xlcyA9IGlkcy0+cm9sZXM7CiAJCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9PTkxJTkU7CisJCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKIAogCQkJaWYgKGZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKQogCQkJCW1lbXNldChycG9ydC0+ZGRfZGF0YSwgMCwKQEAgLTI3ODQsNyArMjc5Myw2IEBACiBmY19yZW1vdGVfcG9ydF9kZWxldGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWludCB0aW1lb3V0ID0gcnBvcnQtPmRldl9sb3NzX3RtbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yODMwLDcgKzI4MzgsNyBAQAogCiAJLyogc2VlIGlmIHdlIG5lZWQgdG8ga2lsbCBpbyBmYXN0ZXIgdGhhbiB3YWl0aW5nIGZvciBkZXZpY2UgbG9zcyAqLwogCWlmICgocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gIT0gLTEpICYmCi0JICAgIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA8IHRpbWVvdXQpICYmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pKQorCSAgICAocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPCB0aW1lb3V0KSkKIAkJZmNfcXVldWVfZGV2bG9zc193b3JrKHNob3N0LCAmcnBvcnQtPmZhaWxfaW9fd29yaywKIAkJCQkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gKiBIWik7CiAKQEAgLTI5MDYsNyArMjkxNCw4IEBACiAJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCQlycG9ydC0+ZmxhZ3MgJj0gfihGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQgfAorCQkJCSAgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkJLyogZW5zdXJlIGFueSBzdGd0IGRlbGV0ZSBmdW5jdGlvbnMgYXJlIGRvbmUgKi8KQEAgLTMwMDEsNiArMzAxMCw3IEBACiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwogCXJwb3J0LT5yb2xlcyA9IEZDX1BPUlRfUk9MRV9VTktOT1dOOwogCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX05PVFBSRVNFTlQ7CisJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQ7CiAKIAkvKiByZW1vdmUgdGhlIGlkZW50aWZpZXJzIHRoYXQgYXJlbid0IHVzZWQgaW4gdGhlIGNvbnNpc3RpbmcgYmluZGluZyAqLwogCXN3aXRjaCAoZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlKSB7CkBAIC0zMDQzLDEzICszMDUzLDEyIEBACiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNfcnBvcnQsIGZhaWxfaW9fd29yay53b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKIAlpZiAocnBvcnQtPnBvcnRfc3RhdGUgIT0gRkNfUE9SVFNUQVRFX0JMT0NLRUQpCiAJCXJldHVybjsKIAotCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CisJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggMGNlNWY3Yy4uNGE4MDNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogc2hvd19lcF9oYW5kbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAgPSBpc2NzaV9kZXZfdG9fZW5kcG9pbnQoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZXAtPmlkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBlcC0+aWQpOwogfQogc3RhdGljIElTQ1NJX0FUVFIoZXAsIGhhbmRsZSwgU19JUlVHTywgc2hvd19lcF9oYW5kbGUsIE5VTEwpOwogCkBAIC0xNTYsNyArMTU2LDcgQEAKIHN0YXRpYyBpbnQgaXNjc2lfbWF0Y2hfZXBpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCA9IGlzY3NpX2Rldl90b19lbmRwb2ludChkZXYpOwotCXVuc2lnbmVkIGludCAqZXBpZCA9ICh1bnNpZ25lZCBpbnQgKikgZGF0YTsKKwl1aW50NjRfdCAqZXBpZCA9ICh1aW50NjRfdCAqKSBkYXRhOwogCiAJcmV0dXJuICplcGlkID09IGVwLT5pZDsKIH0KQEAgLTE2Niw3ICsxNjYsNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwotCXVuc2lnbmVkIGludCBpZDsKKwl1aW50NjRfdCBpZDsKIAlpbnQgZXJyOwogCiAJZm9yIChpZCA9IDE7IGlkIDwgSVNDU0lfTUFYX0VQSUQ7IGlkKyspIHsKQEAgLTE4Nyw3ICsxODcsOCBAQAogCiAJZXAtPmlkID0gaWQ7CiAJZXAtPmRldi5jbGFzcyA9ICZpc2NzaV9lbmRwb2ludF9jbGFzczsKLQlzbnByaW50ZihlcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJlcC0ldSIsIGlkKTsKKwlzbnByaW50ZihlcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJlcC0lbGx1IiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGlkKTsKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmVwLT5kZXYpOwogICAgICAgICBpZiAoZXJyKQogICAgICAgICAgICAgICAgIGdvdG8gZnJlZV9lcDsKQEAgLTM3NCwxMCArMzc1LDEwIEBACiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfU0VTU0lPTl9GQUlMRUQ6Ci0JCWVyciA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWVyciA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCQlicmVhazsKIAljYXNlIElTQ1NJX1NFU1NJT05fRlJFRToKLQkJZXJyID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWVyciA9IERJRF9UUkFOU1BPUlRfRkFJTEZBU1QgPDwgMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IERJRF9OT19DT05ORUNUIDw8IDE2OwpAQCAtMTAxMCw3ICsxMDExLDcgQEAKIAogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7Ci0JCWlzY3NpX2Nvbm5fZXJyb3IoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJaXNjc2lfY29ubl9lcnJvcl9ldmVudChjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQlpc2NzaV9jbHNfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJjYW4gbm90IGRlbGl2ZXIgIgogCQkJCSAgICAgICJjb250cm9sIFBEVTogT09NXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDMxLDcgKzEwMzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcmVjdl9wZHUpOwogCi12b2lkIGlzY3NpX2Nvbm5fZXJyb3Ioc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnJvcikKK3ZvaWQgaXNjc2lfY29ubl9lcnJvcl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKQogewogCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwogCXN0cnVjdCBza19idWZmCSpza2I7CkBAIC0xMDYzLDcgKzEwNjQsNyBAQAogCWlzY3NpX2Nsc19jb25uX3ByaW50ayhLRVJOX0lORk8sIGNvbm4sICJkZXRlY3RlZCBjb25uIGVycm9yICglZClcbiIsCiAJCQkgICAgICBlcnJvcik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb25uX2Vycm9yKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQpOwogCiBzdGF0aWMgaW50CiBpc2NzaV9pZl9zZW5kX3JlcGx5KGludCBwaWQsIGludCBzZXEsIGludCB0eXBlLCBpbnQgZG9uZSwgaW50IG11bHRpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCmluZGV4IGIyOTM2MGUuLjdjMmQyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKQEAgLTEwOSw3ICsxMDksOSBAQAogCWZvcihpID0gMDsgaSA8IERWX1JFVFJJRVM7IGkrKykgewogCQlyZXN1bHQgPSBzY3NpX2V4ZWN1dGUoc2RldiwgY21kLCBkaXIsIGJ1ZmZlciwgYnVmZmxlbiwKIAkJCQkgICAgICBzZW5zZSwgRFZfVElNRU9VVCwgLyogcmV0cmllcyAqLyAxLAotCQkJCSAgICAgIFJFUV9GQUlMRkFTVCk7CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX0RFViB8CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX0RSSVZFUik7CiAJCWlmIChyZXN1bHQgJiBEUklWRVJfU0VOU0UpIHsKIAkJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcl90bXA7CiAJCQlpZiAoIXNzaGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBhN2I1M2JlLi43YzRkMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJc2VjdG9yX3QgYmxvY2sgPSBycS0+c2VjdG9yOwogCXNlY3Rvcl90IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgdGhpc19jb3VudCA9IHJxLT5ucl9zZWN0b3JzOwotCWludCByZXQ7CisJaW50IHJldCwgaG9zdF9kaWY7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CkBAIC01MTUsNyArNTE1LDggQEAKIAkJCQkJcnEtPm5yX3NlY3RvcnMpKTsKIAogCS8qIFNldCBSRFBST1RFQ1QvV1JQUk9URUNUIGlmIGRpc2sgaXMgZm9ybWF0dGVkIHdpdGggRElGICovCi0JaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHNka3AtPnByb3RlY3Rpb25fdHlwZSkpCisJaG9zdF9kaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOworCWlmIChob3N0X2RpZikKIAkJU0NwbnQtPmNtbmRbMV0gPSAxIDw8IDU7CiAJZWxzZQogCQlTQ3BudC0+Y21uZFsxXSA9IDA7CkBAIC01NzMsOCArNTc0LDkgQEAKIAlTQ3BudC0+c2RiLmxlbmd0aCA9IHRoaXNfY291bnQgKiBzZHAtPnNlY3Rvcl9zaXplOwogCiAJLyogSWYgRElGIG9yIERJWCBpcyBlbmFibGVkLCB0ZWxsIEhCQSBob3cgdG8gaGFuZGxlIHJlcXVlc3QgKi8KLQlpZiAoc2RrcC0+cHJvdGVjdGlvbl90eXBlIHx8IHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCi0JCXNkX2RpZl9vcChTQ3BudCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKTsKKwlpZiAoaG9zdF9kaWYgfHwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKKwkJc2RfZGlmX29wKFNDcG50LCBob3N0X2RpZiwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSwKKwkJCSAgc2RrcC0+cHJvdGVjdGlvbl90eXBlKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkbid0IGRpc2Nvbm5lY3QgaW4gdGhlIG1pZGRsZSBvZiBhIHNlY3Rvciwgc28gd2l0aCBhIGR1bWIKQEAgLTEyNTIsMTQgKzEyNTQsMTIgQEAKIAllbHNlCiAJCXR5cGUgPSAoKGJ1ZmZlclsxMl0gPj4gMSkgJiA3KSArIDE7IC8qIFBfVFlQRSAwID0gVHlwZSAxICovCiAKKwlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSB0eXBlOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKLQkJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gMDsKLQkJYnJlYWs7Ci0KIAljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgogCWNhc2UgU0RfRElGX1RZUEUzX1BST1RFQ1RJT046Ci0JCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IHR5cGU7CiAJCWJyZWFrOwogCiAJY2FzZSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTjoKQEAgLTEyNzcsNyArMTI3Nyw2IEBACiAJcmV0dXJuOwogCiBkaXNhYmxlOgotCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7CiAJc2RrcC0+Y2FwYWNpdHkgPSAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDk1YjlmMDYuLjc1NjM4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC05NywxOSArOTcsMjggQEAKICAgICAgICBfX2JlMzIgcmVmX3RhZzsJCS8qIFRhcmdldCBMQkEgb3IgaW5kaXJlY3QgTEJBICovCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCiAKLWV4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKik7CiBleHRlcm4gaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzZF9kaWZfY29tcGxldGUoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAotI2RlZmluZSBzZF9kaWZfb3AoYSwgYiwgYykJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNkX2RpZl9jb25maWdfaG9zdChhKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2RfZGlmX3ByZXBhcmUoYSwgYiwgYykJCQkoMCkKLSNkZWZpbmUgc2RfZGlmX2NvbXBsZXRlKGEsIGIpCQkJKDApCitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX29wKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZF9kaWZfY29uZmlnX2hvc3Qoc3RydWN0IHNjc2lfZGlzayAqZGlzaykKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgcywgdW5zaWduZWQgaW50IGEpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGEpCit7Cit9CiAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDRkMTdmM2QuLjNlYmIxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTMxMSwyNiArMzExLDI3IEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBzZGtwLT5kZXZpY2U7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBzZGtwLT5kaXNrOwogCXU4IHR5cGUgPSBzZGtwLT5wcm90ZWN0aW9uX3R5cGU7CisJaW50IGRpZiwgZGl4OwogCi0JLyogSWYgdGhpcyBIQkEgZG9lc24ndCBzdXBwb3J0IERJWCwgcmVzb3J0IHRvIG5vcm1hbCBJL08gb3IgRElGICovCi0JaWYgKHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzZHAtPmhvc3QsIHR5cGUpID09IDApIHsKKwlkaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKTsKKwlkaXggPSBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKTsKIAotCQlpZiAodHlwZSA9PSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTikKLQkJCXJldHVybjsKLQotCQlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSkgPT0gMCkgewotCQkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIlR5cGUgJWQgcHJvdGVjdGlvbiAiIFwKLQkJCQkgICJ1bnN1cHBvcnRlZCBieSBIQkEuIERpc2FibGluZyBESUYuXG4iLCB0eXBlKTsKLQkJCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwKLQkJCSAgdHlwZSk7Ci0KLQkJcmV0dXJuOworCWlmICghZGl4ICYmIHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzZHAtPmhvc3QsIDApKSB7CisJCWRpZiA9IDA7IGRpeCA9IDE7CiAJfQogCisJaWYgKHR5cGUpIHsKKwkJaWYgKGRpZikKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICJFbmFibGluZyBESUYgVHlwZSAlZCBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwkJZWxzZQorCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJCSAgIkRpc2FibGluZyBESUYgVHlwZSAlZCBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwl9CisKKwlpZiAoIWRpeCkKKwkJcmV0dXJuOworCiAJLyogRW5hYmxlIERNQSBvZiBwcm90ZWN0aW9uIGluZm9ybWF0aW9uICovCiAJaWYgKHNjc2lfaG9zdF9nZXRfZ3VhcmQoc2RrcC0+ZGV2aWNlLT5ob3N0KSAmIFNIT1NUX0RJWF9HVUFSRF9JUCkKIAkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pCkBAIC0zNDMsMTcgKzM0NCwxNyBAQAogCQllbHNlCiAJCQlibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGRpc2ssICZkaWZfdHlwZTFfaW50ZWdyaXR5X2NyYyk7CiAKLQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLAotCQkgICJFbmFibGluZyAlcyBpbnRlZ3JpdHkgcHJvdGVjdGlvblxuIiwgZGlzay0+aW50ZWdyaXR5LT5uYW1lKTsKKwlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCSAgIkVuYWJsaW5nIERJWCAlcyBwcm90ZWN0aW9uXG4iLCBkaXNrLT5pbnRlZ3JpdHktPm5hbWUpOwogCiAJLyogU2lnbmFsIHRvIGJsb2NrIGxheWVyIHRoYXQgd2Ugc3VwcG9ydCBzZWN0b3IgdGFnZ2luZyAqLwotCWlmICh0eXBlICYmIHNka3AtPkFUTykgeworCWlmIChkaWYgJiYgdHlwZSAmJiBzZGtwLT5BVE8pIHsKIAkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pCiAJCQlkaXNrLT5pbnRlZ3JpdHktPnRhZ19zaXplID0gc2l6ZW9mKHUxNikgKyBzaXplb2YodTMyKTsKIAkJZWxzZQogCQkJZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSA9IHNpemVvZih1MTYpOwogCi0JCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICJESUYgYXBwbGljYXRpb24gdGFnIHNpemUgJXVcbiIsCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIkRJRiBhcHBsaWNhdGlvbiB0YWcgc2l6ZSAldVxuIiwKIAkJCSAgZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSk7CiAJfQogfQpAQCAtMzYxLDcgKzM2Miw3IEBACiAvKgogICogRElGIERNQSBvcGVyYXRpb24gbWFnaWMgZGVjb2RlciByaW5nLgogICovCi12b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBpbnQgZGlmLCB1bnNpZ25lZCBpbnQgZGl4KQordm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJaW50IGNzdW1fY29udmVydCwgcHJvdF9vcDsKIApAQCAtNDA2LDcgKzQwNyw4IEBACiAJfQogCiAJc2NzaV9zZXRfcHJvdF9vcChzY21kLCBwcm90X29wKTsKLQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgZGlmKTsKKwlpZiAoZGlmKQorCQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgdHlwZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMgYi9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKaW5kZXggNGViM2RhOS4uNGFkM2UwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYwpAQCAtMjIzLDkgKzIyMyw5IEBACiAJCQkJbm9fbXVsdGkgPSAxOwogCQkJCWJyZWFrOwogCQkJfQotCQkJbWluID0gQkNEMkJJTihidWZmZXJbMTVdKTsKLQkJCXNlYyA9IEJDRDJCSU4oYnVmZmVyWzE2XSk7Ci0JCQlmcmFtZSA9IEJDRDJCSU4oYnVmZmVyWzE3XSk7CisJCQltaW4gPSBiY2QyYmluKGJ1ZmZlclsxNV0pOworCQkJc2VjID0gYmNkMmJpbihidWZmZXJbMTZdKTsKKwkJCWZyYW1lID0gYmNkMmJpbihidWZmZXJbMTddKTsKIAkJCXNlY3RvciA9IG1pbiAqIENEX1NFQ1MgKiBDRF9GUkFNRVMgKyBzZWMgKiBDRF9GUkFNRVMgKyBmcmFtZTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNTIsOSArMjUyLDkgQEAKIAkJCX0KIAkJCWlmIChyYyAhPSAwKQogCQkJCWJyZWFrOwotCQkJbWluID0gQkNEMkJJTihidWZmZXJbMV0pOwotCQkJc2VjID0gQkNEMkJJTihidWZmZXJbMl0pOwotCQkJZnJhbWUgPSBCQ0QyQklOKGJ1ZmZlclszXSk7CisJCQltaW4gPSBiY2QyYmluKGJ1ZmZlclsxXSk7CisJCQlzZWMgPSBiY2QyYmluKGJ1ZmZlclsyXSk7CisJCQlmcmFtZSA9IGJjZDJiaW4oYnVmZmVyWzNdKTsKIAkJCXNlY3RvciA9IG1pbiAqIENEX1NFQ1MgKiBDRF9GUkFNRVMgKyBzZWMgKiBDRF9GUkFNRVMgKyBmcmFtZTsKIAkJCWlmIChzZWN0b3IpCiAJCQkJc2VjdG9yIC09IENEX01TRl9PRkZTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwppbmRleCAzODFiMTJhLi5kOTM1YjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKQEAgLTY2LDcgKzY2LDYgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG02OGtfc2VyaWFsIG02OGtfc29mdFtOUl9QT1JUU107Ci1zdHJ1Y3QgbTY4a19zZXJpYWwgKklSUV9wb3J0c1tOUl9JUlFTXTsKIAogc3RhdGljIHVuc2lnbmVkIGludCB1YXJ0X2lycXNbTlJfUE9SVFNdID0gVUFSVF9JUlFfREVGTlM7CiAKQEAgLTM3NSwxNSArMzc0LDExIEBACiAgKi8KIGlycXJldHVybl90IHJzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG02OGtfc2VyaWFsICogaW5mbzsKKwlzdHJ1Y3QgbTY4a19zZXJpYWwgKmluZm8gPSBkZXZfaWQ7CiAJbTY4MzI4X3VhcnQgKnVhcnQ7CiAJdW5zaWduZWQgc2hvcnQgcng7CiAJdW5zaWduZWQgc2hvcnQgdHg7CiAKLQlpbmZvID0gSVJRX3BvcnRzW2lycV07Ci0JaWYoIWluZm8pCi0JICAgIHJldHVybiBJUlFfTk9ORTsKLQogCXVhcnQgPSAmdWFydF9hZGRyW2luZm8tPmxpbmVdOwogCXJ4ID0gdWFydC0+dXJ4Lnc7CiAKQEAgLTEzODMsOCArMTM3OCw2IEBACiAJCSAgIGluZm8tPnBvcnQsIGluZm8tPmlycSk7CiAJICAgIHByaW50aygiIGlzIGEgYnVpbHRpbiBNQzY4MzI4IFVBUlRcbiIpOwogCSAgICAKLQkgICAgSVJRX3BvcnRzW2luZm8tPmlycV0gPSBpbmZvOwkvKiB3YXN0ZSBvZiBzcGFjZSAqLwotCiAjaWZkZWYgQ09ORklHX002OFZaMzI4CiAJCWlmIChpID4gMCApCiAJCQlQSlNFTCAmPSAweENGOyAgLyogUFNXIGVuYWJsZSBzZWNvbmQgcG9ydCBvdXRwdXQgKi8KQEAgLTEzOTMsNyArMTM4Niw3IEBACiAJICAgIGlmIChyZXF1ZXN0X2lycSh1YXJ0X2lycXNbaV0sCiAJCQkgICAgcnNfaW50ZXJydXB0LAogCQkJICAgIElSUUZfRElTQUJMRUQsCi0JCQkgICAgIk02ODMyOF9VQVJUIiwgTlVMTCkpCisJCQkgICAgIk02ODMyOF9VQVJUIiwgaW5mbykpCiAgICAgICAgICAgICAgICAgcGFuaWMoIlVuYWJsZSB0byBhdHRhY2ggNjgzMjggc2VyaWFsIGludGVycnVwdFxuIik7CiAJfQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCAxNTI4ZGUyLi4zMDMyNzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0xNTYsMTEgKzE1NiwxNSBAQAogfTsKIAogc3RydWN0IGlycV9pbmZvIHsKLQlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdAkJCWhsaXN0X25vZGUgbm9kZTsKKwlpbnQJCQlpcnE7CisJc3BpbmxvY2tfdAkJbG9jazsJLyogUHJvdGVjdHMgbGlzdCBub3QgdGhlIGhhc2ggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCSpoZWFkOwogfTsKIAotc3RhdGljIHN0cnVjdCBpcnFfaW5mbyBpcnFfbGlzdHNbTlJfSVJRU107CisjZGVmaW5lIE5SX0lSUV9IQVNICQkzMgkvKiBDYW4gYmUgYWRqdXN0ZWQgbGF0ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBpcnFfbGlzdHNbTlJfSVJRX0hBU0hdOworc3RhdGljIERFRklORV9NVVRFWChoYXNoX211dGV4KTsJLyogVXNlZCB0byB3YWxrIHRoZSBoYXNoICovCiAKIC8qCiAgKiBIZXJlIHdlIGRlZmluZSB0aGUgZGVmYXVsdCB4bWl0IGZpZm8gc2l6ZSB1c2VkIGZvciBlYWNoIHR5cGUgb2YgVUFSVC4KQEAgLTE1NDUsMTUgKzE1NDksNDMgQEAKIAkJQlVHX09OKGktPmhlYWQgIT0gJnVwLT5saXN0KTsKIAkJaS0+aGVhZCA9IE5VTEw7CiAJfQotCiAJc3Bpbl91bmxvY2tfaXJxKCZpLT5sb2NrKTsKKwkvKiBMaXN0IGVtcHR5IHNvIHRocm93IGF3YXkgdGhlIGhhc2ggbm9kZSAqLworCWlmIChpLT5oZWFkID09IE5VTEwpIHsKKwkJaGxpc3RfZGVsKCZpLT5ub2RlKTsKKwkJa2ZyZWUoaSk7CisJfQogfQogCiBzdGF0aWMgaW50IHNlcmlhbF9saW5rX2lycV9jaGFpbihzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXN0cnVjdCBpcnFfaW5mbyAqaSA9IGlycV9saXN0cyArIHVwLT5wb3J0LmlycTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaXJxX2luZm8gKmk7CiAJaW50IHJldCwgaXJxX2ZsYWdzID0gdXAtPnBvcnQuZmxhZ3MgJiBVUEZfU0hBUkVfSVJRID8gSVJRRl9TSEFSRUQgOiAwOwogCisJbXV0ZXhfbG9jaygmaGFzaF9tdXRleCk7CisKKwloID0gJmlycV9saXN0c1t1cC0+cG9ydC5pcnEgJSBOUl9JUlFfSEFTSF07CisKKwlobGlzdF9mb3JfZWFjaChuLCBoKSB7CisJCWkgPSBobGlzdF9lbnRyeShuLCBzdHJ1Y3QgaXJxX2luZm8sIG5vZGUpOworCQlpZiAoaS0+aXJxID09IHVwLT5wb3J0LmlycSkKKwkJCWJyZWFrOworCX0KKworCWlmIChuID09IE5VTEwpIHsKKwkJaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFfaW5mbyksIEdGUF9LRVJORUwpOworCQlpZiAoaSA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJmhhc2hfbXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJc3Bpbl9sb2NrX2luaXQoJmktPmxvY2spOworCQlpLT5pcnEgPSB1cC0+cG9ydC5pcnE7CisJCWhsaXN0X2FkZF9oZWFkKCZpLT5ub2RlLCBoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoYXNoX211dGV4KTsKKwogCXNwaW5fbG9ja19pcnEoJmktPmxvY2spOwogCiAJaWYgKGktPmhlYWQpIHsKQEAgLTE1NzcsMTQgKzE2MDksMjggQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3VubGlua19pcnFfY2hhaW4oc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgaXJxX2luZm8gKmkgPSBpcnFfbGlzdHMgKyB1cC0+cG9ydC5pcnE7CisJc3RydWN0IGlycV9pbmZvICppOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9oZWFkICpoOwogCisJbXV0ZXhfbG9jaygmaGFzaF9tdXRleCk7CisKKwloID0gJmlycV9saXN0c1t1cC0+cG9ydC5pcnEgJSBOUl9JUlFfSEFTSF07CisKKwlobGlzdF9mb3JfZWFjaChuLCBoKSB7CisJCWkgPSBobGlzdF9lbnRyeShuLCBzdHJ1Y3QgaXJxX2luZm8sIG5vZGUpOworCQlpZiAoaS0+aXJxID09IHVwLT5wb3J0LmlycSkKKwkJCWJyZWFrOworCX0KKworCUJVR19PTihuID09IE5VTEwpOwogCUJVR19PTihpLT5oZWFkID09IE5VTEwpOwogCiAJaWYgKGxpc3RfZW1wdHkoaS0+aGVhZCkpCiAJCWZyZWVfaXJxKHVwLT5wb3J0LmlycSwgaSk7CiAKIAlzZXJpYWxfZG9fdW5saW5rKGksIHVwKTsKKwltdXRleF91bmxvY2soJmhhc2hfbXV0ZXgpOwogfQogCiAvKiBCYXNlIHRpbWVyIGludGVydmFsIGZvciBwb2xsaW5nICovCkBAIC0yNDQ3LDcgKzI0OTMsNyBAQAogc3RhdGljIGludAogc2VyaWFsODI1MF92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQogewotCWlmIChzZXItPmlycSA+PSBOUl9JUlFTIHx8IHNlci0+aXJxIDwgMCB8fAorCWlmIChzZXItPmlycSA+PSBucl9pcnFzIHx8IHNlci0+aXJxIDwgMCB8fAogCSAgICBzZXItPmJhdWRfYmFzZSA8IDk2MDAgfHwgc2VyLT50eXBlIDwgUE9SVF9VTktOT1dOIHx8CiAJICAgIHNlci0+dHlwZSA+PSBBUlJBWV9TSVpFKHVhcnRfY29uZmlnKSB8fCBzZXItPnR5cGUgPT0gUE9SVF9DSVJSVVMgfHwKIAkgICAgc2VyLT50eXBlID09IFBPUlRfU1RBUlRFQ0gpCkBAIC0yOTY3LDcgKzMwMTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzZXJpYWw4MjUwX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAKIAlpZiAobnJfdWFydHMgPiBVQVJUX05SKQogCQlucl91YXJ0cyA9IFVBUlRfTlI7CkBAIC0yOTc2LDkgKzMwMjIsNiBAQAogCQkiJWQgcG9ydHMsIElSUSBzaGFyaW5nICVzYWJsZWRcbiIsIG5yX3VhcnRzLAogCQlzaGFyZV9pcnFzID8gImVuIiA6ICJkaXMiKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCi0JCXNwaW5fbG9ja19pbml0KCZpcnFfbGlzdHNbaV0ubG9jayk7Ci0KICNpZmRlZiBDT05GSUdfU1BBUkMKIAlyZXQgPSBzdW5zZXJpYWxfcmVnaXN0ZXJfbWlub3JzKCZzZXJpYWw4MjUwX3JlZywgVUFSVF9OUik7CiAjZWxzZQpAQCAtMzAwNiwxNSArMzA0OSwxNSBAQAogCQlnb3RvIG91dDsKIAogCXBsYXRmb3JtX2RldmljZV9kZWwoc2VyaWFsODI1MF9pc2FfZGV2cyk7Ci0gcHV0X2RldjoKK3B1dF9kZXY6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChzZXJpYWw4MjUwX2lzYV9kZXZzKTsKLSB1bnJlZ191YXJ0X2RydjoKK3VucmVnX3VhcnRfZHJ2OgogI2lmZGVmIENPTkZJR19TUEFSQwogCXN1bnNlcmlhbF91bnJlZ2lzdGVyX21pbm9ycygmc2VyaWFsODI1MF9yZWcsIFVBUlRfTlIpOwogI2Vsc2UKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWw4MjUwX3JlZyk7CiAjZW5kaWYKLSBvdXQ6CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMKaW5kZXggMDQxNmFkMy4uNDE4YjRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2dzYy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkucHJvYmUJCT0gc2VyaWFsX2luaXRfY2hpcCwKIH07CiAKLWludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQogewogCXJlZ2lzdGVyX3BhcmlzY19kcml2ZXIoJmxhc2lfZHJpdmVyKTsKIAlyZWdpc3Rlcl9wYXJpc2NfZHJpdmVyKCZzZXJpYWxfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwppbmRleCA5MGI1NmMyLi43MTU2MjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCkBAIC01MTIsNyArNTEyLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9BTUJBKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCA5ZDA4ZjI3Li5iNzE4MDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9BTUJBKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBhNmM0ZDc0Li5iZGU0YjRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtNjIzLDcgKzYyMyw3IEBACiAKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9DUE0pCiAJCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0ID0gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKaW5kZXggMjNkMDMwNS4uNjExYzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYworKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCkBAIC05MjIsNyArOTIyLDcgQEAKIHN0YXRpYyBpbnQKIG0zMnJfc2lvX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCiB7Ci0JaWYgKHNlci0+aXJxID49IE5SX0lSUVMgfHwgc2VyLT5pcnEgPCAwIHx8CisJaWYgKHNlci0+aXJxID49IG5yX2lycXMgfHwgc2VyLT5pcnEgPCAwIHx8CiAJICAgIHNlci0+YmF1ZF9iYXNlIDwgOTYwMCB8fCBzZXItPnR5cGUgPCBQT1JUX1VOS05PV04gfHwKIAkgICAgc2VyLT50eXBlID49IEFSUkFZX1NJWkUodWFydF9jb25maWcpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNjIsNyArMTE2Miw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IE0zMlIgU0lPIGRyaXZlclxuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspCiAJCXNwaW5fbG9ja19pbml0KCZpcnFfbGlzdHNbaV0ubG9jayk7CiAKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmbTMycl9zaW9fcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDZiZGYzMzYuLjg3NDc4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtNzQxLDcgKzc0MSw3IEBACiAJaWYgKHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQpCiAJCXJldHZhbCA9IHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQocG9ydCwgJm5ld19zZXJpYWwpOwogCi0JaWYgKChuZXdfc2VyaWFsLmlycSA+PSBOUl9JUlFTKSB8fCAobmV3X3NlcmlhbC5pcnEgPCAwKSB8fAorCWlmICgobmV3X3NlcmlhbC5pcnEgPj0gbnJfaXJxcykgfHwgKG5ld19zZXJpYWwuaXJxIDwgMCkgfHwKIAkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkpCiAJCXJldHZhbCA9IC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCmluZGV4IGNiNDlhNWEuLjYxZGM4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9MSDdBNDBYKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+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+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCiAgIH0KIAogI2RlZmluZSBDUFVfU0NJeF9GTlMobmFtZSwgc2NpX29mZnNldCwgc2NpX3NpemUsIHNjaWZfb2Zmc2V0LCBzY2lmX3NpemUpXApAQCAtNzkxLDExICs3ODksMTYgQEAKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoyKSsxNipicHMpLygzMipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCi0jZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKChjbGsqMikrMTYqYnBzKS8oMTYqYnBzKS0xKQorc3RhdGljIGlubGluZSBpbnQgc2NicnJfY2FsYyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnBzLCBpbnQgY2xrKQoreworCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRikKKwkJcmV0dXJuIChjbGsrMTYqYnBzKS8oMzIqYnBzKS0xOworCWVsc2UKKwkJcmV0dXJuICgoY2xrKjIpKzE2KmJwcykvKDE2KmJwcyktMTsKK30KKyNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspIHNjYnJyX2NhbGMocG9ydCwgYnBzLCBjbGspCiAjZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKLSNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzKSAoKChDT05GSUdfQ1BVX0NMT0NLKjEwMDAvMzIpL2JwcyktMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotI2RlZmluZSBTQ0JSUl9WQUxVRShicHMpICgoY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2srMTYqYnBzKS8oMzIqYnBzKS0xKQorI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKCgoY2xrKjEwMDAvMzIpL2JwcyktMSkKICNlbHNlIC8qIEdlbmVyaWMgU0ggKi8KICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoY2xrKzE2KmJwcykvKDMyKmJwcyktMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IGI3M2UzYzAuLmQ1Mjc2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNkZWZpbmUgU05fU0FMX0JVRkZFUl9TSVpFICg2NCAqICgxIDw8IDEwKSkKIAogI2RlZmluZSBTTl9TQUxfVUFSVF9GSUZPX0RFUFRIIDE2Ci0jZGVmaW5lIFNOX1NBTF9VQVJUX0ZJRk9fU1BFRURfQ1BTIDk2MDAvMTAKKyNkZWZpbmUgU05fU0FMX1VBUlRfRklGT19TUEVFRF9DUFMgKDk2MDAvMTApCiAKIC8qIHNuX3RyYW5zbWl0X2NoYXJzKCkgY2FsbGluZyBhcmdzICovCiAjZGVmaW5lIFRSQU5TTUlUX0JVRkZFUkVECTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCmluZGV4IDUzOWM5MzMuLjMxNWE5MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9DUE0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9NYWtlZmlsZSBiL2RyaXZlcnMvc2gvTWFrZWZpbGUKaW5kZXggYTk2ZjRhOC4uNmEwMjVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NoL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIFN1cGVySCBzcGVjaWZpYyBkcml2ZXJzLgogIwotCiBvYmotJChDT05GSUdfU1VQRVJIWVdBWSkJKz0gc3VwZXJoeXdheS8KIG9iai0kKENPTkZJR19NQVBMRSkJCSs9IG1hcGxlLworb2JqLXkJCQkJKz0gaW50Yy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCnJlbmFtZSB0byBkcml2ZXJzL3NoL2ludGMuYwppbmRleCA4YzcwZTIwLi41OGQyNGM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KIAogI2RlZmluZSBfSU5UQ19NSyhmbiwgbW9kZSwgYWRkcl9lLCBhZGRyX2QsIHdpZHRoLCBzaGlmdCkgXAogCSgoc2hpZnQpIHwgKCh3aWR0aCkgPDwgNSkgfCAoKGZuKSA8PCA5KSB8ICgobW9kZSkgPDwgMTMpIHwgXApAQCAtODYsMjQgKzg3LDI0IEBACiAKIHN0YXRpYyB2b2lkIHdyaXRlXzgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQljdHJsX291dGIoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKKwlfX3Jhd193cml0ZWIoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVfMTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQljdHJsX291dHcoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVfMzIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQljdHJsX291dGwoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKKwlfX3Jhd193cml0ZWwoc2V0X2ZpZWxkKDAsIGRhdGEsIGgpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgbW9kaWZ5XzgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGgsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljdHJsX291dGIoc2V0X2ZpZWxkKGN0cmxfaW5iKGFkZHIpLCBkYXRhLCBoKSwgYWRkcik7CisJX19yYXdfd3JpdGViKHNldF9maWVsZChfX3Jhd19yZWFkYihhZGRyKSwgZGF0YSwgaCksIGFkZHIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTExLDcgKzExMiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3RybF9vdXR3KHNldF9maWVsZChjdHJsX2ludyhhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCV9fcmF3X3dyaXRldyhzZXRfZmllbGQoX19yYXdfcmVhZHcoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTExOSw3ICsxMjAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0bChzZXRfZmllbGQoY3RybF9pbmwoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlfX3Jhd193cml0ZWwoc2V0X2ZpZWxkKF9fcmF3X3JlYWRsKGFkZHIpLCBkYXRhLCBoKSwgYWRkcik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yNDYsMTYgKzI0NywxNiBAQAogCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIDApOwogCQlzd2l0Y2ggKF9JTlRDX0ZOKGhhbmRsZSkpIHsKIAkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAwOgkvKiA4Yml0ICovCi0JCQljdHJsX2luYihhZGRyKTsKLQkJCWN0cmxfb3V0YigweGZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJX19yYXdfcmVhZGIoYWRkcik7CisJCQlfX3Jhd193cml0ZWIoMHhmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDE6CS8qIDE2Yml0ICovCi0JCQljdHJsX2ludyhhZGRyKTsKLQkJCWN0cmxfb3V0dygweGZmZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CisJCQlfX3Jhd19yZWFkdyhhZGRyKTsKKwkJCV9fcmF3X3dyaXRldygweGZmZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CiAJCQlicmVhazsKIAkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAzOgkvKiAzMmJpdCAqLwotCQkJY3RybF9pbmwoYWRkcik7Ci0JCQljdHJsX291dGwoMHhmZmZmZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKKwkJCV9fcmF3X3JlYWRsKGFkZHIpOworCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwpAQCAtNDY0LDkgKzQ2NSwxMCBAQAogCQkJfQogCiAJCQlmbiArPSAocHItPnJlZ193aWR0aCA+PiAzKSAtIDE7Ci0JCQliaXQgPSBwci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGgpOwogCi0JCQlCVUdfT04oYml0IDwgMCk7CisJCQlCVUdfT04oKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCA+IHByLT5yZWdfd2lkdGgpOworCisJCQliaXQgPSBwci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGgpOwogCiAJCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCiAJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCkBAIC01MzEsOSArNTMzLDEwIEBACiAKIAkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOwogCQkJZm4gKz0gKHNyLT5yZWdfd2lkdGggPj4gMykgLSAxOwotCQkJYml0ID0gc3ItPnJlZ193aWR0aCAtICgoaiArIDEpICogc3ItPmZpZWxkX3dpZHRoKTsKIAotCQkJQlVHX09OKGJpdCA8IDApOworCQkJQlVHX09OKChqICsgMSkgKiBzci0+ZmllbGRfd2lkdGggPiBzci0+cmVnX3dpZHRoKTsKKworCQkJYml0ID0gc3ItPnJlZ193aWR0aCAtICgoaiArIDEpICogc3ItPmZpZWxkX3dpZHRoKTsKIAogCQkJcmV0dXJuIF9JTlRDX01LKGZuLCAwLCBpbnRjX2dldF9yZWcoZCwgc3ItPnJlZyksCiAJCQkJCTAsIHNyLT5maWVsZF93aWR0aCwgYml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3OWRlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC0wLDAgKzEsNDYgQEAKK21lbnVjb25maWcgU1RBR0lORworCWJvb2wgIlN0YWdpbmcgZHJpdmVycyIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNlbGVjdCBhIG51bWJlciBvZiBkcml2ZXJzIHRoYXQgYXJlCisJICBub3Qgb2YgdGhlICJub3JtYWwiIExpbnV4IGtlcm5lbCBxdWFsaXR5IGxldmVsLiAgVGhlc2UgZHJpdmVycworCSAgYXJlIHBsYWNlZCBoZXJlIGluIG9yZGVyIHRvIGdldCBhIHdpZGVyIGF1ZGllbmNlIGZvciB1c2Ugb2YKKwkgIHRoZW0uICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIHVuZGVyIGhlYXZ5CisJICBkZXZlbG9wbWVudCwgbWF5IG9yIG1heSBub3Qgd29yaywgYW5kIG1heSBjb250YWluIHVzZXJzcGFjZQorCSAgaW50ZXJmYWNlcyB0aGF0IG1vc3QgbGlrZWx5IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgbmVhcgorCSAgZnV0dXJlLgorCisJICBVc2luZyBhbnkgb2YgdGhlc2UgZHJpdmVycyB3aWxsIHRhaW50IHlvdXIga2VybmVsIHdoaWNoIG1pZ2h0CisJICBhZmZlY3Qgc3VwcG9ydCBvcHRpb25zIGZyb20gYm90aCB0aGUgY29tbXVuaXR5LCBhbmQgdmFyaW91cworCSAgY29tbWVyY2lhbCBzdXBwb3J0IG9yZ2luaXphdGlvbnMuCisKKwkgIElmIHlvdSB3aXNoIHRvIHdvcmsgb24gdGhlc2UgZHJpdmVycywgdG8gaGVscCBpbXByb3ZlIHRoZW0sIG9yCisJICB0byByZXBvcnQgcHJvYmxlbXMgeW91IGhhdmUgd2l0aCB0aGVtLCBwbGVhc2Ugc2VlIHRoZQorCSAgZHJpdmVyX25hbWUuUkVBRE1FIGZpbGUgaW4gdGhlIGRyaXZlcnMvc3RhZ2luZy8gZGlyZWN0b3J5IHRvCisJICBzZWUgd2hhdCBuZWVkcyB0byBiZSB3b3JrZWQgb24sIGFuZCB3aG8gdG8gY29udGFjdC4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuCisKK2lmIFNUQUdJTkcKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2VjaG8vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZyIKKworZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1YmNhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACisjIE1ha2VmaWxlIGZvciBzdGFnaW5nIGRpcmVjdG9yeQorCisjIGZpeCBmb3IgYnVpbGQgc3lzdGVtIGJ1Zy4uLgorb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLm8KKworb2JqLSQoQ09ORklHX0VUMTMxWCkJCSs9IGV0MTMxeC8KK29iai0kKENPTkZJR19TTElDT1NTKQkJKz0gc2xpY29zcy8KK29iai0kKENPTkZJR19TWEcpCQkrPSBzeGcvCitvYmotJChDT05GSUdfTUU0MDAwKQkJKz0gbWU0MDAwLworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwNykJKz0gZ283MDA3Lworb2JqLSQoQ09ORklHX1VTQl9JUF9DT01NT04pCSs9IHVzYmlwLworb2JqLSQoQ09ORklHX1czNVVORCkJCSs9IHdpbmJvbmQvCitvYmotJChDT05GSUdfUFJJU00yX1VTQikJKz0gd2xhbi1uZy8KK29iai0kKENPTkZJR19FQ0hPKQkJKz0gZWNoby8KK29iai0kKENPTkZJR19VU0JfQVRNRUwpCQkrPSBhdDc2X3VzYi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNmY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorY29uZmlnIFVTQl9BVE1FTAorCXRyaXN0YXRlICJBdG1lbCBhdDc2YzUwMy9hdDc2YzUwNS9hdDc2YzUwNWEgVVNCIGNhcmRzIgorCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBVU0IKKwlkZWZhdWx0IE4KKwlzZWxlY3QgRldfTE9BREVSCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFVTQiBXaXJlbGVzcyBkZXZpY2VzIHVzaW5nIEF0bWVsIGF0NzZjNTAzLAorCSAgYXQ3NmM1MDUgb3IgYXQ3NmM1MDVhIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDdlODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1VTQl9BVE1FTCkJCSs9IGF0NzZfdXNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxMWNhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCkBAIC0wLDAgKzEsMiBAQAorcmV3cml0ZSB0aGUgZHJpdmVyIHRvIHVzZSB0aGUgcHJvcGVyIGluLWtlcm5lbCB3aXJlbGVzcyBzdGFjaworaW5zdGVhZCBvZiB1c2luZyBpdHMgb3duLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRmMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKQEAgLTAsMCArMSw1NTU5IEBACisvKgorICogYXQ3NmM1MDMvYXQ3NmM1MDUgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDMgT2xpdmVyIEt1cnRoCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDA0IE5pY2sgSm9uZXMKKyAqIENvcHlyaWdodCAoYykgMjAwNCBCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJlcmxpb3MgZHJpdmVyIGZvciBXTEFOIFVTQiBkZXZpY2VzIGJhc2VkIG9uIHRoZQorICogQXRtZWwgQVQ3NkM1MDNBLzUwNS81MDVBLgorICoKKyAqIFNvbWUgaXdfaGFuZGxlciBjb2RlIHdhcyB0YWtlbiBmcm9tIGFpcm8uYywgKEMpIDE5OTkgQmVuamFtaW4gUmVlZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+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/ICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNlbmRpZiAvKiBfV0xBTl9DT01QQVRfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jIGIvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYwppbmRleCA0ZDc0YmEzLi4zN2NhZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMKQEAgLTU0LDcgKzU0LDYgQEAKIAlpZiAobWlub3IgPj0gUEhPTkVfTlVNX0RFVklDRVMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZwaG9uZV9sb2NrKTsKIAlwID0gcGhvbmVfZGV2aWNlW21pbm9yXTsKIAlpZiAocCkKQEAgLTgxLDcgKzgwLDYgQEAKIAlmb3BzX3B1dChvbGRfZm9wcyk7CiBlbmQ6CiAJbXV0ZXhfdW5sb2NrKCZwaG9uZV9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCA1ZGNjZjA1Li5mOWI0NjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtNDcsNiArNDcsOSBAQAogCXN0cnVjdCBjbGFzcyAqY2xhc3M7CiB9ICp1aW9fY2xhc3M7CiAKKy8qIFByb3RlY3QgaWRyIGFjY2Vzc2VzICovCitzdGF0aWMgREVGSU5FX01VVEVYKG1pbm9yX2xvY2spOworCiAvKgogICogYXR0cmlidXRlcwogICovCkBAIC0yMzksNyArMjQyLDYgQEAKIAogc3RhdGljIGludCB1aW9fZ2V0X21pbm9yKHN0cnVjdCB1aW9fZGV2aWNlICppZGV2KQogewotCXN0YXRpYyBERUZJTkVfTVVURVgobWlub3JfbG9jayk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAJaW50IGlkOwogCkBAIC0yNjEsNyArMjYzLDkgQEAKIAogc3RhdGljIHZvaWQgdWlvX2ZyZWVfbWlub3Ioc3RydWN0IHVpb19kZXZpY2UgKmlkZXYpCiB7CisJbXV0ZXhfbG9jaygmbWlub3JfbG9jayk7CiAJaWRyX3JlbW92ZSgmdWlvX2lkciwgaWRldi0+bWlub3IpOworCW11dGV4X3VubG9jaygmbWlub3JfbG9jayk7CiB9CiAKIC8qKgpAQCAtMzA1LDggKzMwOSw5IEBACiAJc3RydWN0IHVpb19saXN0ZW5lciAqbGlzdGVuZXI7CiAJaW50IHJldCA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJm1pbm9yX2xvY2spOwogCWlkZXYgPSBpZHJfZmluZCgmdWlvX2lkciwgaW1pbm9yKGlub2RlKSk7CisJbXV0ZXhfdW5sb2NrKCZtaW5vcl9sb2NrKTsKIAlpZiAoIWlkZXYpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CkBAIC0zMzIsMTggKzMzNywxNSBAQAogCQlpZiAocmV0KQogCQkJZ290byBlcnJfaW5mb29wZW47CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIAogZXJyX2luZm9vcGVuOgotCiAJa2ZyZWUobGlzdGVuZXIpOwotZXJyX2FsbG9jX2xpc3RlbmVyOgogCitlcnJfYWxsb2NfbGlzdGVuZXI6CiAJbW9kdWxlX3B1dChpZGV2LT5vd25lcik7CiAKIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCmluZGV4IDBkYTJjMjUuLjA2ZGQxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogCQkJCV9fZnVuY19fLCBzYXJiLT5sZW4sIHZjYyk7CiAJCS8qIGRpc2NhcmQgY2VsbHMgYWxyZWFkeSByZWNlaXZlZCAqLwogCQlza2JfdHJpbShzYXJiLCAwKTsKLQkJVURTTF9BU1NFUlQoc2FyYi0+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+ZGV2LCAidXNidG1jX2Rpc2Nvbm5lY3QgY2FsbGVkXG4iKTsKKworCWRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNidG1jX2NsYXNzKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmY2FwYWJpbGl0eV9hdHRyX2dycCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmRhdGFfYXR0cl9ncnApOworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCB1c2J0bWNfZGVsZXRlKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYnRtY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gInVzYnRtYyIsCisJLmlkX3RhYmxlCT0gdXNidG1jX2RldmljZXMsCisJLnByb2JlCQk9IHVzYnRtY19wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYnRtY19kaXNjb25uZWN0Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2J0bWNfaW5pdCh2b2lkKQoreworCWludCByZXRjb2RlOworCisJcmV0Y29kZSA9IHVzYl9yZWdpc3RlcigmdXNidG1jX2RyaXZlcik7CisJaWYgKHJldGNvZGUpCisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSI6IFVuYWJsZSB0byByZWdpc3RlciBkcml2ZXJcbiIpOworCXJldHVybiByZXRjb2RlOworfQorbW9kdWxlX2luaXQodXNidG1jX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNidG1jX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNidG1jX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh1c2J0bWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwppbmRleCBjYzlmMzk3Li5lMTc1OWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC0xMzQsNSArMTM0LDUgQEAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIExpbnV4IHdpbGwgcmVmdXNlIHRvIGVudW1lcmF0ZQogCSAgZXh0ZXJuYWwgaHVicy4gIE9URyBob3N0cyBhcmUgYWxsb3dlZCB0byByZWR1Y2UgaGFyZHdhcmUKIAkgIGFuZCBzb2Z0d2FyZSBjb3N0cyBieSBub3Qgc3VwcG9ydGluZyBleHRlcm5hbCBodWJzLiAgU28KLQkgIGFyZSAiRW1lZGRlZCBIb3N0cyIgdGhhdCBkb24ndCBvZmZlciBPVEcgc3VwcG9ydC4KKwkgIGFyZSAiRW1iZWRkZWQgSG9zdHMiIHRoYXQgZG9uJ3Qgb2ZmZXIgT1RHIHN1cHBvcnQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCA3YTRmYTc5Li4yYmNjZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC00MTMsNyArNDEzLDggQEAKIAlpZiAobGlrZWx5KGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpKQogCQljbGVhcl9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKTsKIAllbHNlCi0JCXdhcm4oImludGVyZmFjZSBudW1iZXIgJXUgb3V0IG9mIHJhbmdlIiwgaWZudW0pOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiaW50ZXJmYWNlIG51bWJlciAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkgaWZudW0pOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIApAQCAtNjI0LDYgKzYyNSw4IEBACiAJc21wX3dtYigpOwogCWxpc3RfYWRkX3RhaWwoJnBzLT5saXN0LCAmZGV2LT5maWxlbGlzdCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHM7CisJc25vb3AoJmRldi0+ZGV2LCAib3BlbmVkIGJ5IHByb2Nlc3MgJWQ6ICVzXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCWN1cnJlbnQtPmNvbW0pOwogIG91dDoKIAlpZiAocmV0KSB7CiAJCWtmcmVlKHBzKTsKQEAgLTE3NzQsMTkgKzE3NzcsMjAgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKFVTQl9ERVZJQ0VfREVWLCBVU0JfREVWSUNFX01BWCwKIAkJCQkJInVzYl9kZXZpY2UiKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidW5hYmxlIHRvIHJlZ2lzdGVyIG1pbm9ycyBmb3IgdXNiX2RldmljZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBtaW5vcnMgZm9yIHVzYl9kZXZpY2VcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJY2Rldl9pbml0KCZ1c2JfZGV2aWNlX2NkZXYsICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zKTsKIAlyZXR2YWwgPSBjZGV2X2FkZCgmdXNiX2RldmljZV9jZGV2LCBVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWQiLCBVU0JfREVWSUNFX01BSk9SKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWRcbiIsCisJCSAgICAgICBVU0JfREVWSUNFX01BSk9SKTsKIAkJZ290byBlcnJvcl9jZGV2OwogCX0KICNpZmRlZiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUwogCXVzYl9jbGFzc2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInVzYl9kZXZpY2UiKTsKIAlpZiAoSVNfRVJSKHVzYl9jbGFzc2Rldl9jbGFzcykpIHsKLQkJZXJyKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdXNiX2RldmljZSBjbGFzcyIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciB1c2JfZGV2aWNlIGNsYXNzXG4iKTsKIAkJcmV0dmFsID0gUFRSX0VSUih1c2JfY2xhc3NkZXZfY2xhc3MpOwogCQljZGV2X2RlbCgmdXNiX2RldmljZV9jZGV2KTsKIAkJdXNiX2NsYXNzZGV2X2NsYXNzID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IDVhN2ZhNmYuLmU5MzViZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMTA3MCw3ICsxMDcwLDggQEAKIAkJCQlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOwogCiAJCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKLQkJCQlpZiAoIWRyaXZlci0+cmVzZXRfcmVzdW1lKQorCQkJCWlmICghZHJpdmVyLT5yZXNldF9yZXN1bWUgfHwKKwkJCQkgICAgaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggMjI5MTIxMy4uOTQ2ZmFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTY5LDcgKzE2OSw4IEBACiAJZXJyb3IgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsIE1BWF9FTkRQT0lOVF9NSU5PUlMsCiAJCQkJICAgICJ1c2JfZW5kcG9pbnQiKTsKIAlpZiAoZXJyb3IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IGEgZHluYW1pYyBtYWpvciBmb3IgdXNiIGVuZHBvaW50cyIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgYSBkeW5hbWljIG1ham9yIGZvciAiCisJCSAgICAgICAidXNiIGVuZHBvaW50cy5cbiIpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCXVzYl9lbmRwb2ludF9tYWpvciA9IE1BSk9SKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCmluZGV4IDU1ZjdmMzEuLjk5N2U2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC04Niw3ICs4Niw3IEBACiAJdXNiX2NsYXNzLT5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInVzYiIpOwogCWlmIChJU19FUlIodXNiX2NsYXNzLT5jbGFzcykpIHsKIAkJcmVzdWx0ID0gSVNfRVJSKHVzYl9jbGFzcy0+Y2xhc3MpOwotCQllcnIoImNsYXNzX2NyZWF0ZSBmYWlsZWQgZm9yIHVzYiBkZXZpY2VzIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2xhc3NfY3JlYXRlIGZhaWxlZCBmb3IgdXNiIGRldmljZXNcbiIpOwogCQlrZnJlZSh1c2JfY2xhc3MpOwogCQl1c2JfY2xhc3MgPSBOVUxMOwogCX0KQEAgLTExNSw3ICsxMTUsOCBAQAogCiAJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIiwgJnVzYl9mb3BzKTsKIAlpZiAoZXJyb3IpCi0JCWVycigidW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgdXNiIGRldmljZXMiLCBVU0JfTUFKT1IpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIHVzYiBkZXZpY2VzXG4iLAorCQkgICAgICAgVVNCX01BSk9SKTsKIAogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IGM4MDM1YTguLmZjOTAxOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtODEsNiArODEsMTAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogS2VlcCB0cmFjayBvZiB3aGljaCBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgbG9hZGVkICovCit1bnNpZ25lZCBsb25nIHVzYl9oY2RzX2xvYWRlZDsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2RzX2xvYWRlZCk7CisKIC8qIGhvc3QgY29udHJvbGxlcnMgd2UgbWFuYWdlICovCiBMSVNUX0hFQUQgKHVzYl9idXNfbGlzdCk7CiBFWFBPUlRfU1lNQk9MX0dQTCAodXNiX2J1c19saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmggYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCmluZGV4IGU3MTBjZTAuLjJkY2RlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaApAQCAtNDgyLDQgKzQ4MiwxMCBAQAogICovCiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBlaGNpX2NmX3BvcnRfcmVzZXRfcndzZW07CiAKKy8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgYXJlIGxvYWRlZCAqLworI2RlZmluZSBVU0JfVUhDSV9MT0FERUQJCTAKKyNkZWZpbmUgVVNCX09IQ0lfTE9BREVECQkxCisjZGVmaW5lIFVTQl9FSENJX0xPQURFRAkJMgorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdXNiX2hjZHNfbG9hZGVkOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggZDk5OTYzOC4uZDczY2UyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJdW5zaWduZWQJCWhhc19pbmRpY2F0b3JzOjE7CiAJdTgJCQlpbmRpY2F0b3JbVVNCX01BWENISUxEUkVOXTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWxlZHM7CisJc3RydWN0IGRlbGF5ZWRfd29yawlpbml0X3dvcms7CiB9OwogCiAKQEAgLTEwMCw2ICsxMDEsMTUgQEAKIE1PRFVMRV9QQVJNX0RFU0MgKGJsaW5rZW5saWdodHMsICJ0cnVlIHRvIGN5Y2xlIGxlZHMgb24gaHVicyIpOwogCiAvKgorICogRGV2aWNlIFNBVEE4MDAwIEZXMS4wIGZyb20gREFUQVNUMFIgVGVjaG5vbG9neSBDb3JwIHJlcXVpcmVzIGFib3V0CisgKiAxMCBzZWNvbmRzIHRvIHNlbmQgcmVwbHkgZm9yIHRoZSBpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0LgorICovCisvKiBkZWZpbmUgaW5pdGlhbCA2NC1ieXRlIGRlc2NyaXB0b3IgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworc3RhdGljIGludCBpbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dCA9IFVTQl9DVFJMX0dFVF9USU1FT1VUOworbW9kdWxlX3BhcmFtKGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0LCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0LCAiaW5pdGlhbCA2NC1ieXRlIGRlc2NyaXB0b3IgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCA1MDAwIC0gNS4wIHNlY29uZHMpIik7CisKKy8qCiAgKiBBcyBvZiAyLjYuMTAgd2UgaW50cm9kdWNlIGEgbmV3IFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lIHdoaWNoCiAgKiBjbG9zZWx5IHJlc2VtYmxlcyB0aGUgd2F5IFdpbmRvd3Mgd29ya3MuICBIb3BlZnVsbHkgaXQgd2lsbCBiZSBjb21wYXRpYmxlCiAgKiB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2YgZGV2aWNlcyB0aGFuIHRoZSBvbGQgc2NoZW1lLiAgSG93ZXZlciBzb21lIHByZXZpb3VzbHkKQEAgLTUxNSwxMCArNTI1LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaHViX3R0X2NsZWFyX2J1ZmZlcik7CiAKLXN0YXRpYyB2b2lkIGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX2h1YiAqaHViKQorLyogSWYgZG9fZGVsYXkgaXMgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgY2FsbGVyCisgKiBuZWVkcyB0byBkZWxheS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX2h1YiAqaHViLCBib29sIGRvX2RlbGF5KQogewogCWludCBwb3J0MTsKIAl1bnNpZ25lZCBwZ29vZF9kZWxheSA9IGh1Yi0+ZGVzY3JpcHRvci0+YlB3ck9uMlB3ckdvb2QgKiAyOworCXVuc2lnbmVkIGRlbGF5OwogCXUxNiB3SHViQ2hhcmFjdGVyaXN0aWNzID0KIAkJCWxlMTZfdG9fY3B1KGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyk7CiAKQEAgLTUzNyw3ICs1NTEsMTAgQEAKIAkJc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKIAogCS8qIFdhaXQgYXQgbGVhc3QgMTAwIG1zZWMgZm9yIHBvd2VyIHRvIGJlY29tZSBzdGFibGUgKi8KLQltc2xlZXAobWF4KHBnb29kX2RlbGF5LCAodW5zaWduZWQpIDEwMCkpOworCWRlbGF5ID0gbWF4KHBnb29kX2RlbGF5LCAodW5zaWduZWQpIDEwMCk7CisJaWYgKGRvX2RlbGF5KQorCQltc2xlZXAoZGVsYXkpOworCXJldHVybiBkZWxheTsKIH0KIAogc3RhdGljIGludCBodWJfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2h1YiAqaHViLApAQCAtNTk5LDIxICs2MTYsNTUgQEAKIH0KIAogZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHsKLQlIVUJfSU5JVCwgSFVCX1BPU1RfUkVTRVQsIEhVQl9SRVNVTUUsIEhVQl9SRVNFVF9SRVNVTUUKKwlIVUJfSU5JVCwgSFVCX0lOSVQyLCBIVUJfSU5JVDMsCisJSFVCX1BPU1RfUkVTRVQsIEhVQl9SRVNVTUUsIEhVQl9SRVNFVF9SRVNVTUUsCiB9OwogCitzdGF0aWMgdm9pZCBodWJfaW5pdF9mdW5jMihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKTsKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpOworCiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CiAJaW50IHBvcnQxOwogCWludCBzdGF0dXM7CiAJYm9vbCBuZWVkX2RlYm91bmNlX2RlbGF5ID0gZmFsc2U7CisJdW5zaWduZWQgZGVsYXk7CisKKwkvKiBDb250aW51ZSBhIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gKi8KKwlpZiAodHlwZSA9PSBIVUJfSU5JVDIpCisJCWdvdG8gaW5pdDI7CisJaWYgKHR5cGUgPT0gSFVCX0lOSVQzKQorCQlnb3RvIGluaXQzOwogCiAJLyogQWZ0ZXIgYSByZXN1bWUsIHBvcnQgcG93ZXIgc2hvdWxkIHN0aWxsIGJlIG9uLgogCSAqIEZvciBhbnkgb3RoZXIgdHlwZSBvZiBhY3RpdmF0aW9uLCB0dXJuIGl0IG9uLgogCSAqLwotCWlmICh0eXBlICE9IEhVQl9SRVNVTUUpCi0JCWh1Yl9wb3dlcl9vbihodWIpOworCWlmICh0eXBlICE9IEhVQl9SRVNVTUUpIHsKKworCQkvKiBTcGVlZCB1cCBzeXN0ZW0gYm9vdCBieSB1c2luZyBhIGRlbGF5ZWRfd29yayBmb3IgdGhlCisJCSAqIGh1YidzIGluaXRpYWwgcG93ZXItdXAgZGVsYXlzLiAgVGhpcyBpcyBwcmV0dHkgYXdrd2FyZAorCQkgKiBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgYSBob21lLWJyZXdlZCBzb3J0IG9mCisJCSAqIHNldGptcC9sb25nam1wLCBidXQgaXQgc2F2ZXMgYXQgbGVhc3QgMTAwIG1zIGZvciBlYWNoCisJCSAqIHJvb3QgaHViIChhc3N1bWluZyB1c2Jjb3JlIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAorCQkgKiByYXRoZXIgdGhhbiBhcyBhIG1vZHVsZSkuICBJdCBhZGRzIHVwLgorCQkgKgorCQkgKiBUaGlzIGNhbid0IGJlIGRvbmUgZm9yIEhVQl9SRVNVTUUgb3IgSFVCX1JFU0VUX1JFU1VNRQorCQkgKiBiZWNhdXNlIGZvciB0aG9zZSBhY3RpdmF0aW9uIHR5cGVzIHRoZSBwb3J0cyBoYXZlIHRvIGJlCisJCSAqIG9wZXJhdGlvbmFsIHdoZW4gd2UgcmV0dXJuLiAgSW4gdGhlb3J5IHRoaXMgY291bGQgYmUgZG9uZQorCQkgKiBmb3IgSFVCX1BPU1RfUkVTRVQsIGJ1dCBpdCdzIGVhc2llciBub3QgdG8uCisJCSAqLworCQlpZiAodHlwZSA9PSBIVUJfSU5JVCkgeworCQkJZGVsYXkgPSBodWJfcG93ZXJfb24oaHViLCBmYWxzZSk7CisJCQlQUkVQQVJFX0RFTEFZRURfV09SSygmaHViLT5pbml0X3dvcmssIGh1Yl9pbml0X2Z1bmMyKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaHViLT5pbml0X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKKwkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIHsKKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOworCQl9CisJfQorIGluaXQyOgogCiAJLyogQ2hlY2sgZWFjaCBwb3J0IGFuZCBzZXQgaHViLT5jaGFuZ2VfYml0cyB0byBsZXQga2h1YmQga25vdwogCSAqIHdoaWNoIHBvcnRzIG5lZWQgYXR0ZW50aW9uLgpAQCAtNjkyLDkgKzc0MywyMCBAQAogCSAqIElmIGFueSBwb3J0LXN0YXR1cyBjaGFuZ2VzIGRvIG9jY3VyIGR1cmluZyB0aGlzIGRlbGF5LCBraHViZAogCSAqIHdpbGwgc2VlIHRoZW0gbGF0ZXIgYW5kIGhhbmRsZSB0aGVtIG5vcm1hbGx5LgogCSAqLwotCWlmIChuZWVkX2RlYm91bmNlX2RlbGF5KQotCQltc2xlZXAoSFVCX0RFQk9VTkNFX1NUQUJMRSk7CisJaWYgKG5lZWRfZGVib3VuY2VfZGVsYXkpIHsKKwkJZGVsYXkgPSBIVUJfREVCT1VOQ0VfU1RBQkxFOwogCisJCS8qIERvbid0IGRvIGEgbG9uZyBzbGVlcCBpbnNpZGUgYSB3b3JrcXVldWUgcm91dGluZSAqLworCQlpZiAodHlwZSA9PSBIVUJfSU5JVDIpIHsKKwkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgaHViX2luaXRfZnVuYzMpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmluaXRfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQzOiBiZWxvdyAqLworCQl9IGVsc2UgeworCQkJbXNsZWVwKGRlbGF5KTsKKwkJfQorCX0KKyBpbml0MzoKIAlodWItPnF1aWVzY2luZyA9IDA7CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihodWItPnVyYiwgR0ZQX05PSU8pOwpAQCAtNzA3LDYgKzc2OSwyMSBAQAogCWtpY2tfa2h1YmQoaHViKTsKIH0KIAorLyogSW1wbGVtZW50IHRoZSBjb250aW51YXRpb25zIGZvciB0aGUgZGVsYXlzIGFib3ZlICovCitzdGF0aWMgdm9pZCBodWJfaW5pdF9mdW5jMihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCB1c2JfaHViLCBpbml0X3dvcmsud29yayk7CisKKwlodWJfYWN0aXZhdGUoaHViLCBIVUJfSU5JVDIpOworfQorCitzdGF0aWMgdm9pZCBodWJfaW5pdF9mdW5jMyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCB1c2JfaHViLCBpbml0X3dvcmsud29yayk7CisKKwlodWJfYWN0aXZhdGUoaHViLCBIVUJfSU5JVDMpOworfQorCiBlbnVtIGh1Yl9xdWllc2NpbmdfdHlwZSB7CiAJSFVCX0RJU0NPTk5FQ1QsIEhVQl9QUkVfUkVTRVQsIEhVQl9TVVNQRU5ECiB9OwpAQCAtNzE2LDYgKzc5Myw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CiAJaW50IGk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmh1Yi0+aW5pdF93b3JrKTsKKwogCS8qIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5IHdvbid0IHJlLXRyaWdnZXIgKi8KIAlodWItPnF1aWVzY2luZyA9IDE7CiAKQEAgLTEwOTksNiArMTE3OCw3IEBACiAJaHViLT5pbnRmZGV2ID0gJmludGYtPmRldjsKIAlodWItPmhkZXYgPSBoZGV2OwogCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmxlZHMsIGxlZF93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmaHViLT5pbml0X3dvcmssIE5VTEwpOwogCXVzYl9nZXRfaW50ZihpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGh1Yik7CkBAIC0yNDY3LDcgKzI1NDcsNyBAQAogCQkJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOLAogCQkJCQlVU0JfRFRfREVWSUNFIDw8IDgsIDAsCiAJCQkJCWJ1ZiwgR0VUX0RFU0NSSVBUT1JfQlVGU0laRSwKLQkJCQkJVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQkJCQlpbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dCk7CiAJCQkJc3dpdGNoIChidWYtPmJNYXhQYWNrZXRTaXplMCkgewogCQkJCWNhc2UgODogY2FzZSAxNjogY2FzZSAzMjogY2FzZSA2NDogY2FzZSAyNTU6CiAJCQkJCWlmIChidWYtPmJEZXNjcmlwdG9yVHlwZSA9PQpAQCAtMzAzNSw3ICszMTE1LDcgQEAKIAkJCQkJaSk7CiAJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCiAJCQkJCVVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQpOwotCQkJCWh1Yl9wb3dlcl9vbihodWIpOworCQkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQkJfQogCiAJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgewpAQCAtMzA3MCw3ICszMTUwLDcgQEAKIAkJCQlkZXZfZGJnIChodWJfZGV2LCAib3ZlcmN1cnJlbnQgY2hhbmdlXG4iKTsKIAkJCQltc2xlZXAoNTAwKTsJLyogQ29vbCBkb3duICovCiAJCQkJY2xlYXJfaHViX2ZlYXR1cmUoaGRldiwgQ19IVUJfT1ZFUl9DVVJSRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlodWJfcG93ZXJfb24oaHViKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlodWJfcG93ZXJfb24oaHViLCB0cnVlKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKaW5kZXggNzdmYTdhMC4uOTQ2MzIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpAQCAtMTgwLDggKzE4MCw4IEBACiAJCQlsaXN0bW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJ1c2JmczogdW5yZWNvZ25pc2VkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgotCQkJICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZnM6IHVucmVjb2duaXNlZCBtb3VudCBvcHRpb24gIgorCQkJICAgICAgICJcIiVzXCIgb3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTI0MCw3ICsyNDAsOSBAQAogCQkJCXVwZGF0ZV9zcGVjaWFsKGJ1cyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXdhcm4oIlVua25vd24gbm9kZSAlcyBtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLGJ1cy0+ZF9uYW1lLm5hbWUsYnVzLT5kX2lub2RlLT5pX21vZGUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmZzOiBVbmtub3duIG5vZGUgJXMgIgorCQkJCSAgICAgICAibW9kZSAleCBmb3VuZCBvbiByZW1vdW50IVxuIiwKKwkJCQkgICAgICAgYnVzLT5kX25hbWUubmFtZSwgYnVzLT5kX2lub2RlLT5pX21vZGUpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yNTksNyArMjYxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSkpIHsKLQkJd2FybigidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvcjoiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvci5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU5OSw3ICs2MDEsNyBAQAogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlcyBzcGVjaWFsIGZpbGUgKi8KIAlyZXR2YWwgPSBzaW1wbGVfcGluX2ZzKCZ1c2JfZnNfdHlwZSwgJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgiVW5hYmxlIHRvIGdldCB1c2JmcyBtb3VudCIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgdXNiZnMgbW91bnRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC02MTEsNyArNjEzLDcgQEAKIAkJCQkJICAgICAgIE5VTEwsICZ1c2Jmc19kZXZpY2VzX2ZvcHMsCiAJCQkJCSAgICAgICBsaXN0dWlkLCBsaXN0Z2lkKTsKIAlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkgPT0gTlVMTCkgewotCQllcnIgKCJVbmFibGUgdG8gY3JlYXRlIGRldmljZXMgdXNiZnMgZmlsZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9jbGVhbl9tb3VudHM7CiAJfQpAQCAtNjYzLDcgKzY2NSw3IEBACiAJYnVzLT51c2Jmc19kZW50cnkgPSBmc19jcmVhdGVfZmlsZSAobmFtZSwgYnVzbW9kZSB8IFNfSUZESVIsIHBhcmVudCwKIAkJCQkJICAgIGJ1cywgTlVMTCwgYnVzdWlkLCBidXNnaWQpOwogCWlmIChidXMtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC02OTQsNyArNjk2LDcgQEAKIAkJCQkJICAgICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zLAogCQkJCQkgICAgZGV2dWlkLCBkZXZnaWQpOwogCWlmIChkZXYtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggMjg2YjQ0My4uODg3NzM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTEyMDQsNyArMTIwNCw4IEBACiAKIAlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGFsdGVybmF0ZSk7CiAJaWYgKCFhbHQpIHsKLQkJd2Fybigic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZCIsIGFsdGVybmF0ZSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGFsdHNldHRpbmcgJWQiLAorCQkJIGFsdGVybmF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDVlMWY1ZDUuLmY2NmZiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTc0Myw2ICs3NDMsMjkgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgc2hvd19tb2RhbGlhcywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3VwcG9ydHNfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCByZXQ7CisKKwlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCS8qIERldmljZXMgd2lsbCBiZSBhdXRvc3VzcGVuZGVkIGV2ZW4gd2hlbiBhbiBpbnRlcmZhY2UgaXNuJ3QgY2xhaW1lZCAqLworCWlmICghaW50Zi0+ZGV2LmRyaXZlciB8fAorCQkJdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKS0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIDEpOworCWVsc2UKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgMCk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIERFVklDRV9BVFRSKHN1cHBvcnRzX2F1dG9zdXNwZW5kLCBTX0lSVUdPLCBzaG93X3N1cHBvcnRzX2F1dG9zdXNwZW5kLCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmludGZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfYkludGVyZmFjZU51bWJlci5hdHRyLAogCSZkZXZfYXR0cl9iQWx0ZXJuYXRlU2V0dGluZy5hdHRyLApAQCAtNzUxLDYgKzc3NCw3IEBACiAJJmRldl9hdHRyX2JJbnRlcmZhY2VTdWJDbGFzcy5hdHRyLAogCSZkZXZfYXR0cl9iSW50ZXJmYWNlUHJvdG9jb2wuYXR0ciwKIAkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwKKwkmZGV2X2F0dHJfc3VwcG9ydHNfYXV0b3N1c3BlbmQuYXR0ciwKIAlOVUxMLAogfTsKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGludGZfYXR0cl9ncnAgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCA0NzExMWU4Li5mMjYzODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTEwLDYgKzEwLDggQEAKIAogI2RlZmluZSB0b191cmIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1cmIsIGtyZWYpCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodXNiX3JlamVjdF9sb2NrKTsKKwogc3RhdGljIHZvaWQgdXJiX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHVyYiAqdXJiID0gdG9fdXJiKGtyZWYpOwpAQCAtNjgsNyArNzAsNyBAQAogCQlpc29fcGFja2V0cyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciksCiAJCW1lbV9mbGFncyk7CiAJaWYgKCF1cmIpIHsKLQkJZXJyKCJhbGxvY191cmI6IGttYWxsb2MgZmFpbGVkIik7CisJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfdXJiOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAl1c2JfaW5pdF91cmIodXJiKTsKQEAgLTEyNyw2ICsxMjksMTMgQEAKIAl1c2JfZ2V0X3VyYih1cmIpOwogCWxpc3RfYWRkX3RhaWwoJnVyYi0+YW5jaG9yX2xpc3QsICZhbmNob3ItPnVyYl9saXN0KTsKIAl1cmItPmFuY2hvciA9IGFuY2hvcjsKKworCWlmICh1bmxpa2VseShhbmNob3ItPnBvaXNvbmVkKSkgeworCQlzcGluX2xvY2soJnVzYl9yZWplY3RfbG9jayk7CisJCXVyYi0+cmVqZWN0Kys7CisJCXNwaW5fdW5sb2NrKCZ1c2JfcmVqZWN0X2xvY2spOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FuY2hvcl91cmIpOwpAQCAtMzk4LDcgKzQwNyw3IEBACiAKIAkvKiBmYWlsIGlmIHN1Ym1pdHRlciBnYXZlIGJvZ3VzIGZsYWdzICovCiAJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgIT0gb3JpZ19mbGFncykgewotCQllcnIoIkJPR1VTIHVyYiBmbGFncywgJXggLS0+ICV4IiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCT0dVUyB1cmIgZmxhZ3MsICV4IC0tPiAleFxuIiwKIAkJCW9yaWdfZmxhZ3MsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NDQsMjUgKzU1Myw3MCBAQAogICovCiB2b2lkIHVzYl9raWxsX3VyYihzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RhdGljIERFRklORV9NVVRFWChyZWplY3RfbXV0ZXgpOwotCiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5lcCkpCiAJCXJldHVybjsKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJKyt1cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogCiAJdXNiX2hjZF91bmxpbmtfdXJiKHVyYiwgLUVOT0VOVCk7CiAJd2FpdF9ldmVudCh1c2Jfa2lsbF91cmJfcXVldWUsIGF0b21pY19yZWFkKCZ1cmItPnVzZV9jb3VudCkgPT0gMCk7CiAKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJLS11cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2tpbGxfdXJiKTsKIAogLyoqCisgKiB1c2JfcG9pc29uX3VyYiAtIHJlbGlhYmx5IGtpbGwgYSB0cmFuc2ZlciBhbmQgcHJldmVudCBmdXJ0aGVyIHVzZSBvZiBhbiBVUkIKKyAqIEB1cmI6IHBvaW50ZXIgdG8gVVJCIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgSXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgKiB1cG9uIHJldHVybiBhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3aWxsIGhhdmUgZmluaXNoZWQgYW5kIHRoZSBVUkIKKyAqIHdpbGwgYmUgdG90YWxseSBpZGxlIGFuZCBjYW5ub3QgYmUgcmV1c2VkLiAgVGhlc2UgZmVhdHVyZXMgbWFrZQorICogdGhpcyBhbiBpZGVhbCB3YXkgdG8gc3RvcCBJL08gaW4gYSBkaXNjb25uZWN0KCkgY2FsbGJhY2suCisgKiBJZiB0aGUgcmVxdWVzdCBoYXMgbm90IGFscmVhZHkgZmluaXNoZWQgb3IgYmVlbiB1bmxpbmtlZAorICogdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRU5PRU5ULgorICoKKyAqIEFmdGVyIGFuZCB3aGlsZSB0aGUgcm91dGluZSBydW5zLCBhdHRlbXB0cyB0byByZXN1Ym1pdCB0aGUgVVJCIHdpbGwgZmFpbAorICogd2l0aCBlcnJvciAtRVBFUk0uICBUaHVzIGV2ZW4gaWYgdGhlIFVSQidzIGNvbXBsZXRpb24gaGFuZGxlciBhbHdheXMKKyAqIHRyaWVzIHRvIHJlc3VibWl0LCBpdCB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgVVJCIHdpbGwgYmVjb21lIGlkbGUuCisgKgorICogVGhpcyByb3V0aW5lIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAoc3VjaCBhcyBhIGJvdHRvbQorICogaGFsZiBvciBhIGNvbXBsZXRpb24gaGFuZGxlciksIG9yIHdoZW4gaG9sZGluZyBhIHNwaW5sb2NrLCBvciBpbiBvdGhlcgorICogc2l0dWF0aW9ucyB3aGVyZSB0aGUgY2FsbGVyIGNhbid0IHNjaGVkdWxlKCkuCisgKi8KK3ZvaWQgdXNiX3BvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCEodXJiICYmIHVyYi0+ZGV2ICYmIHVyYi0+ZXApKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKwkrK3VyYi0+cmVqZWN0OworCXNwaW5fdW5sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKworCXVzYl9oY2RfdW5saW5rX3VyYih1cmIsIC1FTk9FTlQpOworCXdhaXRfZXZlbnQodXNiX2tpbGxfdXJiX3F1ZXVlLCBhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl91cmIpOworCit2b2lkIHVzYl91bnBvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYl9yZWplY3RfbG9jaywgZmxhZ3MpOworCS0tdXJiLT5yZWplY3Q7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiX3JlamVjdF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdW5wb2lzb25fdXJiKTsKKworLyoqCiAgKiB1c2Jfa2lsbF9hbmNob3JlZF91cmJzIC0gY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwogICoKQEAgLTU4OSw2ICs2NDMsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9raWxsX2FuY2hvcmVkX3VyYnMpOwogCisKKy8qKgorICogdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzIC0gY2Vhc2UgYWxsIHRyYWZmaWMgZnJvbSBhbiBhbmNob3IKKyAqIEBhbmNob3I6IGFuY2hvciB0aGUgcmVxdWVzdHMgYXJlIGJvdW5kIHRvCisgKgorICogdGhpcyBhbGxvd3MgYWxsIG91dHN0YW5kaW5nIFVSQnMgdG8gYmUgcG9pc29uZWQgc3RhcnRpbmcKKyAqIGZyb20gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLiBOZXdseSBhZGRlZCBVUkJzIHdpbGwgYWxzbyBiZQorICogcG9pc29uZWQKKyAqLwordm9pZCB1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisKKwlzcGluX2xvY2tfaXJxKCZhbmNob3ItPmxvY2spOworCWFuY2hvci0+cG9pc29uZWQgPSAxOworCXdoaWxlICghbGlzdF9lbXB0eSgmYW5jaG9yLT51cmJfbGlzdCkpIHsKKwkJdmljdGltID0gbGlzdF9lbnRyeShhbmNob3ItPnVyYl9saXN0LnByZXYsIHN0cnVjdCB1cmIsCisJCQkJICAgIGFuY2hvcl9saXN0KTsKKwkJLyogd2UgbXVzdCBtYWtlIHN1cmUgdGhlIFVSQiBpc24ndCBmcmVlZCBiZWZvcmUgd2Uga2lsbCBpdCovCisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwkJLyogdGhpcyB3aWxsIHVuYW5jaG9yIHRoZSBVUkIgKi8KKwkJdXNiX3BvaXNvbl91cmIodmljdGltKTsKKwkJdXNiX3B1dF91cmIodmljdGltKTsKKwkJc3Bpbl9sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZhbmNob3ItPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKTsKIC8qKgogICogdXNiX3VubGlua19hbmNob3JlZF91cmJzIC0gYXN5bmNocm9ub3VzbHkgY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwpAQCAtNjMzLDMgKzcxNiw3MyBAQAogCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCk7CisKKy8qKgorICogdXNiX2dldF9mcm9tX2FuY2hvciAtIGdldCBhbiBhbmNob3IncyBvbGRlc3QgdXJiCisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHdob3NlIHVyYiB5b3Ugd2FudAorICoKKyAqIHRoaXMgd2lsbCB0YWtlIHRoZSBvbGRlc3QgdXJiIGZyb20gYW4gYW5jaG9yLAorICogdW5hbmNob3IgYW5kIHJldHVybiBpdAorICovCitzdHJ1Y3QgdXJiICp1c2JfZ2V0X2Zyb21fYW5jaG9yKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJc3RydWN0IHVyYiAqdmljdGltOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkgeworCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwKKwkJCQkgICAgYW5jaG9yX2xpc3QpOworCQl1c2JfZ2V0X3VyYih2aWN0aW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQl2aWN0aW0gPSBOVUxMOworCX0KKworCXJldHVybiB2aWN0aW07Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9nZXRfZnJvbV9hbmNob3IpOworCisvKioKKyAqIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMgLSB1bmFuY2hvciBhbGwgYW4gYW5jaG9yJ3MgdXJicworICogQGFuY2hvcjogdGhlIGFuY2hvciB3aG9zZSB1cmJzIHlvdSB3YW50IHRvIHVuYW5jaG9yCisgKgorICogdXNlIHRoaXMgdG8gZ2V0IHJpZCBvZiBhbGwgYW4gYW5jaG9yJ3MgdXJicworICovCit2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpKSB7CisJCXZpY3RpbSA9IGxpc3RfZW50cnkoYW5jaG9yLT51cmJfbGlzdC5wcmV2LCBzdHJ1Y3QgdXJiLAorCQkJCSAgICBhbmNob3JfbGlzdCk7CisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQkvKiB0aGlzIG1heSBmcmVlIHRoZSBVUkIgKi8KKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCQl1c2JfcHV0X3VyYih2aWN0aW0pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKTsKKworLyoqCisgKiB1c2JfYW5jaG9yX2VtcHR5IC0gaXMgYW4gYW5jaG9yIGVtcHR5CisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHlvdSB3YW50IHRvIHF1ZXJ5CisgKgorICogcmV0dXJucyAxIGlmIHRoZSBhbmNob3IgaGFzIG5vIHVyYnMgYXNzb2NpYXRlZCB3aXRoIGl0CisgKi8KK2ludCB1c2JfYW5jaG9yX2VtcHR5KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYW5jaG9yX2VtcHR5KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBhY2M5NWIyLi5kZDRjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNDUsNyArNDUsNyBAQAogCiBjb25maWcgVVNCX0dBREdFVF9ERUJVRwogCWJvb2xlYW4gIkRlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVCAmJiBERUJVR19LRVJORUwKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgICBNYW55IGNvbnRyb2xsZXIgYW5kIGdhZGdldCBkcml2ZXJzIHdpbGwgcHJpbnQgc29tZSBkZWJ1Z2dpbmcKIAkgICBtZXNzYWdlcyBpZiB5b3UgdXNlIHRoaXMgb3B0aW9uIHRvIGFzayBmb3IgdGhvc2UgbWVzc2FnZXMuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZJTEVTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIChERVZFTE9QTUVOVCkiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIFBST0NfRlMKKwlkZXBlbmRzIG9uIFBST0NfRlMKIAloZWxwCiAJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKIAkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgc3VjaCBhcyAvcHJvYy9kcml2ZXIvdWRjCkBAIC03MCw3ICs3MCw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIGluIGRlYnVnZnMgKERFVkVMT1BNRU5UKSIKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVQgJiYgREVCVUdfRlMKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJaGVscAogCSAgIFNvbWUgb2YgdGhlIGRyaXZlcnMgaW4gdGhlICJnYWRnZXQiIGZyYW1ld29yayBjYW4gZXhwb3NlCiAJICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIGZpbGVzIHVuZGVyIC9zeXMva2VybmVsL2RlYnVnLy4KQEAgLTc5LDEyICs3OSwzNiBAQAogCSAgIEVuYWJsZSB0aGVzZSBmaWxlcyBieSBjaG9vc2luZyAiWSIgaGVyZS4gIElmIGluIGRvdWJ0LCBvcgogCSAgIHRvIGNvbnNlcnZlIGtlcm5lbCBtZW1vcnksIHNheSAiTiIuCiAKK2NvbmZpZyBVU0JfR0FER0VUX1ZCVVNfRFJBVworCWludCAiTWF4aW11bSBWQlVTIFBvd2VyIHVzYWdlICgyLTUwMCBtQSkiCisJcmFuZ2UgMiA1MDAKKwlkZWZhdWx0IDIKKwloZWxwCisJICAgU29tZSBkZXZpY2VzIG5lZWQgdG8gZHJhdyBwb3dlciBmcm9tIFVTQiB3aGVuIHRoZXkgYXJlCisJICAgY29uZmlndXJlZCwgcGVyaGFwcyB0byBvcGVyYXRlIGNpcmN1aXRyeSBvciB0byByZWNoYXJnZQorCSAgIGJhdHRlcmllcy4gIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gYW55IGxvY2FsIHBvd2VyIHN1cHBseSwKKwkgICBzdWNoIGFzIGFuIEFDIGFkYXB0ZXIgb3IgYmF0dGVyaWVzLgorCisJICAgRW50ZXIgdGhlIG1heGltdW0gcG93ZXIgeW91ciBkZXZpY2UgZHJhd3MgdGhyb3VnaCBVU0IsIGluCisJICAgbWlsbGlBbXBlcmVzLiAgVGhlIHBlcm1pdHRlZCByYW5nZSBvZiB2YWx1ZXMgaXMgMiAtIDUwMCBtQTsKKwkgICAwIG1BIHdvdWxkIGJlIGxlZ2FsLCBidXQgY2FuIG1ha2Ugc29tZSBob3N0cyBtaXNiZWhhdmUuCisKKwkgICBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBleGNlcHQgZm9yIHN5c3RlbS1zcGVjaWZpYyBnYWRnZXQKKwkgICBkcml2ZXJzIHRoYXQgaGF2ZSBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uLgorCiBjb25maWcJVVNCX0dBREdFVF9TRUxFQ1RFRAogCWJvb2xlYW4KIAogIwogIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIFN1cHBvcnQKICMKKyMgVGhlIG9yZGVyIGhlcmUgaXMgYWxwaGFiZXRpY2FsLCBleGNlcHQgdGhhdCBpbnRlZ3JhdGVkIGNvbnRyb2xsZXJzIGdvCisjIGJlZm9yZSBkaXNjcmV0ZSBvbmVzIHNvIHRoZXkgd2lsbCBiZSB0aGUgaW5pdGlhbC9kZWZhdWx0IHZhbHVlOgorIyAgIC0gaW50ZWdyYXRlZC9TT0MgY29udHJvbGxlcnMgZmlyc3QKKyMgICAtIGxpY2Vuc2VkIElQIHVzZWQgaW4gYm90aCBTT0MgYW5kIGRpc2NyZXRlIHZlcnNpb25zCisjICAgLSBkaXNjcmV0ZSBvbmVzIChpbmNsdWRpbmcgYWxsIFBDSS1vbmx5IGNvbnRyb2xsZXJzKQorIyAgIC0gZGVidWcvZHVtbXkgZ2FkZ2V0K2hjZCBpcyBsYXN0LgorIwogY2hvaWNlCiAJcHJvbXB0ICJVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gVVNCX0dBREdFVApAQCAtOTQsMjYgKzExOCwyNyBAQAogCSAgIE1hbnkgY29udHJvbGxlciBkcml2ZXJzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYzsgdGhlc2UKIAkgICBvZnRlbiBuZWVkIGJvYXJkLXNwZWNpZmljIGhvb2tzLgogCi1jb25maWcgVVNCX0dBREdFVF9BTUQ1NTM2VURDCi0JYm9vbGVhbiAiQU1ENTUzNiBVREMiCi0JZGVwZW5kcyBvbiBQQ0kKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKyMKKyMgSW50ZWdyYXRlZCBjb250cm9sbGVycworIworCitjb25maWcgVVNCX0dBREdFVF9BVDkxCisJYm9vbGVhbiAiQXRtZWwgQVQ5MSBVU0IgRGV2aWNlIFBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVNBTTlSTCAmJiAhQVJDSF9BVDkxQ0FQOQorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAJaGVscAotCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCi0JICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAotCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCi0JICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAotCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgorCSAgIE1hbnkgQXRtZWwgQVQ5MSBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBBVDkxUk0yMDAwKSBoYXZlIGEKKwkgICBmdWxsIHNwZWVkIFVTQiBEZXZpY2UgUG9ydCB3aXRoIHN1cHBvcnQgZm9yIGZpdmUgY29uZmlndXJhYmxlCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiYW1kNTUzNnVkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAogCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgogCi1jb25maWcgVVNCX0FNRDU1MzZVREMKK2NvbmZpZyBVU0JfQVQ5MQogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX0FNRDU1MzZVREMKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQVQ5MQogCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIGNvbmZpZyBVU0JfR0FER0VUX0FUTUVMX1VTQkEKIAlib29sZWFuICJBdG1lbCBVU0JBIgpAQCAtMTUwLDI4ICsxNzUsNTAgQEAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCi1jb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCi0JYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgotCWRlcGVuZHMgb24gUENJCi0Jc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECitjb25maWcgVVNCX0dBREdFVF9MSDdBNDBYCisJYm9vbGVhbiAiTEg3QTQwWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWAogCWhlbHAKLQkgICBOZXRDaGlwIDIyODAgLyAyMjgyIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKLQkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAotCSAgIAotCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCi0JICAgKGZvciBjb250cm9sIHRyYW5zZmVycykgYW5kIHNldmVyYWwgZW5kcG9pbnRzIHdpdGggZGVkaWNhdGVkCi0JICAgZnVuY3Rpb25zLgorCSAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKIAotCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCi0JICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm5ldDIyODAiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9ORVQyMjgwCitjb25maWcgVVNCX0xIN0E0MFgKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9ORVQyMjgwCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0xIN0E0MFgKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCitjb25maWcgVVNCX0dBREdFVF9PTUFQCisJYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMgfHwgTUFDSF9PTUFQX0g0X09URworCWhlbHAKKwkgICBNYW55IFRleGFzIEluc3RydW1lbnRzIE9NQVAgcHJvY2Vzc29ycyBoYXZlIGZsZXhpYmxlIGZ1bGwKKwkgICBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLCB3aXRoIHN1cHBvcnQgZm9yIHVwIHRvIDMwCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlCisJICAgY29udHJvbGxlciBpbiB0aGUgT01BUCAxNjExLCBhbmQgc2hvdWxkIHdvcmsgd2l0aCBjb250cm9sbGVycworCSAgIGluIG90aGVyIE9NQVAgcHJvY2Vzc29ycyB0b28sIGdpdmVuIG1pbm9yIHR3ZWFrcy4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm9tYXBfdWRjIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfT01BUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX09URworCWJvb2xlYW4gIk9URyBTdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQICYmIEFSQ0hfT01BUF9PVEcgJiYgVVNCX09IQ0lfSENECisJaGVscAorCSAgIFRoZSBtb3N0IG5vdGFibGUgZmVhdHVyZSBvZiBVU0IgT1RHIGlzIHN1cHBvcnQgZm9yIGEKKwkgICAiRHVhbC1Sb2xlIiBkZXZpY2UsIHdoaWNoIGNhbiBhY3QgYXMgZWl0aGVyIGEgZGV2aWNlCisJICAgb3IgYSBob3N0LiAgVGhlIGluaXRpYWwgcm9sZSBjaG9pY2UgY2FuIGJlIGNoYW5nZWQKKwkgICBsYXRlciwgd2hlbiB0d28gZHVhbC1yb2xlIGRldmljZXMgdGFsayB0byBlYWNoIG90aGVyLgorCisJICAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyIE9NQVAgYm9hcmQgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IuCisKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI1WAogCWJvb2xlYW4gIlBYQSAyNXggb3IgSVhQIDR4eCIKIAlkZXBlbmRzIG9uIChBUkNIX1BYQSAmJiBQWEEyNXgpIHx8IEFSQ0hfSVhQNFhYCkBAIC0yMDMsNiArMjUwLDYxIEBACiAJZGVmYXVsdCB5IGlmIFVTQl9FVEgKIAlkZWZhdWx0IHkgaWYgVVNCX0dfU0VSSUFMCiAKK2NvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAorCWJvb2xlYW4gIlBYQSAyN3giCisJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKKwloZWxwCisJICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCisJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCisKKwkgICBJdCBoYXMgdXAgdG8gMjMgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8gKGZvcgorCSAgIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgInB4YTI3eF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9QWEEyN1gKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9TM0MyNDEwCisJYm9vbGVhbiAiUzNDMjQxMCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYW1zdW5nJ3MgUzNDMjQxMCBpcyBhbiBBUk0tNCBwcm9jZXNzb3Igd2l0aCBhbiBpbnRlZ3JhdGVkCisJICBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBJdCBoYXMgNCBjb25maWd1cmFibGUKKwkgIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIFMzQzI0MTAsIFMzQzI0MTIsIGFuZAorCSAgUzNDMjQ0MCBwcm9jZXNzb3JzLgorCitjb25maWcgVVNCX1MzQzI0MTAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCisJZGVmYXVsdCBVU0JfR0FER0VUCisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKworY29uZmlnIFVTQl9TM0MyNDEwX0RFQlVHCisJYm9vbGVhbiAiUzNDMjQxMCB1ZGMgZGVidWcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1MzQzI0MTAKKworIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgaW4gYm90aCBpbnRlZ3JhdGVkIGFuZCBkaXNjcmV0ZSB2ZXJzaW9ucworIworCisjIG11c2IgYnVpbGRzIGluIC4uL211c2IgYWxvbmcgd2l0aCBob3N0IHN1cHBvcnQKK2NvbmZpZyBVU0JfR0FER0VUX01VU0JfSERSQworCWJvb2xlYW4gIkludmVudHJhIEhEUkMgVVNCIFBlcmlwaGVyYWwgKFRJLCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAoVVNCX01VU0JfUEVSSVBIRVJBTCB8fCBVU0JfTVVTQl9PVEcpCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKwloZWxwCisJICBUaGlzIE9URy1jYXBhYmxlIHNpbGljb24gSVAgaXMgdXNlZCBpbiBkdWFsIGRlc2lnbnMgaW5jbHVkaW5nCisJICB0aGUgVEkgRGFWaW5jaSwgT01BUCAyNDN4LCBPTUFQIDM0M3gsIGFuZCBUVVNCIDYwMTAuCisKIGNvbmZpZyBVU0JfR0FER0VUX002NjU5MgogCWJvb2xlYW4gIlJlbmVzYXMgTTY2NTkyIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECkBAIC0yMzEsMjMgKzMzMyw2OSBAQAogCSAgIEhvd2V2ZXIsIHRoaXMgcHJvYmxlbSBpcyBpbXByb3ZlZCBpZiBjaGFuZ2UgYSB2YWx1ZSBvZgogCSAgIE5FVF9JUF9BTElHTiB0byA0LgogCi1jb25maWcgVVNCX0dBREdFVF9QWEEyN1gKLQlib29sZWFuICJQWEEgMjd4IgotCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgUFhBMjd4Ci0JaGVscAotCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQotCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgorIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgb25seSBpbiBkaXNjcmV0ZSBmb3JtIChhbmQgYWxsIFBDSSBjb250cm9sbGVycykKKyMKIAotCSAgIEl0IGhhcyB1cCB0byAyMyBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yCi0JICAgY29udHJvbCB0cmFuc2ZlcnMpLgorY29uZmlnIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWJvb2xlYW4gIkFNRDU1MzYgVURDIgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCisJICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAorCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCisJICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAorCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMjd4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhbWQ1NTM2dWRjIiBhbmQgZm9yY2UgYWxsCiAJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCiAKLWNvbmZpZyBVU0JfUFhBMjdYCitjb25maWcgVVNCX0FNRDU1MzZVREMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX0ZTTF9RRQorCWJvb2xlYW4gIkZyZWVzY2FsZSBRRS9DUE0gVVNCIERldmljZSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRlNMX1NPQyAmJiAoUVVJQ0NfRU5HSU5FIHx8IENQTSkKKwloZWxwCisJICAgU29tZSBvZiBGcmVlc2NhbGUgUG93ZXJQQyBwcm9jZXNzb3JzIGhhdmUgYSBGdWxsIFNwZWVkCisJICAgUUUvQ1BNMiBVU0IgY29udHJvbGxlciwgd2hpY2ggc3VwcG9ydCBkZXZpY2UgbW9kZSB3aXRoIDQKKwkgICBwcm9ncmFtbWFibGUgZW5kcG9pbnRzLiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBNUEM4MzYwIGFuZCBNUEM4MjcyLCBhbmQgc2hvdWxkIHdvcmsgd2l0aAorCSAgIGNvbnRyb2xsZXJzIGhhdmluZyBRRSBvciBDUE0yLCBnaXZlbiBtaW5vciB0d2Vha3MuCisKKwkgICBTZXQgQ09ORklHX1VTQl9HQURHRVQgdG8gIm0iIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEKKwkgICBkeW5taWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJmc2xfcWVfdWRjIi4KKworY29uZmlnIFVTQl9GU0xfUUUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9GU0xfUUUKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCisJYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIE5ldENoaXAgMjI4MCAvIDIyODIgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLgorCisJICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KKwkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKKwkgICBmdW5jdGlvbnMuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJuZXQyMjgwIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfTkVUMjI4MAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCkBAIC0yNTcsNyArNDA1LDcgQEAKIAloZWxwCiAJICAgVGhlIFRvc2hpYmEgVEM4NkMwMDEgaXMgYSBQQ0kgZGV2aWNlIHdoaWNoIGluY2x1ZGVzIGNvbnRyb2xsZXJzCiAJICAgZm9yIGZ1bGwgc3BlZWQgVVNCIGRldmljZXMsIElERSwgSTJDLCBTSU8sIHBsdXMgYSBVU0IgaG9zdCAoT0hDSSkuCi0JICAgCisKIAkgICBUaGUgZGV2aWNlIGNvbnRyb2xsZXIgaGFzIHRocmVlIGNvbmZpZ3VyYWJsZSAoYnVsayBvciBpbnRlcnJ1cHQpCiAJICAgZW5kcG9pbnRzLCBwbHVzIGVuZHBvaW50IHplcm8gKGZvciBjb250cm9sIHRyYW5zZmVycykuCiAKQEAgLTI3Miw5OCArNDIwLDkgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiAKLWNvbmZpZyBVU0JfR0FER0VUX0xIN0E0MFgKLQlib29sZWFuICJMSDdBNDBYIgotCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYCi0JaGVscAotICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKLQotY29uZmlnIFVTQl9MSDdBNDBYCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfTEg3QTQwWAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLSMgYnVpbHQgaW4gLi4vbXVzYiBhbG9uZyB3aXRoIGhvc3Qgc3VwcG9ydAotY29uZmlnIFVTQl9HQURHRVRfTVVTQl9IRFJDCi0JYm9vbGVhbiAiSW52ZW50cmEgSERSQyBVU0IgUGVyaXBoZXJhbCAoVEksIC4uLikiCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIChVU0JfTVVTQl9QRVJJUEhFUkFMIHx8IFVTQl9NVVNCX09URykKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKLQlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAotCWhlbHAKLQkgIFRoaXMgT1RHLWNhcGFibGUgc2lsaWNvbiBJUCBpcyB1c2VkIGluIGR1YWwgZGVzaWducyBpbmNsdWRpbmcKLQkgIHRoZSBUSSBEYVZpbmNpLCBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KLQotY29uZmlnIFVTQl9HQURHRVRfT01BUAotCWJvb2xlYW4gIk9NQVAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0Jc2VsZWN0IElTUDEzMDFfT01BUCBpZiBNQUNIX09NQVBfSDIgfHwgTUFDSF9PTUFQX0gzCi0JaGVscAotCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAotCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKLQkgICBjb250cm9sbGVyIGluIHRoZSBPTUFQIDE2MTEsIGFuZCBzaG91bGQgd29yayB3aXRoIGNvbnRyb2xsZXJzCi0JICAgaW4gb3RoZXIgT01BUCBwcm9jZXNzb3JzIHRvbywgZ2l2ZW4gbWlub3IgdHdlYWtzLgotCi0JICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAib21hcF91ZGMiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9PTUFQCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfT1RHCi0JYm9vbGVhbiAiT1RHIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKLQloZWxwCi0JICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQotCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKLQkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAotCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCi0KLQkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KLQotY29uZmlnIFVTQl9HQURHRVRfUzNDMjQxMAotCWJvb2xlYW4gIlMzQzI0MTAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0JaGVscAotCSAgU2Ftc3VuZydzIFMzQzI0MTAgaXMgYW4gQVJNLTQgcHJvY2Vzc29yIHdpdGggYW4gaW50ZWdyYXRlZAotCSAgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLiAgSXQgaGFzIDQgY29uZmlndXJhYmxlCi0JICBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KLQotCSAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBTM0MyNDEwLCBTM0MyNDEyLCBhbmQKLQkgIFMzQzI0NDAgcHJvY2Vzc29ycy4KLQotY29uZmlnIFVTQl9TM0MyNDEwCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfUzNDMjQxMF9ERUJVRwotCWJvb2xlYW4gIlMzQzI0MTAgdWRjIGRlYnVnIG1lc3NhZ2VzIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCi0KLWNvbmZpZyBVU0JfR0FER0VUX0FUOTEKLQlib29sZWFuICJBVDkxIFVTQiBEZXZpY2UgUG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxU0FNOVJMICYmICFBUkNIX0FUOTFDQVA5Ci0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQloZWxwCi0JICAgTWFueSBBdG1lbCBBVDkxIHByb2Nlc3NvcnMgKHN1Y2ggYXMgdGhlIEFUOTFSTTIwMDApIGhhdmUgYQotCSAgIGZ1bGwgc3BlZWQgVVNCIERldmljZSBQb3J0IHdpdGggc3VwcG9ydCBmb3IgZml2ZSBjb25maWd1cmFibGUKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuCi0KLQkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAotCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotCi1jb25maWcgVVNCX0FUOTEKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9BVDkxCi0JZGVmYXVsdCBVU0JfR0FER0VUCisjCisjIExBU1QgLS0gZHVtbXkvZW11bGF0ZWQgY29udHJvbGxlcgorIwogCiBjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKIAlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKQEAgLTU1MywxOSArNjEyLDIzIEBACiAJICBub3JtYWwgb3BlcmF0aW9uLgogCiBjb25maWcgVVNCX0dfU0VSSUFMCi0JdHJpc3RhdGUgIlNlcmlhbCBHYWRnZXQgKHdpdGggQ0RDIEFDTSBzdXBwb3J0KSIKKwl0cmlzdGF0ZSAiU2VyaWFsIEdhZGdldCAod2l0aCBDREMgQUNNIGFuZCBDREMgT0JFWCBzdXBwb3J0KSIKIAloZWxwCiAJICBUaGUgU2VyaWFsIEdhZGdldCB0YWxrcyB0byB0aGUgTGludXgtVVNCIGdlbmVyaWMgc2VyaWFsIGRyaXZlci4KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgQ0RDLUFDTSBtb2R1bGUgb3B0aW9uLCB3aGljaCBjYW4gYmUgdXNlZAogCSAgdG8gaW50ZXJvcGVyYXRlIHdpdGggTVMtV2luZG93cyBob3N0cyBvciB3aXRoIHRoZSBMaW51eC1VU0IKIAkgICJjZGMtYWNtIiBkcml2ZXIuCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgYSBDREMtT0JFWCBvcHRpb24uICBZb3Ugd2lsbCBuZWVkIGEKKwkgIHVzZXIgc3BhY2UgT0JFWCBzZXJ2ZXIgdGFsa2luZyB0byAvZGV2L3R0eUdTKiwgc2luY2UgdGhlIGtlcm5lbAorCSAgaXRzZWxmIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBPQkVYIHByb3RvY29sLgorCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfc2VyaWFsIi4KIAogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dAogCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KLQkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisJICBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIENEQyBBQ00uCiAKIGNvbmZpZyBVU0JfTUlESV9HQURHRVQKIAl0cmlzdGF0ZSAiTUlESSBHYWRnZXQgKEVYUEVSSU1FTlRBTCkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggMjI2N2ZhMC4uYmQ0MDQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9BVE1FTF9VU0JBKQkrPSBhdG1lbF91c2JhX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX0ZTTF9VU0IyKQkrPSBmc2xfdXNiMl91ZGMubwogb2JqLSQoQ09ORklHX1VTQl9NNjY1OTIpCSs9IG02NjU5Mi11ZGMubworb2JqLSQoQ09ORklHX1VTQl9GU0xfUUUpCSs9IGZzbF9xZV91ZGMubwogCiAjCiAjIFVTQiBnYWRnZXQgZHJpdmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKaW5kZXggYTcyNGZjMS4uNTQ5NWIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCkBAIC0xNTUsNyArMTU1LDYgQEAKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZQk9IDEsCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCA4NWM4NzZjLi5mMmRhMDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC0xMjgsNiArMTI4LDcwIEBACiB9CiAKIC8qKgorICogdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUgLSBwcmV2ZW50IGZ1bmN0aW9uIGFuZCBnYWRnZXQgZW51bWVyYXRpb24KKyAqIEBmdW5jdGlvbjogdGhlIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgeWV0IHJlYWR5IHRvIHJlc3BvbmQKKyAqCisgKiBCbG9ja3MgcmVzcG9uc2Ugb2YgdGhlIGdhZGdldCBkcml2ZXIgdG8gaG9zdCBlbnVtZXJhdGlvbiBieQorICogcHJldmVudGluZyB0aGUgZGF0YSBsaW5lIHB1bGx1cCBmcm9tIGJlaW5nIGFjdGl2YXRlZC4gIFRoaXMgaXMKKyAqIG5vcm1hbGx5IGNhbGxlZCBkdXJpbmcgQGJpbmQoKSBwcm9jZXNzaW5nIHRvIGNoYW5nZSBmcm9tIHRoZQorICogaW5pdGlhbCAicmVhZHkgdG8gcmVzcG9uZCIgc3RhdGUsIG9yIHdoZW4gYSByZXF1aXJlZCByZXNvdXJjZQorICogYmVjb21lcyBhdmFpbGFibGUuCisgKgorICogRm9yIGV4YW1wbGUsIGRyaXZlcnMgdGhhdCBzZXJ2ZSBhcyBhIHBhc3N0aHJvdWdoIHRvIGEgdXNlcnNwYWNlCisgKiBkYWVtb24gY2FuIGJsb2NrIGVudW1lcmF0aW9uIHVubGVzcyB0aGF0IGRhZW1vbiAoc3VjaCBhcyBhbiBPQkVYLAorICogTVRQLCBvciBwcmludCBzZXJ2ZXIpIGlzIHJlYWR5IHRvIGhhbmRsZSBob3N0IHJlcXVlc3RzLgorICoKKyAqIE5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IHNvZnR3YXJlIGNvbnRyb2wgb2YgdGhlaXIgVVNCIHBlcmlwaGVyYWwKKyAqIGRhdGEgcHVsbHVwcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZ1bmN0aW9uKQoreworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGZ1bmN0aW9uLT5jb25maWctPmNkZXY7CisJaW50CQkJCXN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmNkZXYtPmxvY2spOworCisJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKKwkJc3RhdHVzID0gdXNiX2dhZGdldF9kaXNjb25uZWN0KGNkZXYtPmdhZGdldCk7CisJaWYgKHN0YXR1cyA9PSAwKQorCQljZGV2LT5kZWFjdGl2YXRpb25zKys7CisKKwlzcGluX3VubG9jaygmY2Rldi0+bG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB1c2JfZnVuY3Rpb25fYWN0aXZhdGUgLSBhbGxvdyBmdW5jdGlvbiBhbmQgZ2FkZ2V0IGVudW1lcmF0aW9uCisgKiBAZnVuY3Rpb246IGZ1bmN0aW9uIG9uIHdoaWNoIHVzYl9mdW5jdGlvbl9hY3RpdmF0ZSgpIHdhcyBjYWxsZWQKKyAqCisgKiBSZXZlcnNlcyBlZmZlY3Qgb2YgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoKS4gIElmIG5vIG1vcmUgZnVuY3Rpb25zCisgKiBhcmUgZGVsYXlpbmcgdGhlaXIgYWN0aXZhdGlvbiwgdGhlIGdhZGdldCBkcml2ZXIgd2lsbCByZXNwb25kIHRvCisgKiBob3N0IGVudW1lcmF0aW9uIHByb2NlZHVyZXMuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCB1c2JfZnVuY3Rpb25fYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwlpbnQJCQkJc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisKKwlpZiAoV0FSTl9PTihjZGV2LT5kZWFjdGl2YXRpb25zID09IDApKQorCQlzdGF0dXMgPSAtRUlOVkFMOworCWVsc2UgeworCQljZGV2LT5kZWFjdGl2YXRpb25zLS07CisJCWlmIChjZGV2LT5kZWFjdGl2YXRpb25zID09IDApCisJCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKKwl9CisKKwlzcGluX3VubG9jaygmY2Rldi0+bG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiB1c2JfaW50ZXJmYWNlX2lkKCkgLSBhbGxvY2F0ZSBhbiB1bnVzZWQgaW50ZXJmYWNlIElECiAgKiBAY29uZmlnOiBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJmYWNlCiAgKiBAZnVuY3Rpb246IGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBpbnRlcmZhY2UKQEAgLTE4MSw3ICsyNDUsNyBAQAogCWMtPmJDb25maWd1cmF0aW9uVmFsdWUgPSBjb25maWctPmJDb25maWd1cmF0aW9uVmFsdWU7CiAJYy0+aUNvbmZpZ3VyYXRpb24gPSBjb25maWctPmlDb25maWd1cmF0aW9uOwogCWMtPmJtQXR0cmlidXRlcyA9IFVTQl9DT05GSUdfQVRUX09ORSB8IGNvbmZpZy0+Ym1BdHRyaWJ1dGVzOwotCWMtPmJNYXhQb3dlciA9IGNvbmZpZy0+Yk1heFBvd2VyOworCWMtPmJNYXhQb3dlciA9IGNvbmZpZy0+Yk1heFBvd2VyID8gOiAoQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXIC8gMik7CiAKIAkvKiBUaGVyZSBtYXkgYmUgZS5nLiBPVEcgZGVzY3JpcHRvcnMgKi8KIAlpZiAoY29uZmlnLT5kZXNjcmlwdG9ycykgewpAQCAtMzY4LDcgKzQzMiw3IEBACiAJfQogCiAJLyogd2hlbiB3ZSByZXR1cm4sIGJlIHN1cmUgb3VyIHBvd2VyIHVzYWdlIGlzIHZhbGlkICovCi0JcG93ZXIgPSAyICogYy0+Yk1heFBvd2VyOworCXBvd2VyID0gYy0+Yk1heFBvd2VyID8gKDIgKiBjLT5iTWF4UG93ZXIpIDogQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXOwogZG9uZToKIAl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhnYWRnZXQsIHBvd2VyKTsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDc2MDBhMGMuLjkwNjQ2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTgyLDYgKzgyLDcgQEAKIAljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CiAJc3RydWN0IHVzYl9lcAkJCWVwOwogCXVuc2lnbmVkCQkJaGFsdGVkIDogMTsKKwl1bnNpZ25lZAkJCXdlZGdlZCA6IDE7CiAJdW5zaWduZWQJCQlhbHJlYWR5X3NlZW4gOiAxOwogCXVuc2lnbmVkCQkJc2V0dXBfc3RhZ2UgOiAxOwogfTsKQEAgLTQzNiw2ICs0MzcsNyBAQAogCS8qIGF0IHRoaXMgcG9pbnQgcmVhbCBoYXJkd2FyZSBzaG91bGQgYmUgTkFLaW5nIHRyYW5zZmVycwogCSAqIHRvIHRoYXQgZW5kcG9pbnQsIHVudGlsIGEgYnVmZmVyIGlzIHF1ZXVlZCB0byBpdC4KIAkgKi8KKwllcC0+aGFsdGVkID0gZXAtPndlZGdlZCA9IDA7CiAJcmV0dmFsID0gMDsKIGRvbmU6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTU5Nyw3ICs1OTksNyBAQAogfQogCiBzdGF0aWMgaW50Ci1kdW1teV9zZXRfaGFsdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCitkdW1teV9zZXRfaGFsdF9hbmRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUsIGludCB3ZWRnZWQpCiB7CiAJc3RydWN0IGR1bW15X2VwCQkqZXA7CiAJc3RydWN0IGR1bW15CQkqZHVtOwpAQCAtNjA5LDE2ICs2MTEsMzIgQEAKIAlpZiAoIWR1bS0+ZHJpdmVyKQogCQlyZXR1cm4gLUVTSFVURE9XTjsKIAlpZiAoIXZhbHVlKQotCQllcC0+aGFsdGVkID0gMDsKKwkJZXAtPmhhbHRlZCA9IGVwLT53ZWRnZWQgPSAwOwogCWVsc2UgaWYgKGVwLT5kZXNjICYmIChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCiAJCQkhbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCiAJCXJldHVybiAtRUFHQUlOOwotCWVsc2UKKwllbHNlIHsKIAkJZXAtPmhhbHRlZCA9IDE7CisJCWlmICh3ZWRnZWQpCisJCQllcC0+d2VkZ2VkID0gMTsKKwl9CiAJLyogRklYTUUgY2xlYXIgZW11bGF0ZWQgZGF0YSB0b2dnbGUgdG9vICovCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2R1bW15X3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXJldHVybiBkdW1teV9zZXRfaGFsdF9hbmRfd2VkZ2UoX2VwLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfc2V0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlpZiAoIV9lcCB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGR1bW15X3NldF9oYWx0X2FuZF93ZWRnZShfZXAsIDEsIDEpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lcF9vcHMgZHVtbXlfZXBfb3BzID0gewogCS5lbmFibGUJCT0gZHVtbXlfZW5hYmxlLAogCS5kaXNhYmxlCT0gZHVtbXlfZGlzYWJsZSwKQEAgLTYzMCw2ICs2NDgsNyBAQAogCS5kZXF1ZXVlCT0gZHVtbXlfZGVxdWV1ZSwKIAogCS5zZXRfaGFsdAk9IGR1bW15X3NldF9oYWx0LAorCS5zZXRfd2VkZ2UJPSBkdW1teV9zZXRfd2VkZ2UsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzYwLDcgKzc3OSw4IEBACiAJCWVwLT5lcC5uYW1lID0gZXBfbmFtZSBbaV07CiAJCWVwLT5lcC5vcHMgPSAmZHVtbXlfZXBfb3BzOwogCQlsaXN0X2FkZF90YWlsICgmZXAtPmVwLmVwX2xpc3QsICZkdW0tPmdhZGdldC5lcF9saXN0KTsKLQkJZXAtPmhhbHRlZCA9IGVwLT5hbHJlYWR5X3NlZW4gPSBlcC0+c2V0dXBfc3RhZ2UgPSAwOworCQllcC0+aGFsdGVkID0gZXAtPndlZGdlZCA9IGVwLT5hbHJlYWR5X3NlZW4gPQorCQkJCWVwLT5zZXR1cF9zdGFnZSA9IDA7CiAJCWVwLT5lcC5tYXhwYWNrZXQgPSB+MDsKIAkJZXAtPmxhc3RfaW8gPSBqaWZmaWVzOwogCQllcC0+Z2FkZ2V0ID0gJmR1bS0+Z2FkZ2V0OwpAQCAtMTM1MSw3ICsxMzcxLDcgQEAKIAkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBFcF9SZXF1ZXN0KSB7CiAJCQkJCS8vIGVuZHBvaW50IGhhbHQKIAkJCQkJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLCB3X2luZGV4KTsKLQkJCQkJaWYgKCFlcDIpIHsKKwkJCQkJaWYgKCFlcDIgfHwgZXAyLT5lcC5uYW1lID09IGVwMG5hbWUpIHsKIAkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CiAJCQkJCQlicmVhazsKIAkJCQkJfQpAQCAtMTM4MCw3ICsxNDAwLDggQEAKIAkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CiAJCQkJCQlicmVhazsKIAkJCQkJfQotCQkJCQllcDItPmhhbHRlZCA9IDA7CisJCQkJCWlmICghZXAyLT53ZWRnZWQpCisJCQkJCQllcDItPmhhbHRlZCA9IDA7CiAJCQkJCXZhbHVlID0gMDsKIAkJCQkJc3RhdHVzID0gMDsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDk0NGM4ZTguLjM3MjUyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0yNDIsNyArMjQyLDYgQEAKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZQk9IDIsCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI3MSw3ICsyNzAsNiBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMSwKIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggODdkZGUwMS4uOGFmZmUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCkBAIC0zNTIsNyArMzUyLDYgQEAKIAkuYmluZAkJPSBsb29wYmFja19iaW5kX2NvbmZpZywKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDIsCiAJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGMyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogZl9vYmV4LmMgLS0gVVNCIENEQyBPQkVYIGZ1bmN0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9uIGZfYWNtLmMgYnkgQWwgQm9yY2hlcnMgYW5kIERhdmlkIEJyb3duZWxsLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+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+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlrZnJlZShvYmV4KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK01PRFVMRV9BVVRIT1IoIkZlbGlwZSBCYWxiaSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGYxOGMzYTEuLmRjODRkMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU1Miw3ICs1NTIsNiBAQAogCS5zZXR1cAkJPSBzb3VyY2VzaW5rX3NldHVwLAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMywKIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IDBjNjMyZDIuLmM0ZTYyYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTg1MSw3ICs4NTEsNyBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0JQ09ORklHX1ZBTFVFLAogCS5pQ29uZmlndXJhdGlvbiA9CVNUUklOR19DT05GSUcsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlciA9CQkxLAkvLyBzZWxmLXBvd2VyZWQKKwkuYk1heFBvd2VyID0JCUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVyAvIDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvcgpAQCAtMjY3NiwxMSArMjY3NiwyNCBAQAogCS8qIFZlcmlmeSB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGl0c2VsZiAqLwogCWlmIChjbW5kX3NpemUgIT0gZnNnLT5jbW5kX3NpemUpIHsKIAotCQkvKiBTcGVjaWFsIGNhc2Ugd29ya2Fyb3VuZDogTVMtV2luZG93cyBpc3N1ZXMgUkVRVUVTVCBTRU5TRQotCQkgKiB3aXRoIGNidy0+TGVuZ3RoID09IDEyIChpdCBzaG91bGQgYmUgNikuICovCi0JCWlmIChmc2ctPmNtbmRbMF0gPT0gU0NfUkVRVUVTVF9TRU5TRSAmJiBmc2ctPmNtbmRfc2l6ZSA9PSAxMikKKwkJLyogU3BlY2lhbCBjYXNlIHdvcmthcm91bmQ6IFRoZXJlIGFyZSBwbGVudHkgb2YgYnVnZ3kgU0NTSQorCQkgKiBpbXBsZW1lbnRhdGlvbnMuIE1hbnkgaGF2ZSBpc3N1ZXMgd2l0aCBjYnctPkxlbmd0aAorCQkgKiBmaWVsZCBwYXNzaW5nIGEgd3JvbmcgY29tbWFuZCBzaXplLiBGb3IgdGhvc2UgY2FzZXMgd2UKKwkJICogYWx3YXlzIHRyeSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBieSB1c2luZyB0aGUgbGVuZ3RoCisJCSAqIHNlbnQgYnkgdGhlIGhvc3Qgc2lkZSBwcm92aWRlZCBpdCBpcyBhdCBsZWFzdCBhcyBsYXJnZQorCQkgKiBhcyB0aGUgY29ycmVjdCBjb21tYW5kIGxlbmd0aC4KKwkJICogRXhhbXBsZXMgb2Ygc3VjaCBjYXNlcyB3b3VsZCBiZSBNUy1XaW5kb3dzLCB3aGljaCBpc3N1ZXMKKwkJICogUkVRVUVTVCBTRU5TRSB3aXRoIGNidy0+TGVuZ3RoID09IDEyIHdoZXJlIGl0IHNob3VsZAorCQkgKiBiZSA2LCBhbmQgeGJveDM2MCBpc3N1aW5nIElOUVVJUlksIFRFU1QgVU5JVCBSRUFEWSBhbmQKKwkJICogUkVRVUVTVCBTRU5TRSB3aXRoIGNidy0+TGVuZ3RoID09IDEwIHdoZXJlIGl0IHNob3VsZAorCQkgKiBiZSA2IGFzIHdlbGwuCisJCSAqLworCQlpZiAoY21uZF9zaXplIDw9IGZzZy0+Y21uZF9zaXplKSB7CisJCQlEQkcoZnNnLCAiJXMgaXMgYnVnZ3khIEV4cGVjdGVkIGxlbmd0aCAlZCAiCisJCQkJCSJidXQgd2UgZ290ICVkXG4iLCBuYW1lLAorCQkJCQljbW5kX3NpemUsIGZzZy0+Y21uZF9zaXplKTsKIAkJCWNtbmRfc2l6ZSA9IGZzZy0+Y21uZF9zaXplOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCWZzZy0+cGhhc2VfZXJyb3IgPSAxOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZThiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCkBAIC0wLDAgKzEsMjc2MCBAQAorLyoKKyAqIGRyaXZlci91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogCVhpZSBYaWFvYm8gPFguWGllQGZyZWVzY2FsZS5jb20+CisgKiAJTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KKyAqIAlCYXNlZCBvbiBiYXJlYm9hcmQgY29kZSBmcm9tIFNobG9taSBHcmlkaXNoLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogRnJlZXNjbGUgUUUvQ1BNIFVTQiBQaGVyaXBoZXJhbCBDb250cm9sbGVyIERyaXZlcgorICogVGhlIGNvbnRyb2xsZXIgY2FuIGJlIGZvdW5kIG9uIE1QQzgzNjAsIE1QQzgyNzIsIGFuZCBldGMuCisgKiBNUEM4MzYwIFJldiAxLjEgbWF5IG5lZWQgUUUgbWlyY29jb2RlIHVwZGF0ZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyN1bmRlZiBVU0JfVFJBQ0UKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGFzbS9xZS5oPgorI2luY2x1ZGUgPGFzbS9jcG0uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgImZzbF9xZV91ZGMuaCIKKworI2RlZmluZSBEUklWRVJfREVTQyAgICAgIkZyZWVzY2FsZSBRRS9DUE0gVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICJYaWUgWGlhb0JvIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAgIjEuMCIKKworI2RlZmluZSBETUFfQUREUl9JTlZBTElEICAgICAgICAofihkbWFfYWRkcl90KTApCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiZnNsX3FlX3VkYyI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzY1tdID0gRFJJVkVSX0RFU0M7CisKKy8qZXAgbmFtZSBpcyBpbXBvcnRhbnQgaW4gZ2FkZ2V0LCBpdCBzaG91bGQgb2JleSB0aGUgY29udmVudGlvbiBvZiBlcF9tYXRjaCgpKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlcF9uYW1lW10gPSB7CisJImVwMC1jb250cm9sIiwgLyogZXZlcnlvbmUgaGFzIGVwMCAqLworCS8qIDMgY29uZmlndXJhYmxlIGVuZHBvaW50cyAqLworCSJlcDEiLAorCSJlcDIiLAorCSJlcDMiLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBxZV9lcDBfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQkwLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKKwkud01heFBhY2tldFNpemUgPQlVU0JfTUFYX0NUUkxfUEFZTE9BRCwKK307CisKKy8qIGl0IGlzIGluaXRpYWxpemVkIGluIHByb2JlKCkgICovCitzdGF0aWMgc3RydWN0IHFlX3VkYyAqdWRjX2NvbnRyb2xsZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICBJbnRlcm5hbCBVc2VkIEZ1bmN0aW9uIFN0YXJ0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRvbmUoKSAtIHJldGlyZSBhIHJlcXVlc3Q7IGNhbGxlciBibG9ja2VkIGlycXMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfcmVxICpyZXEsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwl1bnNpZ25lZCBjaGFyIHN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCS8qIHRoZSByZXEtPnF1ZXVlIHBvaW50ZXIgaXMgdXNlZCBieSBlcF9xdWV1ZSgpIGZ1bmMsIGluIHdoaWNoCisJICogdGhlIHJlcXVlc3Qgd2lsbCBiZSBhZGRlZCBpbnRvIGEgdWRjX2VwLT5xdWV1ZSAnZCB0YWlsCisJICogc28gaGVyZSB0aGUgcmVxIHdpbGwgYmUgZHJvcHBlZCBmcm9tIHRoZSBlcC0+cXVldWUKKwkgKi8KKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKworCS8qIHJlcS5zdGF0dXMgc2hvdWxkIGJlIHNldCBhcyAtRUlOUFJPR1JFU1MgaW4gZXBfcXVldWUoKSAqLworCWlmIChyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwlpZiAocmVxLT5tYXBwZWQpIHsKKwkJZG1hX3VubWFwX3NpbmdsZSh1ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQllcF9pc19pbihlcCkKKwkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJCXJlcS0+bWFwcGVkID0gMDsKKwl9IGVsc2UKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJZXBfaXNfaW4oZXApCisJCQkJPyBETUFfVE9fREVWSUNFCisJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKHN0YXR1cyAmJiAoc3RhdHVzICE9IC1FU0hVVERPV04pKQorCQlkZXZfdmRiZyh1ZGMtPmRldiwgImNvbXBsZXRlICVzIHJlcSAlcCBzdGF0ICVkIGxlbiAldS8ldVxuIiwKKwkJCWVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCS8qIGRvbid0IG1vZGlmeSBxdWV1ZSBoZWFkcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCWVwLT5zdG9wcGVkID0gMTsKKwlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKworCS8qIHRoaXMgY29tcGxldGUoKSBzaG91bGQgYSBmdW5jIGltcGxlbWVudGVkIGJ5IGdhZGdldCBsYXllciwKKwkgKiBlZyBmc2ctPmJ1bGtfaW5fY29tcGxldGUoKSAqLworCWlmIChyZXEtPnJlcS5jb21wbGV0ZSkKKwkJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKworCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbnVrZSgpOiBkZWxldGUgYWxsIHJlcXVlc3RzIHJlbGF0ZWQgdG8gdGhpcyBlcAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBxZV9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJLyogV2hldGhlciB0aGlzIGVxIGhhcyByZXF1ZXN0IGxpbmtlZCAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlzdHJ1Y3QgcWVfcmVxICpyZXEgPSBOVUxMOworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcWVfcmVxLCBxdWV1ZSk7CisKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBVU0IgYW5kIEVuZHBvaW50IG1hbmlwdWxhdGUgcHJvY2VzcywgaW5jbHVkZSBwYXJhbWV0ZXIgYW5kIHJlZ2lzdGVyICAgICAgICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEB2YWx1ZTogMS0tc2V0IHN0YWxsIDAtLWNsZWFuIHN0YWxsICovCitzdGF0aWMgaW50IHFlX2Vwcnhfc3RhbGxfY2hhbmdlKHN0cnVjdCBxZV9lcCAqZXAsIGludCB2YWx1ZSkKK3sKKwl1MTYgdGVtX3VzZXA7CisJdTggZXBudW0gPSBlcC0+ZXBudW07CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCXRlbV91c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dKTsKKwl0ZW1fdXNlcCA9IHRlbV91c2VwICYgflVTQl9SSFNfTUFTSzsKKwlpZiAodmFsdWUgPT0gMSkKKwkJdGVtX3VzZXAgfD0gVVNCX1JIU19TVEFMTDsKKwllbHNlIGlmIChlcC0+ZGlyID09IFVTQl9ESVJfSU4pCisJCXRlbV91c2VwIHw9IFVTQl9SSFNfSUdOT1JFX09VVDsKKworCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0sIHRlbV91c2VwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHR4X3N0YWxsX2NoYW5nZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgdmFsdWUpCit7CisJdTE2IHRlbV91c2VwOworCXU4IGVwbnVtID0gZXAtPmVwbnVtOworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwl0ZW1fdXNlcCA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSk7CisJdGVtX3VzZXAgPSB0ZW1fdXNlcCAmIH5VU0JfVEhTX01BU0s7CisJaWYgKHZhbHVlID09IDEpCisJCXRlbV91c2VwIHw9IFVTQl9USFNfU1RBTEw7CisJZWxzZSBpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJdGVtX3VzZXAgfD0gVVNCX1RIU19JR05PUkVfSU47CisKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLCB0ZW1fdXNlcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcDBfc3RhbGwoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXFlX2VwdHhfc3RhbGxfY2hhbmdlKCZ1ZGMtPmVwc1swXSwgMSk7CisJcWVfZXByeF9zdGFsbF9jaGFuZ2UoJnVkYy0+ZXBzWzBdLCAxKTsKKwl1ZGNfY29udHJvbGxlci0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9kaXIgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwcnhfbmFjayhzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXU4IGVwbnVtID0gZXAtPmVwbnVtOworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZXAtPnN0YXRlID09IEVQX1NUQVRFX0lETEUpIHsKKwkJLyogU2V0IHRoZSBlcCdzIG5hY2sgKi8KKwkJY2xyc2V0Yml0c19iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0sCisJCQkJVVNCX1JIU19NQVNLLCBVU0JfUkhTX05BQ0spOworCisJCS8qIE1hc2sgUnggYW5kIEJ1c3kgaW50ZXJydXB0cyAqLworCQljbHJiaXRzMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JtciwKKwkJCQkoVVNCX0VfUlhCX01BU0sgfCBVU0JfRV9CU1lfTUFTSykpOworCisJCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX05BQ0s7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2Vwcnhfbm9ybWFsKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCWlmIChlcC0+c3RhdGUgPT0gRVBfU1RBVEVfTkFDSykgeworCQljbHJzZXRiaXRzX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwLT5lcG51bV0sCisJCQkJVVNCX1JUSFNfTUFTSywgVVNCX1RIU19JR05PUkVfSU4pOworCisJCS8qIFVubWFzayBSWCBpbnRlcnJ1cHRzICovCisJCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIsCisJCQkJVVNCX0VfQlNZX01BU0sgfCBVU0JfRV9SWEJfTUFTSyk7CisJCXNldGJpdHMxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLAorCQkJCShVU0JfRV9SWEJfTUFTSyB8IFVTQl9FX0JTWV9NQVNLKSk7CisKKwkJZXAtPnN0YXRlID0gRVBfU1RBVEVfSURMRTsKKwkJZXAtPmhhc19kYXRhID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9jbWRfc3RvcHR4KHN0cnVjdCBxZV9lcCAqZXApCit7CisJaWYgKGVwLT51ZGMtPnNvY190eXBlID09IFBPUlRfQ1BNKQorCQljcG1fY29tbWFuZChDUE1fVVNCX1NUT1BfVFggfCAoZXAtPmVwbnVtIDw8IENQTV9VU0JfRVBfU0hJRlQpLAorCQkJCUNQTV9VU0JfU1RPUF9UWF9PUENPREUpOworCWVsc2UKKwkJcWVfaXNzdWVfY21kKFFFX1VTQl9TVE9QX1RYLCBRRV9DUl9TVUJCTE9DS19VU0IsCisJCQkJZXAtPmVwbnVtLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2NtZF9yZXN0YXJ0dHgoc3RydWN0IHFlX2VwICplcCkKK3sKKwlpZiAoZXAtPnVkYy0+c29jX3R5cGUgPT0gUE9SVF9DUE0pCisJCWNwbV9jb21tYW5kKENQTV9VU0JfUkVTVEFSVF9UWCB8IChlcC0+ZXBudW0gPDwKKwkJCQlDUE1fVVNCX0VQX1NISUZUKSwgQ1BNX1VTQl9SRVNUQVJUX1RYX09QQ09ERSk7CisJZWxzZQorCQlxZV9pc3N1ZV9jbWQoUUVfVVNCX1JFU1RBUlRfVFgsIFFFX0NSX1NVQkJMT0NLX1VTQiwKKwkJCQllcC0+ZXBudW0sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfZmx1c2h0eGZpZm8oc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCWludCBpOworCisJaSA9IChpbnQpZXAtPmVwbnVtOworCisJcWVfZXBfY21kX3N0b3B0eChlcCk7CisJb3V0XzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2NvbSwKKwkJVVNCX0NNRF9GTFVTSF9GSUZPIHwgKFVTQl9DTURfRVBfTUFTSyAmIChlcC0+ZXBudW0pKSk7CisJb3V0X2JlMTYoJnVkYy0+ZXBfcGFyYW1baV0tPnRicHRyLCBpbl9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2ldLT50YmFzZSkpOworCW91dF9iZTMyKCZ1ZGMtPmVwX3BhcmFtW2ldLT50c3RhdGUsIDApOworCW91dF9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2ldLT50YmNudCwgMCk7CisKKwllcC0+Y190eGJkID0gZXAtPnR4YmFzZTsKKwllcC0+bl90eGJkID0gZXAtPnR4YmFzZTsKKwlxZV9lcF9jbWRfcmVzdGFydHR4KGVwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9maWxsdHhmaWZvKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNjb20sCisJCQlVU0JfQ01EX1NUUl9GSUZPIHwgKFVTQl9DTURfRVBfTUFTSyAmIChlcC0+ZXBudW0pKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBiZHNfcmVzZXQoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1MzIgYmRyaW5nX2xlbjsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJaW50IGk7CisKKwllcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOX1JYOworCWVsc2UKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOOworCisJYmQgPSBlcC0+cnhiYXNlOworCWZvciAoaSA9IDA7IGkgPCAoYmRyaW5nX2xlbiAtIDEpOyBpKyspIHsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFJfRSB8IFJfSSk7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBSX0UgfCBSX0kgfCBSX1cpOworCisJYmQgPSBlcC0+dHhiYXNlOworCWZvciAoaSA9IDA7IGkgPCBVU0JfQkRSSU5HX0xFTl9UWCAtIDE7IGkrKykgeworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCAwKTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFRfVyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9yZXNldChzdHJ1Y3QgcWVfdWRjICp1ZGMsIGludCBwaXBlX251bSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXUxNiB0bXB1c2VwOworCisJZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXRtcHVzZXAgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtwaXBlX251bV0pOworCXRtcHVzZXAgJj0gflVTQl9SVEhTX01BU0s7CisKKwlzd2l0Y2ggKGVwLT5kaXIpIHsKKwljYXNlIFVTQl9ESVJfQk9USDoKKwkJcWVfZXBfZmx1c2h0eGZpZm8oZXApOworCQlicmVhazsKKwljYXNlIFVTQl9ESVJfT1VUOgorCQl0bXB1c2VwIHw9IFVTQl9USFNfSUdOT1JFX0lOOworCQlicmVhazsKKwljYXNlIFVTQl9ESVJfSU46CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJdG1wdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dLCB0bXB1c2VwKTsKKworCXFlX2VwYmRzX3Jlc2V0KHVkYywgcGlwZV9udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfdG9nZ2xlZGF0YTAxKHN0cnVjdCBxZV9lcCAqZXApCit7CisJZXAtPmRhdGEwMSBePSAweDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfYmRfaW5pdChzdHJ1Y3QgcWVfdWRjICp1ZGMsIHVuc2lnbmVkIGNoYXIgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisJdW5zaWduZWQgbG9uZyB0bXBfYWRkciA9IDA7CisJc3RydWN0IHVzYl9lcF9wYXJhIF9faW9tZW0gKmVwcGFyYW07CisJaW50IGk7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBiZHJpbmdfbGVuOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTl9SWDsKKwllbHNlCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTjsKKworCWVwcGFyYW0gPSB1ZGMtPmVwX3BhcmFtW3BpcGVfbnVtXTsKKwkvKiBhbGxvYyBtdWx0aS1yYW0gZm9yIEJEIHJpbmdzIGFuZCBzZXQgdGhlIGVwIHBhcmFtZXRlcnMgKi8KKwl0bXBfYWRkciA9IGNwbV9tdXJhbV9hbGxvYyhzaXplb2Yoc3RydWN0IHFlX2JkKSAqIChiZHJpbmdfbGVuICsKKwkJCQlVU0JfQkRSSU5HX0xFTl9UWCksIFFFX0FMSUdOTUVOVF9PRl9CRCk7CisJb3V0X2JlMTYoJmVwcGFyYW0tPnJiYXNlLCAodTE2KXRtcF9hZGRyKTsKKwlvdXRfYmUxNigmZXBwYXJhbS0+dGJhc2UsICh1MTYpKHRtcF9hZGRyICsKKwkJCQkoc2l6ZW9mKHN0cnVjdCBxZV9iZCkgKiBiZHJpbmdfbGVuKSkpOworCisJb3V0X2JlMTYoJmVwcGFyYW0tPnJicHRyLCBpbl9iZTE2KCZlcHBhcmFtLT5yYmFzZSkpOworCW91dF9iZTE2KCZlcHBhcmFtLT50YnB0ciwgaW5fYmUxNigmZXBwYXJhbS0+dGJhc2UpKTsKKworCWVwLT5yeGJhc2UgPSBjcG1fbXVyYW1fYWRkcih0bXBfYWRkcik7CisJZXAtPnR4YmFzZSA9IGNwbV9tdXJhbV9hZGRyKHRtcF9hZGRyICsgKHNpemVvZihzdHJ1Y3QgcWVfYmQpCisJCQkJKiBiZHJpbmdfbGVuKSk7CisJZXAtPm5fcnhiZCA9IGVwLT5yeGJhc2U7CisJZXAtPmVfcnhiZCA9IGVwLT5yeGJhc2U7CisJZXAtPm5fdHhiZCA9IGVwLT50eGJhc2U7CisJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJZXAtPmRhdGEwMSA9IDA7IC8qIGRhdGEwICovCisKKwkvKiBJbml0IFRYIGFuZCBSWCBiZHMgKi8KKwliZCA9IGVwLT5yeGJhc2U7CisJZm9yIChpID0gMDsgaSA8IGJkcmluZ19sZW4gLSAxOyBpKyspIHsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgMCk7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgUl9XKTsKKworCWJkID0gZXAtPnR4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX0JEUklOR19MRU5fVFggLSAxOyBpKyspIHsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgMCk7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgVF9XKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3J4YmRfdXBkYXRlKHN0cnVjdCBxZV9lcCAqZXApCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHRtcDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdW5zaWduZWQgaW50IGJkcmluZ19sZW47CisKKwlpZiAoZXAtPnJ4YmFzZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJkID0gZXAtPnJ4YmFzZTsKKworCWVwLT5yeGZyYW1lID0ga21hbGxvYyhzaXplb2YoKmVwLT5yeGZyYW1lKSwgR0ZQX0FUT01JQyk7CisJaWYgKGVwLT5yeGZyYW1lID09IE5VTEwpIHsKKwkJZGV2X2VycihlcC0+dWRjLT5kZXYsICJtYWxsb2MgcnhmcmFtZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlxZV9mcmFtZV9pbml0KGVwLT5yeGZyYW1lKTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU5fUlg7CisJZWxzZQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU47CisKKwlzaXplID0gKGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyKSAqIChiZHJpbmdfbGVuICsgMSk7CisJZXAtPnJ4YnVmZmVyID0ga3phbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXAtPnJ4YnVmZmVyID09IE5VTEwpIHsKKwkJZGV2X2VycihlcC0+dWRjLT5kZXYsICJtYWxsb2MgcnhidWZmZXIgZmFpbGVkLHNpemU9JWRcbiIsCisJCQkJc2l6ZSk7CisJCWtmcmVlKGVwLT5yeGZyYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXAtPnJ4YnVmX2QgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKillcC0+cnhidWZmZXIpOworCWlmIChlcC0+cnhidWZfZCA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCWVwLT5yeGJ1Zl9kID0gZG1hX21hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQllcC0+cnhidWZmZXIsCisJCQkJCXNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWVwLT5yeGJ1Zm1hcCA9IDE7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJZXAtPnJ4YnVmbWFwID0gMDsKKwl9CisKKwlzaXplID0gZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDI7CisJdG1wID0gZXAtPnJ4YnVmX2Q7CisJdG1wID0gKHUzMikoKCh0bXAgPj4gMikgPDwgMikgKyA0KTsKKworCWZvciAoaSA9IDA7IGkgPCBiZHJpbmdfbGVuIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCB0bXApOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgKFJfRSB8IFJfSSkpOworCQl0bXAgPSB0bXAgKyBzaXplOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgdG1wKTsKKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgKFJfRSB8IFJfSSB8IFJfVykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcmVnaXN0ZXJfaW5pdChzdHJ1Y3QgcWVfdWRjICp1ZGMsIHVuc2lnbmVkIGNoYXIgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisJc3RydWN0IHVzYl9lcF9wYXJhIF9faW9tZW0gKmVwcGFyYW07CisJdTE2IHVzZXAsIGxvZ2VwbnVtOworCXUxNiB0bXA7CisJdTggcnRmY3IgPSAwOworCisJZXBwYXJhbSA9IHVkYy0+ZXBfcGFyYW1bcGlwZV9udW1dOworCisJdXNlcCA9IDA7CisJbG9nZXBudW0gPSAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCXVzZXAgfD0gKGxvZ2VwbnVtIDw8IFVTQl9FUE5VTV9TSElGVCk7CisKKwlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiAweDAzKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQl1c2VwIHw9IFVTQl9UUkFOU19CVUxLOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCXVzZXAgfD0gIFVTQl9UUkFOU19JU087CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQl1c2VwIHw9IFVTQl9UUkFOU19JTlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVzZXAgfD0gVVNCX1RSQU5TX0NUUjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChlcC0+ZGlyKSB7CisJY2FzZSBVU0JfRElSX09VVDoKKwkJdXNlcCB8PSBVU0JfVEhTX0lHTk9SRV9JTjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX0lOOgorCQl1c2VwIHw9IFVTQl9SSFNfSUdOT1JFX09VVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtwaXBlX251bV0sIHVzZXApOworCisJcnRmY3IgPSAweDMwOworCW91dF84KCZlcHBhcmFtLT5yYm1yLCBydGZjcik7CisJb3V0XzgoJmVwcGFyYW0tPnRibXIsIHJ0ZmNyKTsKKworCXRtcCA9ICh1MTYpKGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUpOworCS8qIE1SQkxSIG11c3QgYmUgZGl2aXNibGUgYnkgNCAqLworCXRtcCA9ICh1MTYpKCgodG1wID4+IDIpIDw8IDIpICsgNCk7CisJb3V0X2JlMTYoJmVwcGFyYW0tPm1yYmxyLCB0bXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfaW5pdChzdHJ1Y3QgcWVfdWRjICp1ZGMsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgcGlwZV9udW0sCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXZhbCA9IDA7CisJdTE2IG1heCA9IDA7CisKKwltYXggPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwkvKiBjaGVjayB0aGUgbWF4IHBhY2thZ2Ugc2l6ZSB2YWxpZGF0ZSBmb3IgdGhpcyBlbmRwb2ludCAqLworCS8qIFJlZmVyIHRvIFVTQjIuMCBzcGVjIHRhYmxlIDktMTMsCisJKi8KKwlpZiAocGlwZV9udW0gIT0gMCkgeworCQlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItaXNvIikKKwkJCQkJfHwgc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQlpZiAoKG1heCA9PSAxMjgpIHx8IChtYXggPT0gMjU2KSB8fCAobWF4ID09IDUxMikpCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN3aXRjaCAobWF4KSB7CisJCQkJY2FzZSA0OgorCQkJCWNhc2UgODoKKwkJCQljYXNlIDE2OgorCQkJCWNhc2UgMzI6CisJCQkJY2FzZSA2NDoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQlpZiAoc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWlzbyIpKQkvKiBidWxrIGlzIG9rICovCisJCQkJZ290byBlbl9kb25lOworCQkJc3dpdGNoICh1ZGMtPmdhZGdldC5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCQlpZiAobWF4IDw9IDEwMjQpCisJCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJCQlpZiAobWF4IDw9IDY0KQorCQkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKG1heCA8PSA4KQorCQkJCQlicmVhazsKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQkJaWYgKHN0cnN0cihlcC0+ZXAubmFtZSwgIi1idWxrIikKKwkJCQl8fCBzdHJzdHIoZXAtPmVwLm5hbWUsICItaW50IikpCisJCQkJZ290byBlbl9kb25lOworCQkJc3dpdGNoICh1ZGMtPmdhZGdldC5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCQlpZiAobWF4IDw9IDEwMjQpCisJCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJCQlpZiAobWF4IDw9IDEwMjMpCisJCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQkJaWYgKHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pc28iKQorCQkJCXx8IHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pbnQiKSkKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQlzd2l0Y2ggKHVkYy0+Z2FkZ2V0LnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJCQlzd2l0Y2ggKG1heCkgeworCQkJCWNhc2UgMToKKwkJCQljYXNlIDI6CisJCQkJY2FzZSA0OgorCQkJCWNhc2UgODoKKwkJCQljYXNlIDE2OgorCQkJCWNhc2UgMzI6CisJCQkJY2FzZSA2NDoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZ290byBlbl9kb25lOworCQkJCX0KKwkJCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJCQlzd2l0Y2ggKG1heCkgeworCQkJCWNhc2UgMToKKwkJCQljYXNlIDI6CisJCQkJY2FzZSA0OgorCQkJCWNhc2UgODoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZ290byBlbl9kb25lOworCQkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZW5fZG9uZTsKKwkJfQorCX0gLyogaWYgZXAwKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCS8qIGluaXRpYWxpemUgZXAgc3RydWN0dXJlICovCisJZXAtPmVwLm1heHBhY2tldCA9IG1heDsKKwllcC0+dG0gPSAodTgpKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKTsKKwllcC0+ZGVzYyA9IGRlc2M7CisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5pbml0ID0gMTsKKworCWlmIChwaXBlX251bSA9PSAwKSB7CisJCWVwLT5kaXIgPSBVU0JfRElSX0JPVEg7CisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCX0gZWxzZQl7CisJCXN3aXRjaCAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgeworCQljYXNlIFVTQl9ESVJfT1VUOgorCQkJZXAtPmRpciA9IFVTQl9ESVJfT1VUOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RJUl9JTjoKKwkJCWVwLT5kaXIgPSBVU0JfRElSX0lOOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBoYXJkd2FyZSBzcGVjaWFsIG9wZXJhdGlvbiAqLworCXFlX2VwX2JkX2luaXQodWRjLCBwaXBlX251bSk7CisJaWYgKChlcC0+dG0gPT0gVVNCUF9UTV9DVEwpIHx8IChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKSkgeworCQlyZXZhbCA9IHFlX2VwX3J4YmRfdXBkYXRlKGVwKTsKKwkJaWYgKHJldmFsKQorCQkJZ290byBlbl9kb25lMTsKKwl9CisKKwlpZiAoKGVwLT50bSA9PSBVU0JQX1RNX0NUTCkgfHwgKGVwLT5kaXIgPT0gVVNCX0RJUl9JTikpIHsKKwkJZXAtPnR4ZnJhbWUgPSBrbWFsbG9jKHNpemVvZigqZXAtPnR4ZnJhbWUpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVwLT50eGZyYW1lID09IE5VTEwpIHsKKwkJCWRldl9lcnIodWRjLT5kZXYsICJtYWxsb2MgdHhmcmFtZSBmYWlsZWRcbiIpOworCQkJZ290byBlbl9kb25lMjsKKwkJfQorCQlxZV9mcmFtZV9pbml0KGVwLT50eGZyYW1lKTsKKwl9CisKKwlxZV9lcF9yZWdpc3Rlcl9pbml0KHVkYywgcGlwZV9udW0pOworCisJLyogTm93IEhXIHdpbGwgYmUgTkFLaW5nIHRyYW5zZmVycyB0byB0aGF0IEVQLAorCSAqIHVudGlsIGEgYnVmZmVyIGlzIHF1ZXVlZCB0byBpdC4gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworZW5fZG9uZTI6CisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+cnhmcmFtZSk7Citlbl9kb25lMToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKK2VuX2RvbmU6CisJZGV2X2RiZyh1ZGMtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplICVzXG4iLCBlcC0+ZXAubmFtZSk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxZV91c2JfZW5hYmxlKHZvaWQpCit7CisJc2V0Yml0czgoJnVkY19jb250cm9sbGVyLT51c2JfcmVncy0+dXNiX3VzbW9kLCBVU0JfTU9ERV9FTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxZV91c2JfZGlzYWJsZSh2b2lkKQoreworCWNscmJpdHM4KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c21vZCwgVVNCX01PREVfRU4pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKgkJVVNCIGFuZCBFUCBiYXNpYyBtYW5pcHVsYXRlIGZ1bmN0aW9uIGVuZAkJICAgICAgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCVVEQyB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwcm9jZXNzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcmVjeWNsZV9vbmVfcnhiZChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXUzMiBiZHN0YXR1czsKKworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKillcC0+ZV9yeGJkKTsKKwliZHN0YXR1cyA9IFJfSSB8IFJfRSB8IChiZHN0YXR1cyAmIFJfVyk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopZXAtPmVfcnhiZCwgYmRzdGF0dXMpOworCisJaWYgKGJkc3RhdHVzICYgUl9XKQorCQllcC0+ZV9yeGJkID0gZXAtPnJ4YmFzZTsKKwllbHNlCisJCWVwLT5lX3J4YmQrKzsKK30KKworc3RhdGljIHZvaWQgcmVjeWNsZV9yeGJkcyhzdHJ1Y3QgcWVfZXAgKmVwLCB1bnNpZ25lZCBjaGFyIHN0b3BhdG5leHQpCit7CisJdTMyIGJkc3RhdHVzOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZCwgKm5leHRiZDsKKwl1bnNpZ25lZCBjaGFyIHN0b3AgPSAwOworCisJbmV4dGJkID0gZXAtPm5fcnhiZDsKKwliZCA9IGVwLT5lX3J4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiAhKGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0spICYmICFzdG9wKSB7CisJCWJkc3RhdHVzID0gUl9FIHwgUl9JIHwgKGJkc3RhdHVzICYgUl9XKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzKTsKKworCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQliZCA9IGVwLT5yeGJhc2U7CisJCWVsc2UKKwkJCWJkKys7CisKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJaWYgKHN0b3BhdG5leHQgJiYgKGJkID09IG5leHRiZCkpCisJCQlzdG9wID0gMTsKKwl9CisKKwllcC0+ZV9yeGJkID0gYmQ7Cit9CisKK3N0YXRpYyB2b2lkIGVwX3JlY3ljbGVfcnhiZHMoc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQgPSBlcC0+bl9yeGJkOworCXUzMiBiZHN0YXR1czsKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwlpZiAoIShiZHN0YXR1cyAmIFJfRSkgJiYgIShiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSkgeworCQliZCA9IGVwLT5yeGJhc2UgKworCQkJCSgoaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtlcG51bV0tPnJicHRyKSAtCisJCQkJICBpbl9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2VwbnVtXS0+cmJhc2UpKQorCQkJCSA+PiAzKTsKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKworCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQliZCA9IGVwLT5yeGJhc2U7CisJCWVsc2UKKwkJCWJkKys7CisKKwkJZXAtPmVfcnhiZCA9IGJkOworCQlyZWN5Y2xlX3J4YmRzKGVwLCAwKTsKKwkJZXAtPmVfcnhiZCA9IGVwLT5uX3J4YmQ7CisJfSBlbHNlCisJCXJlY3ljbGVfcnhiZHMoZXAsIDEpOworCisJaWYgKGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlcikgJiBVU0JfRV9CU1lfTUFTSykKKwkJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlciwgVVNCX0VfQlNZX01BU0spOworCisJaWYgKGVwLT5oYXNfZGF0YSA8PSAwICYmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpCisJCXFlX2Vwcnhfbm9ybWFsKGVwKTsKKworCWVwLT5sb2NhbG5hY2sgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZWNlaXZlZF9oYW5kbGUoc3RydWN0IHFlX3VkYyAqdWRjLAorCQkJCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpzZXR1cCk7CitzdGF0aWMgaW50IHFlX2VwX3J4ZnJhbWVfaGFuZGxlKHN0cnVjdCBxZV9lcCAqZXApOworc3RhdGljIHZvaWQgZXAwX3JlcV9jb21wbGV0ZShzdHJ1Y3QgcWVfdWRjICp1ZGMsIHN0cnVjdCBxZV9yZXEgKnJlcSk7CisvKiB3aGVuIEJEIFBJRCBpcyBzZXR1cCwgaGFuZGxlIHRoZSBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgZXAwX3NldHVwX2hhbmRsZShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1swXTsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwl1bnNpZ25lZCBpbnQgZnNpemU7CisJdTggKmNwOworCisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisJaWYgKChmcmFtZV9nZXRfaW5mbyhwZnJhbWUpICYgUElEX1NFVFVQKQorCQkJJiYgKHVkYy0+ZXAwX3N0YXRlID09IFdBSVRfRk9SX1NFVFVQKSkgeworCQlmc2l6ZSA9IGZyYW1lX2dldF9sZW5ndGgocGZyYW1lKTsKKwkJaWYgKHVubGlrZWx5KGZzaXplICE9IDgpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNwID0gKHU4ICopJnVkYy0+bG9jYWxfc2V0dXBfYnVmZjsKKwkJbWVtY3B5KGNwLCBwZnJhbWUtPmRhdGEsIGZzaXplKTsKKwkJZXAtPmRhdGEwMSA9IDE7CisKKwkJLyogaGFuZGxlIHRoZSB1c2IgY29tbWFuZCBiYXNlIG9uIHRoZSB1c2JfY3RybHJlcXVlc3QgKi8KKwkJc2V0dXBfcmVjZWl2ZWRfaGFuZGxlKHVkYywgJnVkYy0+bG9jYWxfc2V0dXBfYnVmZik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBxZV9lcDBfcngoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbMF07CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXUzMiBiZHN0YXR1cywgbGVuZ3RoOworCXUzMiB2YWRkcjsKKworCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9JTikgeworCQlkZXZfZXJyKHVkYy0+ZGV2LCAiZXAwIG5vdCBhIGNvbnRyb2wgZW5kcG9pbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliZCA9IGVwLT5uX3J4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCisJd2hpbGUgKCEoYmRzdGF0dXMgJiBSX0UpICYmIGxlbmd0aCkgeworCQlpZiAoKGJkc3RhdHVzICYgUl9GKSAmJiAoYmRzdGF0dXMgJiBSX0wpCisJCQkmJiAhKGJkc3RhdHVzICYgUl9FUlJPUikpIHsKKwkJCWlmIChsZW5ndGggPT0gVVNCX0NSQ19TSVpFKSB7CisJCQkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJCQlkZXZfdmRiZyh1ZGMtPmRldiwKKwkJCQkJInJlY2VpdmUgYSBaTFAgaW4gc3RhdHVzIHBoYXNlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcWVfZnJhbWVfY2xlYW4ocGZyYW1lKTsKKwkJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCQlmcmFtZV9zZXRfZGF0YShwZnJhbWUsICh1OCAqKXZhZGRyKTsKKwkJCQlmcmFtZV9zZXRfbGVuZ3RoKHBmcmFtZSwKKwkJCQkJCShsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfT0spOworCQkJCXN3aXRjaCAoYmRzdGF0dXMgJiBSX1BJRCkgeworCQkJCWNhc2UgUl9QSURfU0VUVVA6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX1NFVFVQKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSX1BJRF9EQVRBMToKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTEpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmICgoYmRzdGF0dXMgJiBSX1BJRCkgPT0gUl9QSURfU0VUVVApCisJCQkJCWVwMF9zZXR1cF9oYW5kbGUodWRjKTsKKwkJCQllbHNlCisJCQkJCXFlX2VwX3J4ZnJhbWVfaGFuZGxlKGVwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIodWRjLT5kZXYsICJUaGUgcmVjZWl2ZSBmcmFtZSB3aXRoIGVycm9yIVxuIik7CisJCX0KKworCQkvKiBub3RlOiBkb24ndCBjbGVhciB0aGUgcnhiZCdzIGJ1ZmZlciBhZGRyZXNzICovCisJCXJlY3ljbGVfb25lX3J4YmQoZXApOworCisJCS8qIEdldCBuZXh0IEJEICovCisJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJZWxzZQorCQkJYmQrKzsKKworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCisJfQorCisJZXAtPm5fcnhiZCA9IGJkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcnhmcmFtZV9oYW5kbGUoc3RydWN0IHFlX2VwICplcCkKK3sKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwl1OCBmcmFtZXBpZCA9IDA7CisJdW5zaWduZWQgaW50IGZzaXplOworCXU4ICpjcDsKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisKKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKworCWlmIChmcmFtZV9nZXRfaW5mbyhwZnJhbWUpICYgUElEX0RBVEExKQorCQlmcmFtZXBpZCA9IDB4MTsKKworCWlmIChmcmFtZXBpZCAhPSBlcC0+ZGF0YTAxKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAidGhlIGRhdGEwMSBlcnJvciFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmc2l6ZSA9IGZyYW1lX2dldF9sZW5ndGgocGZyYW1lKTsKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlkZXZfZXJyKGVwLT51ZGMtPmRldiwgInRoZSAlcyBoYXZlIG5vIHJlcXVldWUhXG4iLCBlcC0+bmFtZSk7CisJfSBlbHNlIHsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHFlX3JlcSwgcXVldWUpOworCisJCWNwID0gKHU4ICopKHJlcS0+cmVxLmJ1ZikgKyByZXEtPnJlcS5hY3R1YWw7CisJCWlmIChjcCkgeworCQkJbWVtY3B5KGNwLCBwZnJhbWUtPmRhdGEsIGZzaXplKTsKKwkJCXJlcS0+cmVxLmFjdHVhbCArPSBmc2l6ZTsKKwkJCWlmICgoZnNpemUgPCBlcC0+ZXAubWF4cGFja2V0KSB8fAorCQkJCQkocmVxLT5yZXEuYWN0dWFsID49IHJlcS0+cmVxLmxlbmd0aCkpIHsKKwkJCQlpZiAoZXAtPmVwbnVtID09IDApCisJCQkJCWVwMF9yZXFfY29tcGxldGUoZXAtPnVkYywgcmVxKTsKKwkJCQllbHNlCisJCQkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgJiYgZXAtPmVwbnVtICE9IDApCisJCQkJCXFlX2VwcnhfbmFjayhlcCk7CisJCQl9CisJCX0KKwl9CisKKwlxZV9lcF90b2dnbGVkYXRhMDEoZXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVwX3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IChzdHJ1Y3QgcWVfdWRjICopZGF0YTsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBiZHN0YXR1cywgbGVuZ3RoOworCXUzMiB2YWRkciwgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDE7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWVwID0gJnVkYy0+ZXBzW2ldOworCisJCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfSU4gfHwgZXAtPmVuYWJsZV90YXNrbGV0ID09IDApIHsKKwkJCWRldl9kYmcodWRjLT5kZXYsCisJCQkJIlRoaXMgaXMgYSB0cmFuc21pdCBlcCBvciBkaXNhYmxlIHRhc2tsZXQhXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisJCWJkID0gZXAtPm5fcnhiZDsKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCQl3aGlsZSAoIShiZHN0YXR1cyAmIFJfRSkgJiYgbGVuZ3RoKSB7CisJCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJCXFlX2VwcnhfbmFjayhlcCk7CisJCQkJZGV2X2RiZyh1ZGMtPmRldiwKKwkJCQkJIlRoZSByeGVwIGhhdmUgbm9yZXEgJWRcbiIsCisJCQkJCWVwLT5oYXNfZGF0YSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICgoYmRzdGF0dXMgJiBSX0YpICYmIChiZHN0YXR1cyAmIFJfTCkKKwkJCQkmJiAhKGJkc3RhdHVzICYgUl9FUlJPUikpIHsKKwkJCQlxZV9mcmFtZV9jbGVhbihwZnJhbWUpOworCQkJCXZhZGRyID0gKHUzMilwaHlzX3RvX3ZpcnQoaW5fYmUzMigmYmQtPmJ1ZikpOworCQkJCWZyYW1lX3NldF9kYXRhKHBmcmFtZSwgKHU4ICopdmFkZHIpOworCQkJCWZyYW1lX3NldF9sZW5ndGgocGZyYW1lLAorCQkJCQkJKGxlbmd0aCAtIFVTQl9DUkNfU0laRSkpOworCQkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9PSyk7CisJCQkJc3dpdGNoIChiZHN0YXR1cyAmIFJfUElEKSB7CisJCQkJY2FzZSBSX1BJRF9EQVRBMToKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTEpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFJfUElEX1NFVFVQOgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9TRVRVUCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEEwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIGhhbmRsZSB0aGUgcnggZnJhbWUgKi8KKwkJCQlxZV9lcF9yeGZyYW1lX2hhbmRsZShlcCk7CisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIodWRjLT5kZXYsCisJCQkJCSJlcnJvciBpbiByZWNlaXZlZCBmcmFtZVxuIik7CisJCQl9CisJCQkvKiBub3RlOiBkb24ndCBjbGVhciB0aGUgcnhiZCdzIGJ1ZmZlciBhZGRyZXNzICovCisJCQkvKmNsZWFyIHRoZSBsZW5ndGggKi8KKwkJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyAmIEJEX1NUQVRVU19NQVNLKTsKKwkJCWVwLT5oYXNfZGF0YS0tOworCQkJaWYgKCEoZXAtPmxvY2FsbmFjaykpCisJCQkJcmVjeWNsZV9vbmVfcnhiZChlcCk7CisKKwkJCS8qIEdldCBuZXh0IEJEICovCisJCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQkJYmQgPSBlcC0+cnhiYXNlOworCQkJZWxzZQorCQkJCWJkKys7CisKKwkJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCQlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCQl9CisKKwkJZXAtPm5fcnhiZCA9IGJkOworCisJCWlmIChlcC0+bG9jYWxuYWNrKQorCQkJZXBfcmVjeWNsZV9yeGJkcyhlcCk7CisKKwkJZXAtPmVuYWJsZV90YXNrbGV0ID0gMDsKKwl9IC8qIGZvciBpPTEgKi8KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHFlX2VwX3J4KHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1MTYgc3dvZmZzLCB1Y29mZnMsIGVtcHR5YmRzOworCisJdWRjID0gZXAtPnVkYzsKKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfSU4pIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgInRyYW5zbWl0IGVwIGluIHJ4IGZ1bmN0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmQgPSBlcC0+bl9yeGJkOworCisJc3dvZmZzID0gKHUxNikoYmQgLSBlcC0+cnhiYXNlKTsKKwl1Y29mZnMgPSAodTE2KSgoaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtlcC0+ZXBudW1dLT5yYnB0cikgLQorCQkJaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtlcC0+ZXBudW1dLT5yYmFzZSkpID4+IDMpOworCWlmIChzd29mZnMgPCB1Y29mZnMpCisJCWVtcHR5YmRzID0gVVNCX0JEUklOR19MRU5fUlggLSB1Y29mZnMgKyBzd29mZnM7CisJZWxzZQorCQllbXB0eWJkcyA9IHN3b2ZmcyAtIHVjb2ZmczsKKworCWlmIChlbXB0eWJkcyA8IE1JTl9FTVBUWV9CRFMpIHsKKwkJcWVfZXByeF9uYWNrKGVwKTsKKwkJZXAtPmxvY2FsbmFjayA9IDE7CisJCWRldl92ZGJnKHVkYy0+ZGV2LCAiJWQgZW1wdHkgYmRzLCBzZW5kIE5BQ0tcbiIsIGVtcHR5YmRzKTsKKwl9CisJZXAtPmhhc19kYXRhID0gVVNCX0JEUklOR19MRU5fUlggLSBlbXB0eWJkczsKKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXFlX2VwcnhfbmFjayhlcCk7CisJCWRldl92ZGJnKHVkYy0+ZGV2LCAiVGhlIHJ4ZXAgaGF2ZSBubyByZXEgcXVldWVkIHdpdGggJWQgQkRzXG4iLAorCQkJCWVwLT5oYXNfZGF0YSk7CisJCXJldHVybiAwOworCX0KKworCXRhc2tsZXRfc2NoZWR1bGUoJnVkYy0+cnhfdGFza2xldCk7CisJZXAtPmVuYWJsZV90YXNrbGV0ID0gMTsKKworCXJldHVybiAwOworfQorCisvKiBzZW5kIGRhdGEgZnJvbSBhIGZyYW1lLCBubyBtYXR0ZXIgd2hhdCB0eF9yZXEgKi8KK3N0YXRpYyBpbnQgcWVfZXBfdHgoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX2ZyYW1lICpmcmFtZSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1MTYgc2F2ZXVzYm1yOworCXUzMiBiZHN0YXR1cywgcGlkbWFzazsKKwl1MzIgcGFkZHI7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkgeworCQlkZXZfZXJyKHVkYy0+ZGV2LCAicmVjZWl2ZSBlcCBwYXNzZWQgdG8gdHggZnVuY3Rpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBUeCBpbnRlcnJ1cHQgKi8KKwlzYXZldXNibXIgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIpOworCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsCisJCQlzYXZldXNibXIgJiB+KFVTQl9FX1RYQl9NQVNLIHwgVVNCX0VfVFhFX01BU0spKTsKKworCWJkID0gZXAtPm5fdHhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCisJaWYgKCEoYmRzdGF0dXMgJiAoVF9SIHwgQkRfTEVOR1RIX01BU0spKSkgeworCQlpZiAoZnJhbWVfZ2V0X2xlbmd0aChmcmFtZSkgPT0gMCkgeworCQkJZnJhbWVfc2V0X2RhdGEoZnJhbWUsIHVkYy0+bnVsbGJ1Zik7CisJCQlmcmFtZV9zZXRfbGVuZ3RoKGZyYW1lLCAyKTsKKwkJCWZyYW1lLT5pbmZvIHw9IChaTFAgfCBOT19DUkMpOworCQkJZGV2X3ZkYmcodWRjLT5kZXYsICJ0aGUgZnJhbWUgc2l6ZSA9IDBcbiIpOworCQl9CisJCXBhZGRyID0gdmlydF90b19waHlzKCh2b2lkICopZnJhbWUtPmRhdGEpOworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgcGFkZHIpOworCQliZHN0YXR1cyA9IChiZHN0YXR1cyZUX1cpOworCQlpZiAoIShmcmFtZV9nZXRfaW5mbyhmcmFtZSkgJiBOT19DUkMpKQorCQkJYmRzdGF0dXMgfD0gVF9SIHwgVF9JIHwgVF9MIHwgVF9UQworCQkJCQl8IGZyYW1lX2dldF9sZW5ndGgoZnJhbWUpOworCQllbHNlCisJCQliZHN0YXR1cyB8PSBUX1IgfCBUX0kgfCBUX0wgfCBmcmFtZV9nZXRfbGVuZ3RoKGZyYW1lKTsKKworCQkvKiBpZiB0aGUgcGFja2V0IGlzIGEgWkxQIGluIHN0YXR1cyBwaGFzZSAqLworCQlpZiAoKGVwLT5lcG51bSA9PSAwKSAmJiAodWRjLT5lcDBfc3RhdGUgPT0gREFUQV9TVEFURV9ORUVEX1pMUCkpCisJCQllcC0+ZGF0YTAxID0gMHgxOworCisJCWlmIChlcC0+ZGF0YTAxKSB7CisJCQlwaWRtYXNrID0gVF9QSURfREFUQTE7CisJCQlmcmFtZS0+aW5mbyB8PSBQSURfREFUQTE7CisJCX0gZWxzZSB7CisJCQlwaWRtYXNrID0gVF9QSURfREFUQTA7CisJCQlmcmFtZS0+aW5mbyB8PSBQSURfREFUQTA7CisJCX0KKwkJYmRzdGF0dXMgfD0gVF9DTkY7CisJCWJkc3RhdHVzIHw9IHBpZG1hc2s7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyk7CisJCXFlX2VwX2ZpbGx0eGZpZm8oZXApOworCisJCS8qIGVuYWJsZSB0aGUgVFggaW50ZXJydXB0ICovCisJCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsIHNhdmV1c2Jtcik7CisKKwkJcWVfZXBfdG9nZ2xlZGF0YTAxKGVwKTsKKwkJaWYgKGJkc3RhdHVzICYgVF9XKQorCQkJZXAtPm5fdHhiZCA9IGVwLT50eGJhc2U7CisJCWVsc2UKKwkJCWVwLT5uX3R4YmQrKzsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLCBzYXZldXNibXIpOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlRoZSB0eCBiZCBpcyBub3QgcmVhZHkhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9Cit9CisKKy8qIHdoZW4gYSBiZCB3YXMgdHJhbnNtaXR0ZWQsIHRoZSBmdW5jdGlvbiBjYW4KKyAqIGhhbmRsZSB0aGUgdHhfcmVxLCBub3QgaW5jbHVkZSBlcDAgICAgICAgICAgICovCitzdGF0aWMgaW50IHR4Y29tcGxldGUoc3RydWN0IHFlX2VwICplcCwgdW5zaWduZWQgY2hhciByZXN0YXJ0KQoreworCWlmIChlcC0+dHhfcmVxICE9IE5VTEwpIHsKKwkJaWYgKCFyZXN0YXJ0KSB7CisJCQlpbnQgYXNlbnQgPSBlcC0+bGFzdDsKKwkJCWVwLT5zZW50ICs9IGFzZW50OworCQkJZXAtPmxhc3QgLT0gYXNlbnQ7CisJCX0gZWxzZSB7CisJCQllcC0+bGFzdCA9IDA7CisJCX0KKworCQkvKiBhIHJlcXVlc3QgYWxyZWFkeSB3ZXJlIHRyYW5zbWl0dGVkIGNvbXBsZXRlbHkgKi8KKwkJaWYgKChlcC0+dHhfcmVxLT5yZXEubGVuZ3RoIC0gZXAtPnNlbnQpIDw9IDApIHsKKwkJCWVwLT50eF9yZXEtPnJlcS5hY3R1YWwgPSAodW5zaWduZWQgaW50KWVwLT5zZW50OworCQkJZG9uZShlcCwgZXAtPnR4X3JlcSwgMCk7CisJCQllcC0+dHhfcmVxID0gTlVMTDsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJCWVwLT5zZW50ID0gMDsKKwkJfQorCX0KKworCS8qIHdlIHNob3VsZCBnYWluIGEgbmV3IHR4X3JlcSBmb3QgdGhpcyBlbmRwb2ludCAqLworCWlmIChlcC0+dHhfcmVxID09IE5VTEwpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQllcC0+dHhfcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwJc3RydWN0IHFlX3JlcSwKKwkJCQkJCQlxdWV1ZSk7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZ2l2ZSBhIGZyYW1lIGFuZCBhIHR4X3JlcSwgc2VuZCBzb21lIGRhdGEgKi8KK3N0YXRpYyBpbnQgcWVfdXNiX3NlbmRkYXRhKHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9mcmFtZSAqZnJhbWUpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJdTggKmJ1ZjsKKworCXFlX2ZyYW1lX2NsZWFuKGZyYW1lKTsKKwlzaXplID0gbWluX3QodTMyLCAoZXAtPnR4X3JlcS0+cmVxLmxlbmd0aCAtIGVwLT5zZW50KSwKKwkJCQllcC0+ZXAubWF4cGFja2V0KTsKKwlidWYgPSAodTggKillcC0+dHhfcmVxLT5yZXEuYnVmICsgZXAtPnNlbnQ7CisJaWYgKGJ1ZiAmJiBzaXplKSB7CisJCWVwLT5sYXN0ID0gc2l6ZTsKKwkJZnJhbWVfc2V0X2RhdGEoZnJhbWUsIGJ1Zik7CisJCWZyYW1lX3NldF9sZW5ndGgoZnJhbWUsIHNpemUpOworCQlmcmFtZV9zZXRfc3RhdHVzKGZyYW1lLCBGUkFNRV9PSyk7CisJCWZyYW1lX3NldF9pbmZvKGZyYW1lLCAwKTsKKwkJcmV0dXJuIHFlX2VwX3R4KGVwLCBmcmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorCisvKiBnaXZlIGEgZnJhbWUgc3RydWN0LHNlbmQgYSBaTFAgKi8KK3N0YXRpYyBpbnQgc2VuZG51bGxkYXRhKHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9mcmFtZSAqZnJhbWUsIHVpbnQgaW5mb3IpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCWlmIChmcmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXFlX2ZyYW1lX2NsZWFuKGZyYW1lKTsKKwlmcmFtZV9zZXRfZGF0YShmcmFtZSwgKHU4ICopdWRjLT5udWxsYnVmKTsKKwlmcmFtZV9zZXRfbGVuZ3RoKGZyYW1lLCAyKTsKKwlmcmFtZV9zZXRfc3RhdHVzKGZyYW1lLCBGUkFNRV9PSyk7CisJZnJhbWVfc2V0X2luZm8oZnJhbWUsIChaTFAgfCBOT19DUkMgfCBpbmZvcikpOworCisJcmV0dXJuIHFlX2VwX3R4KGVwLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZnJhbWVfY3JlYXRlX3R4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9mcmFtZSAqZnJhbWUpCit7CisJc3RydWN0IHFlX3JlcSAqcmVxID0gZXAtPnR4X3JlcTsKKwlpbnQgcmV2YWw7CisKKwlpZiAocmVxID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChyZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPiAwKQorCQlyZXZhbCA9IHFlX3VzYl9zZW5kZGF0YShlcCwgZnJhbWUpOworCWVsc2UKKwkJcmV2YWwgPSBzZW5kbnVsbGRhdGEoZXAsIGZyYW1lLCAwKTsKKworCXJldHVybiByZXZhbDsKK30KKworLyogaWYgZGlyZWN0aW9uIGlzIERJUl9JTiwgdGhlIHN0YXR1cyBpcyBEZXZpY2UtPkhvc3QKKyAqIGlmIGRpcmVjdGlvbiBpcyBESVJfT1VULCB0aGUgc3RhdHVzIHRyYW5zYWN0aW9uIGlzIERldmljZTwtSG9zdAorICogaW4gc3RhdHVzIHBoYXNlLCB1ZGMgY3JlYXRlIGEgcmVxdWVzdCBhbmQgZ2FpbiBzdGF0dXMgKi8KK3N0YXRpYyBpbnQgZXAwX3ByaW1lX3N0YXR1cyhzdHJ1Y3QgcWVfdWRjICp1ZGMsIGludCBkaXJlY3Rpb24pCit7CisKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCisJaWYgKGRpcmVjdGlvbiA9PSBVU0JfRElSX0lOKSB7CisJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9ORUVEX1pMUDsKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwkJc2VuZG51bGxkYXRhKGVwLCBlcC0+dHhmcmFtZSwgU0VUVVBfU1RBVFVTIHwgTk9fUkVRKTsKKwl9IGVsc2UgeworCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9PVVRfU1RBVFVTOworCX0KKworCXJldHVybiAwOworfQorCisvKiBhIHJlcXVlc3QgY29tcGxldGUgaW4gZXAwLCB3aGV0aGVyIGdhZGdldCByZXF1ZXN0IG9yIHVkYyByZXF1ZXN0ICovCitzdGF0aWMgdm9pZCBlcDBfcmVxX2NvbXBsZXRlKHN0cnVjdCBxZV91ZGMgKnVkYywgc3RydWN0IHFlX3JlcSAqcmVxKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbMF07CisJLyogYmVjYXVzZSB1c2IgYW5kIGVwJ3Mgc3RhdHVzIGFscmVhZHkgYmVlbiBzZXQgaW4gY2g5c2V0YWRkcmVzcygpICovCisKKwlzd2l0Y2ggKHVkYy0+ZXAwX3N0YXRlKSB7CisJY2FzZSBEQVRBX1NUQVRFX1hNSVQ6CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCS8qIHJlY2VpdmUgc3RhdHVzIHBoYXNlICovCisJCWlmIChlcDBfcHJpbWVfc3RhdHVzKHVkYywgVVNCX0RJUl9PVVQpKQorCQkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCWJyZWFrOworCisJY2FzZSBEQVRBX1NUQVRFX05FRURfWkxQOgorCQlkb25lKGVwLCByZXEsIDApOworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQlicmVhazsKKworCWNhc2UgREFUQV9TVEFURV9SRUNWOgorCQlkb25lKGVwLCByZXEsIDApOworCQkvKiBzZW5kIHN0YXR1cyBwaGFzZSAqLworCQlpZiAoZXAwX3ByaW1lX3N0YXR1cyh1ZGMsIFVTQl9ESVJfSU4pKQorCQkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCWJyZWFrOworCisJY2FzZSBXQUlUX0ZPUl9PVVRfU1RBVFVTOgorCQlkb25lKGVwLCByZXEsIDApOworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQlicmVhazsKKworCWNhc2UgV0FJVF9GT1JfU0VUVVA6CisJCWRldl92ZGJnKHVkYy0+ZGV2LCAiVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXAwX3R4Y29tcGxldGUoc3RydWN0IHFlX2VwICplcCwgdW5zaWduZWQgY2hhciByZXN0YXJ0KQoreworCXN0cnVjdCBxZV9yZXEgKnR4X3JlcSA9IE5VTEw7CisJc3RydWN0IHFlX2ZyYW1lICpmcmFtZSA9IGVwLT50eGZyYW1lOworCisJaWYgKChmcmFtZV9nZXRfaW5mbyhmcmFtZSkgJiAoWkxQIHwgTk9fUkVRKSkgPT0gKFpMUCB8IE5PX1JFUSkpIHsKKwkJaWYgKCFyZXN0YXJ0KQorCQkJZXAtPnVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCWVsc2UKKwkJCXNlbmRudWxsZGF0YShlcCwgZXAtPnR4ZnJhbWUsIFNFVFVQX1NUQVRVUyB8IE5PX1JFUSk7CisJCXJldHVybiAwOworCX0KKworCXR4X3JlcSA9IGVwLT50eF9yZXE7CisJaWYgKHR4X3JlcSAhPSBOVUxMKSB7CisJCWlmICghcmVzdGFydCkgeworCQkJaW50IGFzZW50ID0gZXAtPmxhc3Q7CisJCQllcC0+c2VudCArPSBhc2VudDsKKwkJCWVwLT5sYXN0IC09IGFzZW50OworCQl9IGVsc2UgeworCQkJZXAtPmxhc3QgPSAwOworCQl9CisKKwkJLyogYSByZXF1ZXN0IGFscmVhZHkgd2VyZSB0cmFuc21pdHRlZCBjb21wbGV0ZWx5ICovCisJCWlmICgoZXAtPnR4X3JlcS0+cmVxLmxlbmd0aCAtIGVwLT5zZW50KSA8PSAwKSB7CisJCQllcC0+dHhfcmVxLT5yZXEuYWN0dWFsID0gKHVuc2lnbmVkIGludCllcC0+c2VudDsKKwkJCWVwMF9yZXFfY29tcGxldGUoZXAtPnVkYywgZXAtPnR4X3JlcSk7CisJCQllcC0+dHhfcmVxID0gTlVMTDsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJCWVwLT5zZW50ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWRldl92ZGJnKGVwLT51ZGMtPmRldiwgInRoZSBlcDBfY29udHJvbGxlciBoYXZlIG5vIHJlcVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXAwX3R4ZnJhbWVfaGFuZGxlKHN0cnVjdCBxZV9lcCAqZXApCit7CisJLyogaWYgaGF2ZSBlcnJvciwgdHJhbnNtaXQgYWdhaW4gKi8KKwlpZiAoZnJhbWVfZ2V0X3N0YXR1cyhlcC0+dHhmcmFtZSkgJiBGUkFNRV9FUlJPUikgeworCQlxZV9lcF9mbHVzaHR4ZmlmbyhlcCk7CisJCWRldl92ZGJnKGVwLT51ZGMtPmRldiwgIlRoZSBFUDAgdHJhbnNtaXQgZGF0YSBoYXZlIGVycm9yIVxuIik7CisJCWlmIChmcmFtZV9nZXRfaW5mbyhlcC0+dHhmcmFtZSkgJiBQSURfREFUQTApCisJCQllcC0+ZGF0YTAxID0gMDsKKwkJZWxzZQorCQkJZXAtPmRhdGEwMSA9IDE7CisKKwkJZXAwX3R4Y29tcGxldGUoZXAsIDEpOworCX0gZWxzZQorCQllcDBfdHhjb21wbGV0ZShlcCwgMCk7CisKKwlmcmFtZV9jcmVhdGVfdHgoZXAsIGVwLT50eGZyYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcDBfdHhjb25mKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXUzMiBiZHN0YXR1czsKKworCWJkID0gZXAtPmNfdHhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCXdoaWxlICghKGJkc3RhdHVzICYgVF9SKSAmJiAoYmRzdGF0dXMgJiB+VF9XKSkgeworCQlwZnJhbWUgPSBlcC0+dHhmcmFtZTsKKworCQkvKiBjbGVhciBhbmQgcmVjeWNsZSB0aGUgQkQgKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzICYgVF9XKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlpZiAoYmRzdGF0dXMgJiBUX1cpCisJCQllcC0+Y190eGJkID0gZXAtPnR4YmFzZTsKKwkJZWxzZQorCQkJZXAtPmNfdHhiZCsrOworCisJCWlmIChlcC0+Y190eGJkID09IGVwLT5uX3R4YmQpIHsKKwkJCWlmIChiZHN0YXR1cyAmIERFVklDRV9UX0VSUk9SKSB7CisJCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX0VSUk9SKTsKKwkJCQlpZiAoYmRzdGF0dXMgJiBUX1RPKQorCQkJCQlwZnJhbWUtPnN0YXR1cyB8PSBUWF9FUl9USU1FT1VUOworCQkJCWlmIChiZHN0YXR1cyAmIFRfVU4pCisJCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1VOREVSVU47CisJCQl9CisJCQllcDBfdHhmcmFtZV9oYW5kbGUoZXApOworCQl9CisKKwkJYmQgPSBlcC0+Y190eGJkOworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwX3R4ZnJhbWVfaGFuZGxlKHN0cnVjdCBxZV9lcCAqZXApCit7CisJaWYgKGZyYW1lX2dldF9zdGF0dXMoZXAtPnR4ZnJhbWUpICYgRlJBTUVfRVJST1IpIHsKKwkJcWVfZXBfZmx1c2h0eGZpZm8oZXApOworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJUaGUgRVAwIHRyYW5zbWl0IGRhdGEgaGF2ZSBlcnJvciFcbiIpOworCQlpZiAoZnJhbWVfZ2V0X2luZm8oZXAtPnR4ZnJhbWUpICYgUElEX0RBVEEwKQorCQkJZXAtPmRhdGEwMSA9IDA7CisJCWVsc2UKKwkJCWVwLT5kYXRhMDEgPSAxOworCisJCXR4Y29tcGxldGUoZXAsIDEpOworCX0gZWxzZQorCQl0eGNvbXBsZXRlKGVwLCAwKTsKKworCWZyYW1lX2NyZWF0ZV90eChlcCwgZXAtPnR4ZnJhbWUpOyAvKiBzZW5kIHRoZSBkYXRhICovCisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbmZpcm0gdGhlIGFscmVhZHkgdHJhaW5zbWl0ZWQgYmQgKi8KK3N0YXRpYyBpbnQgcWVfZXBfdHhjb25mKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lID0gTlVMTDsKKwl1MzIgYmRzdGF0dXM7CisJdW5zaWduZWQgY2hhciBicmVha29ucnhpbnRlcnJ1cHQgPSAwOworCisJYmQgPSBlcC0+Y190eGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJd2hpbGUgKCEoYmRzdGF0dXMgJiBUX1IpICYmIChiZHN0YXR1cyAmIH5UX1cpKSB7CisJCXBmcmFtZSA9IGVwLT50eGZyYW1lOworCQlpZiAoYmRzdGF0dXMgJiBERVZJQ0VfVF9FUlJPUikgeworCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX0VSUk9SKTsKKwkJCWlmIChiZHN0YXR1cyAmIFRfVE8pCisJCQkJcGZyYW1lLT5zdGF0dXMgfD0gVFhfRVJfVElNRU9VVDsKKwkJCWlmIChiZHN0YXR1cyAmIFRfVU4pCisJCQkJcGZyYW1lLT5zdGF0dXMgfD0gVFhfRVJfVU5ERVJVTjsKKwkJfQorCisJCS8qIGNsZWFyIGFuZCByZWN5Y2xlIHRoZSBCRCAqLworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMgJiBUX1cpOworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJCWlmIChiZHN0YXR1cyAmIFRfVykKKwkJCWVwLT5jX3R4YmQgPSBlcC0+dHhiYXNlOworCQllbHNlCisJCQllcC0+Y190eGJkKys7CisKKwkJLyogaGFuZGxlIHRoZSB0eCBmcmFtZSAqLworCQllcF90eGZyYW1lX2hhbmRsZShlcCk7CisJCWJkID0gZXAtPmNfdHhiZDsKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl9CisJaWYgKGJyZWFrb25yeGludGVycnVwdCkKKwkJcmV0dXJuIC1FSU87CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogQWRkIGEgcmVxdWVzdCBpbiBxdWV1ZSwgYW5kIHRyeSB0byB0cmFuc21pdCBhIHBhY2tldCAqLworc3RhdGljIGludCBlcF9yZXFfc2VuZChzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfcmVxICpyZXEpCit7CisJaW50IHJldmFsID0gMDsKKworCWlmIChlcC0+dHhfcmVxID09IE5VTEwpIHsKKwkJZXAtPnNlbnQgPSAwOworCQllcC0+bGFzdCA9IDA7CisJCXR4Y29tcGxldGUoZXAsIDApOyAvKiBjYW4gZ2FpbiBhIG5ldyB0eF9yZXEgKi8KKwkJcmV2YWwgPSBmcmFtZV9jcmVhdGVfdHgoZXAsIGVwLT50eGZyYW1lKTsKKwl9CisJcmV0dXJuIHJldmFsOworfQorCisvKiBNYXliZSB0aGlzIGlzIGEgZ29vZCBpZGVhbCAqLworc3RhdGljIGludCBlcF9yZXFfcngoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWUgPSBOVUxMOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHIsIGZzaXplOworCXU4ICpjcDsKKwl1OCBmaW5pc2hfcmVxID0gMDsKKwl1OCBmcmFtZXBpZDsKKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIHJlcSBhbHJlYWR5IGZpbmlzaCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwliZCA9IGVwLT5uX3J4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCisJd2hpbGUgKCEoYmRzdGF0dXMgJiBSX0UpICYmIGxlbmd0aCkgeworCQlpZiAoZmluaXNoX3JlcSkKKwkJCWJyZWFrOworCQlpZiAoKGJkc3RhdHVzICYgUl9GKSAmJiAoYmRzdGF0dXMgJiBSX0wpCisJCQkJCSYmICEoYmRzdGF0dXMgJiBSX0VSUk9SKSkgeworCQkJcWVfZnJhbWVfY2xlYW4ocGZyYW1lKTsKKwkJCXZhZGRyID0gKHUzMilwaHlzX3RvX3ZpcnQoaW5fYmUzMigmYmQtPmJ1ZikpOworCQkJZnJhbWVfc2V0X2RhdGEocGZyYW1lLCAodTggKil2YWRkcik7CisJCQlmcmFtZV9zZXRfbGVuZ3RoKHBmcmFtZSwgKGxlbmd0aCAtIFVTQl9DUkNfU0laRSkpOworCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX09LKTsKKwkJCXN3aXRjaCAoYmRzdGF0dXMgJiBSX1BJRCkgeworCQkJY2FzZSBSX1BJRF9EQVRBMToKKwkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMSk7IGJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMCk7IGJyZWFrOworCQkJfQorCQkJLyogaGFuZGxlIHRoZSByeCBmcmFtZSAqLworCisJCQlpZiAoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9EQVRBMSkKKwkJCQlmcmFtZXBpZCA9IDB4MTsKKwkJCWVsc2UKKwkJCQlmcmFtZXBpZCA9IDA7CisKKwkJCWlmIChmcmFtZXBpZCAhPSBlcC0+ZGF0YTAxKSB7CisJCQkJZGV2X3ZkYmcodWRjLT5kZXYsICJ0aGUgZGF0YTAxIGVycm9yIVxuIik7CisJCQl9IGVsc2UgeworCQkJCWZzaXplID0gZnJhbWVfZ2V0X2xlbmd0aChwZnJhbWUpOworCisJCQkJY3AgPSAodTggKikocmVxLT5yZXEuYnVmKSArIHJlcS0+cmVxLmFjdHVhbDsKKwkJCQlpZiAoY3ApIHsKKwkJCQkJbWVtY3B5KGNwLCBwZnJhbWUtPmRhdGEsIGZzaXplKTsKKwkJCQkJcmVxLT5yZXEuYWN0dWFsICs9IGZzaXplOworCQkJCQlpZiAoKGZzaXplIDwgZXAtPmVwLm1heHBhY2tldCkKKwkJCQkJCXx8IChyZXEtPnJlcS5hY3R1YWwgPj0KKwkJCQkJCQlyZXEtPnJlcS5sZW5ndGgpKSB7CisJCQkJCQlmaW5pc2hfcmVxID0gMTsKKwkJCQkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQkJCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCQkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJCQl9CisJCQkJfQorCQkJCXFlX2VwX3RvZ2dsZWRhdGEwMShlcCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAiVGhlIHJlY2VpdmUgZnJhbWUgd2l0aCBlcnJvciFcbiIpOworCQl9CisKKwkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqCisJCSAqIG9ubHkgQ2xlYXIgdGhlIGxlbmd0aCAqLworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgKGJkc3RhdHVzICYgQkRfU1RBVFVTX01BU0spKTsKKwkJZXAtPmhhc19kYXRhLS07CisKKwkJLyogR2V0IG5leHQgQkQgKi8KKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisJfQorCisJZXAtPm5fcnhiZCA9IGJkOworCWVwX3JlY3ljbGVfcnhiZHMoZXApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG9ubHkgYWRkIHRoZSByZXF1ZXN0IGluIHF1ZXVlICovCitzdGF0aWMgaW50IGVwX3JlcV9yZWNlaXZlKHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlpZiAoZXAtPnN0YXRlID09IEVQX1NUQVRFX05BQ0spIHsKKwkJaWYgKGVwLT5oYXNfZGF0YSA8PSAwKSB7CisJCQkvKiBFbmFibGUgcnggYW5kIHVubWFzayByeCBpbnRlcnJ1cHQgKi8KKwkJCXFlX2Vwcnhfbm9ybWFsKGVwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENvcHkgdGhlIGV4aXN0IEJEIGRhdGEgKi8KKwkJCWVwX3JlcV9yeChlcCwgcmVxKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlJbnRlcm5hbCBVc2VkIEZ1bmN0aW9uIEVuZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlFbmRwb2ludCBNYW5hZ2VtZW50IEZ1bmN0aW9ucyBGb3IgR2FkZ2V0CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBxZV9lcF9lbmFibGUoc3RydWN0IHVzYl9lcCAqX2VwLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJc3RydWN0IHFlX2VwICplcDsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBjaGFyIGVwbnVtOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcF9uYW1lWzBdIHx8CisJCQkoZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRjID0gZXAtPnVkYzsKKwlpZiAoIXVkYy0+ZHJpdmVyIHx8ICh1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikpCisJCXJldHVybiAtRVNIVVRET1dOOworCisJZXBudW0gPSAodTgpZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4RjsKKworCXJldHZhbCA9IHFlX2VwX2luaXQodWRjLCBlcG51bSwgZGVzYyk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnJ4YmFzZSkpOworCQlkZXZfZGJnKHVkYy0+ZGV2LCAiZW5hYmxlIGVwJWQgZmFpbGVkXG4iLCBlcC0+ZXBudW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2X2RiZyh1ZGMtPmRldiwgImVuYWJsZSBlcCVkIHN1Y2Nlc3NmdWxcbiIsIGVwLT5lcG51bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXN0cnVjdCBxZV9lcCAqZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisJdWRjID0gZXAtPnVkYzsKKworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlkZXZfZGJnKHVkYy0+ZGV2LCAiJXMgbm90IGVuYWJsZWRcbiIsIF9lcCA/IGVwLT5lcC5uYW1lIDogTlVMTCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwkvKiBOdWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLworCW51a2UoZXAsIC1FU0hVVERPV04pOworCWVwLT5kZXNjID0gTlVMTDsKKwllcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQlzaXplID0gKGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyKSAqCisJCQkJKFVTQl9CRFJJTkdfTEVOX1JYICsgMSk7CisJZWxzZQorCQlzaXplID0gKGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyKSAqCisJCQkJKFVTQl9CRFJJTkdfTEVOICsgMSk7CisKKwlpZiAoZXAtPmRpciAhPSBVU0JfRElSX0lOKSB7CisJCWtmcmVlKGVwLT5yeGZyYW1lKTsKKwkJaWYgKGVwLT5yeGJ1Zm1hcCkgeworCQkJZG1hX3VubWFwX3NpbmdsZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQkJZXAtPnJ4YnVmX2QgPSBETUFfQUREUl9JTlZBTElEOworCQl9IGVsc2UgeworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoCisJCQkJCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCX0KKwkJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwl9CisKKwlpZiAoZXAtPmRpciAhPSBVU0JfRElSX09VVCkKKwkJa2ZyZWUoZXAtPnR4ZnJhbWUpOworCisJZGV2X2RiZyh1ZGMtPmRldiwgImRpc2FibGVkICVzIE9LXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpxZV9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKworCXJlcSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXEpLCBnZnBfZmxhZ3MpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisKKwlJTklUX0xJU1RfSEVBRCgmcmVxLT5xdWV1ZSk7CisKKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCitzdGF0aWMgdm9pZCBxZV9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBxZV9yZXEsIHJlcSk7CisKKwlpZiAoX3JlcSkKKwkJa2ZyZWUocmVxKTsKK30KKworLyogcXVldWVzIChzdWJtaXRzKSBhbiBJL08gcmVxdWVzdCB0byBhbiBlbmRwb2ludCAqLworc3RhdGljIGludCBxZV9lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwKKwkJCQlnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHFlX2VwICplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXZhbDsKKworCXVkYyA9IGVwLT51ZGM7CisJLyogY2F0Y2ggdmFyaW91cyBib2d1cyBwYXJhbWV0ZXJzICovCisJaWYgKCFfcmVxIHx8ICFyZXEtPnJlcS5jb21wbGV0ZSB8fCAhcmVxLT5yZXEuYnVmCisJCQl8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpIHsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgImJhZCBwYXJhbXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcF9pbmRleChlcCkpKSB7CisJCWRldl9kYmcodWRjLT5kZXYsICJiYWQgZXBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXVkYy0+ZHJpdmVyIHx8IHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCXJlcS0+ZXAgPSBlcDsKKworCS8qIG1hcCB2aXJ0dWFsIGFkZHJlc3MgdG8gaGFyZHdhcmUgKi8KKwlpZiAocmVxLT5yZXEuZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJcmVxLT5yZXEuZG1hID0gZG1hX21hcF9zaW5nbGUoZXAtPnVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCXJlcS0+cmVxLmJ1ZiwKKwkJCQkJcmVxLT5yZXEubGVuZ3RoLAorCQkJCQllcF9pc19pbihlcCkKKwkJCQkJPyBETUFfVE9fREVWSUNFIDoKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJcmVxLT5tYXBwZWQgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkJZXBfaXNfaW4oZXApCisJCQkJCT8gRE1BX1RPX0RFVklDRSA6CisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCXJlcS0+bWFwcGVkID0gMDsKKwl9CisKKwlyZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJcmVxLT5yZXEuYWN0dWFsID0gMDsKKworCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCWRldl92ZGJnKHVkYy0+ZGV2LCAiZ2FkZ2V0IGhhdmUgcmVxdWVzdCBpbiAlcyEgJWRcbiIsCisJCQllcC0+bmFtZSwgcmVxLT5yZXEubGVuZ3RoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJLyogcHVzaCB0aGUgcmVxdWVzdCB0byBkZXZpY2UgKi8KKwlpZiAoZXBfaXNfaW4oZXApKQorCQlyZXZhbCA9IGVwX3JlcV9zZW5kKGVwLCByZXEpOworCisJLyogRVAwICovCisJaWYgKGVwX2luZGV4KGVwKSA9PSAwICYmIHJlcS0+cmVxLmxlbmd0aCA+IDApIHsKKwkJaWYgKGVwX2lzX2luKGVwKSkKKwkJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9YTUlUOworCQllbHNlCisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfUkVDVjsKKwl9CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJcmV2YWwgPSBlcF9yZXFfcmVjZWl2ZShlcCwgcmVxKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGRlcXVldWVzIChjYW5jZWxzLCB1bmxpbmtzKSBhbiBJL08gcmVxdWVzdCBmcm9tIGFuIGVuZHBvaW50ICovCitzdGF0aWMgaW50IHFlX2VwX2RlcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IHFlX2VwICplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFfZXAgfHwgIV9yZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKworCS8qIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKworCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBtb2RpZnkgdGhlIGVuZHBvaW50IGhhbHQgZmVhdHVyZQorICogQGVwOiB0aGUgbm9uLWlzb2Nocm9ub3VzIGVuZHBvaW50IGJlaW5nIHN0YWxsZWQKKyAqIEB2YWx1ZTogMS0tc2V0IGhhbHQgIDAtLWNsZWFyIGhhbHQKKyAqIFJldHVybnMgemVybywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBxZV9lcF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1cyA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXVkYyA9IGVwLT51ZGM7CisJLyogQXR0ZW1wdCB0byBoYWx0IElOIGVwIHdpbGwgZmFpbCBpZiBhbnkgdHJhbnNmZXIgcmVxdWVzdHMKKwkgKiBhcmUgc3RpbGwgcXVldWUgKi8KKwlpZiAodmFsdWUgJiYgZXBfaXNfaW4oZXApICYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXN0YXR1cyA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXN0YXR1cyA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwlxZV9lcHR4X3N0YWxsX2NoYW5nZShlcCwgdmFsdWUpOworCXFlX2Vwcnhfc3RhbGxfY2hhbmdlKGVwLCB2YWx1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVwLT5lcG51bSA9PSAwKSB7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXVkYy0+ZXAwX2RpciA9IDA7CisJfQorCisJLyogc2V0IGRhdGEgdG9nZ2xlIHRvIERBVEEwIG9uIGNsZWFyIGhhbHQgKi8KKwlpZiAodmFsdWUgPT0gMCkKKwkJZXAtPmRhdGEwMSA9IDA7CitvdXQ6CisJZGV2X3ZkYmcodWRjLT5kZXYsICIlcyAlcyBoYWx0IHN0YXQgJWRcbiIsIGVwLT5lcC5uYW1lLAorCQkJdmFsdWUgPyAgInNldCIgOiAiY2xlYXIiLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIHFlX2VwX29wcyA9IHsKKwkuZW5hYmxlID0gcWVfZXBfZW5hYmxlLAorCS5kaXNhYmxlID0gcWVfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0ID0gcWVfYWxsb2NfcmVxdWVzdCwKKwkuZnJlZV9yZXF1ZXN0ID0gcWVfZnJlZV9yZXF1ZXN0LAorCisJLnF1ZXVlID0gcWVfZXBfcXVldWUsCisJLmRlcXVldWUgPSBxZV9lcF9kZXF1ZXVlLAorCisJLnNldF9oYWx0ID0gcWVfZXBfc2V0X2hhbHQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUdhZGdldCBEcml2ZXIgTGF5ZXIgT3BlcmF0aW9ucworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdldCB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIgKi8KK3N0YXRpYyBpbnQgcWVfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJdTE2IHRtcDsKKworCXRtcCA9IGluX2JlMTYoJnVkY19jb250cm9sbGVyLT51c2JfcGFyYW0tPmZyYW1lX24pOworCWlmICh0bXAgJiAweDgwMDApCisJCXRtcCA9IHRtcCAmIDB4MDdmZjsKKwllbHNlCisJCXRtcCA9IC1FSU5WQUw7CisKKwlyZXR1cm4gKGludCl0bXA7Cit9CisKKy8qIFRyaWVzIHRvIHdha2UgdXAgdGhlIGhvc3QgY29ubmVjdGVkIHRvIHRoaXMgZ2FkZ2V0CisgKgorICogUmV0dXJuIDogMC1zdWNjZXNzCisgKiBOZWdhdGl2ZS10aGlzIGZlYXR1cmUgbm90IGVuYWJsZWQgYnkgaG9zdCBvciBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSBodworICovCitzdGF0aWMgaW50IHFlX3dha2V1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKy8qIE5vdGlmeSBjb250cm9sbGVyIHRoYXQgVkJVUyBpcyBwb3dlcmVkLCBDYWxsZWQgYnkgd2hhdGV2ZXIKKyAgIGRldGVjdHMgVkJVUyBzZXNzaW9ucyAqLworc3RhdGljIGludCBxZV92YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisvKiBjb25zdHJhaW4gY29udHJvbGxlcidzIFZCVVMgcG93ZXIgdXNhZ2UKKyAqIFRoaXMgY2FsbCBpcyB1c2VkIGJ5IGdhZGdldCBkcml2ZXJzIGR1cmluZyBTRVRfQ09ORklHVVJBVElPTiBjYWxscywKKyAqIHJlcG9ydGluZyBob3cgbXVjaCBwb3dlciB0aGUgZGV2aWNlIG1heSBjb25zdW1lLiAgRm9yIGV4YW1wbGUsIHRoaXMKKyAqIGNvdWxkIGFmZmVjdCBob3cgcXVpY2tseSBiYXR0ZXJpZXMgYXJlIHJlY2hhcmdlZC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBxZV92YnVzX2RyYXcoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgdW5zaWduZWQgbUEpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogQ2hhbmdlIERhdGErIHB1bGx1cCBzdGF0dXMKKyAqIHRoaXMgZnVuYyBpcyB1c2VkIGJ5IHVzYl9nYWRnZXRfY29ubmVjdC9kaXNjb25uZWN0CisgKi8KK3N0YXRpYyBpbnQgcWVfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19vbikKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisvKiBkZWZpbmVkIGluIHVzYl9nYWRnZXQuaCAqLworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBxZV9nYWRnZXRfb3BzID0geworCS5nZXRfZnJhbWUgPSBxZV9nZXRfZnJhbWUsCisJLndha2V1cCA9IHFlX3dha2V1cCwKKy8qCS5zZXRfc2VsZnBvd2VyZWQgPSBxZV9zZXRfc2VsZnBvd2VyZWQsKi8gLyogYWx3YXlzIHNlbGZwb3dlcmVkICovCisJLnZidXNfc2Vzc2lvbiA9IHFlX3ZidXNfc2Vzc2lvbiwKKwkudmJ1c19kcmF3ID0gcWVfdmJ1c19kcmF3LAorCS5wdWxsdXAgPSBxZV9wdWxsdXAsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgZXAwIFNldHVwIHByb2Nlc3MgaW4gQlVTIEVudW1lcmF0aW9uCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHVkY19yZXNldF9lcF9xdWV1ZShzdHJ1Y3QgcWVfdWRjICp1ZGMsIHU4IHBpcGUpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlXTsKKworCW51a2UoZXAsIC1FQ09OTlJFU0VUKTsKKwllcC0+dHhfcmVxID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNldF9xdWV1ZXMoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXU4IHBpcGU7CisKKwlmb3IgKHBpcGUgPSAwOyBwaXBlIDwgVVNCX01BWF9FTkRQT0lOVFM7IHBpcGUrKykKKwkJdWRjX3Jlc2V0X2VwX3F1ZXVlKHVkYywgcGlwZSk7CisKKwkvKiByZXBvcnQgZGlzY29ubmVjdDsgdGhlIGRyaXZlciBpcyBhbHJlYWR5IHF1aWVzY2VkICovCisJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJdWRjLT5kcml2ZXItPmRpc2Nvbm5lY3QoJnVkYy0+Z2FkZ2V0KTsKKwlzcGluX2xvY2soJnVkYy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2g5c2V0YWRkcmVzcyhzdHJ1Y3QgcWVfdWRjICp1ZGMsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQkJdTE2IGxlbmd0aCkKK3sKKwkvKiBTYXZlIHRoZSBuZXcgYWRkcmVzcyB0byBkZXZpY2Ugc3RydWN0ICovCisJdWRjLT5kZXZpY2VfYWRkcmVzcyA9ICh1OCkgdmFsdWU7CisJLyogVXBkYXRlIHVzYiBzdGF0ZSAqLworCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0FERFJFU1M7CisKKwkvKiBTdGF0dXMgcGhhc2UgLCBzZW5kIGEgWkxQICovCisJaWYgKGVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKSkKKwkJcWVfZXAwX3N0YWxsKHVkYyk7Cit9CisKK3N0YXRpYyB2b2lkIG93bmVyY29tcGxldGUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IHFlX3JlcSAqcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBxZV9yZXEsIHJlcSk7CisKKwlyZXEtPnJlcS5idWYgPSBOVUxMOworCWtmcmVlKHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoOWdldHN0YXR1cyhzdHJ1Y3QgcWVfdWRjICp1ZGMsIHU4IHJlcXVlc3RfdHlwZSwgdTE2IHZhbHVlLAorCQkJdTE2IGluZGV4LCB1MTYgbGVuZ3RoKQoreworCXUxNiB1c2Jfc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisJc3RydWN0IHFlX2VwICplcDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWVwID0gJnVkYy0+ZXBzWzBdOworCWlmICgocmVxdWVzdF90eXBlICYgVVNCX1JFQ0lQX01BU0spID09IFVTQl9SRUNJUF9ERVZJQ0UpIHsKKwkJLyogR2V0IGRldmljZSBzdGF0dXMgKi8KKwkJdXNiX3N0YXR1cyA9IDEgPDwgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQ7CisJfSBlbHNlIGlmICgocmVxdWVzdF90eXBlICYgVVNCX1JFQ0lQX01BU0spID09IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIHsKKwkJLyogR2V0IGludGVyZmFjZSBzdGF0dXMgKi8KKwkJLyogV2UgZG9uJ3QgaGF2ZSBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaW4gdWRjIGRyaXZlciAqLworCQl1c2Jfc3RhdHVzID0gMDsKKwl9IGVsc2UgaWYgKChyZXF1ZXN0X3R5cGUgJiBVU0JfUkVDSVBfTUFTSykgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCS8qIEdldCBlbmRwb2ludCBzdGF0dXMgKi8KKwkJaW50IHBpcGUgPSBpbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJc3RydWN0IHFlX2VwICp0YXJnZXRfZXAgPSAmdWRjLT5lcHNbcGlwZV07CisJCXUxNiB1c2VwOworCisJCS8qIHN0YWxsIGlmIGVuZHBvaW50IGRvZXNuJ3QgZXhpc3QgKi8KKwkJaWYgKCF0YXJnZXRfZXAtPmRlc2MpCisJCQlnb3RvIHN0YWxsOworCisJCXVzZXAgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtwaXBlXSk7CisJCWlmIChpbmRleCAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmICh0YXJnZXRfZXAtPmRpciAhPSBVU0JfRElSX0lOKQorCQkJCWdvdG8gc3RhbGw7CisJCQlpZiAoKHVzZXAgJiBVU0JfVEhTX01BU0spID09IFVTQl9USFNfU1RBTEwpCisJCQkJdXNiX3N0YXR1cyA9IDEgPDwgVVNCX0VORFBPSU5UX0hBTFQ7CisJCX0gZWxzZSB7CisJCQlpZiAodGFyZ2V0X2VwLT5kaXIgIT0gVVNCX0RJUl9PVVQpCisJCQkJZ290byBzdGFsbDsKKwkJCWlmICgodXNlcCAmIFVTQl9SSFNfTUFTSykgPT0gVVNCX1JIU19TVEFMTCkKKwkJCQl1c2Jfc3RhdHVzID0gMSA8PCBVU0JfRU5EUE9JTlRfSEFMVDsKKwkJfQorCX0KKworCXJlcSA9IGNvbnRhaW5lcl9vZihxZV9hbGxvY19yZXF1ZXN0KCZlcC0+ZXAsIEdGUF9LRVJORUwpLAorCQkJCQlzdHJ1Y3QgcWVfcmVxLCByZXEpOworCXJlcS0+cmVxLmxlbmd0aCA9IDI7CisJcmVxLT5yZXEuYnVmID0gdWRjLT5zdGF0dXNidWY7CisJKih1MTYgKilyZXEtPnJlcS5idWYgPSBjcHVfdG9fbGUxNih1c2Jfc3RhdHVzKTsKKwlyZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJcmVxLT5yZXEuYWN0dWFsID0gMDsKKwlyZXEtPnJlcS5jb21wbGV0ZSA9IG93bmVyY29tcGxldGU7CisKKwl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX0lOOworCisJLyogZGF0YSBwaGFzZSAqLworCXN0YXR1cyA9IHFlX2VwX3F1ZXVlKCZlcC0+ZXAsICZyZXEtPnJlcSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoc3RhdHVzID09IDApCisJCXJldHVybjsKK3N0YWxsOgorCWRldl9lcnIodWRjLT5kZXYsICJDYW4ndCByZXNwb25kIHRvIGdldHN0YXR1cyByZXF1ZXN0IFxuIik7CisJcWVfZXAwX3N0YWxsKHVkYyk7Cit9CisKKy8qIG9ubHkgaGFuZGxlIHRoZSBzZXR1cCByZXF1ZXN0LCBzdXBwb3NlIHRoZSBkZXZpY2UgaW4gbm9ybWFsIHN0YXR1cyAqLworc3RhdGljIHZvaWQgc2V0dXBfcmVjZWl2ZWRfaGFuZGxlKHN0cnVjdCBxZV91ZGMgKnVkYywKKwkJCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpzZXR1cCkKK3sKKwkvKiBGaXggRW5kaWFuICh1ZGMtPmxvY2FsX3NldHVwX2J1ZmYgaXMgY3B1IEVuZGlhbiBub3cpKi8KKwl1MTYgd1ZhbHVlID0gbGUxNl90b19jcHUoc2V0dXAtPndWYWx1ZSk7CisJdTE2IHdJbmRleCA9IGxlMTZfdG9fY3B1KHNldHVwLT53SW5kZXgpOworCXUxNiB3TGVuZ3RoID0gbGUxNl90b19jcHUoc2V0dXAtPndMZW5ndGgpOworCisJLyogY2xlYXIgdGhlIHByZXZpb3VzIHJlcXVlc3QgaW4gdGhlIGVwMCAqLworCXVkY19yZXNldF9lcF9xdWV1ZSh1ZGMsIDApOworCisJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKQorCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX0lOOworCWVsc2UKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisKKwlzd2l0Y2ggKHNldHVwLT5iUmVxdWVzdCkgeworCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQkvKiBEYXRhK1N0YXR1cyBwaGFzZSBmb3JtIHVkYyAqLworCQlpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX01BU0spKQorCQkJCQkhPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1NUQU5EQVJEKSkKKwkJCWJyZWFrOworCQljaDlnZXRzdGF0dXModWRjLCBzZXR1cC0+YlJlcXVlc3RUeXBlLCB3VmFsdWUsIHdJbmRleCwKKwkJCQkJd0xlbmd0aCk7CisJCXJldHVybjsKKworCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJLyogU3RhdHVzIHBoYXNlIGZyb20gdWRjICovCisJCWlmIChzZXR1cC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCQkJCVVTQl9SRUNJUF9ERVZJQ0UpKQorCQkJYnJlYWs7CisJCWNoOXNldGFkZHJlc3ModWRjLCB3VmFsdWUsIHdJbmRleCwgd0xlbmd0aCk7CisJCXJldHVybjsKKworCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJLyogUmVxdWVzdHMgd2l0aCBubyBkYXRhIHBoYXNlLCBzdGF0dXMgcGhhc2UgZnJvbSB1ZGMgKi8KKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykKKwkJCQkJIT0gVVNCX1RZUEVfU1RBTkRBUkQpCisJCQlicmVhazsKKworCQlpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykKKwkJCQk9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKKwkJCWludCBwaXBlID0gd0luZGV4ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQkJc3RydWN0IHFlX2VwICplcDsKKworCQkJaWYgKHdWYWx1ZSAhPSAwIHx8IHdMZW5ndGggIT0gMAorCQkJCXx8IHBpcGUgPiBVU0JfTUFYX0VORFBPSU5UUykKKwkJCQlicmVhazsKKwkJCWVwID0gJnVkYy0+ZXBzW3BpcGVdOworCisJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCXFlX2VwX3NldF9oYWx0KCZlcC0+ZXAsCisJCQkJCShzZXR1cC0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfRkVBVFVSRSkKKwkJCQkJCT8gMSA6IDApOworCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQl9CisKKwkJZXAwX3ByaW1lX3N0YXR1cyh1ZGMsIFVTQl9ESVJfSU4pOworCisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICh3TGVuZ3RoKSB7CisJCS8qIERhdGEgcGhhc2UgZnJvbSBnYWRnZXQsIHN0YXR1cyBwaGFzZSBmcm9tIHVkYyAqLworCQlpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pIHsKKwkJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9YTUlUOworCQkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwkJfSBlbHNlIHsKKwkJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9SRUNWOworCQkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJCX0KKwkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCWlmICh1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LAorCQkJCQkmdWRjLT5sb2NhbF9zZXR1cF9idWZmKSA8IDApCisJCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCX0gZWxzZSB7CisJCS8qIE5vIGRhdGEgcGhhc2UsIElOIHN0YXR1cyBmcm9tIGdhZGdldCAqLworCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX0lOOworCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJaWYgKHVkYy0+ZHJpdmVyLT5zZXR1cCgmdWRjLT5nYWRnZXQsCisJCQkJCSZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpIDwgMCkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9ORUVEX1pMUDsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVTQiBJbnRlcnJ1cHQgaGFuZGxlcnMKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHN1c3BlbmRfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1ZGMtPnJlc3VtZV9zdGF0ZSA9IHVkYy0+dXNiX3N0YXRlOworCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX1NVU1BFTkRFRDsKKworCS8qIHJlcG9ydCBzdXNwZW5kIHRvIHRoZSBkcml2ZXIgLHNlcmlhbC5jIG5vdCBzdXBwb3J0IHRoaXMqLworCWlmICh1ZGMtPmRyaXZlci0+c3VzcGVuZCkKKwkJdWRjLT5kcml2ZXItPnN1c3BlbmQoJnVkYy0+Z2FkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgcmVzdW1lX2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdWRjLT51c2Jfc3RhdGUgPSB1ZGMtPnJlc3VtZV9zdGF0ZTsKKwl1ZGMtPnJlc3VtZV9zdGF0ZSA9IDA7CisKKwkvKiByZXBvcnQgcmVzdW1lIHRvIHRoZSBkcml2ZXIgLCBzZXJpYWwuYyBub3Qgc3VwcG9ydCB0aGlzKi8KKwlpZiAodWRjLT5kcml2ZXItPnJlc3VtZSkKKwkJdWRjLT5kcml2ZXItPnJlc3VtZSgmdWRjLT5nYWRnZXQpOworfQorCitzdGF0aWMgdm9pZCBpZGxlX2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdTggdXNiczsKKworCXVzYnMgPSBpbl84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNicyk7CisJaWYgKHVzYnMgJiBVU0JfSURMRV9TVEFUVVNfTUFTSykgeworCQlpZiAoKHVkYy0+dXNiX3N0YXRlKSAhPSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJc3VzcGVuZF9pcnEodWRjKTsKKwl9IGVsc2UgeworCQlpZiAodWRjLT51c2Jfc3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJCXJlc3VtZV9pcnEodWRjKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1bnNpZ25lZCBjaGFyIGk7CisKKwlxZV91c2JfZGlzYWJsZSgpOworCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNhZHIsIDApOworCisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJaWYgKHVkYy0+ZXBzW2ldLmluaXQpCisJCQlxZV9lcF9yZXNldCh1ZGMsIGkpOworCX0KKworCXJlc2V0X3F1ZXVlcyh1ZGMpOworCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0RFRkFVTFQ7CisJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwlxZV91c2JfZW5hYmxlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnN5X2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHhlX2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIGVwMCB0eCBpbnRlcnJ1cHQgYWxzbyBpbiBoZXJlICovCitzdGF0aWMgaW50IHR4X2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJc3RydWN0IHFlX2VwICplcDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJaW50IGksIHJlcyA9IDA7CisKKwlpZiAoKHVkYy0+dXNiX3N0YXRlID09IFVTQl9TVEFURV9BRERSRVNTKQorCQkmJiAoaW5fOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYWRyKSA9PSAwKSkKKwkJb3V0XzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2FkciwgdWRjLT5kZXZpY2VfYWRkcmVzcyk7CisKKwlmb3IgKGkgPSAoVVNCX01BWF9FTkRQT0lOVFMtMSk7ICgoaSA+PSAwKSAmJiAocmVzID09IDApKTsgaS0tKSB7CisJCWVwID0gJnVkYy0+ZXBzW2ldOworCQlpZiAoZXAgJiYgZXAtPmluaXQgJiYgKGVwLT5kaXIgIT0gVVNCX0RJUl9PVVQpKSB7CisJCQliZCA9IGVwLT5jX3R4YmQ7CisJCQlpZiAoIShpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKSAmIFRfUikKKwkJCQkJCSYmIChpbl9iZTMyKCZiZC0+YnVmKSkpIHsKKwkJCQkvKiBjb25maXJtIHRoZSB0cmFuc21pdHRlZCBiZCAqLworCQkJCWlmIChlcC0+ZXBudW0gPT0gMCkKKwkJCQkJcmVzID0gcWVfZXAwX3R4Y29uZihlcCk7CisJCQkJZWxzZQorCQkJCQlyZXMgPSBxZV9lcF90eGNvbmYoZXApOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKKworLyogc2V0dXAgcGFja2VjdCdzIHJ4IGlzIGhhbmRsZSBpbiB0aGUgZnVuY3Rpb24gdG9vICovCitzdGF0aWMgdm9pZCByeF9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJZXAgPSAmdWRjLT5lcHNbaV07CisJCWlmIChlcCAmJiBlcC0+aW5pdCAmJiAoZXAtPmRpciAhPSBVU0JfRElSX0lOKSkgeworCQkJYmQgPSBlcC0+bl9yeGJkOworCQkJaWYgKCEoaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCkgJiBSX0UpCisJCQkJCQkmJiAoaW5fYmUzMigmYmQtPmJ1ZikpKSB7CisJCQkJaWYgKGVwLT5lcG51bSA9PSAwKSB7CisJCQkJCXFlX2VwMF9yeCh1ZGMpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qbm9uLXNldHVwIHBhY2thZ2UgcmVjZWl2ZSovCisJCQkJCXFlX2VwX3J4KGVwKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxZV91ZGNfaXJxKGludCBpcnEsIHZvaWQgKl91ZGMpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gKHN0cnVjdCBxZV91ZGMgKilfdWRjOworCXUxNiBpcnFfc3JjOworCWlycXJldHVybl90IHN0YXR1cyA9IElSUV9OT05FOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlpcnFfc3JjID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyKSAmCisJCWluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2Jtcik7CisJLyogQ2xlYXIgbm90aWZpY2F0aW9uIGJpdHMgKi8KKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyLCBpcnFfc3JjKTsKKwkvKiBVU0IgSW50ZXJydXB0ICovCisJaWYgKGlycV9zcmMgJiBVU0JfRV9JRExFX01BU0spIHsKKwkJaWRsZV9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfSURMRV9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX1RYQl9NQVNLKSB7CisJCXR4X2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9UWEJfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9SWEJfTUFTSykgeworCQlyeF9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfUlhCX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfUkVTRVRfTUFTSykgeworCQlyZXNldF9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfUkVTRVRfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9CU1lfTUFTSykgeworCQlic3lfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX0JTWV9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX1RYRV9NQVNLKSB7CisJCXR4ZV9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfVFhFX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJR2FkZ2V0IGRyaXZlciByZWdpc3RlciBhbmQgdW5yZWdpc3Rlci4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCS8qIHN0YW5kYXJkIG9wZXJhdGlvbnMgKi8KKwlpZiAoIXVkY19jb250cm9sbGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghZHJpdmVyIHx8IChkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMCisJCQkmJiBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQorCQkJfHwgIWRyaXZlci0+YmluZCB8fCAhZHJpdmVyLT5kaXNjb25uZWN0CisJCQl8fCAhZHJpdmVyLT5zZXR1cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodWRjX2NvbnRyb2xsZXItPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIGxvY2sgaXMgbmVlZGVkIGJ1dCB3aGV0aGVyIHNob3VsZCB1c2UgdGhpcyBsb2NrIG9yIGFub3RoZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCWRyaXZlci0+ZHJpdmVyLmJ1cyA9IE5VTEw7CisJLyogaG9vayB1cCB0aGUgZHJpdmVyICovCisJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IGRyaXZlcjsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5zcGVlZCA9IChlbnVtIHVzYl9kZXZpY2Vfc3BlZWQpKGRyaXZlci0+c3BlZWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2Vycih1ZGNfY29udHJvbGxlci0+ZGV2LCAiYmluZCB0byAlcyAtLT4gJWQiLAorCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIEVuYWJsZSBJUlEgcmVnIGFuZCBTZXQgdXNiY21kIHJlZyBFTiBiaXQgKi8KKwlxZV91c2JfZW5hYmxlKCk7CisKKwlvdXRfYmUxNigmdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzLT51c2JfdXNiZXIsIDB4ZmZmZik7CisJb3V0X2JlMTYoJnVkY19jb250cm9sbGVyLT51c2JfcmVncy0+dXNiX3VzYm1yLCBVU0JfRV9ERUZBVUxUX0RFVklDRSk7CisJdWRjX2NvbnRyb2xsZXItPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BVFRBQ0hFRDsKKwl1ZGNfY29udHJvbGxlci0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwlkZXZfaW5mbyh1ZGNfY29udHJvbGxlci0+ZGV2LCAiJXMgYmluZCB0byBkcml2ZXIgJXMgXG4iLAorCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisKK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBxZV9lcCAqbG9vcF9lcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gdWRjX2NvbnRyb2xsZXItPmRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdG9wIHVzYiBjb250cm9sbGVyLCBkaXNhYmxlIGludHIgKi8KKwlxZV91c2JfZGlzYWJsZSgpOworCisJLyogaW4gZmFjdCwgbm8gbmVlZGVkICovCisJdWRjX2NvbnRyb2xsZXItPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BVFRBQ0hFRDsKKwl1ZGNfY29udHJvbGxlci0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9kaXIgPSAwOworCisJLyogc3RhbmQgb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCW51a2UoJnVkY19jb250cm9sbGVyLT5lcHNbMF0sIC1FU0hVVERPV04pOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9vcF9lcCwgJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZXBfbGlzdCwKKwkJCQllcC5lcF9saXN0KQorCQludWtlKGxvb3BfZXAsIC1FU0hVVERPV04pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwkvKiB1bmJpbmQgZ2FkZ2V0IGFuZCB1bmhvb2sgZHJpdmVyLiAqLworCWRyaXZlci0+dW5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOworCisJZGV2X2luZm8odWRjX2NvbnRyb2xsZXItPmRldiwgInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcclxuIiwKKwkJCWRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworLyogdWRjIHN0cnVjdHVyZSdzIGFsbG9jIGFuZCBzZXR1cCwgaW5jbHVkZSBlcC1wYXJhbSBhbGxvYyAqLworc3RhdGljIHN0cnVjdCBxZV91ZGMgX19kZXZpbml0ICpxZV91ZGNfY29uZmlnKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJdW5zaWduZWQgaW50IHRtcF9hZGRyID0gMDsKKwlzdHJ1Y3QgdXNiX2RldmljZV9wYXJhIF9faW9tZW0gKnVzYnByYW07CisJdW5zaWduZWQgaW50IGk7CisJdTY0IHNpemU7CisJdTMyIG9mZnNldDsKKworCXVkYyA9IGt6YWxsb2Moc2l6ZW9mKCp1ZGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAodWRjID09IE5VTEwpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgIm1hbGxvYyB1ZGMgZmFpbGVkXG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXVkYy0+ZGV2ID0gJm9mZGV2LT5kZXY7CisKKwkvKiBnZXQgZGVmYXVsdCBhZGRyZXNzIG9mIHVzYiBwYXJhbWV0ZXIgaW4gTVVSQU0gZnJvbSBkZXZpY2UgdHJlZSAqLworCW9mZnNldCA9ICpvZl9nZXRfYWRkcmVzcyhucCwgMSwgJnNpemUsIE5VTEwpOworCXVkYy0+dXNiX3BhcmFtID0gY3BtX211cmFtX2FkZHIob2Zmc2V0KTsKKwltZW1zZXRfaW8odWRjLT51c2JfcGFyYW0sIDAsIHNpemUpOworCisJdXNicHJhbSA9IHVkYy0+dXNiX3BhcmFtOworCW91dF9iZTE2KCZ1c2JwcmFtLT5mcmFtZV9uLCAwKTsKKwlvdXRfYmUzMigmdXNicHJhbS0+cnN0YXRlLCAwKTsKKworCXRtcF9hZGRyID0gY3BtX211cmFtX2FsbG9jKChVU0JfTUFYX0VORFBPSU5UUyAqCisJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2VwX3BhcmEpKSwKKwkJCQkJICAgVVNCX0VQX1BBUkFfQUxJR05NRU5UKTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCW91dF9iZTE2KCZ1c2JwcmFtLT5lcHB0cltpXSwgKHUxNil0bXBfYWRkcik7CisJCXVkYy0+ZXBfcGFyYW1baV0gPSBjcG1fbXVyYW1fYWRkcih0bXBfYWRkcik7CisJCXRtcF9hZGRyICs9IDMyOworCX0KKworCW1lbXNldF9pbyh1ZGMtPmVwX3BhcmFtWzBdLCAwLAorCQkJVVNCX01BWF9FTkRQT0lOVFMgKiBzaXplb2Yoc3RydWN0IHVzYl9lcF9wYXJhKSk7CisKKwl1ZGMtPnJlc3VtZV9zdGF0ZSA9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRDsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9QT1dFUkVEOworCXVkYy0+ZXAwX2RpciA9IDA7CisKKwlzcGluX2xvY2tfaW5pdCgmdWRjLT5sb2NrKTsKKwlyZXR1cm4gdWRjOworCitjbGVhbnVwOgorCWtmcmVlKHVkYyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFVTQiBDb250cm9sbGVyIHJlZ2lzdGVyIGluaXQgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHFlX3VkY19yZWdfaW5pdChzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJc3RydWN0IHVzYl9jdGxyIF9faW9tZW0gKnFlX3VzYnJlZ3M7CisJcWVfdXNicmVncyA9IHVkYy0+dXNiX3JlZ3M7CisKKwkvKiBJbml0IHRoZSB1c2IgcmVnaXN0ZXIgKi8KKwlvdXRfOCgmcWVfdXNicmVncy0+dXNiX3VzbW9kLCAweDAxKTsKKwlvdXRfYmUxNigmcWVfdXNicmVncy0+dXNiX3VzYm1yLCAwKTsKKwlvdXRfOCgmcWVfdXNicmVncy0+dXNiX3VzY29tLCAwKTsKKwlvdXRfYmUxNigmcWVfdXNicmVncy0+dXNiX3VzYmVyLCBVU0JFUl9BTExfQ0xFQVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHFlX2VwX2NvbmZpZyhzdHJ1Y3QgcWVfdWRjICp1ZGMsIHVuc2lnbmVkIGNoYXIgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisKKwllcC0+dWRjID0gdWRjOworCXN0cmNweShlcC0+bmFtZSwgZXBfbmFtZVtwaXBlX251bV0pOworCWVwLT5lcC5uYW1lID0gZXBfbmFtZVtwaXBlX251bV07CisKKwllcC0+ZXAub3BzID0gJnFlX2VwX29wczsKKwllcC0+c3RvcHBlZCA9IDE7CisJZXAtPmVwLm1heHBhY2tldCA9ICh1bnNpZ25lZCBzaG9ydCkgfjA7CisJZXAtPmRlc2MgPSBOVUxMOworCWVwLT5kaXIgPSAweGZmOworCWVwLT5lcG51bSA9ICh1OClwaXBlX251bTsKKwllcC0+c2VudCA9IDA7CisJZXAtPmxhc3QgPSAwOworCWVwLT5pbml0ID0gMDsKKwllcC0+cnhmcmFtZSA9IE5VTEw7CisJZXAtPnR4ZnJhbWUgPSBOVUxMOworCWVwLT50eF9yZXEgPSBOVUxMOworCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7CisJZXAtPmhhc19kYXRhID0gMDsKKworCS8qIHRoZSBxdWV1ZSBsaXN0cyBhbnkgcmVxIGZvciB0aGlzIGVwICovCisJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CisKKwkvKiBnYWdkZXQuZXBfbGlzdCB1c2VkIGZvciBlcF9hdXRvY29uZmlnIHNvIG5vIGVwMCovCisJaWYgKHBpcGVfbnVtICE9IDApCisJCWxpc3RfYWRkX3RhaWwoJmVwLT5lcC5lcF9saXN0LCAmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisKKwllcC0+Z2FkZ2V0ID0gJnVkYy0+Z2FkZ2V0OworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCVVEQyBkZXZpY2UgRHJpdmVyIG9wZXJhdGlvbiBmdW5jdGlvbnMJCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHFlX3VkY19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgaSA9IDA7CisKKwljb21wbGV0ZSh1ZGNfY29udHJvbGxlci0+ZG9uZSk7CisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldCh1ZGNfY29udHJvbGxlci0+ZXBfcGFyYW1bMF0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykKKwkJdWRjX2NvbnRyb2xsZXItPmVwX3BhcmFtW2ldID0gTlVMTDsKKworCWtmcmVlKHVkY19jb250cm9sbGVyKTsKKwl1ZGNfY29udHJvbGxlciA9IE5VTEw7Cit9CisKKy8qIERyaXZlciBwcm9iZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHFlX3VkY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHZvaWQgKnByb3A7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW9kZSIsIE5VTEwpOworCWlmICghcHJvcCB8fCBzdHJjbXAocHJvcCwgInBlcmlwaGVyYWwiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBJbml0aWFsaXplIHRoZSB1ZGMgc3RydWN0dXJlIGluY2x1ZGluZyBRSCBtZW1iZXIgYW5kIG90aGVyIG1lbWJlciAqLworCXVkY19jb250cm9sbGVyID0gcWVfdWRjX2NvbmZpZyhvZmRldik7CisJaWYgKCF1ZGNfY29udHJvbGxlcikgeworCQlkZXZfZGJnKCZvZmRldi0+ZGV2LCAidWRjX2NvbnRyb2xsIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1ZGNfY29udHJvbGxlci0+c29jX3R5cGUgPSAodW5zaWduZWQgbG9uZyltYXRjaC0+ZGF0YTsKKwl1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCF1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCS8qIGluaXRpYWxpemUgdXNiIGh3IHJlZyBleGNlcHQgZm9yIHJlZ3MgZm9yIEVQLAorCSAqIGxlYXZlIHVzYmludHIgcmVnIHVudG91Y2hlZCovCisJcWVfdWRjX3JlZ19pbml0KHVkY19jb250cm9sbGVyKTsKKworCS8qIGhlcmUgY29tZXMgdGhlIHN0YW5kIG9wZXJhdGlvbnMgZm9yIHByb2JlCisJICogc2V0IHRoZSBxZV91ZGMtPmdhZGdldC54eHggKi8KKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0Lm9wcyA9ICZxZV9nYWRnZXRfb3BzOworCisJLyogZ2FkZ2V0LmVwMCBpcyBhIHBvaW50ZXIgKi8KKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwMCA9ICZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdLmVwOworCisJSU5JVF9MSVNUX0hFQUQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZXBfbGlzdCk7CisKKwkvKiBtb2RpZnkgaW4gcmVnaXN0ZXIgZ2FkZ2V0IHByb2Nlc3MgKi8KKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisKKwkvKiBuYW1lOiBJZGVudGlmaWVzIHRoZSBjb250cm9sbGVyIGhhcmR3YXJlIHR5cGUuICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5uYW1lID0gZHJpdmVyX25hbWU7CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOworCisJc3RyY3B5KHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucmVsZWFzZSA9IHFlX3VkY19yZWxlYXNlOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZvZmRldi0+ZGV2OworCisJLyogaW5pdGlhbGl6ZSBxZV9lcCBzdHJ1Y3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFMgOyBpKyspIHsKKwkJLyogYmVjYXVzZSB0aGUgZXAgdHlwZSBpc24ndCBkZWNpZGUgaGVyZSBzbworCQkgKiBxZV9lcF9pbml0KCkgc2hvdWxkIGJlIGNhbGxlZCBpbiBlcF9lbmFibGUoKSAqLworCisJCS8qIHNldHVwIHRoZSBxZV9lcCBzdHJ1Y3QgYW5kIGxpbmsgZXAuZXAubGlzdAorCQkgKiBpbnRvIGdhZGdldC5lcF9saXN0ICovCisJCXFlX2VwX2NvbmZpZyh1ZGNfY29udHJvbGxlciwgKHVuc2lnbmVkIGNoYXIpaSk7CisJfQorCisJLyogZXAwIGluaXRpYWxpemF0aW9uIGluIGhlcmUgKi8KKwlyZXQgPSBxZV9lcF9pbml0KHVkY19jb250cm9sbGVyLCAwLCAmcWVfZXAwX2Rlc2MpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCS8qIGNyZWF0ZSBhIGJ1ZiBmb3IgWkxQIHNlbmQsIG5lZWQgdG8gcmVtYWluIHplcm9lZCAqLworCXVkY19jb250cm9sbGVyLT5udWxsYnVmID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpOworCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiA9PSBOVUxMKSB7CisJCWRldl9kYmcodWRjX2NvbnRyb2xsZXItPmRldiwgImNhbm5vdCBhbGxvYyBudWxsYnVmXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIzOworCX0KKworCS8qIGJ1ZmZlciBmb3IgZGF0YSBvZiBnZXRfc3RhdHVzIHJlcXVlc3QgKi8KKwl1ZGNfY29udHJvbGxlci0+c3RhdHVzYnVmID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAodWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1ZiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyNDsKKwl9CisKKwl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKil1ZGNfY29udHJvbGxlci0+bnVsbGJ1Zik7CisJaWYgKHVkY19jb250cm9sbGVyLT5udWxscCA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCXVkY19jb250cm9sbGVyLT5udWxscCA9IGRtYV9tYXBfc2luZ2xlKAorCQkJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCXVkY19jb250cm9sbGVyLT5udWxsYnVmLAorCQkJCQkyNTYsCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQl1ZGNfY29udHJvbGxlci0+bnVsbG1hcCA9IDE7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJfQorCisJdGFza2xldF9pbml0KCZ1ZGNfY29udHJvbGxlci0+cnhfdGFza2xldCwgZXBfcnhfdGFza2xldCwKKwkJCSh1bnNpZ25lZCBsb25nKXVkY19jb250cm9sbGVyKTsKKwkvKiByZXF1ZXN0IGlycSBhbmQgZGlzYWJsZSBEUiAgKi8KKwl1ZGNfY29udHJvbGxlci0+dXNiX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKHVkY19jb250cm9sbGVyLT51c2JfaXJxLCBxZV91ZGNfaXJxLCAwLAorCQkJCWRyaXZlcl9uYW1lLCB1ZGNfY29udHJvbGxlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHVkY19jb250cm9sbGVyLT5kZXYsICJjYW5ub3QgcmVxdWVzdCBpcnEgJWQgZXJyICVkIFxuIiwKKwkJCXVkY19jb250cm9sbGVyLT51c2JfaXJxLCByZXQpOworCQlnb3RvIGVycjU7CisJfQorCisJcmV0ID0gZGV2aWNlX2FkZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNjsKKworCWRldl9pbmZvKHVkY19jb250cm9sbGVyLT5kZXYsCisJCQkiJXMgVVNCIGNvbnRyb2xsZXIgaW5pdGlhbGl6ZWQgYXMgZGV2aWNlXG4iLAorCQkJKHVkY19jb250cm9sbGVyLT5zb2NfdHlwZSA9PSBQT1JUX1FFKSA/ICJRRSIgOiAiQ1BNIik7CisJcmV0dXJuIDA7CisKK2VycjY6CisJZnJlZV9pcnEodWRjX2NvbnRyb2xsZXItPnVzYl9pcnEsIHVkY19jb250cm9sbGVyKTsKK2VycjU6CisJaWYgKHVkY19jb250cm9sbGVyLT5udWxsbWFwKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBETUFfQUREUl9JTlZBTElEOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+c3RhdHVzYnVmKTsKK2VycjQ6CisJa2ZyZWUodWRjX2NvbnRyb2xsZXItPm51bGxidWYpOworZXJyMzoKKwllcCA9ICZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnJ4YmFzZSkpOworCWtmcmVlKGVwLT5yeGZyYW1lKTsKKwlrZnJlZShlcC0+cnhidWZmZXIpOworCWtmcmVlKGVwLT50eGZyYW1lKTsKK2VycjI6CisJaW91bm1hcCh1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MpOworZXJyMToKKwlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHFlX3VkY19zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgcWVfdWRjX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBxZV91ZGNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CisKKwlpZiAoIXVkY19jb250cm9sbGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVkY19jb250cm9sbGVyLT5kb25lID0gJmRvbmU7CisJdGFza2xldF9kaXNhYmxlKCZ1ZGNfY29udHJvbGxlci0+cnhfdGFza2xldCk7CisKKwlpZiAodWRjX2NvbnRyb2xsZXItPm51bGxtYXApIHsKKwkJZG1hX3VubWFwX3NpbmdsZSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCA9IERNQV9BRERSX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJfQorCWtmcmVlKHVkY19jb250cm9sbGVyLT5zdGF0dXNidWYpOworCWtmcmVlKHVkY19jb250cm9sbGVyLT5udWxsYnVmKTsKKworCWVwID0gJnVkY19jb250cm9sbGVyLT5lcHNbMF07CisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+cnhiYXNlKSk7CisJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKiAoVVNCX0JEUklOR19MRU4gKyAxKTsKKworCWtmcmVlKGVwLT5yeGZyYW1lKTsKKwlpZiAoZXAtPnJ4YnVmbWFwKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWVwLT5yeGJ1Zl9kID0gRE1BX0FERFJfSU5WQUxJRDsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwl9CisKKwlrZnJlZShlcC0+cnhidWZmZXIpOworCWtmcmVlKGVwLT50eGZyYW1lKTsKKworCWZyZWVfaXJxKHVkY19jb250cm9sbGVyLT51c2JfaXJxLCB1ZGNfY29udHJvbGxlcik7CisKKwl0YXNrbGV0X2tpbGwoJnVkY19jb250cm9sbGVyLT5yeF90YXNrbGV0KTsKKworCWlvdW5tYXAodWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKTsKKworCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CisJLyogd2FpdCBmb3IgcmVsZWFzZSgpIG9mIGdhZGdldC5kZXYgdG8gZnJlZSB1ZGMgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBxZV91ZGNfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLXFlLXVzYiIsCisJCS5kYXRhID0gKHZvaWQgKilQT1JUX1FFLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODI3Mi1jcG0tdXNiIiwKKwkJLmRhdGEgPSAodm9pZCAqKVBPUlRfQ1BNLAorCX0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBxZV91ZGNfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciB1ZGNfZHJpdmVyID0geworCS5uYW1lICAgICAgICAgICA9IChjaGFyICopZHJpdmVyX25hbWUsCisJLm1hdGNoX3RhYmxlICAgID0gcWVfdWRjX21hdGNoLAorCS5wcm9iZSAgICAgICAgICA9IHFlX3VkY19wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChxZV91ZGNfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICAgICAgPSBxZV91ZGNfc3VzcGVuZCwKKwkucmVzdW1lICAgICAgICAgPSBxZV91ZGNfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxZV91ZGNfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcywgJXNcbiIsIGRyaXZlcl9uYW1lLCBkcml2ZXJfZGVzYywKKwkJCURSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZGNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFlX3VkY19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVkY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChxZV91ZGNfaW5pdCk7Cittb2R1bGVfZXhpdChxZV91ZGNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWIyNzEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaApAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL2dhZGdldC9xZV91ZGMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogCVhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+CisgKiAJTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEZyZWVzY2FsZSBVU0IgZGV2aWNlL2VuZHBvaW50IG1hbmFnZW1lbnQgcmVnaXN0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fRlNMX1FFX1VEQ19ICisjZGVmaW5lIF9fRlNMX1FFX1VEQ19ICisKKy8qIFNvQyB0eXBlICovCisjZGVmaW5lIFBPUlRfQ1BNCTAKKyNkZWZpbmUgUE9SVF9RRQkJMQorCisjZGVmaW5lIFVTQl9NQVhfRU5EUE9JTlRTICAgICAgICAgICAgICAgNAorI2RlZmluZSBVU0JfTUFYX1BJUEVTICAgICAgICAgICAgICAgICAgIFVTQl9NQVhfRU5EUE9JTlRTCisjZGVmaW5lIFVTQl9FUDBfTUFYX1NJWkUJCTY0CisjZGVmaW5lIFVTQl9NQVhfQ1RSTF9QQVlMT0FEICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFVTQl9CRFJJTkdfTEVOCQkJMTYKKyNkZWZpbmUgVVNCX0JEUklOR19MRU5fUlgJCTI1NgorI2RlZmluZSBVU0JfQkRSSU5HX0xFTl9UWAkJMTYKKyNkZWZpbmUgTUlOX0VNUFRZX0JEUwkJCTEyOAorI2RlZmluZSBNQVhfREFUQV9CRFMJCQk4CisjZGVmaW5lIFVTQl9DUkNfU0laRQkJCTIKKyNkZWZpbmUgVVNCX0RJUl9CT1RICQkJMHg4OAorI2RlZmluZSBSX0JVRl9NQVhTSVpFCQkJMHg4MDAKKyNkZWZpbmUgVVNCX0VQX1BBUkFfQUxJR05NRU5UCQkzMgorCisvKiBVU0IgTW9kZSBSZWdpc3RlciBiaXQgZGVmaW5lICovCisjZGVmaW5lIFVTQl9NT0RFX0VOCQkweDAxCisjZGVmaW5lIFVTQl9NT0RFX0hPU1QJCTB4MDIKKyNkZWZpbmUgVVNCX01PREVfVEVTVAkJMHgwNAorI2RlZmluZSBVU0JfTU9ERV9TRlRFCQkweDA4CisjZGVmaW5lIFVTQl9NT0RFX1JFU1VNRQkJMHg0MAorI2RlZmluZSBVU0JfTU9ERV9MU1MJCTB4ODAKKworLyogVVNCIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIgTWFzayAqLworI2RlZmluZSBVU0JfU0xWQUREUl9NQVNLCTB4N0YKKworLyogVVNCIEVuZHBvaW50IHJlZ2lzdGVyIGRlZmluZSAqLworI2RlZmluZSBVU0JfRVBOVU1fTUFTSwkJMHhGMDAwCisjZGVmaW5lIFVTQl9FUE5VTV9TSElGVAkJMTIKKworI2RlZmluZSBVU0JfVFJBTlNfTU9ERV9TSElGVAk4CisjZGVmaW5lIFVTQl9UUkFOU19DVFIJCTB4MDAwMAorI2RlZmluZSBVU0JfVFJBTlNfSU5UCQkweDAxMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0JVTEsJCTB4MDIwMAorI2RlZmluZSBVU0JfVFJBTlNfSVNPCQkweDAzMDAKKworI2RlZmluZSBVU0JfRVBfTUYJCTB4MDAyMAorI2RlZmluZSBVU0JfRVBfUlRFCQkweDAwMTAKKworI2RlZmluZSBVU0JfVEhTX1NISUZUCQkyCisjZGVmaW5lIFVTQl9USFNfTUFTSwkJMHgwMDBjCisjZGVmaW5lIFVTQl9USFNfTk9STUFMCQkweDAKKyNkZWZpbmUgVVNCX1RIU19JR05PUkVfSU4JMHgwMDA0CisjZGVmaW5lIFVTQl9USFNfTkFDSwkJMHgwMDA4CisjZGVmaW5lIFVTQl9USFNfU1RBTEwJCTB4MDAwYworCisjZGVmaW5lIFVTQl9SSFNfU0hJRlQgICAJMAorI2RlZmluZSBVU0JfUkhTX01BU0sJCTB4MDAwMworI2RlZmluZSBVU0JfUkhTX05PUk1BTCAgCTB4MAorI2RlZmluZSBVU0JfUkhTX0lHTk9SRV9PVVQJMHgwMDAxCisjZGVmaW5lIFVTQl9SSFNfTkFDSwkJMHgwMDAyCisjZGVmaW5lIFVTQl9SSFNfU1RBTEwJCTB4MDAwMworCisjZGVmaW5lIFVTQl9SVEhTX01BU0sJCTB4MDAwZgorCisvKiBVU0IgQ29tbWFuZCBSZWdpc3RlciBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX0NNRF9TVFJfRklGTwkweDgwCisjZGVmaW5lIFVTQl9DTURfRkxVU0hfRklGTwkweDQwCisjZGVmaW5lIFVTQl9DTURfSVNGVAkJMHgyMAorI2RlZmluZSBVU0JfQ01EX0RTRlQJCTB4MTAKKyNkZWZpbmUgVVNCX0NNRF9FUF9NQVNLCQkweDAzCisKKy8qIFVTQiBFdmVudCBhbmQgTWFzayBSZWdpc3RlciBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX0VfTVNGX01BU0sJCTB4MDgwMAorI2RlZmluZSBVU0JfRV9TRlRfTUFTSwkJMHgwNDAwCisjZGVmaW5lIFVTQl9FX1JFU0VUX01BU0sJMHgwMjAwCisjZGVmaW5lIFVTQl9FX0lETEVfTUFTSwkJMHgwMTAwCisjZGVmaW5lIFVTQl9FX1RYRTRfTUFTSwkJMHgwMDgwCisjZGVmaW5lIFVTQl9FX1RYRTNfTUFTSwkJMHgwMDQwCisjZGVmaW5lIFVTQl9FX1RYRTJfTUFTSwkJMHgwMDIwCisjZGVmaW5lIFVTQl9FX1RYRTFfTUFTSwkJMHgwMDEwCisjZGVmaW5lIFVTQl9FX1NPRl9NQVNLCQkweDAwMDgKKyNkZWZpbmUgVVNCX0VfQlNZX01BU0sJCTB4MDAwNAorI2RlZmluZSBVU0JfRV9UWEJfTUFTSwkJMHgwMDAyCisjZGVmaW5lIFVTQl9FX1JYQl9NQVNLCQkweDAwMDEKKyNkZWZpbmUgVVNCRVJfQUxMX0NMRUFSIAkweDBmZmYKKworI2RlZmluZSBVU0JfRV9ERUZBVUxUX0RFVklDRSAgIChVU0JfRV9SRVNFVF9NQVNLIHwgVVNCX0VfVFhFNF9NQVNLIHwgXAorCQkJCVVTQl9FX1RYRTNfTUFTSyB8IFVTQl9FX1RYRTJfTUFTSyB8IFwKKwkJCQlVU0JfRV9UWEUxX01BU0sgfCBVU0JfRV9CU1lfTUFTSyB8IFwKKwkJCQlVU0JfRV9UWEJfTUFTSyB8IFVTQl9FX1JYQl9NQVNLKQorCisjZGVmaW5lIFVTQl9FX1RYRV9NQVNLICAgICAgICAgKFVTQl9FX1RYRTRfTUFTSyB8IFVTQl9FX1RYRTNfTUFTS3xcCisJCQkJIFVTQl9FX1RYRTJfTUFTSyB8IFVTQl9FX1RYRTFfTUFTSykKKy8qIFVTQiBTdGF0dXMgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9JRExFX1NUQVRVU19NQVNLCTB4MDEKKworLyogVVNCIFN0YXJ0IG9mIEZyYW1lIFRpbWVyICovCisjZGVmaW5lIFVTQl9VU1NGVF9NQVNLCQkweDNGRkYKKworLyogVVNCIEZyYW1lIE51bWJlciBSZWdpc3RlciAqLworI2RlZmluZSBVU0JfVVNGUk5fTUFTSwkJMHhGRkZGCisKK3N0cnVjdCB1c2JfZGV2aWNlX3BhcmF7CisJdTE2CWVwcHRyWzRdOworCXUzMglyc3RhdGU7CisJdTMyCXJwdHI7CisJdTE2CWZyYW1lX247CisJdTE2CXJiY250OworCXUzMglydGVtcDsKKwl1MzIJcnh1c2JfZGF0YTsKKwl1MTYJcnh1cHRyOworCXU4CXJlc29bMl07CisJdTMyCXNvZnRibDsKKwl1OAlzb2Z1Y3JjdGVtcDsKK307CisKK3N0cnVjdCB1c2JfZXBfcGFyYXsKKwl1MTYJcmJhc2U7CisJdTE2CXRiYXNlOworCXU4CXJibXI7CisJdTgJdGJtcjsKKwl1MTYJbXJibHI7CisJdTE2CXJicHRyOworCXUxNgl0YnB0cjsKKwl1MzIJdHN0YXRlOworCXUzMgl0cHRyOworCXUxNgl0Y3JjOworCXUxNgl0YmNudDsKKwl1MzIJdHRlbXA7CisJdTE2CXR4dXNidV9wdHI7CisJdTgJcmVzZXJ2ZVsyXTsKK307CisKKyNkZWZpbmUgVVNCX0JVU01PREVfR0JMCQkweDIwCisjZGVmaW5lIFVTQl9CVVNNT0RFX0JPX01BU0sJMHgxOAorI2RlZmluZSBVU0JfQlVTTU9ERV9CT19TSElGVAkweDMKKyNkZWZpbmUgVVNCX0JVU01PREVfQkUJCTB4MgorI2RlZmluZSBVU0JfQlVTTU9ERV9DRVRNCTB4MDQKKyNkZWZpbmUgVVNCX0JVU01PREVfRFRCCQkweDAyCisKKy8qIEVuZHBvaW50IGJhc2ljIGhhbmRsZSAqLworI2RlZmluZSBlcF9pbmRleChFUCkJCSgoRVApLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgMHhGKQorI2RlZmluZSBlcF9tYXhwYWNrZXQoRVApCSgoRVApLT5lcC5tYXhwYWNrZXQpCisjZGVmaW5lIGVwX2lzX2luKEVQKQkoKGVwX2luZGV4KEVQKSA9PSAwKSA/IChFUC0+dWRjLT5lcDBfZGlyID09IFwKKwkJCVVTQl9ESVJfSU4pIDogKChFUCktPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgXAorCQkJJiBVU0JfRElSX0lOKSA9PSBVU0JfRElSX0lOKQorCisvKiBlcDAgdHJhbnNmZXIgc3RhdGUgKi8KKyNkZWZpbmUgV0FJVF9GT1JfU0VUVVAgICAgICAgICAgMAorI2RlZmluZSBEQVRBX1NUQVRFX1hNSVQgICAgICAgICAxCisjZGVmaW5lIERBVEFfU1RBVEVfTkVFRF9aTFAgICAgIDIKKyNkZWZpbmUgV0FJVF9GT1JfT1VUX1NUQVRVUyAgICAgMworI2RlZmluZSBEQVRBX1NUQVRFX1JFQ1YgICAgICAgICA0CisKKy8qIGVwIHRyYW1zZmVyIG1vZGUgKi8KKyNkZWZpbmUgVVNCUF9UTV9DVEwJMAorI2RlZmluZSBVU0JQX1RNX0lTTwkxCisjZGVmaW5lIFVTQlBfVE1fQlVMSwkyCisjZGVmaW5lIFVTQlBfVE1fSU5UCTMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVTQiBSWCBBbmQgVFggREFUQSBGcmFtZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBxZV9mcmFtZXsKKwl1OCAqZGF0YTsKKwl1MzIgbGVuOworCXUzMiBzdGF0dXM7CisJdTMyIGluZm87CisKKwl2b2lkICpwcml2ZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCisvKiBGcmFtZSBzdHJ1Y3R1cmUsIGluZm8gZmllbGQuICovCisjZGVmaW5lIFBJRF9EQVRBMCAgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBEYXRhIHRvZ2dsZSB6ZXJvICovCisjZGVmaW5lIFBJRF9EQVRBMSAgICAgICAgICAgICAgMHg0MDAwMDAwMCAvKiBEYXRhIHRvZ2dsZSBvbmUgICovCisjZGVmaW5lIFBJRF9TRVRVUCAgICAgICAgICAgICAgMHgyMDAwMDAwMCAvKiBzZXR1cCBiaXQgKi8KKyNkZWZpbmUgU0VUVVBfU1RBVFVTICAgICAgICAgICAweDEwMDAwMDAwIC8qIHNldHVwIHN0YXR1cyBiaXQgKi8KKyNkZWZpbmUgU0VUQUREUl9TVEFUVVMgICAgICAgICAweDA4MDAwMDAwIC8qIHNldHVwdXAgYWRkcmVzcyBzdGF0dXMgYml0ICovCisjZGVmaW5lIE5PX1JFUSAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMCAvKiBGcmFtZSB3aXRob3V0IHJlcXVlc3QgKi8KKyNkZWZpbmUgSE9TVF9EQVRBICAgICAgICAgICAgICAweDAyMDAwMDAwIC8qIEhvc3QgZGF0YSBmcmFtZSAqLworI2RlZmluZSBGSVJTVF9QQUNLRVRfSU5fRlJBTUUgIDB4MDEwMDAwMDAgLyogZmlyc3QgcGFja2V0IGluIHRoZSBmcmFtZSAqLworI2RlZmluZSBUT0tFTl9GUkFNRSAgICAgICAgICAgIDB4MDA4MDAwMDAgLyogSG9zdCB0b2tlbiBmcmFtZSAqLworI2RlZmluZSBaTFAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAgLyogWmVybyBsZW5ndGggcGFja2V0ICovCisjZGVmaW5lIElOX1RPS0VOX0ZSQU1FICAgICAgICAgMHgwMDIwMDAwMCAvKiBJbiB0b2tlbiBwYWNrYWdlICovCisjZGVmaW5lIE9VVF9UT0tFTl9GUkFNRSAgICAgICAgMHgwMDEwMDAwMCAvKiBPdXQgdG9rZW4gcGFja2FnZSAqLworI2RlZmluZSBTRVRVUF9UT0tFTl9GUkFNRSAgICAgIDB4MDAwODAwMDAgLyogU2V0dXAgdG9rZW4gcGFja2FnZSAqLworI2RlZmluZSBTVEFMTF9GUkFNRSAgICAgICAgICAgIDB4MDAwNDAwMDAgLyogU3RhbGwgaGFuZHNoYWtlICovCisjZGVmaW5lIE5BQ0tfRlJBTUUgICAgICAgICAgICAgMHgwMDAyMDAwMCAvKiBOYWNrIGhhbmRzaGFrZSAqLworI2RlZmluZSBOT19QSUQgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAgLyogTm8gc2VuZCBQSUQgKi8KKyNkZWZpbmUgTk9fQ1JDICAgICAgICAgICAgICAgICAweDAwMDA4MDAwIC8qIE5vIHNlbmQgQ1JDICovCisjZGVmaW5lIEhPU1RfQ09NTUFORCAgICAgICAgICAgMHgwMDAwNDAwMCAvKiBIb3N0IGNvbW1hbmQgZnJhbWUgICAqLworCisvKiBGcmFtZSBzdGF0dXMgZmllbGQgKi8KKy8qIFJlY2VpdmUgc2lkZSAqLworI2RlZmluZSBGUkFNRV9PSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogRnJhbWUgdHJhbm1pdHRlZCBvciByZWNlaXZlZCBPSyAqLworI2RlZmluZSBGUkFNRV9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRXJyb3Igb2NjdXJlZCBvbiBmcmFtZSAqLworI2RlZmluZSBTVEFSVF9GUkFNRV9MT1NUICAgICAgIDB4NDAwMDAwMDAgLyogU1RBUlRfRlJBTUVfTE9TVCAqLworI2RlZmluZSBFTkRfRlJBTUVfTE9TVCAgICAgICAgIDB4MjAwMDAwMDAgLyogRU5EX0ZSQU1FX0xPU1QgKi8KKyNkZWZpbmUgUlhfRVJfTk9OT0NUICAgICAgICAgICAweDEwMDAwMDAwIC8qIFJ4IE5vbiBPY3RldCBBbGlnbmVkIFBhY2tldCAqLworI2RlZmluZSBSWF9FUl9CSVRTVFVGRiAgICAgICAgIDB4MDgwMDAwMDAgLyogRnJhbWUgQWJvcnRlZCAtLVJlY2VpdmVkIHBhY2tldAorCQkJCQkgICAgIHdpdGggYml0IHN0dWZmIGVycm9yICovCisjZGVmaW5lIFJYX0VSX0NSQyAgICAgICAgICAgICAgMHgwNDAwMDAwMCAvKiBSZWNlaXZlZCBwYWNrZXQgd2l0aCBDUkMgZXJyb3IgKi8KKyNkZWZpbmUgUlhfRVJfT1ZFUlVOICAgICAgICAgICAweDAyMDAwMDAwIC8qIE92ZXItcnVuIG9jY3VyZWQgb24gcmVjZXB0aW9uICovCisjZGVmaW5lIFJYX0VSX1BJRCAgICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBXcm9uZyBQSUQgcmVjZWl2ZWQgKi8KKy8qIFRyYW5taXQgc2lkZSAqLworI2RlZmluZSBUWF9FUl9OQUsgICAgICAgICAgICAgIDB4MDA4MDAwMDAgLyogUmVjZWl2ZWQgTkFLIGhhbmRzaGFrZSAqLworI2RlZmluZSBUWF9FUl9TVEFMTCAgICAgICAgICAgIDB4MDA0MDAwMDAgLyogUmVjZWl2ZWQgU1RBTEwgaGFuZHNoYWtlICovCisjZGVmaW5lIFRYX0VSX1RJTUVPVVQgICAgICAgICAgMHgwMDIwMDAwMCAvKiBUcmFuc21pdCB0aW1lIG91dCAqLworI2RlZmluZSBUWF9FUl9VTkRFUlVOICAgICAgICAgIDB4MDAxMDAwMDAgLyogVHJhbnNtaXQgdW5kZXJydW4gKi8KKyNkZWZpbmUgRlJBTUVfSU5QUk9HUkVTUyAgICAgICAweDAwMDgwMDAwIC8qIEZyYW1lIGlzIGJlaW5nIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIEVSX0RBVEFfVU5ERVJVTiAgICAgICAgMHgwMDA0MDAwMCAvKiBGcmFtZSBpcyBzaG9ydGVyIHRoZW4gZXhwZWN0ZWQgKi8KKyNkZWZpbmUgRVJfREFUQV9PVkVSVU4gICAgICAgICAweDAwMDIwMDAwIC8qIEZyYW1lIGlzIGxvbmdlciB0aGVuIGV4cGVjdGVkICovCisKKy8qIFFFIFVTQiBmcmFtZSBvcGVyYXRpb24gZnVuY3Rpb25zICovCisjZGVmaW5lIGZyYW1lX2dldF9sZW5ndGgoZnJtKSAoZnJtLT5sZW4pCisjZGVmaW5lIGZyYW1lX3NldF9sZW5ndGgoZnJtLCBsZW5nKSAoZnJtLT5sZW4gPSBsZW5nKQorI2RlZmluZSBmcmFtZV9nZXRfZGF0YShmcm0pIChmcm0tPmRhdGEpCisjZGVmaW5lIGZyYW1lX3NldF9kYXRhKGZybSwgZGF0KSAoZnJtLT5kYXRhID0gZGF0KQorI2RlZmluZSBmcmFtZV9nZXRfaW5mbyhmcm0pIChmcm0tPmluZm8pCisjZGVmaW5lIGZyYW1lX3NldF9pbmZvKGZybSwgaW5mKSAoZnJtLT5pbmZvID0gaW5mKQorI2RlZmluZSBmcmFtZV9nZXRfc3RhdHVzKGZybSkgKGZybS0+c3RhdHVzKQorI2RlZmluZSBmcmFtZV9zZXRfc3RhdHVzKGZybSwgc3RhdCkgKGZybS0+c3RhdHVzID0gc3RhdCkKKyNkZWZpbmUgZnJhbWVfZ2V0X3ByaXZkYXRhKGZybSkgKGZybS0+cHJpdmRhdGEpCisjZGVmaW5lIGZyYW1lX3NldF9wcml2ZGF0YShmcm0sIGRhdCkgKGZybS0+cHJpdmRhdGEgPSBkYXQpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxZV9mcmFtZV9jbGVhbihzdHJ1Y3QgcWVfZnJhbWUgKmZybSkKK3sKKwlmcmFtZV9zZXRfZGF0YShmcm0sIE5VTEwpOworCWZyYW1lX3NldF9sZW5ndGgoZnJtLCAwKTsKKwlmcmFtZV9zZXRfc3RhdHVzKGZybSwgRlJBTUVfT0spOworCWZyYW1lX3NldF9pbmZvKGZybSwgMCk7CisJZnJhbWVfc2V0X3ByaXZkYXRhKGZybSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxZV9mcmFtZV9pbml0KHN0cnVjdCBxZV9mcmFtZSAqZnJtKQoreworCXFlX2ZyYW1lX2NsZWFuKGZybSk7CisJSU5JVF9MSVNUX0hFQUQoJihmcm0tPm5vZGUpKTsKK30KKworc3RydWN0IHFlX3JlcSB7CisJc3RydWN0IHVzYl9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworCS8qIGVwX3F1ZXVlKCkgZnVuYyB3aWxsIGFkZAorCSBhIHJlcXVlc3QtPnF1ZXVlIGludG8gYSB1ZGNfZXAtPnF1ZXVlICdkIHRhaWwgKi8KKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIG1hcHBlZDoxOworfTsKKworc3RydWN0IHFlX2VwIHsKKwlzdHJ1Y3QgdXNiX2VwIGVwOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0OworCisJdTggc3RhdGU7CisKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqcnhiYXNlOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpuX3J4YmQ7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmVfcnhiZDsKKworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICp0eGJhc2U7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKm5fdHhiZDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqY190eGJkOworCisJc3RydWN0IHFlX2ZyYW1lICpyeGZyYW1lOworCXU4ICpyeGJ1ZmZlcjsKKwlkbWFfYWRkcl90IHJ4YnVmX2Q7CisJdTggcnhidWZtYXA7CisJdW5zaWduZWQgY2hhciBsb2NhbG5hY2s7CisJaW50IGhhc19kYXRhOworCisJc3RydWN0IHFlX2ZyYW1lICp0eGZyYW1lOworCXN0cnVjdCBxZV9yZXEgKnR4X3JlcTsKKwlpbnQgc2VudDsgIC8qZGF0YSBhbHJlYWR5IHNlbnQgKi8KKwlpbnQgbGFzdDsgIC8qZGF0YSBzZW50IGluIHRoZSBsYXN0IHRpbWUqLworCisJdTggZGlyOworCXU4IGVwbnVtOworCXU4IHRtOyAvKiB0cmFuc2ZlciBtb2RlICovCisJdTggZGF0YTAxOworCXU4IGluaXQ7CisKKwl1OCBhbHJlYWR5X3NlZW47CisJdTggZW5hYmxlX3Rhc2tsZXQ7CisJdTggc2V0dXBfc3RhZ2U7CisJdTMyIGxhc3RfaW87ICAgICAgICAgICAgLyogdGltZXN0YW1wICovCisKKwljaGFyIG5hbWVbMTRdOworCisJdW5zaWduZWQgZG91YmxlX2J1ZjoxOworCXVuc2lnbmVkIHN0b3BwZWQ6MTsKKwl1bnNpZ25lZCBmbmY6MTsKKwl1bnNpZ25lZCBoYXNfZG1hOjE7CisKKwl1OCBhY2t3YWl0OworCXU4IGRtYV9jaGFubmVsOworCXUxNiBkbWFfY291bnRlcjsKKwlpbnQgbGNoOworCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCitzdHJ1Y3QgcWVfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBxZV9lcCBlcHNbVVNCX01BWF9FTkRQT0lOVFNdOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgbG9jYWxfc2V0dXBfYnVmZjsKKwlzcGlubG9ja190IGxvY2s7CS8qIGxvY2sgZm9yIHNldC9jb25maWcgcWVfdWRjICovCisJdW5zaWduZWQgbG9uZyBzb2NfdHlwZTsJCS8qIFFFIG9yIENQTSBzb2MgKi8KKworCXN0cnVjdCBxZV9yZXEgKnN0YXR1c19yZXE7CS8qIGVwMCBzdGF0dXMgcmVxdWVzdCAqLworCisJLyogVVNCIGFuZCBFUCBQYXJhbWV0ZXIgQmxvY2sgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfZGV2aWNlX3BhcmEgX19pb21lbSAqdXNiX3BhcmFtOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcF9wYXJhbVs0XTsKKworCXUzMiBtYXhfcGlwZXM7ICAgICAgICAgIC8qIERldmljZSBtYXggcGlwZXMgKi8KKwl1MzIgbWF4X3VzZV9lbmRwdHM7ICAgICAvKiBNYXggZW5kcG9pbnRlcyB0byBiZSB1c2VkICovCisJdTMyIGJ1c19yZXNldDsgICAgICAgICAgLyogRGV2aWNlIGlzIGJ1cyByZXNldGluZyAqLworCXUzMiByZXN1bWVfc3RhdGU7ICAgICAgIC8qIFVTQiBzdGF0ZSB0byByZXN1bWUqLworCXUzMiB1c2Jfc3RhdGU7ICAgICAgICAgIC8qIFVTQiBjdXJyZW50IHN0YXRlICovCisJdTMyIHVzYl9uZXh0X3N0YXRlOyAgICAgLyogVVNCIG5leHQgc3RhdGUgKi8KKwl1MzIgZXAwX3N0YXRlOyAgICAgICAgICAvKiBFbnBvaW50IHplcm8gc3RhdGUgKi8KKwl1MzIgZXAwX2RpcjsgICAgICAgICAgICAvKiBFbnBvaW50IHplcm8gZGlyZWN0aW9uOiBjYW4gYmUKKwkJCQlVU0JfRElSX0lOIG9yIFVTQl9ESVJfT1VUKi8KKwl1MzIgdXNiX3NvZl9jb3VudDsgICAgICAvKiBTT0YgY291bnQgKi8KKwl1MzIgZXJyb3JzOyAgICAgICAgICAgICAvKiBVU0IgRVJST1JzIGNvdW50ICovCisKKwl1OCAqdG1wYnVmOworCXUzMiBjX3N0YXJ0OworCXUzMiBjX2VuZDsKKworCXU4ICpudWxsYnVmOworCXU4ICpzdGF0dXNidWY7CisJZG1hX2FkZHJfdCBudWxscDsKKwl1OCBudWxsbWFwOworCXU4IGRldmljZV9hZGRyZXNzOwkvKiBEZXZpY2UgVVNCIGFkZHJlc3MgKi8KKworCXVuc2lnbmVkIGludCB1c2JfY2xvY2s7CisJdW5zaWduZWQgaW50IHVzYl9pcnE7CisJc3RydWN0IHVzYl9jdGxyIF9faW9tZW0gKnVzYl9yZWdzOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZTsJLyogdG8gbWFrZSBzdXJlIHJlbGVhc2UoKSBpcyBkb25lICovCit9OworCisjZGVmaW5lIEVQX1NUQVRFX0lETEUJMAorI2RlZmluZSBFUF9TVEFURV9OQUNLCTEKKyNkZWZpbmUgRVBfU1RBVEVfU1RBTEwJMgorCisvKgorICogdHJhbnNtaXQgQkQncyBzdGF0dXMKKyAqLworI2RlZmluZSBUX1IgICAgICAgICAgIDB4ODAwMDAwMDAgICAgICAgICAvKiByZWFkeSBiaXQgKi8KKyNkZWZpbmUgVF9XICAgICAgICAgICAweDIwMDAwMDAwICAgICAgICAgLyogd3JhcCBiaXQgKi8KKyNkZWZpbmUgVF9JICAgICAgICAgICAweDEwMDAwMDAwICAgICAgICAgLyogaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgVF9MICAgICAgICAgICAweDA4MDAwMDAwICAgICAgICAgLyogbGFzdCAqLworI2RlZmluZSBUX1RDICAgICAgICAgIDB4MDQwMDAwMDAgICAgICAgICAvKiB0cmFuc21pdCBDUkMgKi8KKyNkZWZpbmUgVF9DTkYgICAgICAgICAweDAyMDAwMDAwICAgICAgICAgLyogd2FpdCBmb3IgIHRyYW5zbWl0IGNvbmZpcm0gKi8KKyNkZWZpbmUgVF9MU1AgICAgICAgICAweDAxMDAwMDAwICAgICAgICAgLyogTG93LXNwZWVkIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIFRfUElEICAgICAgICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIHBhY2tldCBpZCAqLworI2RlZmluZSBUX05BSyAgICAgICAgIDB4MDAxMDAwMDAgICAgICAgICAvKiBObyBhY2suICovCisjZGVmaW5lIFRfU1RBTCAgICAgICAgMHgwMDA4MDAwMCAgICAgICAgIC8qIFN0YWxsIHJlY2lldmVkICovCisjZGVmaW5lIFRfVE8gICAgICAgICAgMHgwMDA0MDAwMCAgICAgICAgIC8qIHRpbWUgb3V0ICovCisjZGVmaW5lIFRfVU4gICAgICAgICAgMHgwMDAyMDAwMCAgICAgICAgIC8qIHVuZGVycnVuICovCisKKyNkZWZpbmUgREVWSUNFX1RfRVJST1IgICAgKFRfVU4gfCBUX1RPKQorI2RlZmluZSBIT1NUX1RfRVJST1IgICAgICAoVF9VTiB8IFRfVE8gfCBUX05BSyB8IFRfU1RBTCkKKyNkZWZpbmUgREVWSUNFX1RfQkRfTUFTSyAgREVWSUNFX1RfRVJST1IKKyNkZWZpbmUgSE9TVF9UX0JEX01BU0sgICAgSE9TVF9UX0VSUk9SCisKKyNkZWZpbmUgVF9QSURfU0hJRlQgICA2CisjZGVmaW5lIFRfUElEX0RBVEEwICAgMHgwMDgwMDAwMCAgICAgICAgIC8qIERhdGEgMCB0b2dnbGUgKi8KKyNkZWZpbmUgVF9QSURfREFUQTEgICAweDAwYzAwMDAwICAgICAgICAgLyogRGF0YSAxIHRvZ2dsZSAqLworCisvKgorICogcmVjZWl2ZSBCRCdzIHN0YXR1cworICovCisjZGVmaW5lIFJfRSAgICAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgIC8qIGJ1ZmZlciBlbXB0eSAqLworI2RlZmluZSBSX1cgICAgICAgICAgIDB4MjAwMDAwMDAgICAgICAgICAvKiB3cmFwIGJpdCAqLworI2RlZmluZSBSX0kgICAgICAgICAgIDB4MTAwMDAwMDAgICAgICAgICAvKiBpbnRlcnJ1cHQgb24gcmVjZXB0aW9uICovCisjZGVmaW5lIFJfTCAgICAgICAgICAgMHgwODAwMDAwMCAgICAgICAgIC8qIGxhc3QgKi8KKyNkZWZpbmUgUl9GICAgICAgICAgICAweDA0MDAwMDAwICAgICAgICAgLyogZmlyc3QgKi8KKyNkZWZpbmUgUl9QSUQgICAgICAgICAweDAwYzAwMDAwICAgICAgICAgLyogcGFja2V0IGlkICovCisjZGVmaW5lIFJfTk8gICAgICAgICAgMHgwMDEwMDAwMCAgICAgICAgIC8qIFJ4IE5vbiBPY3RldCBBbGlnbmVkIFBhY2tldCAqLworI2RlZmluZSBSX0FCICAgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBGcmFtZSBBYm9ydGVkICovCisjZGVmaW5lIFJfQ1IgICAgICAgICAgMHgwMDA0MDAwMCAgICAgICAgIC8qIENSQyBFcnJvciAqLworI2RlZmluZSBSX09WICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAgICAvKiBPdmVycnVuICovCisKKyNkZWZpbmUgUl9FUlJPUiAgICAgICAoUl9OTyB8IFJfQUIgfCBSX0NSIHwgUl9PVikKKyNkZWZpbmUgUl9CRF9NQVNLICAgICBSX0VSUk9SCisKKyNkZWZpbmUgUl9QSURfREFUQTAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfUElEX0RBVEExICAgMHgwMDQwMDAwMAorI2RlZmluZSBSX1BJRF9TRVRVUCAgIDB4MDA4MDAwMDAKKworI2RlZmluZSBDUE1fVVNCX1NUT1BfVFggMHgyZTYwMDAwMAorI2RlZmluZSBDUE1fVVNCX1JFU1RBUlRfVFggMHgyZTYwMDAwMAorI2RlZmluZSBDUE1fVVNCX1NUT1BfVFhfT1BDT0RFIDB4MGEKKyNkZWZpbmUgQ1BNX1VTQl9SRVNUQVJUX1RYX09QQ09ERSAweDBiCisjZGVmaW5lIENQTV9VU0JfRVBfU0hJRlQgNQorCisjaWZuZGVmIENPTkZJR19DUE0KK2lubGluZSBpbnQgY3BtX2NvbW1hbmQodTMyIGNvbW1hbmQsIHU4IG9wY29kZSkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCitpbmxpbmUgaW50IHFlX2lzc3VlX2NtZCh1MzIgY21kLCB1MzIgZGV2aWNlLCB1OCBtY25fcHJvdG9jb2wsCisJdTMyIGNtZF9pbnB1dCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisjZW5kaWYKKworI2VuZGlmICAvKiBfX0ZTTF9RRV9VRENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCmluZGV4IDQ1YWQ1NTYuLjA5MWJiNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKQEAgLTIzLDExICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KQEAgLTQ0LDExICs0MSw5IEBACiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpbmNsdWRlICJmc2xfdXNiMl91ZGMuaCIKIApAQCAtNjEsOCArNTYsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJmc2wtdXNiMi11ZGMiOwogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9IERSSVZFUl9ERVNDOwogCi12b2xhdGlsZSBzdGF0aWMgc3RydWN0IHVzYl9kcl9kZXZpY2UgKmRyX3JlZ3MgPSBOVUxMOwotdm9sYXRpbGUgc3RhdGljIHN0cnVjdCB1c2Jfc3lzX2ludGVyZmFjZSAqdXNiX3N5c19yZWdzID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyX2RldmljZSAqZHJfcmVnczsKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKnVzYl9zeXNfcmVnczsKIAogLyogaXQgaXMgaW5pdGlhbGl6ZWQgaW4gcHJvYmUoKSAgKi8KIHN0YXRpYyBzdHJ1Y3QgZnNsX3VkYyAqdWRjX2NvbnRyb2xsZXIgPSBOVUxMOwpAQCAtNzYsMTYgKzcxLDE0IEBACiAJLndNYXhQYWNrZXRTaXplID0JVVNCX01BWF9DVFJMX1BBWUxPQUQsCiB9OwogCi1zdGF0aWMgaW50IGZzbF91ZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBmc2xfdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyB2b2lkIGZzbF9lcF9maWZvX2ZsdXNoKHN0cnVjdCB1c2JfZXAgKl9lcCk7CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKICNkZWZpbmUgZnNsX3JlYWRsKGFkZHIpCQlpbl9sZTMyKGFkZHIpCi0jZGVmaW5lIGZzbF93cml0ZWwoYWRkciwgdmFsMzIpIG91dF9sZTMyKHZhbDMyLCBhZGRyKQorI2RlZmluZSBmc2xfd3JpdGVsKHZhbDMyLCBhZGRyKSBvdXRfbGUzMihhZGRyLCB2YWwzMikKICNlbHNlCiAjZGVmaW5lIGZzbF9yZWFkbChhZGRyKQkJcmVhZGwoYWRkcikKLSNkZWZpbmUgZnNsX3dyaXRlbChhZGRyLCB2YWwzMikgd3JpdGVsKGFkZHIsIHZhbDMyKQorI2RlZmluZSBmc2xfd3JpdGVsKHZhbDMyLCBhZGRyKSB3cml0ZWwodmFsMzIsIGFkZHIpCiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xODUsMTAgKzE3OCw2IEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogI2RlZmluZSBGU0xfVURDX1JFU0VUX1RJTUVPVVQgMTAwMAogCi0JLyogYmVmb3JlIGhlcmUsIG1ha2Ugc3VyZSBkcl9yZWdzIGhhcyBiZWVuIGluaXRpYWxpemVkICovCi0JaWYgKCF1ZGMpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogU3RvcCBhbmQgcmVzZXQgdGhlIHVzYiBjb250cm9sbGVyICovCiAJdG1wID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpOwogCXRtcCAmPSB+VVNCX0NNRF9SVU5fU1RPUDsKQEAgLTIwMiw3ICsxOTEsNyBAQAogCXRpbWVvdXQgPSBqaWZmaWVzICsgRlNMX1VEQ19SRVNFVF9USU1FT1VUOwogCXdoaWxlIChmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYmNtZCkgJiBVU0JfQ01EX0NUUkxfUkVTRVQpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCUVSUigidWRjIHJlc2V0IHRpbWVvdXQhIFxuIik7CisJCQlFUlIoInVkYyByZXNldCB0aW1lb3V0IVxuIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQljcHVfcmVsYXgoKTsKQEAgLTMxNSw3ICszMDQsOCBAQAogCXJldHVybjsKIH0KIAotdm9pZCBkcl9lcF9zZXR1cCh1bnNpZ25lZCBjaGFyIGVwX251bSwgdW5zaWduZWQgY2hhciBkaXIsIHVuc2lnbmVkIGNoYXIgZXBfdHlwZSkKK3N0YXRpYyB2b2lkIGRyX2VwX3NldHVwKHVuc2lnbmVkIGNoYXIgZXBfbnVtLCB1bnNpZ25lZCBjaGFyIGRpciwKKwkJCXVuc2lnbmVkIGNoYXIgZXBfdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wX2VwY3RybCA9IDA7CiAKQEAgLTU2Myw3ICs1NTMsNyBAQAogCS8qIG51a2UgYWxsIHBlbmRpbmcgcmVxdWVzdHMgKGRvZXMgZmx1c2gpICovCiAJbnVrZShlcCwgLUVTSFVURE9XTik7CiAKLQllcC0+ZGVzYyA9IDA7CisJZXAtPmRlc2MgPSBOVUxMOwogCWVwLT5zdG9wcGVkID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIApAQCAtNjAyLDcgKzU5Miw3IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IGZzbF9xdWV1ZV90ZChzdHJ1Y3QgZnNsX2VwICplcCwgc3RydWN0IGZzbF9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIGZzbF9xdWV1ZV90ZChzdHJ1Y3QgZnNsX2VwICplcCwgc3RydWN0IGZzbF9yZXEgKnJlcSkKIHsKIAlpbnQgaSA9IGVwX2luZGV4KGVwKSAqIDIgKyBlcF9pc19pbihlcCk7CiAJdTMyIHRlbXAsIGJpdG1hc2ssIHRtcF9zdGF0OwpAQCAtNjUzLDEzICs2NDMsMTYgQEAKIAkJCXwgRVBfUVVFVUVfSEVBRF9TVEFUVVNfSEFMVCkpOwogCWRRSC0+c2l6ZV9pb2NfaW50X3N0cyAmPSB0ZW1wOwogCisJLyogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgUUggd2lsbCBvY2N1cmUgYmVmb3JlIHByaW1pbmcuICovCisJd21iKCk7CisKIAkvKiBQcmltZSBlbmRwb2ludCBieSB3cml0aW5nIDEgdG8gRU5EUFRQUklNRSAqLwogCXRlbXAgPSBlcF9pc19pbihlcCkKIAkJPyAoMSA8PCAoZXBfaW5kZXgoZXApICsgMTYpKQogCQk6ICgxIDw8IChlcF9pbmRleChlcCkpKTsKIAlmc2xfd3JpdGVsKHRlbXAsICZkcl9yZWdzLT5lbmRwb2ludHByaW1lKTsKIG91dDoKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiB9CiAKIC8qIEZpbGwgaW4gdGhlIGRURCBzdHJ1Y3R1cmUKQEAgLTcxMCw3ICs3MDMsNyBAQAogCQkqaXNfbGFzdCA9IDA7CiAKIAlpZiAoKCppc19sYXN0KSA9PSAwKQotCQlWREJHKCJtdWx0aS1kdGQgcmVxdWVzdCFcbiIpOworCQlWREJHKCJtdWx0aS1kdGQgcmVxdWVzdCEiKTsKIAkvKiBGaWxsIGluIHRoZSB0cmFuc2ZlciBzaXplOyBzZXQgYWN0aXZlIGJpdCAqLwogCXN3YXBfdGVtcCA9ICgoKmxlbmd0aCA8PCBEVERfTEVOR1RIX0JJVF9QT1MpIHwgRFREX1NUQVRVU19BQ1RJVkUpOwogCkBAIC03NzMsMTEgKzc2NiwxMSBAQAogCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLwogCWlmICghX3JlcSB8fCAhcmVxLT5yZXEuY29tcGxldGUgfHwgIXJlcS0+cmVxLmJ1ZgogCQkJfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSB7Ci0JCVZEQkcoIiVzLCBiYWQgcGFyYW1zXG4iLCBfX2Z1bmNfXyk7CisJCVZEQkcoIiVzLCBiYWQgcGFyYW1zIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHVubGlrZWx5KCFfZXAgfHwgIWVwLT5kZXNjKSkgewotCQlWREJHKCIlcywgYmFkIGVwXG4iLCBfX2Z1bmNfXyk7CisJCVZEQkcoIiVzLCBiYWQgZXAiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CkBAIC0xMDY5LDcgKzEwNjIsNyBAQAogCiAJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IGZzbF91ZGMsIGdhZGdldCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwotCVZEQkcoIlZCVVMgJXNcbiIsIGlzX2FjdGl2ZSA/ICJvbiIgOiAib2ZmIik7CisJVkRCRygiVkJVUyAlcyIsIGlzX2FjdGl2ZSA/ICJvbiIgOiAib2ZmIik7CiAJdWRjLT52YnVzX2FjdGl2ZSA9IChpc19hY3RpdmUgIT0gMCk7CiAJaWYgKGNhbl9wdWxsdXAodWRjKSkKIAkJZnNsX3dyaXRlbCgoZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpIHwgVVNCX0NNRF9SVU5fU1RPUCksCkBAIC0xMTQ2LDcgKzExMzksNiBAQAogewogCXN0cnVjdCBmc2xfcmVxICpyZXEgPSB1ZGMtPnN0YXR1c19yZXE7CiAJc3RydWN0IGZzbF9lcCAqZXA7Ci0JaW50IHN0YXR1cyA9IDA7CiAKIAlpZiAoZGlyZWN0aW9uID09IEVQX0RJUl9JTikKIAkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKQEAgLTExNjQsMjcgKzExNTYsMjEgQEAKIAlyZXEtPmR0ZF9jb3VudCA9IDA7CiAKIAlpZiAoZnNsX3JlcV90b19kdGQocmVxKSA9PSAwKQotCQlzdGF0dXMgPSBmc2xfcXVldWVfdGQoZXAsIHJlcSk7CisJCWZzbF9xdWV1ZV90ZChlcCwgcmVxKTsKIAllbHNlCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHN0YXR1cykKLQkJRVJSKCJDYW4ndCBxdWV1ZSBlcDAgc3RhdHVzIHJlcXVlc3QgXG4iKTsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKIAotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHVkY19yZXNldF9lcF9xdWV1ZShzdHJ1Y3QgZnNsX3VkYyAqdWRjLCB1OCBwaXBlKQorc3RhdGljIHZvaWQgdWRjX3Jlc2V0X2VwX3F1ZXVlKHN0cnVjdCBmc2xfdWRjICp1ZGMsIHU4IHBpcGUpCiB7CiAJc3RydWN0IGZzbF9lcCAqZXAgPSBnZXRfZXBfYnlfcGlwZSh1ZGMsIHBpcGUpOwogCi0JaWYgKCFlcC0+bmFtZSkKLQkJcmV0dXJuIDA7Ci0KLQludWtlKGVwLCAtRVNIVVRET1dOKTsKLQotCXJldHVybiAwOworCWlmIChlcC0+bmFtZSkKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7CiB9CiAKIC8qCkBAIC0xMjA4LDEwICsxMTk0LDggQEAKIAkJdTE2IGluZGV4LCB1MTYgbGVuZ3RoKQogewogCXUxNiB0bXAgPSAwOwkJLyogU3RhdHVzLCBjcHUgZW5kaWFuICovCi0KIAlzdHJ1Y3QgZnNsX3JlcSAqcmVxOwogCXN0cnVjdCBmc2xfZXAgKmVwOwotCWludCBzdGF0dXMgPSAwOwogCiAJZXAgPSAmdWRjLT5lcHNbMF07CiAKQEAgLTEyNTAsMTQgKzEyMzQsMTAgQEAKIAogCS8qIHByaW1lIHRoZSBkYXRhIHBoYXNlICovCiAJaWYgKChmc2xfcmVxX3RvX2R0ZChyZXEpID09IDApKQotCQlzdGF0dXMgPSBmc2xfcXVldWVfdGQoZXAsIHJlcSk7CisJCWZzbF9xdWV1ZV90ZChlcCwgcmVxKTsKIAllbHNlCQkJLyogbm8gbWVtICovCiAJCWdvdG8gc3RhbGw7CiAKLQlpZiAoc3RhdHVzKSB7Ci0JCUVSUigiQ2FuJ3QgcmVzcG9uZCB0byBnZXRzdGF0dXMgcmVxdWVzdCBcbiIpOwotCQlnb3RvIHN0YWxsOwotCX0KIAlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKIAl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKIAlyZXR1cm47CkBAIC0xMzk3LDcgKzEzNzcsNyBAQAogCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOwogCQlicmVhazsKIAljYXNlIFdBSVRfRk9SX1NFVFVQOgotCQlFUlIoIlVuZXhwZWN0IGVwMCBwYWNrZXRzIFxuIik7CisJCUVSUigiVW5leHBlY3QgZXAwIHBhY2tldHNcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcDBzdGFsbCh1ZGMpOwpAQCAtMTQ3Niw3ICsxNDU2LDcgQEAKIAkJCQlzdGF0dXMgPSAtRUlMU0VROwogCQkJCWJyZWFrOwogCQkJfSBlbHNlCi0JCQkJRVJSKCJVbmtub3duIGVycm9yIGhhcyBvY2N1cmVkICgweCV4KSFcclxuIiwKKwkJCQlFUlIoIlVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQgKDB4JXgpIVxuIiwKIAkJCQkJZXJyb3JzKTsKIAogCQl9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KGN1cnJfdGQtPnNpemVfaW9jX3N0cykKQEAgLTE0OTUsNyArMTQ3NSw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQl0ZF9jb21wbGV0ZSsrOwotCQkJVkRCRygiZFREIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWwgIik7CisJCQlWREJHKCJkVEQgdHJhbnNtaXR0ZWQgc3VjY2Vzc2Z1bCIpOwogCQl9CiAKIAkJaWYgKGogIT0gY3Vycl9yZXEtPmR0ZF9jb3VudCAtIDEpCkBAIC0xNTY4LDkgKzE1NDgsNiBAQAogewogCXUzMiBzcGVlZDsKIAotCWlmICh1ZGMtPmJ1c19yZXNldCkKLQkJdWRjLT5idXNfcmVzZXQgPSAwOwotCiAJLyogQnVzIHJlc2V0dGluZyBpcyBmaW5pc2hlZCAqLwogCWlmICghKGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSkgJiBQT1JUU0NYX1BPUlRfUkVTRVQpKSB7CiAJCS8qIEdldCB0aGUgc3BlZWQgKi8KQEAgLTE2NzgsOCArMTY1NSw2IEBACiAKIAlpZiAoZnNsX3JlYWRsKCZkcl9yZWdzLT5wb3J0c2MxKSAmIFBPUlRTQ1hfUE9SVF9SRVNFVCkgewogCQlWREJHKCJCdXMgcmVzZXQiKTsKLQkJLyogQnVzIGlzIHJlc2V0aW5nICovCi0JCXVkYy0+YnVzX3Jlc2V0ID0gMTsKIAkJLyogUmVzZXQgYWxsIHRoZSBxdWV1ZXMsIGluY2x1ZGUgWEQsIGRURCwgRVAgcXVldWUKIAkJICogaGVhZCBhbmQgVFIgUXVldWUgKi8KIAkJcmVzZXRfcXVldWVzKHVkYyk7CkBAIC0xNzY4LDcgKzE3NDMsNyBAQAogCX0KIAogCWlmIChpcnFfc3JjICYgKFVTQl9TVFNfRVJSIHwgVVNCX1NUU19TWVNfRVJSKSkgewotCQlWREJHKCJFcnJvciBJUlEgJXggIiwgaXJxX3NyYyk7CisJCVZEQkcoIkVycm9yIElSUSAleCIsIGlycV9zcmMpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTc5OSw3ICsxNzc0LDcgQEAKIAkvKiBsb2NrIGlzIG5lZWRlZCBidXQgd2hldGhlciBzaG91bGQgdXNlIHRoaXMgbG9jayBvciBhbm90aGVyICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CiAKLQlkcml2ZXItPmRyaXZlci5idXMgPSAwOworCWRyaXZlci0+ZHJpdmVyLmJ1cyA9IE5VTEw7CiAJLyogaG9vayB1cCB0aGUgZHJpdmVyICovCiAJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CkBAIC0xODA5LDggKzE3ODQsOCBAQAogCXJldHZhbCA9IGRyaXZlci0+YmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CiAJaWYgKHJldHZhbCkgewogCQlWREJHKCJiaW5kIHRvICVzIC0tPiAlZCIsIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7Ci0JCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IDA7Ci0JCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSAwOworCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xODE5LDEyICsxNzk0LDEyIEBACiAJdWRjX2NvbnRyb2xsZXItPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BVFRBQ0hFRDsKIAl1ZGNfY29udHJvbGxlci0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CiAJdWRjX2NvbnRyb2xsZXItPmVwMF9kaXIgPSAwOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBiaW5kIHRvIGRyaXZlciAlcyBcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpbmQgdG8gZHJpdmVyICVzXG4iLAogCQkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAogb3V0OgogCWlmIChyZXR2YWwpCi0JCXByaW50aygicmV0dmFsICVkIFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKCJnYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CkBAIC0xODQyLDcgKzE4MTcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh1ZGNfY29udHJvbGxlci0+dHJhbnNjZWl2ZXIpCi0JCSh2b2lkKW90Z19zZXRfcGVyaXBoZXJhbCh1ZGNfY29udHJvbGxlci0+dHJhbnNjZWl2ZXIsIDApOworCQlvdGdfc2V0X3BlcmlwaGVyYWwodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyLCBOVUxMKTsKIAogCS8qIHN0b3AgRFIsIGRpc2FibGUgaW50ciAqLwogCWRyX2NvbnRyb2xsZXJfc3RvcCh1ZGNfY29udHJvbGxlcik7CkBAIC0xODYzLDEwICsxODM4LDEwIEBACiAKIAkvKiB1bmJpbmQgZ2FkZ2V0IGFuZCB1bmhvb2sgZHJpdmVyLiAqLwogCWRyaXZlci0+dW5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKLQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOwotCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSAwOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CiAKLQlwcmludGsoInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcclxuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcHJpbnRrKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CkBAIC0xOTIyLDcgKzE4OTcsNyBAQAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYnN0cyk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAogCQkJIlVTQiBTdGF0dXMgUmVnOlxuIgotCQkJIkRyIFN1c3BlbmQ6ICVkIiAiUmVzZXQgUmVjZWl2ZWQ6ICVkIiAiU3lzdGVtIEVycm9yOiAlcyIKKwkJCSJEciBTdXNwZW5kOiAlZCBSZXNldCBSZWNlaXZlZDogJWQgU3lzdGVtIEVycm9yOiAlcyAiCiAJCQkiVVNCIEVycm9yIEludGVycnVwdDogJXNcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX1NUU19TVVNQRU5EKSA/IDEgOiAwLAogCQkJKHRtcF9yZWcgJiBVU0JfU1RTX1JFU0VUKSA/IDEgOiAwLApAQCAtMTkzNCwxMSArMTkwOSwxMSBAQAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYmludHIpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJCSJVU0IgSW50cnJ1cHQgRW5hYmxlIFJlZzpcbiIKLQkJCSJTbGVlcCBFbmFibGU6ICVkIiAiU09GIFJlY2VpdmVkIEVuYWJsZTogJWQiCisJCQkiU2xlZXAgRW5hYmxlOiAlZCBTT0YgUmVjZWl2ZWQgRW5hYmxlOiAlZCAiCiAJCQkiUmVzZXQgRW5hYmxlOiAlZFxuIgotCQkJIlN5c3RlbSBFcnJvciBFbmFibGU6ICVkIgorCQkJIlN5c3RlbSBFcnJvciBFbmFibGU6ICVkICIKIAkJCSJQb3J0IENoYW5nZSBEZWN0ZWN0ZWQgRW5hYmxlOiAlZFxuIgotCQkJIlVTQiBFcnJvciBJbnRyIEVuYWJsZTogJWQiICJVU0IgSW50ciBFbmFibGU6ICVkXG5cbiIsCisJCQkiVVNCIEVycm9yIEludHIgRW5hYmxlOiAlZCBVU0IgSW50ciBFbmFibGU6ICVkXG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9JTlRSX0RFVklDRV9TVVNQRU5EKSA/IDEgOiAwLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9TT0ZfRU4pID8gMSA6IDAsCiAJCQkodG1wX3JlZyAmIFVTQl9JTlRSX1JFU0VUX0VOKSA/IDEgOiAwLApAQCAtMTk1MSwyMSArMTkyNiwyMSBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZnJpbmRleCk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBGcmFtZSBJbmRleCBSZWc6IiAiRnJhbWUgTnVtYmVyIGlzIDB4JXhcblxuIiwKKwkJCSJVU0IgRnJhbWUgSW5kZXggUmVnOiBGcmFtZSBOdW1iZXIgaXMgMHgleFxuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfRlJJTkRFWF9NQVNLUykpOwogCXNpemUgLT0gdDsKIAluZXh0ICs9IHQ7CiAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5kZXZpY2VhZGRyKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkiVVNCIERldmljZSBBZGRyZXNzIFJlZzoiICJEZXZpY2UgQWRkciBpcyAweCV4XG5cbiIsCisJCQkiVVNCIERldmljZSBBZGRyZXNzIFJlZzogRGV2aWNlIEFkZHIgaXMgMHgleFxuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfREVWSUNFX0FERFJFU1NfTUFTSykpOwogCXNpemUgLT0gdDsKIAluZXh0ICs9IHQ7CiAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwb2ludGxpc3RhZGRyKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkiVVNCIEVuZHBvaW50IExpc3QgQWRkcmVzcyBSZWc6IgorCQkJIlVTQiBFbmRwb2ludCBMaXN0IEFkZHJlc3MgUmVnOiAiCiAJCQkiRGV2aWNlIEFkZHIgaXMgMHgleFxuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfRVBfTElTVF9BRERSRVNTX01BU0spKTsKIAlzaXplIC09IHQ7CkBAIC0xOTc0LDExICsxOTQ5LDEyIEBACiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAogCQkiVVNCIFBvcnQgU3RhdHVzJkNvbnRyb2wgUmVnOlxuIgotCQkiUG9ydCBUcmFuc2NlaXZlciBUeXBlIDogJXMiICJQb3J0IFNwZWVkOiAlcyBcbiIKLQkJIlBIWSBMb3cgUG93ZXIgU3VzcGVuZDogJXMiICJQb3J0IFJlc2V0OiAlcyIKLQkJIlBvcnQgU3VzcGVuZCBNb2RlOiAlcyBcbiIgIk92ZXItY3VycmVudCBDaGFuZ2U6ICVzIgorCQkiUG9ydCBUcmFuc2NlaXZlciBUeXBlIDogJXMgUG9ydCBTcGVlZDogJXNcbiIKKwkJIlBIWSBMb3cgUG93ZXIgU3VzcGVuZDogJXMgUG9ydCBSZXNldDogJXMgIgorCQkiUG9ydCBTdXNwZW5kIE1vZGU6ICVzXG4iCisJCSJPdmVyLWN1cnJlbnQgQ2hhbmdlOiAlcyAiCiAJCSJQb3J0IEVuYWJsZS9EaXNhYmxlIENoYW5nZTogJXNcbiIKLQkJIlBvcnQgRW5hYmxlZC9EaXNhYmxlZDogJXMiCisJCSJQb3J0IEVuYWJsZWQvRGlzYWJsZWQ6ICVzICIKIAkJIkN1cnJlbnQgQ29ubmVjdCBTdGF0dXM6ICVzXG5cbiIsICggewogCQkJY2hhciAqczsKIAkJCXN3aXRjaCAodG1wX3JlZyAmIFBPUlRTQ1hfUFRTX0ZTTFMpIHsKQEAgLTIwMjMsNyArMTk5OSw3IEBACiAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2Jtb2RlKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkiVVNCIE1vZGUgUmVnOiIgIkNvbnRyb2xsZXIgTW9kZSBpcyA6ICVzXG5cbiIsICggeworCQkJIlVTQiBNb2RlIFJlZzogQ29udHJvbGxlciBNb2RlIGlzOiAlc1xuXG4iLCAoIHsKIAkJCQljaGFyICpzOwogCQkJCXN3aXRjaCAodG1wX3JlZyAmIFVTQl9NT0RFX0NUUkxfTU9ERV9IT1NUKSB7CiAJCQkJY2FzZSBVU0JfTU9ERV9DVFJMX01PREVfSURMRToKQEAgLTIwNDIsNyArMjAxOCw3IEBACiAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwdHNldHVwc3RhdCk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIkVuZHBvaW50IFNldHVwIFN0YXR1cyBSZWc6IiAiU0VUVVAgb24gZXAgMHgleFxuXG4iLAorCQkJIkVuZHBvaW50IFNldHVwIFN0YXR1cyBSZWc6IFNFVFVQIG9uIGVwIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgRVBfU0VUVVBfU1RBVFVTX01BU0spKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwpAQCAtMjA1NSwxMiArMjAzMSwxMiBAQAogCQluZXh0ICs9IHQ7CiAJfQogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmVuZHBvaW50cHJpbWUpOwotCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIkVQIFByaW1lIFJlZyA9IFsweCV4XVxuIiwgdG1wX3JlZyk7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiRVAgUHJpbWUgUmVnID0gWzB4JXhdXG5cbiIsIHRtcF9yZWcpOwogCXNpemUgLT0gdDsKIAluZXh0ICs9IHQ7CiAKIAl0bXBfcmVnID0gdXNiX3N5c19yZWdzLT5zbm9vcDE7Ci0JdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiXG5Tbm9vcDEgUmVnIDogPSBbMHgleF1cblxuIiwgdG1wX3JlZyk7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiU25vb3AxIFJlZyA6ID0gWzB4JXhdXG5cbiIsIHRtcF9yZWcpOwogCXNpemUgLT0gdDsKIAluZXh0ICs9IHQ7CiAKQEAgLTIwODQsNyArMjA2MCw3IEBACiAJfSBlbHNlIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CiAJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkJInJlcSAlcCBhY3R1YWwgMHgleCBsZW5ndGggMHgleCAgYnVmICVwXG4iLAorCQkJCSJyZXEgJXAgYWN0dWFsIDB4JXggbGVuZ3RoIDB4JXggYnVmICVwXG4iLAogCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAogCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmKTsKIAkJCXNpemUgLT0gdDsKQEAgLTIxMTAsNyArMjA4Niw3IEBACiAJCQl9IGVsc2UgewogCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQkJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCi0JCQkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCIKKwkJCQkJCSJyZXEgJXAgYWN0dWFsIDB4JXggbGVuZ3RoICIKIAkJCQkJCSIweCV4ICBidWYgJXBcbiIsCiAJCQkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKIAkJCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmKTsKQEAgLTIyMDIsNyArMjE3OCw2IEBACiAJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfUE9XRVJFRDsKIAl1ZGMtPmVwMF9kaXIgPSAwOwogCXVkYy0+cmVtb3RlX3dha2V1cCA9IDA7CS8qIGRlZmF1bHQgdG8gMCBvbiByZXNldCAqLwotCXNwaW5fbG9ja19pbml0KCZ1ZGMtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjU0LDcgKzIyMjksNyBAQAogCXUzMiBkY2NwYXJhbXM7CiAKIAlpZiAoc3RyY21wKHBkZXYtPm5hbWUsIGRyaXZlcl9uYW1lKSkgewotCQlWREJHKCJXcm9uZyBkZXZpY2VcbiIpOworCQlWREJHKCJXcm9uZyBkZXZpY2UiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yMjY0LDIzICsyMjM5LDI2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXNwaW5fbG9ja19pbml0KCZ1ZGNfY29udHJvbGxlci0+bG9jayk7CisJdWRjX2NvbnRyb2xsZXItPnN0b3BwZWQgPSAxOworCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewotCQlrZnJlZSh1ZGNfY29udHJvbGxlcik7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfa2ZyZWU7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKIAkJCQlkcml2ZXJfbmFtZSkpIHsKLQkJRVJSKCJyZXF1ZXN0IG1lbSByZWdpb24gZm9yICVzIGZhaWxlZCBcbiIsIHBkZXYtPm5hbWUpOwotCQlrZnJlZSh1ZGNfY29udHJvbGxlcik7Ci0JCXJldHVybiAtRUJVU1k7CisJCUVSUigicmVxdWVzdCBtZW0gcmVnaW9uIGZvciAlcyBmYWlsZWRcbiIsIHBkZXYtPm5hbWUpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAogCWRyX3JlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghZHJfcmVncykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjsKIAl9CiAKIAl1c2Jfc3lzX3JlZ3MgPSAoc3RydWN0IHVzYl9zeXNfaW50ZXJmYWNlICopCkBAIC0yMjkxLDcgKzIyNjksNyBAQAogCWlmICghKGRjY3BhcmFtcyAmIERDQ1BBUkFNU19EQykpIHsKIAkJRVJSKCJUaGlzIFNPQyBkb2Vzbid0IHN1cHBvcnQgZGV2aWNlIHJvbGVcbiIpOwogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCS8qIEdldCBtYXggZGV2aWNlIGVuZHBvaW50cyAqLwogCS8qIERFTiBpcyBiaWRpcmVjdGlvbmFsIGVwIG51bWJlciwgbWF4X2VwIGRvdWJsZXMgdGhlIG51bWJlciAqLwpAQCAtMjMwMCwyMiArMjI3OCwyMiBAQAogCXVkY19jb250cm9sbGVyLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICghdWRjX2NvbnRyb2xsZXItPmlycSkgewogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCiAJcmV0ID0gcmVxdWVzdF9pcnEodWRjX2NvbnRyb2xsZXItPmlycSwgZnNsX3VkY19pcnEsIElSUUZfU0hBUkVELAogCQkJZHJpdmVyX25hbWUsIHVkY19jb250cm9sbGVyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJRVJSKCJjYW5ub3QgcmVxdWVzdCBpcnEgJWQgZXJyICVkIFxuIiwKKwkJRVJSKCJjYW5ub3QgcmVxdWVzdCBpcnEgJWQgZXJyICVkXG4iLAogCQkJCXVkY19jb250cm9sbGVyLT5pcnEsIHJldCk7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSB1ZGMgc3RydWN0dXJlIGluY2x1ZGluZyBRSCBtZW1iZXIgYW5kIG90aGVyIG1lbWJlciAqLwogCWlmIChzdHJ1Y3RfdWRjX3NldHVwKHVkY19jb250cm9sbGVyLCBwZGV2KSkgewogCQlFUlIoIkNhbid0IGluaXRpYWxpemUgdWRjIGRhdGEgc3RydWN0dXJlXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnIzOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHVzYiBodyByZWcgZXhjZXB0IGZvciByZWdzIGZvciBFUCwKQEAgLTIzMzYsNyArMjMxNCw3IEBACiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnIzOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAogCS8qIHNldHVwIFFIIGFuZCBlcGN0cmwgZm9yIGVwMCAqLwogCWVwMF9zZXR1cCh1ZGNfY29udHJvbGxlcik7CkBAIC0yMzY2LDIwICsyMzQ0LDIyIEBACiAJCQlEVERfQUxJR05NRU5ULCBVRENfRE1BX0JPVU5EQVJZKTsKIAlpZiAodWRjX2NvbnRyb2xsZXItPnRkX3Bvb2wgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjQ7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAJfQogCWNyZWF0ZV9wcm9jX2ZpbGUoKTsKIAlyZXR1cm4gMDsKIAotZXJyNDoKK2Vycl91bnJlZ2lzdGVyOgogCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7Ci1lcnIzOgorZXJyX2ZyZWVfaXJxOgogCWZyZWVfaXJxKHVkY19jb250cm9sbGVyLT5pcnEsIHVkY19jb250cm9sbGVyKTsKLWVycjI6CitlcnJfaW91bm1hcDoKIAlpb3VubWFwKGRyX3JlZ3MpOwotZXJyMToKK2Vycl9yZWxlYXNlX21lbV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworZXJyX2tmcmVlOgogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKKwl1ZGNfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ2OSw3ICsyNDQ5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKLQlwcmludGsoIiVzIHVucmVnaXN0ZXJlZCBcbiIsIGRyaXZlcl9kZXNjKTsKKwlwcmludGsoIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOwogfQogCiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKaW5kZXggNjEzMTc1Mi4uZTYzZWYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaApAQCAtNDI0LDE2ICs0MjQsNiBAQAogLyogQ29udHJvbGxlciBkbWEgYm91bmRhcnkgKi8KICNkZWZpbmUgVURDX0RNQV9CT1VOREFSWQkJCTB4MTAwMAogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAjIyMjIyBlbnVtIGRhdGEKLSovCi10eXBlZGVmIGVudW0gewotCWVfVUxQSSwKLQllX1VUTUlfOEJJVCwKLQllX1VUTUlfMTZCSVQsCi0JZV9TRVJJQUwKLX0gZV9QaHlJbnRlcmZhY2U7Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qICMjIyBkcml2ZXIgcHJpdmF0ZSBkYXRhCkBAIC00NjksOSArNDU5LDkgQEAKICNkZWZpbmUgRVBfRElSX09VVAkwCiAKIHN0cnVjdCBmc2xfdWRjIHsKLQogCXN0cnVjdCB1c2JfZ2FkZ2V0IGdhZGdldDsKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZTsJLyogdG8gbWFrZSBzdXJlIHJlbGVhc2UoKSBpcyBkb25lICovCiAJc3RydWN0IGZzbF9lcCAqZXBzOwogCXVuc2lnbmVkIGludCBtYXhfZXA7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTQ5MiwyMCArNDgyLDEzIEBACiAJc2l6ZV90IGVwX3FoX3NpemU7CQkvKiBzaXplIGFmdGVyIGFsaWdubWVudCBhZGp1c3RtZW50Ki8KIAlkbWFfYWRkcl90IGVwX3FoX2RtYTsJCS8qIGRtYSBhZGRyZXNzIG9mIFFIICovCiAKLQl1MzIgbWF4X3BpcGVzOwkJLyogRGV2aWNlIG1heCBwaXBlcyAqLwotCXUzMiBtYXhfdXNlX2VuZHB0czsJLyogTWF4IGVuZHBvaW50ZXMgdG8gYmUgdXNlZCAqLwotCXUzMiBidXNfcmVzZXQ7CQkvKiBEZXZpY2UgaXMgYnVzIHJlc2V0aW5nICovCisJdTMyIG1heF9waXBlczsgICAgICAgICAgLyogRGV2aWNlIG1heCBwaXBlcyAqLwogCXUzMiByZXN1bWVfc3RhdGU7CS8qIFVTQiBzdGF0ZSB0byByZXN1bWUgKi8KIAl1MzIgdXNiX3N0YXRlOwkJLyogVVNCIGN1cnJlbnQgc3RhdGUgKi8KLQl1MzIgdXNiX25leHRfc3RhdGU7CS8qIFVTQiBuZXh0IHN0YXRlICovCiAJdTMyIGVwMF9zdGF0ZTsJCS8qIEVuZHBvaW50IHplcm8gc3RhdGUgKi8KIAl1MzIgZXAwX2RpcjsJCS8qIEVuZHBvaW50IHplcm8gZGlyZWN0aW9uOiBjYW4gYmUKIAkJCQkgICBVU0JfRElSX0lOIG9yIFVTQl9ESVJfT1VUICovCi0JdTMyIHVzYl9zb2ZfY291bnQ7CS8qIFNPRiBjb3VudCAqLwotCXUzMiBlcnJvcnM7CQkvKiBVU0IgRVJST1JzIGNvdW50ICovCiAJdTggZGV2aWNlX2FkZHJlc3M7CS8qIERldmljZSBVU0IgYWRkcmVzcyAqLwotCi0Jc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLwogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAppbmRleCAxN2Q5OTA1Li40ZTMxMDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCkBAIC0xNTEsNiArMTUxLDEzIEBACiAjZGVmaW5lCWdhZGdldF9pc19tNjY1OTIoZykJMAogI2VuZGlmCiAKKy8qIEZyZWVzY2FsZSBDUE0vUUUgVURDIFNVUFBPUlQgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUKKyNkZWZpbmUgZ2FkZ2V0X2lzX2ZzbF9xZShnKQkhc3RyY21wKCJmc2xfcWVfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUgZ2FkZ2V0X2lzX2ZzbF9xZShnKQkwCisjZW5kaWYKKwogCiAvLyBDT05GSUdfVVNCX0dBREdFVF9TWDIKIC8vIENPTkZJR19VU0JfR0FER0VUX0FVMVgwMApAQCAtMjE2LDYgKzIyMyw4IEBACiAJCXJldHVybiAweDIwOwogCWVsc2UgaWYgKGdhZGdldF9pc19tNjY1OTIoZ2FkZ2V0KSkKIAkJcmV0dXJuIDB4MjE7CisJZWxzZSBpZiAoZ2FkZ2V0X2lzX2ZzbF9xZShnYWRnZXQpKQorCQlyZXR1cm4gMHgyMjsKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwppbmRleCA2ZWVlNzYwLi42MGQzZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJICogcG93ZXIgcHJvcGVydGllcyBvZiB0aGUgZGV2aWNlLiBJcyBpdCBzZWxmcG93ZXJlZD8KIAkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSwKLQkuYk1heFBvd2VyID0JCTEsCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogLyogQi4zLjEgIFN0YW5kYXJkIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCA1Y2ZiNWViLi44YWU3MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCiAJLyogZXBfcmVzZXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwogCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+d2VkZ2VkID0gMDsKIAllcC0+b3V0X292ZXJmbG93ID0gMDsKIAogCS8qIHNldCBzcGVlZC1kZXBlbmRlbnQgbWF4IHBhY2tldDsgbWF5IGtpY2sgaW4gaGlnaCBiYW5kd2lkdGggKi8KQEAgLTEyMTgsNyArMTIxOSw3IEBACiBzdGF0aWMgaW50IG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCk7CiAKIHN0YXRpYyBpbnQKLW5ldDIyODBfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQorbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUsIGludCB3ZWRnZWQpCiB7CiAJc3RydWN0IG5ldDIyODBfZXAJKmVwOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMTIzOSwxNiArMTI0MCwyMSBAQAogCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZSAmJiBuZXQyMjgwX2ZpZm9fc3RhdHVzIChfZXApICE9IDApCiAJCXJldHZhbCA9IC1FQUdBSU47CiAJZWxzZSB7Ci0JCVZERUJVRyAoZXAtPmRldiwgIiVzICVzIGhhbHRcbiIsIF9lcC0+bmFtZSwKLQkJCQl2YWx1ZSA/ICJzZXQiIDogImNsZWFyIik7CisJCVZERUJVRyAoZXAtPmRldiwgIiVzICVzICVzXG4iLCBfZXAtPm5hbWUsCisJCQkJdmFsdWUgPyAic2V0IiA6ICJjbGVhciIsCisJCQkJd2VkZ2VkID8gIndlZGdlIiA6ICJoYWx0Iik7CiAJCS8qIHNldC9jbGVhciwgdGhlbiBzeW5jaCBtZW1vcnkgdmlld3Mgd2l0aCB0aGUgZGV2aWNlICovCiAJCWlmICh2YWx1ZSkgewogCQkJaWYgKGVwLT5udW0gPT0gMCkKIAkJCQllcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CiAJCQllbHNlCiAJCQkJc2V0X2hhbHQgKGVwKTsKLQkJfSBlbHNlCisJCQlpZiAod2VkZ2VkKQorCQkJCWVwLT53ZWRnZWQgPSAxOworCQl9IGVsc2UgewogCQkJY2xlYXJfaGFsdCAoZXApOworCQkJZXAtPndlZGdlZCA9IDA7CisJCX0KIAkJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CkBAIC0xMjU3LDYgKzEyNjMsMjAgQEAKIH0KIAogc3RhdGljIGludAorbmV0MjI4MF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2UoX2VwLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK25ldDIyODBfc2V0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlpZiAoIV9lcCB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG5ldDIyODBfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKIG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CkBAIC0xMzAyLDYgKzEzMjIsNyBAQAogCS5kZXF1ZXVlCT0gbmV0MjI4MF9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gbmV0MjI4MF9zZXRfaGFsdCwKKwkuc2V0X3dlZGdlCT0gbmV0MjI4MF9zZXRfd2VkZ2UsCiAJLmZpZm9fc3RhdHVzCT0gbmV0MjI4MF9maWZvX3N0YXR1cywKIAkuZmlmb19mbHVzaAk9IG5ldDIyODBfZmlmb19mbHVzaCwKIH07CkBAIC0yNDEwLDkgKzI0MzEsMTQgQEAKIAkJCQlnb3RvIGRvX3N0YWxsOwogCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgd19pbmRleCkpID09IDApCiAJCQkJZ290byBkb19zdGFsbDsKLQkJCWNsZWFyX2hhbHQgKGUpOworCQkJaWYgKGUtPndlZGdlZCkgeworCQkJCVZERUJVRyhkZXYsICIlcyB3ZWRnZWQsIGhhbHQgbm90IGNsZWFyZWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSk7CisJCQl9IGVsc2UgeworCQkJCVZERUJVRyhkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJCQkJY2xlYXJfaGFsdChlKTsKKwkJCX0KIAkJCWFsbG93X3N0YXR1cyAoZXApOwotCQkJVkRFQlVHIChkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CiAJCQlnb3RvIG5leHRfZW5kcG9pbnRzOwogCQkJfQogCQkJYnJlYWs7CkBAIC0yNDI3LDYgKzI0NTMsOCBAQAogCQkJCWdvdG8gZG9fc3RhbGw7CiAJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB3X2luZGV4KSkgPT0gMCkKIAkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKGUtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJCQlnb3RvIGRvX3N0YWxsOwogCQkJc2V0X2hhbHQgKGUpOwogCQkJYWxsb3dfc3RhdHVzIChlcCk7CiAJCQlWREVCVUcgKGRldiwgIiVzIHNldCBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaAppbmRleCA4MWE3MWRiLi5jMzY4NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKQEAgLTEwOSw2ICsxMDksNyBAQAogCQkJCQkJaW5fZmlmb192YWxpZGF0ZSA6IDEsCiAJCQkJCQlvdXRfb3ZlcmZsb3cgOiAxLAogCQkJCQkJc3RvcHBlZCA6IDEsCisJCQkJCQl3ZWRnZWQgOiAxLAogCQkJCQkJaXNfaW4gOiAxLAogCQkJCQkJaXNfaXNvIDogMSwKIAkJCQkJCXJlc3BvbmRlZCA6IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IGJiNTRjY2EuLjM0ZTllMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC0yMzEzLDYgKzIzMTMsMTMgQEAKIAogCXRtcCA9IG9tYXBfcmVhZGwoT1RHX1JFVik7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCS8qCisJCSAqIFJFVklTSVQ6IE5vdCBjbGVhciBob3cgdGhpcyB3b3JrcyBvbiBPTUFQMi4gIHRyYW5zCisJCSAqIGlzIEFORGVkIHRvIHByb2R1Y2UgYml0cyA3IGFuZCA4LCB3aGljaCBtaWdodCBtYWtlCisJCSAqIHNlbnNlIGZvciBVU0JfVFJBTlNDRUlWRVJfQ1RSTCBvbiBPTUFQMSwKKwkJICogYnV0IHdpdGggQ09OVFJPTF9ERVZDT05GLCB0aGVzZSBiaXRzIGhhdmUgc29tZXRoaW5nIHRvCisJCSAqIGRvIHdpdGggdGhlIGZyYW1lIGFkanVzdG1lbnQgY291bnRlciBhbmQgTWNCU1AyLgorCQkgKi8KIAkJY3RybF9uYW1lID0gImNvbnRyb2xfZGV2Y29uZiI7CiAJCXRyYW5zID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCAyYjNiOWUxLi41YTMwMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0JREVWX0NPTkZJR19WQUxVRSwKIAkuaUNvbmZpZ3VyYXRpb24gPQkwLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMQkvKiBTZWxmLVBvd2VyZWQgKi8KKwkuYk1heFBvd2VyID0JCUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVyAvIDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBpbnRmX2Rlc2MgPSB7CkBAIC0xMjc4LDggKzEyNzgsNyBAQAogCS8qIHJlc3BvbmQgd2l0aCBkYXRhIHRyYW5zZmVyIGJlZm9yZSBzdGF0dXMgcGhhc2U/ICovCiAJaWYgKHZhbHVlID49IDApIHsKIAkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKLQkJcmVxLT56ZXJvID0gdmFsdWUgPCB3TGVuZ3RoCi0JCQkJJiYgKHZhbHVlICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMDsKKwkJcmVxLT56ZXJvID0gdmFsdWUgPCB3TGVuZ3RoOwogCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShnYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHZhbHVlIDwgMCkgewogCQkJREJHKGRldiwgImVwX3F1ZXVlIC0tPiAlZFxuIiwgdmFsdWUpOwpAQCAtMTQ3Nyw3ICsxNDc2LDYgQEAKIAlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKIAkJb3RnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAogCQljb25maWdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwotCQljb25maWdfZGVzYy5iTWF4UG93ZXIgPSA0OwogCX0KIAogCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggN2NiYzc4YS4uYmNmMzc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwppbmRleCAyOWQxM2ViLi40OGY1MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwpAQCAtMTY1MSw3ICsxNjUxLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnNldHVwCi0JCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMKSB7CisJCQl8fCBkcml2ZXItPnNwZWVkIDwgVVNCX1NQRUVEX0ZVTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGRyaXZlcjogYmluZCAlcCBzZXR1cCAlcCBzcGVlZCAlZFxuIiwKIAkJCWRyaXZlci0+YmluZCwgZHJpdmVyLT5zZXR1cCwgZHJpdmVyLT5zcGVlZCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IDNmYWE3YTcuLjM3ODc5YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJlcGF1dG9jb25mLmMiCiAKICNpbmNsdWRlICJmX2FjbS5jIgorI2luY2x1ZGUgImZfb2JleC5jIgogI2luY2x1ZGUgImZfc2VyaWFsLmMiCiAjaW5jbHVkZSAidV9zZXJpYWwuYyIKIApAQCAtNTYsNiArNTcsNyBAQAogI2RlZmluZSBHU19WRU5ET1JfSUQJCQkweDA1MjUJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBHU19QUk9EVUNUX0lECQkJMHhhNGE2CS8qIExpbnV4LVVTQiBTZXJpYWwgR2FkZ2V0ICovCiAjZGVmaW5lIEdTX0NEQ19QUk9EVUNUX0lECQkweGE0YTcJLyogLi4uIGFzIENEQy1BQ00gKi8KKyNkZWZpbmUgR1NfQ0RDX09CRVhfUFJPRFVDVF9JRAkJMHhhNGE5CS8qIC4uLiBhcyBDREMtT0JFWCAqLwogCiAvKiBzdHJpbmcgSURzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxseSAqLwogCkBAIC0xMjUsNiArMTI3LDEwIEBACiBtb2R1bGVfcGFyYW0odXNlX2FjbSwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVzZV9hY20sICJVc2UgQ0RDIEFDTSwgZGVmYXVsdD15ZXMiKTsKIAorc3RhdGljIGludCB1c2Vfb2JleCA9IGZhbHNlOworbW9kdWxlX3BhcmFtKHVzZV9vYmV4LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModXNlX29iZXgsICJVc2UgQ0RDIE9CRVgsIGRlZmF1bHQ9bm8iKTsKKwogc3RhdGljIHVuc2lnbmVkIG5fcG9ydHMgPSAxOwogbW9kdWxlX3BhcmFtKG5fcG9ydHMsIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhuX3BvcnRzLCAibnVtYmVyIG9mIHBvcnRzIHRvIGNyZWF0ZSwgZGVmYXVsdD0xIik7CkBAIC0xMzksNiArMTQ1LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbl9wb3J0cyAmJiBzdGF0dXMgPT0gMDsgaSsrKSB7CiAJCWlmICh1c2VfYWNtKQogCQkJc3RhdHVzID0gYWNtX2JpbmRfY29uZmlnKGMsIGkpOworCQllbHNlIGlmICh1c2Vfb2JleCkKKwkJCXN0YXR1cyA9IG9iZXhfYmluZF9jb25maWcoYywgaSk7CiAJCWVsc2UKIAkJCXN0YXR1cyA9IGdzZXJfYmluZF9jb25maWcoYywgaSk7CiAJfQpAQCAtMTUxLDcgKzE1OSw2IEBACiAJLyogLmJDb25maWd1cmF0aW9uVmFsdWUgPSBmKHVzZV9hY20pICovCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogCS5ibUF0dHJpYnV0ZXMJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdzX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQpAQCAtMjQ5LDYgKzI1NiwxMiBAQAogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQ09NTTsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KIAkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19QUk9EVUNUX0lEKTsKKwl9IGVsc2UgaWYgKHVzZV9vYmV4KSB7CisJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkNEQyBPQkVYIGNvbmZpZyI7CisJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAzOworCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQ09NTTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfQ0RDX09CRVhfUFJPRFVDVF9JRCk7CiAJfSBlbHNlIHsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiR2VuZXJpYyBTZXJpYWwgY29uZmlnIjsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwppbmRleCBkYmQ1NzVhLi42Njk0OGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKQEAgLTg3Myw2ICs4NzMsMTMgQEAKIAkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOwogCQlkZXYtPnBvcnRfdXNiID0gbGluazsKIAkJbGluay0+aW9wb3J0ID0gZGV2OworCQlpZiAobmV0aWZfcnVubmluZyhkZXYtPm5ldCkpIHsKKwkJCWlmIChsaW5rLT5vcGVuKQorCQkJCWxpbmstPm9wZW4obGluayk7CisJCX0gZWxzZSB7CisJCQlpZiAobGluay0+Y2xvc2UpCisJCQkJbGluay0+Y2xvc2UobGluayk7CisJCX0KIAkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CiAKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oCmluZGV4IGFmMzkxMGQuLjMwMGYwZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oCkBAIC02Miw1ICs2Miw2IEBACiAvKiBmdW5jdGlvbnMgYXJlIGJvdW5kIHRvIGNvbmZpZ3VyYXRpb25zIGJ5IGEgY29uZmlnIG9yIGdhZGdldCBkcml2ZXIgKi8KIGludCBhY21fYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBwb3J0X251bSk7CiBpbnQgZ3Nlcl9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKTsKK2ludCBvYmV4X2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pOwogCiAjZW5kaWYgLyogX19VX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKaW5kZXggYjBmOGVkNS4uMGNiNTNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpAQCAtMzU4LDcgKzM1OCw4IEBACiAJc3RydWN0IHVzYl9idXMgKmJ1czsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIHByb3RlY3QgZmlsbGluZyBvZiBidWZmZXIgKi8KIAlzaXplX3QgY291bnQ7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBmaWxsZWQgaW50byBidWZmZXIgKi8KLQljaGFyICpwYWdlOworCWNoYXIgKm91dHB1dF9idWY7CisJc2l6ZV90IGFsbG9jX3NpemU7CiB9OwogCiAjZGVmaW5lIHNwZWVkX2NoYXIoaW5mbzEpICh7IGNoYXIgdG1wOyBcCkBAIC00ODgsOCArNDg5LDggQEAKIAogCWhjZCA9IGJ1c190b19oY2QoYnVmLT5idXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQluZXh0ID0gYnVmLT5wYWdlOwotCXNpemUgPSBQQUdFX1NJWkU7CisJbmV4dCA9IGJ1Zi0+b3V0cHV0X2J1ZjsKKwlzaXplID0gYnVmLT5hbGxvY19zaXplOwogCiAJKm5leHQgPSAwOwogCkBAIC01MTAsNyArNTExLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiBzdHJsZW4oYnVmLT5wYWdlKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zi0+b3V0cHV0X2J1Zik7CiB9CiAKICNkZWZpbmUgREJHX1NDSEVEX0xJTUlUIDY0CkBAIC01MzEsOCArNTMyLDggQEAKIAogCWhjZCA9IGJ1c190b19oY2QoYnVmLT5idXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQluZXh0ID0gYnVmLT5wYWdlOwotCXNpemUgPSBQQUdFX1NJWkU7CisJbmV4dCA9IGJ1Zi0+b3V0cHV0X2J1ZjsKKwlzaXplID0gYnVmLT5hbGxvY19zaXplOwogCiAJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInNpemUgPSAlZFxuIiwgZWhjaS0+cGVyaW9kaWNfc2l6ZSk7CiAJc2l6ZSAtPSB0ZW1wOwpAQCAtNTY4LDE0ICs1NjksMTYgQEAKIAkJCQlmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgc2Vlbl9jb3VudDsgdGVtcCsrKSB7CiAJCQkJCWlmIChzZWVuIFt0ZW1wXS5wdHIgIT0gcC5wdHIpCiAJCQkJCQljb250aW51ZTsKLQkJCQkJaWYgKHAucWgtPnFoX25leHQucHRyKQorCQkJCQlpZiAocC5xaC0+cWhfbmV4dC5wdHIpIHsKIAkJCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCiAJCQkJCQkJIiAuLi4iKTsKLQkJCQkJcC5wdHIgPSBOVUxMOworCQkJCQkJc2l6ZSAtPSB0ZW1wOworCQkJCQkJbmV4dCArPSB0ZW1wOworCQkJCQl9CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKiBzaG93IG1vcmUgaW5mbyB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KLQkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50ICYmIHAucHRyKSB7CisJCQkJaWYgKHRlbXAgPT0gc2Vlbl9jb3VudCkgewogCQkJCQl1MzIJc2NyYXRjaCA9IGhjMzJfdG9fY3B1cChlaGNpLAogCQkJCQkJCSZwLnFoLT5od19pbmZvMSk7CiAJCQkJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOwpAQCAtNjQ5LDcgKzY1Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAlrZnJlZSAoc2Vlbik7CiAKLQlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKKwlyZXR1cm4gYnVmLT5hbGxvY19zaXplIC0gc2l6ZTsKIH0KICN1bmRlZiBEQkdfU0NIRURfTElNSVQKIApAQCAtNjY1LDE0ICs2NjgsMTQgQEAKIAogCWhjZCA9IGJ1c190b19oY2QoYnVmLT5idXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKLQluZXh0ID0gYnVmLT5wYWdlOwotCXNpemUgPSBQQUdFX1NJWkU7CisJbmV4dCA9IGJ1Zi0+b3V0cHV0X2J1ZjsKKwlzaXplID0gYnVmLT5hbGxvY19zaXplOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgewogCQlzaXplID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAotCQkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkJImJ1cyAlcywgZGV2aWNlICVzXG4iCiAJCQkiJXNcbiIKIAkJCSJTVVNQRU5ERUQgKG5vIHJlZ2lzdGVyIGFjY2VzcylcbiIsCiAJCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLApAQCAtNjg0LDcgKzY4Nyw3IEBACiAJLyogQ2FwYWJpbGl0eSBSZWdpc3RlcnMgKi8KIAlpID0gSENfVkVSU0lPTihlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKLQkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJIiVzXG4iCiAJCSJFSENJICV4LiUwMngsIGhjZCBzdGF0ZSAlZFxuIiwKIAkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cy0+bmFtZSwKQEAgLTgwOCw3ICs4MTEsNyBAQAogZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7CisJcmV0dXJuIGJ1Zi0+YWxsb2Nfc2l6ZSAtIHNpemU7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IHVzYl9idXMgKmJ1cywKQEAgLTgyMiw2ICs4MjUsNyBAQAogCQlidWYtPmJ1cyA9IGJ1czsKIAkJYnVmLT5maWxsX2Z1bmMgPSBmaWxsX2Z1bmM7CiAJCW11dGV4X2luaXQoJmJ1Zi0+bXV0ZXgpOworCQlidWYtPmFsbG9jX3NpemUgPSBQQUdFX1NJWkU7CiAJfQogCiAJcmV0dXJuIGJ1ZjsKQEAgLTgzMSwxMCArODM1LDEwIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWJ1Zi0+cGFnZSkKLQkJYnVmLT5wYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPm91dHB1dF9idWYpCisJCWJ1Zi0+b3V0cHV0X2J1ZiA9IChjaGFyICopdm1hbGxvYyhidWYtPmFsbG9jX3NpemUpOwogCi0JaWYgKCFidWYtPnBhZ2UpIHsKKwlpZiAoIWJ1Zi0+b3V0cHV0X2J1ZikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC04NjcsNyArODcxLDcgQEAKIAltdXRleF91bmxvY2soJmJ1Zi0+bXV0ZXgpOwogCiAJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGxlbiwgb2Zmc2V0LAotCQkJCSAgICAgIGJ1Zi0+cGFnZSwgYnVmLT5jb3VudCk7CisJCQkJICAgICAgYnVmLT5vdXRwdXRfYnVmLCBidWYtPmNvdW50KTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC04NzksOCArODgzLDggQEAKIAlzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoYnVmKSB7Ci0JCWlmIChidWYtPnBhZ2UpCi0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLT5wYWdlKTsKKwkJaWYgKGJ1Zi0+b3V0cHV0X2J1ZikKKwkJCXZmcmVlKGJ1Zi0+b3V0cHV0X2J1Zik7CiAJCWtmcmVlKGJ1Zik7CiAJfQogCkBAIC04OTUsMTAgKzg5OSwxNCBAQAogCiBzdGF0aWMgaW50IGRlYnVnX3BlcmlvZGljX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLT5pX3ByaXZhdGUsCi0JCQkJCSAgZmlsbF9wZXJpb2RpY19idWZmZXIpOworCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZjsKKwlidWYgPSBhbGxvY19idWZmZXIoaW5vZGUtPmlfcHJpdmF0ZSwgZmlsbF9wZXJpb2RpY19idWZmZXIpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTsKKwlidWYtPmFsbG9jX3NpemUgPSAoc2l6ZW9mKHZvaWQgKikgPT0gNCA/IDYgOiA4KSpQQUdFX1NJWkU7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYnVmOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRlYnVnX3JlZ2lzdGVyc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDg0MDllMDcuLjE1YTgwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTU5LDcgKzYwLDYgQEAKICAqIHByb3ZpZGluZyBlYXJseSBkZXZpY2VzIGZvciB0aG9zZSBob3N0IGNvbnRyb2xsZXJzIHRvIHRhbGsgdG8hCiAgKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMTAgRGVjIDIwMDQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkRhdmlkIEJyb3duZWxsIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDIuMCAnRW5oYW5jZWQnIEhvc3QgQ29udHJvbGxlciAoRUhDSSkgRHJpdmVyIgogCkBAIC02MjAsOSArNjIwLDkgQEAKIAogCXRlbXAgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAllaGNpX2luZm8gKGVoY2ksCi0JCSJVU0IgJXguJXggc3RhcnRlZCwgRUhDSSAleC4lMDJ4LCBkcml2ZXIgJXMlc1xuIiwKKwkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMnglc1xuIiwKIAkJKChlaGNpLT5zYnJuICYgMHhmMCk+PjQpLCAoZWhjaS0+c2JybiAmIDB4MGYpLAotCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLCBEUklWRVJfVkVSU0lPTiwKKwkJdGVtcCA+PiA4LCB0ZW1wICYgMHhmZiwKIAkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7CiAKIAllaGNpX3dyaXRlbChlaGNpLCBJTlRSX01BU0ssCkBAIC03MDYsNyArNzA2LDcgQEAKIAkJcGNkX3N0YXR1cyA9IHN0YXR1czsKIAogCQkvKiByZXN1bWUgcm9vdCBodWI/ICovCi0JCWlmICghKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpICYgQ01EX1JVTikpCisJCWlmICghKGNtZCAmIENNRF9SVU4pKQogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAogCQl3aGlsZSAoaS0tKSB7CkBAIC03MTUsOCArNzE1LDExIEBACiAKIAkJCWlmIChwc3RhdHVzICYgUE9SVF9PV05FUikKIAkJCQljb250aW51ZTsKLQkJCWlmICghKHBzdGF0dXMgJiBQT1JUX1JFU1VNRSkKLQkJCQkJfHwgZWhjaS0+cmVzZXRfZG9uZSBbaV0gIT0gMCkKKwkJCWlmICghKHRlc3RfYml0KGksICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpICYmCisJCQkJCSgocHN0YXR1cyAmIFBPUlRfUkVTVU1FKSB8fAorCQkJCQkJIShwc3RhdHVzICYgUE9SVF9TVVNQRU5EKSkgJiYKKwkJCQkJKHBzdGF0dXMgJiBQT1JUX1BFKSAmJgorCQkJCQllaGNpLT5yZXNldF9kb25lW2ldID09IDApKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBzdGFydCAyMCBtc2VjIHJlc3VtZSBzaWduYWxpbmcgZnJvbSB0aGlzIHBvcnQsCkBAIC03MzEsOSArNzM0LDggQEAKIAogCS8qIFBDSSBlcnJvcnMgWzQuMTUuMi40XSAqLwogCWlmICh1bmxpa2VseSAoKHN0YXR1cyAmIFNUU19GQVRBTCkgIT0gMCkpIHsKLQkJZGJnX2NtZCAoZWhjaSwgImZhdGFsIiwgZWhjaV9yZWFkbChlaGNpLAotCQkJCQkJICAgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpKTsKLQkJZGJnX3N0YXR1cyAoZWhjaSwgImZhdGFsIiwgc3RhdHVzKTsKKwkJZGJnX2NtZChlaGNpLCAiZmF0YWwiLCBjbWQpOworCQlkYmdfc3RhdHVzKGVoY2ksICJmYXRhbCIsIHN0YXR1cyk7CiAJCWlmIChzdGF0dXMgJiBTVFNfSEFMVCkgewogCQkJZWhjaV9lcnIgKGVoY2ksICJmYXRhbCBlcnJvclxuIik7CiBkZWFkOgpAQCAtOTk0LDkgKzk5Niw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUgRFJJVkVSX0lORk8gRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9ERVNDCi0KLU1PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0lORk8pOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApAQCAtMTAyMCwxMSArMTAyMCw2IEBACiAjZGVmaW5lCVBTM19TWVNURU1fQlVTX0RSSVZFUglwczNfZWhjaV9kcml2ZXIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotI2luY2x1ZGUgImVoY2ktcHBjLXNvYy5jIgotI2RlZmluZQlQTEFURk9STV9EUklWRVIJCWVoY2lfcHBjX3NvY19kcml2ZXIKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YKICNpbmNsdWRlICJlaGNpLXBwYy1vZi5jIgogI2RlZmluZSBPRl9QTEFURk9STV9EUklWRVIJZWhjaV9oY2RfcHBjX29mX2RyaXZlcgpAQCAtMTA0OSw2ICsxMDQ0LDE2IEBACiB7CiAJaW50IHJldHZhbCA9IDA7CiAKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgRFJJVkVSX0RFU0MgIlxuIiwgaGNkX25hbWUpOworCXNldF9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKKwlpZiAodGVzdF9iaXQoVVNCX1VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKSB8fAorCQkJdGVzdF9iaXQoVVNCX09IQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyEgZWhjaV9oY2Qgc2hvdWxkIGFsd2F5cyBiZSBsb2FkZWQiCisJCQkJIiBiZWZvcmUgdWhjaV9oY2QgYW5kIG9oY2lfaGNkLCBub3QgYWZ0ZXJcbiIpOworCiAJcHJfZGVidWcoIiVzOiBibG9jayBzaXplczogcWggJVpkIHF0ZCAlWmQgaXRkICVaZCBzaXRkICVaZFxuIiwKIAkJIGhjZF9uYW1lLAogCQkgc2l6ZW9mKHN0cnVjdCBlaGNpX3FoKSwgc2l6ZW9mKHN0cnVjdCBlaGNpX3F0ZCksCkBAIC0xMDU2LDggKzEwNjEsMTAgQEAKIAogI2lmZGVmIERFQlVHCiAJZWhjaV9kZWJ1Z19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJlaGNpIiwgTlVMTCk7Ci0JaWYgKCFlaGNpX2RlYnVnX3Jvb3QpCi0JCXJldHVybiAtRU5PRU5UOworCWlmICghZWhjaV9kZWJ1Z19yb290KSB7CisJCXJldHZhbCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2RlYnVnOworCX0KICNlbmRpZgogCiAjaWZkZWYgUExBVEZPUk1fRFJJVkVSCkBAIC0xMTA0LDcgKzExMTEsOSBAQAogI2lmZGVmIERFQlVHCiAJZGVidWdmc19yZW1vdmUoZWhjaV9kZWJ1Z19yb290KTsKIAllaGNpX2RlYnVnX3Jvb3QgPSBOVUxMOworZXJyX2RlYnVnOgogI2VuZGlmCisJY2xlYXJfYml0KFVTQl9FSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KGVoY2lfaGNkX2luaXQpOwpAQCAtMTEyNiw2ICsxMTM1LDcgQEAKICNpZmRlZiBERUJVRwogCWRlYnVnZnNfcmVtb3ZlKGVoY2lfZGVidWdfcm9vdCk7CiAjZW5kaWYKKwljbGVhcl9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIH0KIG1vZHVsZV9leGl0KGVoY2lfaGNkX2NsZWFudXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggNzQwODM1Yi4uMjE4Zjk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMjM2LDEwICsyMzYsOCBAQAogCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+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+cG9sbF9yaCA9IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhvaGNpLCBjaGFuZ2VkLAotCQkJYW55X2Nvbm5lY3RlZCk7CisJCQlhbnlfY29ubmVjdGVkLCByaHNjX3N0YXR1cyk7CiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDUyMjE4NTYuLjkxNjk3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcigxKTsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19pbml0KCk7CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKIAotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJdXNiX2RjX2NrID0gY2xrX2dldCgwLCAidXNiX2RjX2NrIik7CiAJZWxzZQogCQl1c2JfZGNfY2sgPSBjbGtfZ2V0KDAsICJsYl9jayIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKaW5kZXggNjU4YTJhOS4uZTMwNmNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCkBAIC0zMzEsNyArMzMxLDcgQEAKIAogCWludCByZXQgPSAwLCBpcnE7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICIlczogIiBEUklWRVJfSU5GTyAiIChwbng0MDA4KVxuIiwgaGNkX25hbWUpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiAiIERSSVZFUl9ERVNDICIgKHBueDQwMDgpXG4iLCBoY2RfbmFtZSk7CiAJaWYgKHVzYl9kaXNhYmxlZCgpKSB7CiAJCWVycigiVVNCIGlzIGRpc2FibGVkIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCmluZGV4IGZhZjYyMmUuLjIyMjAxMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCkBAIC01NDAsMTUgKzU0MCw3IEBACiAgKiBCaWctZW5kaWFuIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGFyZSBhcmNoLXNwZWNpZmljLgogICogT3RoZXIgYXJjaGVzIGNhbiBiZSBhZGRlZCBpZi93aGVuIHRoZXkncmUgbmVlZGVkLgogICoKLSAqIFJFVklTSVQ6IGFyY2gvcG93ZXJwYyBub3cgaGFzIHJlYWRsL3dyaXRlbF9iZSwgc28gdGhlCi0gKiBkZWZpbml0aW9uIGJlbG93IGNhbiBkaWUgb25jZSB0aGUgU1RCMDR4eHggc3VwcG9ydCBpcwotICogZmluYWxseSBwb3J0ZWQgb3Zlci4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLSNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCWluX2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQotI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQlvdXRfYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIsIHZhbCkKLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfb2hjaV9yZWFkbCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLAogCQkJCQlfX2hjMzIgX19pb21lbSAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCBlYTcxMjZmLi5jMThkODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTY2LDcgKzY2LDcgQEAKIG1vZHVsZV9wYXJhbShlbmRpYW4sIHVzaG9ydCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuZGlhbiwgImRhdGEgZW5kaWFuOiBiaWc9MjU2LCBsaXR0bGU9MCAoZGVmYXVsdD0wKSIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaXJxX3NlbnNlID0gSU5UTDsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpcnFfc2Vuc2UgPSAweGZmOwogbW9kdWxlX3BhcmFtKGlycV9zZW5zZSwgdXNob3J0LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxX3NlbnNlLCAiSVJRIHNlbnNlOiBsb3cgbGV2ZWw9MzIsIGZhbGxpbmcgZWRnZT0wICIKIAkJIihkZWZhdWx0PTMyKSIpOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCBTQ0tFLCBTWVNDRkcwKTsKIAkJdG1wID0gcjhhNjY1OTdfcmVhZChyOGE2NjU5NywgU1lTQ0ZHMCk7CiAJCWlmIChpKysgPiAxMDAwKSB7Ci0JCQllcnIoInJlZ2lzdGVyIGFjY2VzcyBmYWlsLiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogcmVnaXN0ZXIgYWNjZXNzIGZhaWwuXG4iKTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KIAl9IHdoaWxlICgodG1wICYgU0NLRSkgIT0gU0NLRSk7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIFVTQkUsIFNZU0NGRzApOwogCQl0bXAgPSByOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBTWVNDRkcwKTsKIAkJaWYgKGkrKyA+IDEwMDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBVU0JFKSAhPSBVU0JFKTsKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQltc2xlZXAoMSk7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIFNZU0NGRzApOwogCQlpZiAoaSsrID4gNTAwKSB7Ci0JCQllcnIoInJlZ2lzdGVyIGFjY2VzcyBmYWlsLiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogcmVnaXN0ZXIgYWNjZXNzIGZhaWwuXG4iKTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KIAl9IHdoaWxlICgodG1wICYgU0NLRSkgIT0gU0NLRSk7CkBAIC0yNjUsNyArMjY1LDcgQEAKIAlpZiAocm9vdF9wb3J0KSB7CiAJCSpyb290X3BvcnQgPSAoZGV2cGF0aFswXSAmIDB4MEYpIC0gMTsKIAkJaWYgKCpyb290X3BvcnQgPj0gUjhBNjY1OTdfTUFYX1JPT1RfSFVCKQotCQkJZXJyKCJpbGxlZ2FsIHJvb3QgcG9ydCBudW1iZXIiKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IElsbGVnYWwgcm9vdCBwb3J0IG51bWJlci5cbiIpOwogCX0KIAlpZiAoaHViX3BvcnQpCiAJCSpodWJfcG9ydCA9IGRldnBhdGhbMl0gJiAweDBGOwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJCXVzYnNwZCA9IEhTTU9ERTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJ1bmtub3duIHNwZWVkIik7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHVua25vd24gc3BlZWRcbiIpOwogCQlicmVhazsKIAl9CiAKQEAgLTM4NSw3ICszODUsNyBAQAogCXN0cnVjdCByOGE2NjU5N19kZXZpY2UgKmRldjsKIAogCWlmIChpc19odWJfbGltaXQodXJiLT5kZXYtPmRldnBhdGgpKSB7Ci0JCWVycigiRXh0ZXJuZWwgaHViIGxpbWl0IHJlYWNoZWQuIik7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJFeHRlcm5hbCBodWIgbGltaXQgcmVhY2hlZC5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQwNiw4ICs0MDYsOSBAQAogCQlyZXR1cm4gYWRkcjsKIAl9CiAKLQllcnIoImNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIGEgVVNCIGRldmljZSBtb3JlIHRoYW4gMTAuKCV4KSIsCi0JICAgIHI4YTY2NTk3LT5hZGRyZXNzX21hcCk7CisJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJImNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIGEgVVNCIGRldmljZSBtb3JlIHRoYW4gMTAuKCV4KVxuIiwKKwkJcjhhNjY1OTctPmFkZHJlc3NfbWFwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQ3LDcgKzQ0OCw4IEBACiAJZG8gewogCQl0bXAgPSByOGE2NjU5N19yZWFkKHI4YTY2NTk3LCByZWcpOwogCQlpZiAoaSsrID4gMTAwMDAwMCkgewotCQkJZXJyKCJyZWdpc3RlciVseCwgbG9vcCAleCBpcyB0aW1lb3V0IiwgcmVnLCBsb29wKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHJlZ2lzdGVyJWx4LCBsb29wICV4ICIKKwkJCSAgICAgICAiaXMgdGltZW91dFxuIiwgcmVnLCBsb29wKTsKIAkJCWJyZWFrOwogCQl9CiAJCW5kZWxheSgxKTsKQEAgLTY3NSw3ICs2NzcsNyBAQAogCQkJYXJyYXlbaSsrXSA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiSWxsZWdhbCB0eXBlIik7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IElsbGVnYWwgdHlwZVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzA1LDcgKzcwNyw3IEBACiAJCXI4YTY2NTk3X3R5cGUgPSBSOEE2NjU5N19JU087CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiSWxsZWdhbCB0eXBlIik7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IElsbGVnYWwgdHlwZVxuIik7CiAJCXI4YTY2NTk3X3R5cGUgPSAweDAwMDA7CiAJCWJyZWFrOwogCX0KQEAgLTcyNCw3ICs3MjYsNyBAQAogCWVsc2UgaWYgKGNoZWNrX2ludGVycnVwdChwaXBlbnVtKSkKIAkJYnVmbnVtID0gNCArIChwaXBlbnVtIC0gNik7CiAJZWxzZQotCQllcnIoIklsbGVnYWwgcGlwZW51bSAoJWQpIiwgcGlwZW51bSk7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IElsbGVnYWwgcGlwZW51bSAoJWQpXG4iLCBwaXBlbnVtKTsKIAogCXJldHVybiBidWZudW07CiB9CkBAIC03NDAsNyArNzQyLDcgQEAKIAllbHNlIGlmIChjaGVja19pbnRlcnJ1cHQocGlwZW51bSkpCiAJCWJ1Zl9ic2l6ZSA9IDA7CiAJZWxzZQotCQllcnIoIklsbGVnYWwgcGlwZW51bSAoJWQpIiwgcGlwZW51bSk7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IElsbGVnYWwgcGlwZW51bSAoJWQpXG4iLCBwaXBlbnVtKTsKIAogCXJldHVybiBidWZfYnNpemU7CiB9CkBAIC03NjAsMTAgKzc2MiwxMiBAQAogCQkJaWYgKChyOGE2NjU5Ny0+ZG1hX21hcCAmICgxIDw8IGkpKSAhPSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpbmZvKCJhZGRyZXNzICVkLCBFbmRwb2ludEFkZHJlc3MgMHglMDJ4IHVzZSBETUEgRklGTyIsCi0JCQkgICAgIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCi0JCQkgICAgIGluZm8tPmRpcl9pbiA/IFVTQl9FTkRQT0lOVF9ESVJfTUFTSyArIGluZm8tPmVwbnVtCi0JCQkJCSAgICA6IGluZm8tPmVwbnVtKTsKKwkJCWRldl9pbmZvKCZkZXYtPnVkZXYtPmRldiwKKwkJCQkgImFkZHJlc3MgJWQsIEVuZHBvaW50QWRkcmVzcyAweCUwMnggdXNlICIKKwkJCQkgIkRNQSBGSUZPXG4iLCB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLAorCQkJCSBpbmZvLT5kaXJfaW4gPworCQkJCSAJVVNCX0VORFBPSU5UX0RJUl9NQVNLICsgaW5mby0+ZXBudW0KKwkJCQkJOiBpbmZvLT5lcG51bSk7CiAKIAkJCXI4YTY2NTk3LT5kbWFfbWFwIHw9IDEgPDwgaTsKIAkJCWRldi0+ZG1hX21hcCB8PSAxIDw8IGk7CkBAIC0xMTg3LDcgKzExOTEsNyBAQAogCQlwcmVwYXJlX3N0YXR1c19wYWNrZXQocjhhNjY1OTcsIHRkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJpbnZhbGlkIHR5cGUuIik7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IGludmFsaWQgdHlwZS5cbiIpOwogCQlicmVhazsKIAl9CiAKQEAgLTEyOTUsNyArMTI5OSw3IEBACiAJaWYgKHVubGlrZWx5KCh0bXAgJiBGUkRZKSA9PSAwKSkgewogCQlwaXBlX3N0b3AocjhhNjY1OTcsIHRkLT5waXBlKTsKIAkJcGlwZV9pcnFfZGlzYWJsZShyOGE2NjU5NywgcGlwZW51bSk7Ci0JCWVycigiaW4gZmlmbyBub3QgcmVhZHkgKCVkKSIsIHBpcGVudW0pOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBpbiBmaWZvIG5vdCByZWFkeSAoJWQpXG4iLCBwaXBlbnVtKTsKIAkJZmluaXNoX3JlcXVlc3QocjhhNjY1OTcsIHRkLCBwaXBlbnVtLCB0ZC0+dXJiLCAtRVBJUEUpOwogCQlyZXR1cm47CiAJfQpAQCAtMTM3MCw3ICsxMzc0LDcgQEAKIAlpZiAodW5saWtlbHkoKHRtcCAmIEZSRFkpID09IDApKSB7CiAJCXBpcGVfc3RvcChyOGE2NjU5NywgdGQtPnBpcGUpOwogCQlwaXBlX2lycV9kaXNhYmxlKHI4YTY2NTk3LCBwaXBlbnVtKTsKLQkJZXJyKCJvdXQgd3JpdGUgZmlmbyBub3QgcmVhZHkuICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5Nzogb3V0IGZpZm8gbm90IHJlYWR5ICglZClcbiIsIHBpcGVudW0pOwogCQlmaW5pc2hfcmVxdWVzdChyOGE2NjU5NywgdGQsIHBpcGVudW0sIHVyYiwgLUVQSVBFKTsKIAkJcmV0dXJuOwogCX0KQEAgLTIwMDUsNyArMjAwOSw3IEBACiAJCXJldHVybiBkZXY7CiAJfQogCi0JZXJyKCJnZXRfcjhhNjY1OTdfZGV2aWNlIGZhaWwuKCVkKVxuIiwgYWRkcik7CisJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogZ2V0X3I4YTY2NTk3X2RldmljZSBmYWlsLiglZClcbiIsIGFkZHIpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yMjYzLDcgKzIyNjcsNyBAQAogI2RlZmluZSByZXNvdXJjZV9sZW4ocikgKCgociktPmVuZCAtIChyKS0+c3RhcnQpICsgMSkKIHN0YXRpYyBpbnQgX19pbml0IHI4YTY2NTk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTCwgKmlyZXM7CiAJaW50IGlycSA9IC0xOwogCXZvaWQgX19pb21lbSAqcmVnID0gTlVMTDsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gTlVMTDsKQEAgLTIyNzQsNyArMjI3OCw3IEBACiAKIAlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWVycigiZG1hIG5vdCBzdXBwb3J0Iik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImRtYSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKQEAgLTIyODIsMjEgKzIyODYsMjUgQEAKIAkJCQkJICAgKGNoYXIgKiloY2RfbmFtZSk7CiAJaWYgKCFyZXMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZXJyKCJwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lIGVycm9yLiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lIGVycm9yLlxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCi0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCkgeworCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJlcykgewogCQlyZXQgPSAtRU5PREVWOwotCQllcnIoInBsYXRmb3JtX2dldF9pcnEgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJwbGF0Zm9ybV9nZXRfcmVzb3VyY2UgSU9SRVNPVVJDRV9JUlEgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKKwlpcnEgPSBpcmVzLT5zdGFydDsKKwlpcnFfdHJpZ2dlciA9IGlyZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CisKIAlyZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX2xlbihyZXMpKTsKIAlpZiAocmVnID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZXJyKCJpb3JlbWFwIGVycm9yLiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGVycm9yLlxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCkBAIC0yMzA0LDcgKzIzMTIsNyBAQAogCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZyOGE2NjU5N19oY19kcml2ZXIsICZwZGV2LT5kZXYsIChjaGFyICopaGNkX25hbWUpOwogCWlmICghaGNkKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWVycigiRmFpbGVkIHRvIGNyZWF0ZSBoY2QiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBoY2RcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIAlyOGE2NjU5NyA9IGhjZF90b19yOGE2NjU5NyhoY2QpOwpAQCAtMjMyOSwxMyArMjMzNywzMyBAQAogCUlOSVRfTElTVF9IRUFEKCZyOGE2NjU5Ny0+Y2hpbGRfZGV2aWNlKTsKIAogCWhjZC0+cnNyY19zdGFydCA9IHJlcy0+c3RhcnQ7Ci0JaWYgKGlycV9zZW5zZSA9PSBJTlRMKQotCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9MT1c7Ci0JZWxzZQotCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9GQUxMSU5HOworCisJLyogaXJxX3NlbnNlIHNldHRpbmcgb24gY21kbGluZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcmVzb3VyY2UKKwkgKiBzZXR0aW5ncywgc28gdGhlIGludHJvZHVjdGlvbiBvZiBpcnFmbGFncyBpbiBJUlEgcmVzb3Vyc2UKKwkgKiB3b24ndCBkaXN0dXJiIGV4aXN0aW5nIHNldHVwcyAqLworCXN3aXRjaCAoaXJxX3NlbnNlKSB7CisJCWNhc2UgSU5UTDoKKwkJCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0xPVzsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9GQUxMSU5HOworCQkJYnJlYWs7CisJCWNhc2UgMHhmZjoKKwkJCWlmIChpcnFfdHJpZ2dlcikKKwkJCQlpcnFfc2Vuc2UgPSAoaXJxX3RyaWdnZXIgJiBJUlFGX1RSSUdHRVJfTE9XKSA/CisJCQkJCSAgICBJTlRMIDogMDsKKwkJCWVsc2UgeworCQkJCWlycV9zZW5zZSA9IElOVEw7CisJCQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfTE9XOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmtub3duIGlycV9zZW5zZSB2YWx1ZS5cbiIpOworCX0KKwogCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgaXJxX3RyaWdnZXIpOwogCWlmIChyZXQgIT0gMCkgewotCQllcnIoIkZhaWxlZCB0byBhZGQgaGNkIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgaGNkXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKQEAgLTIzNjQsNyArMjM5Miw4IEBACiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWluZm8oImRyaXZlciAlcywgJXMiLCBoY2RfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogZHJpdmVyICVzLCAlc1xuIiwgaGNkX25hbWUsCisJICAgICAgIERSSVZFUl9WRVJTSU9OKTsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyOGE2NjU5N19kcml2ZXIpOwogfQogbW9kdWxlX2luaXQocjhhNjY1OTdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCA4YTc0YmJiLi5lMTA2ZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTE2MjAsMjIgKzE2MjAsMjYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSphZGRyLCAqZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSphZGRyLCAqZGF0YSwgKmlyZXM7CiAJaW50CQkJaXJxOwogCXZvaWQgX19pb21lbQkJKmFkZHJfcmVnOwogCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOwogCWludAkJCXJldHZhbDsKIAl1OAkJCXRtcCwgaW9hZGRyID0gMDsKKwl1bnNpZ25lZCBsb25nCQlpcnFmbGFnczsKIAogCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgZmlyc3QuICBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljIHNob3VsZAogCSAqIGhhdmUgaW5pdGlhbGl6ZWQgdGhlc2UgdGhyZWUgcmVzb3VyY2VzIGFuZCBwcm9iYWJseSBib2FyZAogCSAqIHNwZWNpZmljIHBsYXRmb3JtX2RhdGEuICB3ZSBkb24ndCBwcm9iZSBmb3IgSVJRcywgYW5kIGRvIG9ubHkKIAkgKiBtaW5pbWFsIHNhbml0eSBjaGVja2luZy4KIAkgKi8KLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7Ci0JaWYgKGRldi0+bnVtX3Jlc291cmNlcyA8IDMgfHwgaXJxIDwgMCkKKwlpcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChkZXYtPm51bV9yZXNvdXJjZXMgPCAzIHx8ICFpcmVzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlycSA9IGlyZXMtPnN0YXJ0OworCWlycWZsYWdzID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKwogCS8qIHJlZnVzZSB0byBjb25mdXNlIHVzYmNvcmUgKi8KIAlpZiAoZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJREJHKCJubyB3ZSB3b24ndCBkbWFcbiIpOwpAQCAtMTcxNyw4ICsxNzIxLDExIEBACiAJICogdHJpZ2dlcnMgKGUuZy4gbW9zdCBBUk0gQ1BVcykuICBJbml0aWFsIGRyaXZlciBzdHJlc3MgdGVzdGluZwogCSAqIHdhcyBvbiBhIHN5c3RlbSB3aXRoIHNpbmdsZSBlZGdlIHRyaWdnZXJpbmcsIHNvIG1vc3Qgc29ydHMgb2YKIAkgKiB0cmlnZ2VyaW5nIGFycmFuZ2VtZW50IHNob3VsZCB3b3JrLgorCSAqCisJICogVXNlIHJlc291cmNlIElSUSBmbGFncyBpZiBzZXQgYnkgcGxhdGZvcm0gZGV2aWNlIHNldHVwLgogCSAqLwotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOworCWlycWZsYWdzIHw9IElSUUZfU0hBUkVEOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgaXJxZmxhZ3MpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggM2E3YmZlNy4uY2Y1ZTRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtNTMsNyArNTMsNiBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjMuMCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTGludXMgJ0Zyb2RvIFJhYmJpdCcgVG9ydmFsZHMsIEpvaGFubmVzIEVyZGZlbHQsIFwKIFJhbmR5IER1bmxhcCwgR2VvcmcgQWNoZXIsIERldGkgRmxpZWdsLCBUaG9tYXMgU2FpbGVyLCBSb21hbiBXZWlzc2dhZXJiZXIsIFwKIEFsYW4gU3Rlcm4iCkBAIC05NTEsMTIgKzk1MCwxMyBAQAogewogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiVzXG4iLAotCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7Ci0KIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcHJpbnRrKEtFUk5fSU5GTyAidWhjaV9oY2Q6ICIgRFJJVkVSX0RFU0MgIiVzXG4iLAorCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7CisJc2V0X2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOworCiAJaWYgKERFQlVHX0NPTkZJR1VSRUQpIHsKIAkJZXJyYnVmID0ga21hbGxvYyhFUlJCVUZfTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFlcnJidWYpCkBAIC05ODgsNiArOTg4LDcgQEAKIAogZXJyYnVmX2ZhaWxlZDoKIAorCWNsZWFyX2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk5Nyw2ICs5OTgsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCk7CiAJZGVidWdmc19yZW1vdmUodWhjaV9kZWJ1Z2ZzX3Jvb3QpOwogCWtmcmVlKGVycmJ1Zik7CisJY2xlYXJfYml0KFVTQl9VSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiAKIG1vZHVsZV9pbml0KHVoY2lfaGNkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggMWYwYzJjZi4uNTYzMWQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC0xMDY1LDEzICsxMDY1LDE4IEBACiAJCX0KIAkJaWYgKGV4cG9uZW50IDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlxaC0+cGVyaW9kID0gMSA8PCBleHBvbmVudDsKLQkJcWgtPnNrZWwgPSBTS0VMX0lOREVYKGV4cG9uZW50KTsKIAotCQkvKiBGb3Igbm93LCBpbnRlcnJ1cHQgcGhhc2UgaXMgZml4ZWQgYnkgdGhlIGxheW91dAotCQkgKiBvZiB0aGUgUUggbGlzdHMuICovCi0JCXFoLT5waGFzZSA9IChxaC0+cGVyaW9kIC8gMikgJiAoTUFYX1BIQVNFIC0gMSk7Ci0JCXJldCA9IHVoY2lfY2hlY2tfYmFuZHdpZHRoKHVoY2ksIHFoKTsKKwkJLyogSWYgdGhlIHNsb3QgaXMgZnVsbCwgdHJ5IGEgbG93ZXIgcGVyaW9kICovCisJCWRvIHsKKwkJCXFoLT5wZXJpb2QgPSAxIDw8IGV4cG9uZW50OworCQkJcWgtPnNrZWwgPSBTS0VMX0lOREVYKGV4cG9uZW50KTsKKworCQkJLyogRm9yIG5vdywgaW50ZXJydXB0IHBoYXNlIGlzIGZpeGVkIGJ5IHRoZSBsYXlvdXQKKwkJCSAqIG9mIHRoZSBRSCBsaXN0cy4KKwkJCSAqLworCQkJcWgtPnBoYXNlID0gKHFoLT5wZXJpb2QgLyAyKSAmIChNQVhfUEhBU0UgLSAxKTsKKwkJCXJldCA9IHVoY2lfY2hlY2tfYmFuZHdpZHRoKHVoY2ksIHFoKTsKKwkJfSB3aGlsZSAocmV0ICE9IDAgJiYgLS1leHBvbmVudCA+PSAwKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmIChxaC0+cGVyaW9kID4gdXJiLT5pbnRlcnZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggMGZiMTE0Yy4uODc4Yzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTM1NSwxMyArMzU1LDE0IEBACiAJaWYgKG1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk+MCkKIAl7CiAJCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKLQkJZXJyICgidGltZW91dCB3YWl0aW5nIGZvciBjYW1lcmEuIik7CisJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIGNhbWVyYS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCQogCWlmIChtZGM4MDAtPnN0YXRlID09IE5PVF9DT05ORUNURUQpCiAJewotCQl3YXJuICgiQ2FtZXJhIGdldHMgZGlzY29ubmVjdGVkIGR1cmluZyB3YWl0aW5nIGZvciBpcnEuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kYzgwMDogQ2FtZXJhIGdldHMgZGlzY29ubmVjdGVkICIKKwkJICAgICAgICJkdXJpbmcgd2FpdGluZyBmb3IgaXJxLlxuIik7CiAJCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKIAkJcmV0dXJuIC0yOwogCX0KQEAgLTM3OSw3ICszODAsOCBAQAogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAogCWlmIChzdGF0dXMgIT0gMCkKLQkJZXJyICgid3JpdGluZyBjb21tYW5kIGZhaWxzIChzdGF0dXM9JWkpIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCSJ3cml0aW5nIGNvbW1hbmQgZmFpbHMgKHN0YXR1cz0laSlcbiIsIHN0YXR1cyk7CiAJZWxzZQogCQltZGM4MDAtPnN0YXRlPVJFQURZOwogCW1kYzgwMC0+d3JpdHRlbiA9IDE7CkBAIC00MDYsNyArNDA4LDggQEAKIAkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CiAJCX0KIAl9IGVsc2UgewotCQllcnIgKCJyZXF1ZXN0IGJ5dGVzIGZhaWxzIChzdGF0dXM6JWkpIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCSJyZXF1ZXN0IGJ5dGVzIGZhaWxzIChzdGF0dXM6JWkpXG4iLCBzdGF0dXMpOwogCX0KIAltZGM4MDAtPmRvd25sb2FkZWQgPSAxOwogCXdha2VfdXAgKCZtZGM4MDAtPmRvd25sb2FkX3dhaXQpOwpAQCAtNDQzLDEzICs0NDYsMTQgQEAKIAogCWlmIChtZGM4MDAtPmRldiAhPSBOVUxMKQogCXsKLQkJd2FybiAoIm9ubHkgb25lIE11c3RlayBNREM4MDAgaXMgc3VwcG9ydGVkLiIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAib25seSBvbmUgTXVzdGVrIE1EQzgwMCBpcyBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKIAl7Ci0JCWVyciAoInByb2JlIGZhaWxzIC0+IHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uIik7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJwcm9iZSBmYWlscyAtPiB3cm9uZyBOdW1iZXIgb2YgQ29uZmlndXJhdGlvblxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpbnRmX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKQEAgLTQ2MSw3ICs0NjUsNyBAQAogCQl8fCAoIGludGZfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDQpCiAJKQogCXsKLQkJZXJyICgicHJvYmUgZmFpbHMgLT4gd3JvbmcgSW50ZXJmYWNlIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgInByb2JlIGZhaWxzIC0+IHdyb25nIEludGVyZmFjZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDgyLDE5ICs0ODYsMTkgQEAKIAkJfQogCQlpZiAobWRjODAwLT5lbmRwb2ludFtpXSA9PSAtMSkKIAkJewotCQkJZXJyICgicHJvYmUgZmFpbHMgLT4gV3JvbmcgRW5kcG9pbnRzLiIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAicHJvYmUgZmFpbHMgLT4gV3JvbmcgRW5kcG9pbnRzLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIAogCi0JaW5mbyAoIkZvdW5kIE11c3RlayBNREM4MDAgb24gVVNCLiIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi5cbiIpOwogCiAJbXV0ZXhfbG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJm1kYzgwMF9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIgKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTU3MCw3ICs1NzQsNyBAQAogCQltZGM4MDAtPmRldiA9IE5VTEw7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJfQotCWluZm8gKCJNdXN0ZWsgTURDODAwIGRpc2Nvbm5lY3RlZCBmcm9tIFVTQi4iKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTXVzdGVrIE1EQzgwMCBkaXNjb25uZWN0ZWQgZnJvbSBVU0IuXG4iKTsKIH0KIAogCkBAIC02NDQsNyArNjQ4LDggQEAKIAltZGM4MDAtPmlycV91cmItPmRldiA9IG1kYzgwMC0+ZGV2OwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPmlycV91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS4iLCByZXR2YWwpOworCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJInJlcXVlc3QgVVNCIGlycSBmYWlscyAoc3VibWl0X3JldHZhbD0laSkuXG4iLCByZXR2YWwpOwogCQllcnJuID0gLUVJTzsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQpAQCAtNzAxLDcgKzcwNiw4IEBACiAJfQogCWlmIChtZGM4MDAtPnN0YXRlID09IFdPUktJTkcpCiAJewotCQl3YXJuICgiSWxsZWdhbCBTdGF0ZSBcIndvcmtpbmdcIiByZWFjaGVkIGR1cmluZyByZWFkID8hIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kYzgwMDogSWxsZWdhbCBTdGF0ZSBcIndvcmtpbmdcIiIKKwkJICAgICAgICJyZWFjaGVkIGR1cmluZyByZWFkID8hXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTczMyw3ICs3MzksOSBAQAogCQkJCW1kYzgwMC0+ZG93bmxvYWRfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKIAkJCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLT5kb3dubG9hZF91cmIsIEdGUF9LRVJORUwpOwogCQkJCWlmIChyZXR2YWwpIHsKLQkJCQkJZXJyICgiQ2FuJ3Qgc3VibWl0IGRvd25sb2FkIHVyYiAocmV0dmFsPSVpKSIscmV0dmFsKTsKKwkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJCSJDYW4ndCBzdWJtaXQgZG93bmxvYWQgdXJiICIKKwkJCQkJCSIocmV0dmFsPSVpKVxuIiwgcmV0dmFsKTsKIAkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQlyZXR1cm4gbGVuLWxlZnQ7CiAJCQkJfQpAQCAtNzQyLDcgKzc1MCwxMCBAQAogCQkJCW1kYzgwMC0+ZG93bmxvYWRlZCA9IDA7CiAJCQkJaWYgKG1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMgIT0gMCkKIAkJCQl7Ci0JCQkJCWVyciAoInJlcXVlc3QgZG93bmxvYWQtYnl0ZXMgZmFpbHMgKHN0YXR1cz0laSkiLG1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMpOworCQkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkJInJlcXVlc3QgZG93bmxvYWQtYnl0ZXMgZmFpbHMgIgorCQkJCQkJIihzdGF0dXM9JWkpXG4iLAorCQkJCQkJbWRjODAwLT5kb3dubG9hZF91cmItPnN0YXR1cyk7CiAJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJcmV0dXJuIGxlbi1sZWZ0OwogCQkJCX0KQEAgLTgzOSw3ICs4NTAsOCBAQAogCiAJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0dFVF9SRUFEWSkpCiAJCQl7Ci0JCQkJZXJyICgiQ2FtZXJhIGRpZG4ndCBnZXQgcmVhZHkuXG4iKTsKKwkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkiQ2FtZXJhIGRpZG4ndCBnZXQgcmVhZHkuXG4iKTsKIAkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC04NTEsNyArODYzLDkgQEAKIAkJCW1kYzgwMC0+d3JpdGVfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKIAkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0dmFsKSB7Ci0JCQkJZXJyICgic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgKHJldHZhbD0laSkiLCByZXR2YWwpOworCQkJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkJCSJzdWJtaXR0aW5nIHdyaXRlIHVyYiBmYWlscyAiCisJCQkJCSIocmV0dmFsPSVpKVxuIiwgcmV0dmFsKTsKIAkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC04NzAsNyArODg0LDkgQEAKIAkJCQljYXNlIDB4M2U6IC8qIFRha2Ugc2hvdCBpbiBGaW5lIE1vZGUgKFdDYW0gTW9kZSkgKi8KIAkJCQkJaWYgKG1kYzgwMC0+cGljX2xlbiA8IDApCiAJCQkJCXsKLQkJCQkJCWVyciAoImNhbGwgMHgwNyBiZWZvcmUgMHgwNSwweDNlIik7CisJCQkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkJCSJjYWxsIDB4MDcgYmVmb3JlICIKKwkJCQkJCQkiMHgwNSwweDNlXG4iKTsKIAkJCQkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CiAJCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCQlyZXR1cm4gLUVJTzsKQEAgLTg5MCw3ICs5MDYsNyBAQAogCiAJCQkJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgxLFRPX1JFQURfRlJPTV9JUlEpKQogCQkJCQkJewotCQkJCQkJCWVyciAoInJlcXVlc3RpbmcgYW5zd2VyIGZyb20gaXJxIGZhaWxzIik7CisJCQkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwgInJlcXVlc3RpbmcgYW5zd2VyIGZyb20gaXJxIGZhaWxzXG4iKTsKIAkJCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCQkJcmV0dXJuIC1FSU87CiAJCQkJCQl9CkBAIC05MTgsNyArOTM0LDcgQEAKIAkJCQkJewogCQkJCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19ERUZBVUxUX0NPTU1BTkQpKQogCQkJCQkJewotCQkJCQkJCWVyciAoIkNvbW1hbmQgVGltZW91dC4iKTsKKwkJCQkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LCAiQ29tbWFuZCBUaW1lb3V0LlxuIik7CiAJCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJCXJldHVybiAtRUlPOwogCQkJCQkJfQpAQCAtMTAxOCw3ICsxMDM0LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfb25fZmFpbDsKIAotCWluZm8gKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC0xMDI4LDcgKzEwNDUsNyBAQAogCiAJaWYgKG1kYzgwMCAhPSBOVUxMKQogCXsKLQkJZXJyICgiY2FuJ3QgYWxsb2MgbWVtb3J5ISIpOworCQlwcmludGsoS0VSTl9FUlIgIm1kYzgwMDogY2FuJ3QgYWxsb2MgbWVtb3J5IVxuIik7CiAKIAkJa2ZyZWUobWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyKTsKIAkJa2ZyZWUobWRjODAwLT53cml0ZV91cmJfYnVmZmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwppbmRleCA0ZWE1MGUwLi5lNDYzZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC00Miw2ICs0MiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFkdXR1eC4KIAorY29uZmlnIFVTQl9TRVZTRUcKKwl0cmlzdGF0ZSAiVVNCIDctU2VnbWVudCBMRUQgRGlzcGxheSIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBVU0IgNy1TZWdtZW50IERpc3BsYXkgYnkgRGVsY29tCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYnNldnNlZy4KKwogY29uZmlnIFVTQl9SSU81MDAKIAl0cmlzdGF0ZSAiVVNCIERpYW1vbmQgUmlvNTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKQEAgLTI3MSwzICsyODAsMTggQEAKIAkgIFRoZSBmaXJtd2FyZSBmb3IgdGhpcyBkcml2ZXIgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgTWFjT1MKIAkgIGRyaXZlciBiZWZvcmVoYW5kLiBUb29scyBmb3IgZG9pbmcgc28gYXJlIGF2YWlsYWJsZSBhdAogCSAgaHR0cDovL2JlcnNhY2UwMy5mcmVlLmZyCisKK2NvbmZpZyBVU0JfVlNUCisJdHJpc3RhdGUgIlVTQiBWU1QgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgZm9yIFZlcm5pZXIgU29mdHdhcmUgVGVjaG5vbG9naWVzCisJICBidWxrIHVzYiBkZXZpY2VzIHN1Y2ggYXMgdGhlaXIgT2NlYW4tT3B0aWNzIHNwZWN0cm9tZXRlcnMgb3IKKwkgIExhYnF1ZXN0LgorCSAgSXQgaXMgYSBidWxrIGNoYW5uZWwgZHJpdmVyIHdpdGggY29uZmlndXJhYmxlIHJlYWQgYW5kIHdyaXRlCisJICB0aW1lb3V0cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnN0dXNiLgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCmluZGV4IDQ1YjRlMTIuLjEzMzRmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsOCBAQAogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCiBvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKQkrPSB0cmFuY2V2aWJyYXRvci5vCiBvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gdXNzNzIwLm8KK29iai0kKENPTkZJR19VU0JfU0VWU0VHKQkrPSB1c2JzZXZzZWcubworb2JqLSQoQ09ORklHX1VTQl9WU1QpCQkrPSB2c3R1c2IubwogCiBvYmotJChDT05GSUdfVVNCX1NJU1VTQlZHQSkJKz0gc2lzdXNidmdhLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwppbmRleCA5NjVmNmVhLi43YjY5MjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKQEAgLTI4Myw4ICsyODMsOCBAQAogCiAJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZhZHVfZHJpdmVyLCBzdWJtaW5vcik7CiAJaWYgKCFpbnRlcmZhY2UpIHsKLQkJZXJyKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAotCQkgICAgX19mdW5jX18sIHN1Ym1pbm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhZHV0dXg6ICVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciAiCisJCSAgICAgICAibWlub3IgJWRcbiIsIF9fZnVuY19fLCBzdWJtaW5vcik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXhpdF9ub19kZXZpY2U7CiAJfQpAQCAtNDE2LDcgKzQxNiw4IEBACiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCiAJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgImFkdXR1eDogTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC01NzYsNyArNTc3LDggQEAKIAkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KIAlpZiAoZGV2LT51ZGV2ID09IE5VTEwpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZXJyKCJObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZCIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiAiYWR1dHV4OiBObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZFxuIiwKKwkJICAgICAgIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTY0NSw3ICs2NDcsOCBAQAogCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0dmFsIDwgMCkgewogCQkJCWRldi0+b3V0X3VyYl9maW5pc2hlZCA9IDE7Ci0JCQkJZXJyKCJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X291dF91cmIgJWQiLCByZXR2YWwpOworCQkJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiQ291bGRuJ3Qgc3VibWl0ICIKKwkJCQkJImludGVycnVwdF9vdXRfdXJiICVkXG4iLCByZXR2YWwpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIApAQCAtODkwLDEzICs4OTMsMTQgQEAKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhZHVfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gIgotCQkgICAgIkVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiAidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICJfX0ZJTEVfXworCQkgICAgICAgIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgcmVzdWx0KTsKIAkJZ290byBleGl0OwogCX0KIAotCWluZm8oImFkdXR1eCAiIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7Ci0JaW5mbygiYWR1dHV4IGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIuIFVzZSBhdCB5b3VyIG93biByaXNrIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYWR1dHV4ICIgRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gImFkdXR1eCBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyLiAiCisJICAgICAgICJVc2UgYXQgeW91ciBvd24gcmlza1xuIik7CiAKIGV4aXQ6CiAJZGJnKDIsIiAlcyA6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IGEwNzZjMjQuLjFkOGUzOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtMTMwLDcgKzEzMCw4IEBACiBleGl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBkYXRhLT51cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCWRldl9lcnIoJnBkYXRhLT51ZGV2LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIAl9CiB9CkBAIC0yMjAsNyArMjIxLDcgQEAKIAkJfQogCX0KIAlpZiAoIWludF9pbl9lbmRwb2ludEFkZHIpIHsKLQkJZXJyKCJDb3VsZCBub3QgZmluZCBpbnQtaW4gZW5kcG9pbnQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGludC1pbiBlbmRwb2ludFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjI4LDcgKzIyOSw3IEBACiAJcGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXBwbGVkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjQxLDggKzI0Miw4IEBACiAJcGRhdGEtPm1zZ2RhdGEgPSBrbWFsbG9jKEFDRF9NU0dfQlVGRkVSX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YS0+bXNnZGF0YSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQllcnIoImFwcGxlZGlzcGxheTogQWxsb2NhdGluZyBidWZmZXIgZm9yIGNvbnRyb2wgbWVzc2FnZXMgIgotCQkJImZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LAorCQkJIkFsbG9jYXRpbmcgYnVmZmVyIGZvciBjb250cm9sIG1lc3NhZ2VzIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTAsNyArMjUxLDcgQEAKIAlwZGF0YS0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBkYXRhLT51cmIpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEFsbG9jYXRpbmcgVVJCIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQWxsb2NhdGluZyBVUkIgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI1OSw3ICsyNjAsNyBAQAogCQlHRlBfS0VSTkVMLCAmcGRhdGEtPnVyYi0+dHJhbnNmZXJfZG1hKTsKIAlpZiAoIXBkYXRhLT51cmJkYXRhKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBBbGxvY2F0aW5nIFVSQiBidWZmZXIgZmFpbGVkIik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJBbGxvY2F0aW5nIFVSQiBidWZmZXIgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI3MCw3ICsyNzEsNyBAQAogCQlwZGF0YSwgMSk7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKHBkYXRhLT51cmIsIEdGUF9LRVJORUwpKSB7CiAJCXJldHZhbCA9IC1FSU87Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBTdWJtaXR0aW5nIFVSQiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIlN1Ym1pdHRpbmcgVVJCIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yODAsNyArMjgxLDcgQEAKIAlwZGF0YS0+YmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGJsX25hbWUsIE5VTEwsIHBkYXRhLAogCQkJCQkJJmFwcGxlZGlzcGxheV9ibF9kYXRhKTsKIAlpZiAoSVNfRVJSKHBkYXRhLT5iZCkpIHsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkIik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yOTEsNyArMjkyLDggQEAKIAogCWlmIChicmlnaHRuZXNzIDwgMCkgewogCQlyZXR2YWwgPSBicmlnaHRuZXNzOwotCQllcnIoImFwcGxlZGlzcGxheTogRXJyb3Igd2hpbGUgZ2V0dGluZyBpbml0aWFsIGJyaWdodG5lc3M6ICVkIiwgcmV0dmFsKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwKKwkJCSJFcnJvciB3aGlsZSBnZXR0aW5nIGluaXRpYWwgYnJpZ2h0bmVzczogJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0zMTQsNyArMzE2LDcgQEAKIAkJCQkJcGRhdGEtPnVyYmRhdGEsIHBkYXRhLT51cmItPnRyYW5zZmVyX2RtYSk7CiAJCQl1c2JfZnJlZV91cmIocGRhdGEtPnVyYik7CiAJCX0KLQkJaWYgKHBkYXRhLT5iZCkKKwkJaWYgKHBkYXRhLT5iZCAmJiAhSVNfRVJSKHBkYXRhLT5iZCkpCiAJCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmJkKTsKIAkJa2ZyZWUocGRhdGEtPm1zZ2RhdGEpOwogCX0KQEAgLTM1Miw3ICszNTQsNyBAQAogewogCXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImFwcGxlZGlzcGxheSIpOwogCWlmICghd3EpIHsKLQkJZXJyKCJDb3VsZCBub3QgY3JlYXRlIHdvcmsgcXVldWVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImFwcGxlZGlzcGxheTogQ291bGQgbm90IGNyZWF0ZSB3b3JrIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKaW5kZXggOTM3OTQwNC4uNTcyMGJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYwpAQCAtMjc4LDkgKzI3OCw5IEBACiAKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIoIkZ1bmN0aW9uIHVzYl9yZWdpc3RlciBmYWlsZWQhIEVycm9yIG51bWJlcjogJWRcbiIsIHJlc3VsdCk7Ci0JfQorCWlmIChyZXN1bHQpCisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkISAiCisJCSAgICAgICAiRXJyb3IgbnVtYmVyOiAlZFxuIiwgcmVzdWx0KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCmluZGV4IDFjZDllN2UuLjRmYjNjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCkBAIC00MjIsMTMgKzQyMiwxNCBAQAogCWludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmN5dGhlcm1fZHJpdmVyKTsKLQlpZiAocmVzdWx0KSAKLQl7CQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCEgIgorCQkgICAgICAgIkVycm9yIG51bWJlcjogJWRcbiIsIHJlc3VsdCk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwppbmRleCA0Yjk5NGEwLi5lNzYyYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCkBAIC01MCw3ICs1MCw3IEBACiAJdW5zaWduZWQgY2hhciAqYnVmZmVyID0gIGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiZW1pMjY6IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW5ndGgpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIGxlbmd0aCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKiBOb3RlOiB1c2JfY29udHJvbF9tc2cgcmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciBvciBsZW5ndGggb2YgdGhlCkBAIC02NCwxMSArNjQsMTEgQEAKIHN0YXRpYyBpbnQgZW1pMjZfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKIHsKIAlpbnQgcmVzcG9uc2U7Ci0JaW5mbygiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIC0gJWRcbiIsIF9fZnVuY19fLCByZXNldF9iaXQpOwogCS8qIHByaW50ayhLRVJOX0RFQlVHICIlcyAtICVkIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7ICovCiAJcmVzcG9uc2UgPSBlbWkyNl93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOwogCWlmIChyZXNwb25zZSA8IDApIHsKLQkJZXJyKCJlbWkyNjogc2V0X3Jlc2V0ICglZCkgZmFpbGVkIiwgcmVzZXRfYml0KTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJzZXRfcmVzZXQgKCVkKSBmYWlsZWRcbiIsIHJlc2V0X2JpdCk7CiAJfQogCXJldHVybiByZXNwb25zZTsKIH0KQEAgLTg4LDcgKzg4LDggQEAKIAogCWJ1ZiA9IGttYWxsb2MoRldfTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgLUVOT01FTSk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkXG4iLAorCQkJX19mdW5jX18sIC1FTk9NRU0pOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIHdyYXBlcnI7CiAJfQpAQCAtMTA2LDE0ICsxMDcsMTYgQEAKIAkJCQkgICAgJmRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CiAJbm9mdzoKLQkJZXJyKCAiJXMgLSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gcmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZFxuIiwKKwkJCV9fZnVuY19fKTsKIAkJZ290byB3cmFwZXJyOwogCX0KIAogCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCiAJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwxKTsKIAlpZiAoZXJyIDwgMCkgewotCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgZXJyKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOwogCQlnb3RvIHdyYXBlcnI7CiAJfQogCkBAIC0yNTQsNyArMjU3LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAotCWluZm8oIiVzIHN0YXJ0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlcyBzdGFydFxuIiwgX19mdW5jX18pOwogCiAJZW1pMjZfbG9hZF9maXJtd2FyZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggNWQ4NTlkZS4uNjAyZWUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtNzMsNyArNzMsNyBAQAogc3RhdGljIGludCBlbWk2Ml9zZXRfcmVzZXQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KQogewogCWludCByZXNwb25zZTsKLQlpbmZvKCIlcyAtICVkIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgLSAlZFxuIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7CiAJCiAJcmVzcG9uc2UgPSBlbWk2Ml93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOwogCWlmIChyZXNwb25zZSA8IDApIHsKQEAgLTI3MSw3ICsyNzEsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCWRldl9kYmcoJmludGYtPmRldiwgImVtaTYyX3Byb2JlXG4iKTsKIAotCWluZm8oIiVzIHN0YXJ0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlcyBzdGFydFxuIiwgX19mdW5jX18pOwogCiAJZW1pNjJfbG9hZF9maXJtd2FyZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwppbmRleCA5N2MyODA5Li43OWE3NjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKQEAgLTY5OCw3ICs2OTgsNyBAQAogICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZidWxrcGlwZShmdGRpLT51ZGV2LCBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDUwKTsKICAgICAgICAgICAgICAgICBpZiAocGFja2V0X2J5dGVzID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9sZWZ0ID0gcGFja2V0X2J5dGVzIC0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGFzdCA9IDE7CkBAIC05NjAsNyArOTYwLDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgNTAwKTsKICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKICAgICAgICAgICAgICAgICBpbnQgbSA9IHBhY2tldF9ieXRlczsKQEAgLTE4ODAsNyArMTg4MCw3IEBACiAgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDEwMCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCA1MDApOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwpAQCAtMjE3Niw3ICsyMTc2LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDEwMDApOwogICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwppbmRleCA0YmNmN2ZiLi42ZGE4ODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwpAQCAtNDAzLDE0ICs0MDMsMTUgQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIAotCWluZm8oIiVzIGRpc2Nvbm5lY3RlZCIsIERSSVZFUl9ERVNDKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfaWRtb3VzZV9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmaWRtb3VzZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggOTM3MDMyNi4uYWIwZjMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC04NTEsOSArODUxLDggQEAKIAogCWRiZygyLCAiJXM6IGVudGVyIiwgX19mdW5jX18pOwogCi0JaWYgKHVkZXYgPT0gTlVMTCkgewotCQlpbmZvICgidWRldiBpcyBOVUxMLiIpOwotCX0KKwlpZiAodWRldiA9PSBOVUxMKQorCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJ1ZGV2IGlzIE5VTEwuXG4iKTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogCkBAIC05NTQsNyArOTUzLDkgQEAKIAlkZXYtPm1pbm9yID0gaW50ZXJmYWNlLT5taW5vcjsKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlpbmZvICgiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZCIsIChkZXYtPm1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgZGV2LT5taW5vcik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAiCisJCSAiJWQgbWlub3IgJWRcbiIsIChkZXYtPm1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSksCisJCSBVU0JfTUFKT1IsIGRldi0+bWlub3IpOwogCiAJLyogZ2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBsb2cgaXQgKi8KIAlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsCkBAIC05NzEsMTAgKzk3MiwxMCBAQAogCQlyZXR2YWwgPSByZXN1bHQ7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWluZm8oIkxFR08gVVNCIFRvd2VyIGZpcm13YXJlIHZlcnNpb24gaXMgJWQuJWQgYnVpbGQgJWQiLAotCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWFqb3IsCi0JICAgICBnZXRfdmVyc2lvbl9yZXBseS5taW5vciwKLQkgICAgIGxlMTZfdG9fY3B1KGdldF92ZXJzaW9uX3JlcGx5LmJ1aWxkX25vKSk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTEVHTyBVU0IgVG93ZXIgZmlybXdhcmUgdmVyc2lvbiBpcyAlZC4lZCAiCisJCSAiYnVpbGQgJWRcbiIsIGdldF92ZXJzaW9uX3JlcGx5Lm1ham9yLAorCQkgZ2V0X3ZlcnNpb25fcmVwbHkubWlub3IsCisJCSBsZTE2X3RvX2NwdShnZXRfdmVyc2lvbl9yZXBseS5idWlsZF9ubykpOwogCiAKIGV4aXQ6CkBAIC0xMDIxLDcgKzEwMjIsOCBAQAogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJfQogCi0JaW5mbygiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCAobWlub3IgLSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFKSk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBkaXNjb25uZWN0ZWRcbiIsCisJCSAobWlub3IgLSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFKSk7CiAKIAlkYmcoMiwgIiVzOiBsZWF2ZSIsIF9fZnVuY19fKTsKIH0KQEAgLTEwNDYsNyArMTA0OCw4IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogZXhpdDoKIAlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19mdW5jX18sIHJldHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwppbmRleCAyNDhhMTJhLi5kZWI5NWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAogCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwogCi0JaW5mbygiUmlvIG9wZW5lZC4iKTsKKwlkZXZfaW5mbygmcmlvLT5yaW9fZGV2LT5kZXYsICJSaW8gb3BlbmVkLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAJcmlvLT5pc29wZW4gPSAwOwogCi0JaW5mbygiUmlvIGNsb3NlZC4iKTsKKwlkZXZfaW5mbygmcmlvLT5yaW9fZGV2LT5kZXYsICJSaW8gY2xvc2VkLlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CiAJaW50IHJldHZhbDsKIAotCWluZm8oIlVTQiBSaW8gZm91bmQgYXQgYWRkcmVzcyAlZCIsIGRldi0+ZGV2bnVtKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFJpbyBmb3VuZCBhdCBhZGRyZXNzICVkXG4iLCBkZXYtPmRldm51bSk7CiAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfcmlvX2NsYXNzKTsKIAlpZiAocmV0dmFsKSB7CkBAIC01MDMsNyArNTAzLDcgQEAKIAkJa2ZyZWUocmlvLT5pYnVmKTsKIAkJa2ZyZWUocmlvLT5vYnVmKTsKIAotCQlpbmZvKCJVU0IgUmlvIGRpc2Nvbm5lY3RlZC4iKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBSaW8gZGlzY29ubmVjdGVkLlxuIik7CiAKIAkJcmlvLT5wcmVzZW50ID0gMDsKIAkJbXV0ZXhfdW5sb2NrKCYocmlvLT5sb2NrKSk7CkBAIC01MzEsNyArNTMxLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYwppbmRleCAwMzM2OGVkLi4yZTE0MTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCkBAIC0xNDQsNyArMTQ0LDggQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKaW5kZXggMmRiNDIyOC4uZTBmZjljYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAlkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAogCWlmIChsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAweDAwMDEpIHsKLQkJd2FybihLRVJOX0lORk8gIlVTQkxDRCBtb2RlbCBub3Qgc3VwcG9ydGVkLiIpOworCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJCkBAIC0zNTksMTIgKzM1OSwxMyBAQAogCiAJaSA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOwogCi0JaW5mbygiVVNCTENEIFZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCBhdCBhZGRyZXNzICVkIiwKLQkJKGkgJiAweEYwMDApPj4xMiwoaSAmIDB4RjAwKT4+OCwoaSAmIDB4RjApPj40LChpICYgMHhGKSwKLQkJZGV2LT51ZGV2LT5kZXZudW0pOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQkxDRCBWZXJzaW9uICUxZCUxZC4lMWQlMWQgZm91bmQgIgorCQkgImF0IGFkZHJlc3MgJWRcbiIsIChpICYgMHhGMDAwKT4+MTIsIChpICYgMHhGMDApPj44LAorCQkgKGkgJiAweEYwKT4+NCwoaSAmIDB4RiksIGRldi0+dWRldi0+ZGV2bnVtKTsKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlpbmZvKCJVU0IgTENEIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCTENELSVkIiwgaW50ZXJmYWNlLT5taW5vcik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIExDRCBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQkxDRC0lZFxuIiwKKwkJIGludGVyZmFjZS0+bWlub3IpOwogCXJldHVybiAwOwogCiBlcnJvcjoKQEAgLTQxMyw3ICs0MTQsNyBAQAogCS8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgKi8KIAlrcmVmX3B1dCgmZGV2LT5rcmVmLCBsY2RfZGVsZXRlKTsKIAotCWluZm8oIlVTQiBMQ0QgIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCBtaW5vcik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIExDRCAjJWQgbm93IGRpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGNkX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTZhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jCkBAIC0wLDAgKzEsMzk0IEBACisvKgorICogVVNCIDcgU2VnbWVudCBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KKyAqIEJhc2VkIG9uIHVzYmxlZC5jIGJ5IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiA3IFNlZ21lbnQgRHJpdmVyIgorCisjZGVmaW5lIFZFTkRPUl9JRAkweDBmYzUKKyNkZWZpbmUgUFJPRFVDVF9JRAkweDEyMjcKKyNkZWZpbmUgTUFYTEVOCQk2CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKKy8qIHRoZSBkaWZmZXJlbnQgdGV4dCBkaXNwbGF5IG1vZGVzIHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZiAqLworc3RhdGljIGNoYXIgKmRpc3BsYXlfdGV4dG1vZGVzW10gPSB7InJhdyIsICJoZXgiLCAiYXNjaWkiLCBOVUxMfTsKKworc3RydWN0IHVzYl9zZXZzZWdkZXYgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdTggcG93ZXJlZDsKKwl1OCBtb2RlX21zYjsKKwl1OCBtb2RlX2xzYjsKKwl1OCBkZWNpbWFsc1tNQVhMRU5dOworCXU4IHRleHRtb2RlOworCXU4IHRleHRbTUFYTEVOXTsKKwl1MTYgdGV4dGxlbmd0aDsKK307CisKKy8qIHN5c2ZzX3N0cmVxIGNhbid0IHJlcGxhY2UgdGhpcyBjb21wbGV0ZWx5CisgKiBJZiB0aGUgZGV2aWNlIHdhcyBpbiBoZXggbW9kZSwgYW5kIHRoZSB1c2VyIHdhbnRlZCBhIDAsCisgKiBpZiBzdHIgY29tbWFuZHMgYXJlIHVzZWQsIHdlIHdvdWxkIGFzc3VtZSB0aGUgZW5kIG9mIHN0cmluZworICogc28gbWVtIGNvbW1hbmRzIGFyZSB1c2VkLgorICovCitpbmxpbmUgc2l6ZV90IG15X21lbWxlbihjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAoY291bnQgPiAwICYmIGJ1Zltjb3VudC0xXSA9PSAnXG4nKQorCQlyZXR1cm4gY291bnQgLSAxOworCWVsc2UKKwkJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV9wb3dlcmVkKHN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhteWRldi0+dWRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShteWRldi0+dWRldiwgMCksCisJCQkweDEyLAorCQkJMHg0OCwKKwkJCSg4MCAqIDB4MTAwKSArIDEwLCAvKiAgKHBvd2VyIG1vZGUpICovCisJCQkoMHgwMCAqIDB4MTAwKSArIChteWRldi0+cG93ZXJlZCA/IDEgOiAwKSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMjAwMCk7CisJaWYgKHJjIDwgMCkKKwkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgInBvd2VyIHJldHZhbCA9ICVkXG4iLCByYyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X21vZGUoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDgyICogMHgxMDApICsgMTAsIC8qIChzZXQgbW9kZSkgKi8KKwkJCShteWRldi0+bW9kZV9tc2IgKiAweDEwMCkgKyBteWRldi0+bW9kZV9sc2IsCisJCQlOVUxMLAorCQkJMCwKKwkJCTIwMDApOworCisJaWYgKHJjIDwgMCkKKwkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgIm1vZGUgcmV0dmFsID0gJWRcbiIsIHJjKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKHN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldikKK3sKKwlpbnQgcmM7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXU4IGRlY2ltYWxzID0gMDsKKworCWJ1ZmZlciA9IGt6YWxsb2MoTUFYTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZteWRldi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBUaGUgZGV2aWNlIGlzIHJpZ2h0IHRvIGxlZnQsIHdoZXJlIGFzIHlvdSB3cml0ZSBsZWZ0IHRvIHJpZ2h0ICovCisJZm9yIChpID0gMDsgaSA8IG15ZGV2LT50ZXh0bGVuZ3RoOyBpKyspCisJCWJ1ZmZlcltpXSA9IG15ZGV2LT50ZXh0W215ZGV2LT50ZXh0bGVuZ3RoLTEtaV07CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhteWRldi0+dWRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShteWRldi0+dWRldiwgMCksCisJCQkweDEyLAorCQkJMHg0OCwKKwkJCSg4NSAqIDB4MTAwKSArIDEwLCAvKiAod3JpdGUgdGV4dCkgKi8KKwkJCSgwICogMHgxMDApICsgbXlkZXYtPnRleHRtb2RlLCAvKiBtb2RlICAqLworCQkJYnVmZmVyLAorCQkJbXlkZXYtPnRleHRsZW5ndGgsCisJCQkyMDAwKTsKKworCWlmIChyYyA8IDApCisJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJ3cml0ZSByZXR2YWwgPSAlZFxuIiwgcmMpOworCisJa2ZyZWUoYnVmZmVyKTsKKworCS8qIFRoZSBkZXZpY2UgaXMgcmlnaHQgdG8gbGVmdCwgd2hlcmUgYXMgeW91IHdyaXRlIGxlZnQgdG8gcmlnaHQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG15ZGV2LT5kZWNpbWFscyk7IGkrKykKKwkJZGVjaW1hbHMgfD0gbXlkZXYtPmRlY2ltYWxzW2ldIDw8IGk7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhteWRldi0+dWRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShteWRldi0+dWRldiwgMCksCisJCQkweDEyLAorCQkJMHg0OCwKKwkJCSg4NiAqIDB4MTAwKSArIDEwLCAvKiAoc2V0IGRlY2ltYWwpICovCisJCQkoMCAqIDB4MTAwKSArIGRlY2ltYWxzLCAvKiBkZWNpbWFscyAqLworCQkJTlVMTCwKKwkJCTAsCisJCQkyMDAwKTsKKworCWlmIChyYyA8IDApCisJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJkZWNpbWFsIHJldHZhbCA9ICVkXG4iLCByYyk7Cit9CisKKyNkZWZpbmUgTVlERVZfQVRUUl9TSU1QTEVfVU5TSUdORUQobmFtZSwgdXBkYXRlX2ZjbikJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXR0cl8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCAJCVwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSAJCVwKK3sJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJXAorCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBteWRldi0+bmFtZSk7CQlcCit9CQkJCQkJCQlcCisJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNldF9hdHRyXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAorewkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwlcCisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQlcCisJbXlkZXYtPm5hbWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCVwKKwl1cGRhdGVfZmNuKG15ZGV2KTsgXAorCQkJCQkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCVwKK30JCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd19hdHRyXyMjbmFtZSwgc2V0X2F0dHJfIyNuYW1lKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyX3RleHQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIG15ZGV2LT50ZXh0bGVuZ3RoLCAiJXNcbiIsIG15ZGV2LT50ZXh0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F0dHJfdGV4dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc2l6ZV90IGVuZCA9IG15X21lbWxlbihidWYsIGNvdW50KTsKKworCWlmIChlbmQgPiBzaXplb2YobXlkZXYtPnRleHQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChteWRldi0+dGV4dCwgMCwgc2l6ZW9mKG15ZGV2LT50ZXh0KSk7CisJbXlkZXYtPnRleHRsZW5ndGggPSBlbmQ7CisKKwlpZiAoZW5kID4gMCkKKwkJbWVtY3B5KG15ZGV2LT50ZXh0LCBidWYsIGVuZCk7CisKKwl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHRleHQsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93X2F0dHJfdGV4dCwgc2V0X2F0dHJfdGV4dCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXR0cl9kZWNpbWFscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBpOworCWludCBwb3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG15ZGV2LT5kZWNpbWFscyk7IGkrKykgeworCQlwb3MgPSBzaXplb2YobXlkZXYtPmRlY2ltYWxzKSAtIDEgLSBpOworCQlpZiAobXlkZXYtPmRlY2ltYWxzW2ldID09IDApCisJCQlidWZbcG9zXSA9ICcwJzsKKwkJZWxzZSBpZiAobXlkZXYtPmRlY2ltYWxzW2ldID09IDEpCisJCQlidWZbcG9zXSA9ICcxJzsKKwkJZWxzZQorCQkJYnVmW3Bvc10gPSAneCc7CisJfQorCisJYnVmW3NpemVvZihteWRldi0+ZGVjaW1hbHMpXSA9ICdcbic7CisJcmV0dXJuIHNpemVvZihteWRldi0+ZGVjaW1hbHMpICsgMTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F0dHJfZGVjaW1hbHMoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXNpemVfdCBlbmQgPSBteV9tZW1sZW4oYnVmLCBjb3VudCk7CisJaW50IGk7CisKKwlpZiAoZW5kID4gc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGVuZDsgaSsrKQorCQlpZiAoYnVmW2ldICE9ICcwJyAmJiBidWZbaV0gIT0gJzEnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQobXlkZXYtPmRlY2ltYWxzLCAwLCBzaXplb2YobXlkZXYtPmRlY2ltYWxzKSk7CisJZm9yIChpID0gMDsgaSA8IGVuZDsgaSsrKQorCQlpZiAoYnVmW2ldID09ICcxJykKKwkJCW15ZGV2LT5kZWNpbWFsc1tlbmQtMS1pXSA9IDE7CisKKwl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZGVjaW1hbHMsIFNfSVdVR08gfCBTX0lSVUdPLAorCXNob3dfYXR0cl9kZWNpbWFscywgc2V0X2F0dHJfZGVjaW1hbHMpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfdGV4dG1vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgaTsKKworCWJ1ZlswXSA9IDA7CisKKwlmb3IgKGkgPSAwOyBkaXNwbGF5X3RleHRtb2Rlc1tpXTsgaSsrKSB7CisJCWlmIChteWRldi0+dGV4dG1vZGUgPT0gaSkgeworCQkJc3RyY2F0KGJ1ZiwgIiBbIik7CisJCQlzdHJjYXQoYnVmLCBkaXNwbGF5X3RleHRtb2Rlc1tpXSk7CisJCQlzdHJjYXQoYnVmLCAiXSAiKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmNhdChidWYsICIgIik7CisJCQlzdHJjYXQoYnVmLCBkaXNwbGF5X3RleHRtb2Rlc1tpXSk7CisJCQlzdHJjYXQoYnVmLCAiICIpOworCQl9CisJfQorCXN0cmNhdChidWYsICJcbiIpOworCisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdHRyX3RleHRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGRpc3BsYXlfdGV4dG1vZGVzW2ldOyBpKyspIHsKKwkJaWYgKHN5c2ZzX3N0cmVxKGRpc3BsYXlfdGV4dG1vZGVzW2ldLCBidWYpKSB7CisJCQlteWRldi0+dGV4dG1vZGUgPSBpOworCQkJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodGV4dG1vZGUsIFNfSVdVR08gfCBTX0lSVUdPLAorCXNob3dfYXR0cl90ZXh0bW9kZSwgc2V0X2F0dHJfdGV4dG1vZGUpOworCisKK01ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKHBvd2VyZWQsIHVwZGF0ZV9kaXNwbGF5X3Bvd2VyZWQpOworTVlERVZfQVRUUl9TSU1QTEVfVU5TSUdORUQobW9kZV9tc2IsIHVwZGF0ZV9kaXNwbGF5X21vZGUpOworTVlERVZfQVRUUl9TSU1QTEVfVU5TSUdORUQobW9kZV9sc2IsIHVwZGF0ZV9kaXNwbGF5X21vZGUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3Bvd2VyZWQuYXR0ciwKKwkmZGV2X2F0dHJfdGV4dC5hdHRyLAorCSZkZXZfYXR0cl90ZXh0bW9kZS5hdHRyLAorCSZkZXZfYXR0cl9kZWNpbWFscy5hdHRyLAorCSZkZXZfYXR0cl9tb2RlX21zYi5hdHRyLAorCSZkZXZfYXR0cl9tb2RlX2xzYi5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRldl9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBkZXZfYXR0cnMsCit9OworCitzdGF0aWMgaW50IHNldnNlZ19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSBOVUxMOworCWludCByYyA9IC1FTk9NRU07CisKKwlteWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2V2c2VnZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKG15ZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcl9tZW07CisJfQorCisJbXlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgbXlkZXYpOworCisJLypzZXQgZGVmYXVsdHMgKi8KKwlteWRldi0+dGV4dG1vZGUgPSAweDAyOyAvKiBhc2NpaSBtb2RlICovCisJbXlkZXYtPm1vZGVfbXNiID0gMHgwNjsgLyogNiBjaGFyYWN0ZXJzICovCisJbXlkZXYtPm1vZGVfbHNiID0gMHgzZjsgLyogc2Nhbm1vZGUgZm9yIDYgY2hhcnMgKi8KKworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRlcmZhY2UtPmRldi5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyb3I7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgNyBTZWdtZW50IGRldmljZSBub3cgYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworCitlcnJvcjoKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJdXNiX3B1dF9kZXYobXlkZXYtPnVkZXYpOworCWtmcmVlKG15ZGV2KTsKK2Vycm9yX21lbToKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNldnNlZ19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2OworCisJbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRlcmZhY2UtPmRldi5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJdXNiX3B1dF9kZXYobXlkZXYtPnVkZXYpOworCWtmcmVlKG15ZGV2KTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgNyBTZWdtZW50IG5vdyBkaXNjb25uZWN0ZWRcbiIpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2V2c2VnX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidXNic2V2c2VnIiwKKwkucHJvYmUgPQlzZXZzZWdfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlzZXZzZWdfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zZXZzZWdfaW5pdCh2b2lkKQoreworCWludCByYyA9IDA7CisKKwlyYyA9IHVzYl9yZWdpc3Rlcigmc2V2c2VnX2RyaXZlcik7CisJaWYgKHJjKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc2V2c2VnX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2V2c2VnX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9zZXZzZWdfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc2V2c2VnX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCmluZGV4IGYxMjU1YjAuLjlhNmMyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpAQCAtMjI4LDExICsyMjgsMTIgQEAKIAkJcmV0ID0gcnEtPnVyYi0+c3RhdHVzOwogCQkqdmFsID0gcHJpdi0+cmVnWyhyZWcgPj0gOSkgPyAwIDogcmVnaW5kZXhbcmVnXV07CiAJCWlmIChyZXQpCi0JCQl3YXJuKCJnZXRfMTI4NF9yZWdpc3RlcjogdXNiIGVycm9yICVkIiwgcmV0KTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImdldF8xMjg0X3JlZ2lzdGVyOiAiCisJCQkgICAgICAgInVzYiBlcnJvciAlZFxuIiwgcmV0KTsKIAkJa3JlZl9wdXQoJnJxLT5yZWZfY291bnQsIGRlc3Ryb3lfYXN5bmMpOwogCQlyZXR1cm4gcmV0OwogCX0KLQl3YXJuKCJnZXRfMTI4NF9yZWdpc3RlciB0aW1lb3V0Iik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2V0XzEyODRfcmVnaXN0ZXIgdGltZW91dFxuIik7CiAJa2lsbF9hbGxfYXN5bmNfcmVxdWVzdHNfcHJpdihwcml2KTsKIAlyZXR1cm4gLUVJTzsKIH0KQEAgLTcxNiw3ICs3MTcsNyBAQAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5hc3luY2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5hc3luY2xpc3QpOwogCWlmICghKHBwID0gcGFycG9ydF9yZWdpc3Rlcl9wb3J0KDAsIFBBUlBPUlRfSVJRX05PTkUsIFBBUlBPUlRfRE1BX05PTkUsICZwYXJwb3J0X3VzczcyMF9vcHMpKSkgewotCQl3YXJuKCJjb3VsZCBub3QgcmVnaXN0ZXIgcGFycG9ydCIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c3M3MjA6IGNvdWxkIG5vdCByZWdpc3RlciBwYXJwb3J0XG4iKTsKIAkJZ290byBwcm9iZV9hYm9ydDsKIAl9CiAKQEAgLTgwMCwxMCArODAxLDE0IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7Ci0JaW5mbygiTk9URTogdGhpcyBpcyBhIHNwZWNpYWwgcHVycG9zZSBkcml2ZXIgdG8gYWxsb3cgbm9uc3RhbmRhcmQiKTsKLQlpbmZvKCJwcm90b2NvbHMgKGVnLiBiaXRiYW5nKSBvdmVyIFVTUzcyMCB1c2IgdG8gcGFyYWxsZWwgY2FibGVzIik7Ci0JaW5mbygiSWYgeW91IGp1c3Qgd2FudCB0byBjb25uZWN0IHRvIGEgcHJpbnRlciwgdXNlIHVzYmxwIGluc3RlYWQiKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogTk9URTogdGhpcyBpcyBhIHNwZWNpYWwgcHVycG9zZSAiCisJICAgICAgICJkcml2ZXIgdG8gYWxsb3cgbm9uc3RhbmRhcmRcbiIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogcHJvdG9jb2xzIChlZy4gYml0YmFuZykgb3ZlciAiCisJICAgICAgICJVU1M3MjAgdXNiIHRvIHBhcmFsbGVsIGNhYmxlc1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBJZiB5b3UganVzdCB3YW50IHRvIGNvbm5lY3QgdG8gYSAiCisJICAgICAgICJwcmludGVyLCB1c2UgdXNibHAgaW5zdGVhZFxuIik7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NDg0NzBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwpAQCAtMCwwICsxLDc4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRmlsZTogZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYworICoKKyAqICBQdXJwb3NlOiBTdXBwb3J0IGZvciB0aGUgYnVsayBVU0IgVmVybmllciBTcGVjdHJvcGhvdG9tZXRlcnMKKyAqCisgKiAgQXV0aG9yOiAgICAgSm9obm5pZSBQZXRlcnMKKyAqICAgICAgICAgICAgICBBeGlhbiBDb25zdWx0aW5nCisgKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1CisgKgorICogIE1vZGlmaWVkIGJ5OiAgICAgRVF3YXJlIEVuZ2luZWVyaW5nLCBJbmMuCisgKiAgICAgICAgICAgICAgICAgICBPcmVnb24gQ2l0eSwgT1IsIFVTQSA5NzA0NQorICoKKyAqICBDb3B5cmlnaHQ6ICAyMDA3LCAyMDA4CisgKiAgICAgICAgICAgICAgVmVybmllciBTb2Z0d2FyZSAmIFRlY2hub2xvZ3kKKyAqICAgICAgICAgICAgICBCZWF2ZXJ0b24sIE9SLCBVU0EgOTcwMDUKKyAqCisgKiAgV2ViOiAgICAgICAgd3d3LnZlcm5pZXIuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiL3ZzdHVzYi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJWU1QgVVNCIERyaXZlciBWZXJzaW9uIDEuNSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlZlcm5pZXIgU29mdHdhcmUgVGVjaG5vbG9neSBCdWxrIFVTQiBEcml2ZXIiCisKKyNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCisJI2RlZmluZSBWU1RVU0JfTUlOT1JfQkFTRQkwCisjZWxzZQorCSNkZWZpbmUgVlNUVVNCX01JTk9SX0JBU0UJMTk5CisjZW5kaWYKKworI2RlZmluZSBVU0JfVkVORE9SX09DRUFOT1BUSUNTCTB4MjQ1NworI2RlZmluZSBVU0JfVkVORE9SX1ZFUk5JRVIJMHgwOEY3CS8qIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5ICovCisKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCMjAwMAkweDEwMDIKKyNkZWZpbmUgVVNCX1BST0RVQ1RfQURDMTAwMF9GVwkweDEwMDMJLyogZmlybXdhcmUgZG93bmxvYWQgKHJlbnVtZXJhdGVzKSAqLworI2RlZmluZSBVU0JfUFJPRFVDVF9BREMxMDAwCTB4MTAwNAorI2RlZmluZSBVU0JfUFJPRFVDVF9IUjIwMDBfRlcJMHgxMDA5CS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFIyMDAwCTB4MTAwQQorI2RlZmluZSBVU0JfUFJPRFVDVF9IUjQwMDBfRlcJMHgxMDExCS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFI0MDAwCTB4MTAxMgorI2RlZmluZSBVU0JfUFJPRFVDVF9VU0I2NTAJMHgxMDE0CS8qICJSZWQgVGlkZSIgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfUUU2NTAwMAkweDEwMTgKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCNDAwMAkweDEwMjIKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCMzI1CTB4MTAyNAkvKiAiVmVybmllciBTcGVjdHJvbWV0ZXIiICovCisKKyNkZWZpbmUgVVNCX1BST0RVQ1RfTEFCUFJPCTB4MDAwMQorI2RlZmluZSBVU0JfUFJPRFVDVF9MQUJRVUVTVAkweDAwMDUKKworI2RlZmluZSBWU1RfTUFYQlVGRkVSCQkoNjQqMTAyNCkKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjIwMDApfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfSFI0MDAwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjY1MCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0I0MDAwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjMyNSl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX1ZFUk5JRVIsIFVTQl9QUk9EVUNUX0xBQlFVRVNUKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfVkVSTklFUiwgVVNCX1BST0RVQ1RfTEFCUFJPKX0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdHJ1Y3QgdnN0dXNiX2RldmljZSB7CisJc3RydWN0IGtyZWYJCQkJa3JlZjsKKwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBsb2NrOworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICp1c2JfZGV2OworCWNoYXIgICAgICAgICAgICAgICAgICAgIHByZXNlbnQ7CisJY2hhciAgICAgICAgICAgICAgICAgICAgaXNvcGVuOworCXN0cnVjdCB1c2JfYW5jaG9yICAgICAgIHN1Ym1pdHRlZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZF9waXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHJkX3RpbWVvdXRfbXM7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd3JfcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB3cl90aW1lb3V0X21zOworfTsKKyNkZWZpbmUgdG9fdnN0X2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHZzdHVzYl9kZXZpY2UsIGtyZWYpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2c3R1c2JfZHJpdmVyOworCitzdGF0aWMgdm9pZCB2c3R1c2JfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB0b192c3RfZGV2KGtyZWYpOworCisJdXNiX3B1dF9kZXYodnN0ZGV2LT51c2JfZGV2KTsKKwlrZnJlZSh2c3RkZXYpOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKworCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmdnN0dXNiX2RyaXZlciwgaW1pbm9yKGlub2RlKSk7CisKKwlpZiAoIWludGVyZmFjZSkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6ICVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBpbWlub3IoaW5vZGUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdnN0ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKCF2c3RkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogbG9jayB0aGlzIGRldmljZSAqLworCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisKKwkvKiBjYW4gb25seSBvcGVuIG9uZSB0aW1lICovCisJaWYgKCghdnN0ZGV2LT5wcmVzZW50KSB8fCAodnN0ZGV2LT5pc29wZW4pKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBpbmNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCisJa3JlZl9nZXQoJnZzdGRldi0+a3JlZik7CisKKwl2c3RkZXYtPmlzb3BlbiA9IDE7CisKKwkvKiBzYXZlIGRldmljZSBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdnN0ZGV2OworCisJZGV2X2RiZygmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogb3BlbmVkXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c3R1c2JfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCisJdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisKKwl2c3RkZXYtPmlzb3BlbiA9IDA7CisKKwlkZXZfZGJnKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiByZWxlYXNlZFxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJa3JlZl9wdXQoJnZzdGRldi0+a3JlZiwgdnN0dXNiX2RlbGV0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGVpdCA9IHVyYi0+Y29udGV4dDsKKworCWNvbXBsZXRlKGNvbXBsZXRlaXQpOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYihzdHJ1Y3QgdXJiICp1cmIsCisJCQkJICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcGlwZSwgdm9pZCAqZGF0YSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKipob3N0ZXA7CisJdW5zaWduZWQgaW50IHBpcGVuZDsKKworCWludCBzdGF0dXM7CisKKwlob3N0ZXAgPSB1c2JfcGlwZWluKHBpcGUpID8gdXNiX2Rldi0+ZXBfaW4gOiB1c2JfZGV2LT5lcF9vdXQ7CisJcGlwZW5kID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwllcCA9IGhvc3RlcFtwaXBlbmRdOworCisJaWYgKCFlcCB8fCAobGVuID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQlwaXBlID0gKHBpcGUgJiB+KDMgPDwgMzApKSB8IChQSVBFX0lOVEVSUlVQVCA8PCAzMCk7CisJCXVzYl9maWxsX2ludF91cmIodXJiLCB1c2JfZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkJICh1c2JfY29tcGxldGVfdCl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sCisJCQkJIE5VTEwsIGVwLT5kZXNjLmJJbnRlcnZhbCk7CisJfSBlbHNlCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCSAgKHVzYl9jb21wbGV0ZV90KXVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwKKwkJCQkgIE5VTEwpOworCisJaW5pdF9jb21wbGV0aW9uKGRvbmUpOworCXVyYi0+Y29udGV4dCA9IGRvbmU7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCB2c3R1c2JfY29tcGxldGVfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsCisJCQkgICAgICAgaW50IHRpbWVvdXQsIGludCAqYWN0dWFsX2xlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlpbnQgc3RhdHVzOworCisJZXhwaXJlID0gdGltZW91dCA/IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCkgOiBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KGRvbmUsIGV4cGlyZSkpIHsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCXN0YXR1cyA9IHVyYi0+c3RhdHVzID09IC1FTk9FTlQgPyAtRVRJTUVET1VUIDogdXJiLT5zdGF0dXM7CisKKwkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZCwgdXJiIHN0YXR1cyA9ICVkXG4iLAorCQkJY3VycmVudC0+Y29tbSwKKwkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+c3RhdHVzKTsKKworCX0gZWxzZSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJLyogaWYgcmVhbGx5IGFuIGVycm9yICovCisJCQlpZiAodXJiLT5zdGF0dXMgJiYgISgodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkgICAgIHx8CisJCQkJCSAgICAgKHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUKSB8fAorCQkJCQkgICAgICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkpIHsKKwkJCQlzdGF0dXMgPSAtRUlOVFI7CisJCQkJdXNiX2tpbGxfdXJiKHVyYik7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IDA7CisJCQl9CisKKwkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCisJCQkJIiVzOiBzaWduYWwgcGVuZGluZyBvbiBlcCVkJXMgbGVuPSVkLyVkLCIKKwkJCQkidXJiIHN0YXR1cyA9ICVkXG4iLAorCQkJCWN1cnJlbnQtPmNvbW0sCisJCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+c3RhdHVzKTsKKworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJCX0KKwl9CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3NpemVfdCB2c3R1c2JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJaW50IGNudCA9IC0xOworCXZvaWQgKmJ1ZjsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmI7CisJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSB3YW50IHRvIHJlYWQgc29tZSBkYXRhICovCisJaWYgKChjb3VudCA9PSAwKSB8fCAoY291bnQgPiBWU1RfTUFYQlVGRkVSKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnN0ZGV2LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGFueW9uZSBob21lICovCisJaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6ICVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogcHVsbCBvdXQgdGhlIG5lY2Vzc2FyeSBkYXRhICovCisJZGV2ID0gICAgIHZzdGRldi0+dXNiX2RldjsKKwlwaXBlID0gICAgdXNiX3JjdmJ1bGtwaXBlKGRldiwgdnN0ZGV2LT5yZF9waXBlKTsKKwl0aW1lb3V0ID0gdnN0ZGV2LT5yZF90aW1lb3V0X21zOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlrZnJlZShidWYpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZiwgY291bnQsICZkb25lKTsKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJaWYgKHJldHZhbCkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBidWYsIGNudCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gY250OworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiByZWFkICVkIGJ5dGVzIGZyb20gcGlwZSAlZFxuIiwKKwkJCV9fZnVuY19fLCBjbnQsIHBpcGUpOworCX0KKworZXhpdDoKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZzdHVzYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCWludCBjbnQgPSAtMTsKKwl2b2lkICpidWY7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiOworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gd3JpdGUgKi8KKwlpZiAoKGNvdW50ID09IDApIHx8IChjb3VudCA+IFZTVF9NQVhCVUZGRVIpKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBhbnlvbmUgaG9tZSAqLworCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiAlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLworCWRldiA9ICAgICB2c3RkZXYtPnVzYl9kZXY7CisJcGlwZSA9ICAgIHVzYl9zbmRidWxrcGlwZShkZXYsIHZzdGRldi0+d3JfcGlwZSk7CisJdGltZW91dCA9IHZzdGRldi0+d3JfdGltZW91dF9tczsKKworCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmLCBjb3VudCwgJmRvbmUpOworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQlnb3RvIGV4aXQ7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gY250OworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzZW50ICVkIGJ5dGVzIHRvIHBpcGUgJWRcbiIsCisJCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKKwl9CisKK2V4aXQ6CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgbG9uZyB2c3R1c2JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXR2YWwgPSAwOworCWludCBjbnQgPSAtMTsKKwl2b2lkIF9fdXNlciAqZGF0YSA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgdnN0dXNiX2FyZ3MgdXNiX2RhdGE7CisKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCXZvaWQgKmJ1ZmZlciA9IE5VTEw7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQuIGJ1ZmZlciBpcworCQkJICAgICAgKglyZWZlcmVuY2VkIG9uIGV4aXQgYnV0IG5vdCBhbGwKKwkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCisKKwlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiID0gTlVMTDsgLyogbXVzdCBiZSBpbml0aWFsaXplZC4gdXJiIGlzCisJCQkJCSAgICAgICoJcmVmZXJlbmNlZCBvbiBleGl0IGJ1dCBub3QgYWxsCisJCQkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCisJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoY21kKSAhPSBWU1RfSU9DX01BR0lDKSB7CisJCWRldl93YXJuKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwKKwkJCSAiJXM6IGlvY3RsIGNvbW1hbmQgJXgsIGJhZCBpb2N0bCBtYWdpYyAleCwgIgorCQkJICJleHBlY3RlZCAleFxuIiwgX19mdW5jX18sIGNtZCwKKwkJCSBfSU9DX1RZUEUoY21kKSwgVlNUX0lPQ19NQUdJQyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnVzYl9kYXRhLCBkYXRhLCBzaXplb2Yoc3RydWN0IHZzdHVzYl9hcmdzKSkpIHsKKwkJZGV2X2VycigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKSB7CisJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIGFueW9uZSBob21lICovCisJaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlkZXZfZXJyKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KKwlkZXYgPSB2c3RkZXYtPnVzYl9kZXY7CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXOgorCisJCXZzdGRldi0+cmRfcGlwZSA9IHVzYl9kYXRhLnJkX3BpcGU7CisJCXZzdGRldi0+cmRfdGltZW91dF9tcyA9IHVzYl9kYXRhLnJkX3RpbWVvdXRfbXM7CisJCXZzdGRldi0+d3JfcGlwZSA9IHVzYl9kYXRhLndyX3BpcGU7CisJCXZzdGRldi0+d3JfdGltZW91dF9tcyA9IHVzYl9kYXRhLndyX3RpbWVvdXRfbXM7CisKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHNldHRpbmcgcGlwZXMvdGltZW91dHMsICIKKwkJCSJyZHBpcGUgPSAlZCwgcmR0aW1lb3V0ID0gJWQsICIKKwkJCSJ3cnBpcGUgPSAlZCwgd3J0aW1lb3V0ID0gJWRcbiIsIF9fZnVuY19fLAorCQkJdnN0ZGV2LT5yZF9waXBlLCB2c3RkZXYtPnJkX3RpbWVvdXRfbXMsCisJCQl2c3RkZXYtPndyX3BpcGUsIHZzdGRldi0+d3JfdGltZW91dF9tcyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFOgorCisJCWlmICgodXNiX2RhdGEuY291bnQgPT0gMCkgfHwgKHVzYl9kYXRhLmNvdW50ID4gVlNUX01BWEJVRkZFUikpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlidWZmZXIgPSBrbWFsbG9jKHVzYl9kYXRhLmNvdW50LCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl0aW1lb3V0ID0gdXNiX2RhdGEudGltZW91dF9tczsKKworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwgdXNiX2RhdGEucGlwZSk7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNiX2RhdGEuYnVmZmVyLCB1c2JfZGF0YS5jb3VudCkpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmZmVyLAorCQkJCQkJICB1c2JfZGF0YS5jb3VudCwgJmRvbmUpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCSIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgSU9DVExfVlNUVVNCX1JFQ1ZfUElQRToKKworCQlpZiAoKHVzYl9kYXRhLmNvdW50ID09IDApIHx8ICh1c2JfZGF0YS5jb3VudCA+IFZTVF9NQVhCVUZGRVIpKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisKKwkJYnVmZmVyID0ga21hbGxvYyh1c2JfZGF0YS5jb3VudCwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdGltZW91dCA9IHVzYl9kYXRhLnRpbWVvdXRfbXM7CisKKwkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYsIHVzYl9kYXRhLnBpcGUpOworCisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwkJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWZmZXIsCisJCQkJCQkgIHVzYl9kYXRhLmNvdW50LCAmZG9uZSk7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQkJZ290byBleGl0OworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2JfZGF0YS5idWZmZXIsIGJ1ZmZlciwgY250KSkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfZGF0YS5jb3VudCA9IGNudDsKKwkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCAmdXNiX2RhdGEsIHNpemVvZihzdHJ1Y3QgdnN0dXNiX2FyZ3MpKSkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiByZWN2ICVkIGJ5dGVzIGZyb20gcGlwZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgdXNiX2RhdGEuY291bnQsIHVzYl9kYXRhLnBpcGUpOworCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWRldl93YXJuKCZkZXYtPmRldiwgImlvY3RsX3ZzdHVzYjogaW52YWxpZCBpb2N0bCBjbWQgJXhcbiIsCisJCQkgY21kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KK2V4aXQ6CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2c3R1c2JfZm9wcyA9IHsKKwkub3duZXIgPSAgICAgICAgICAgICAgICBUSElTX01PRFVMRSwKKwkucmVhZCA9ICAgICAgICAgICAgICAgICB2c3R1c2JfcmVhZCwKKwkud3JpdGUgPSAgICAgICAgICAgICAgICB2c3R1c2Jfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsID0gICAgICAgdnN0dXNiX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSAgICAgICAgIHZzdHVzYl9pb2N0bCwKKwkub3BlbiA9ICAgICAgICAgICAgICAgICB2c3R1c2Jfb3BlbiwKKwkucmVsZWFzZSA9ICAgICAgICAgICAgICB2c3R1c2JfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfdnN0dXNiX2NsYXNzID0geworCS5uYW1lID0gICAgICAgICAidXNiL3ZzdHVzYiVkIiwKKwkuZm9wcyA9ICAgICAgICAgJnZzdHVzYl9mb3BzLAorCS5taW5vcl9iYXNlID0gICBWU1RVU0JfTUlOT1JfQkFTRSwKK307CisKK3N0YXRpYyBpbnQgdnN0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLworCisJdnN0ZGV2ID0ga3phbGxvYyhzaXplb2YoKnZzdGRldiksIEdGUF9LRVJORUwpOworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBtdXN0IGRvIHVzYl9nZXRfZGV2KCkgcHJpb3IgdG8ga3JlZl9pbml0KCkgc2luY2UgdGhlIGtyZWZfcHV0KCkKKwkgKiByZWxlYXNlIGZ1bmN0aW9uIHdpbGwgZG8gYSB1c2JfcHV0X2RldigpICovCisJdXNiX2dldF9kZXYoZGV2KTsKKwlrcmVmX2luaXQoJnZzdGRldi0+a3JlZik7CisJbXV0ZXhfaW5pdCgmdnN0ZGV2LT5sb2NrKTsKKworCWkgPSBkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlOworCisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kIGF0IGFkZHJlc3MgJWRcbiIsCisJCShpICYgMHhGMDAwKSA+PiAxMiwgKGkgJiAweEYwMCkgPj4gOCwKKwkJKGkgJiAweEYwKSA+PiA0LCAoaSAmIDB4RiksIGRldi0+ZGV2bnVtKTsKKworCXZzdGRldi0+cHJlc2VudCA9IDE7CisJdnN0ZGV2LT5pc29wZW4gPSAwOworCXZzdGRldi0+dXNiX2RldiA9IGRldjsKKwlpbml0X3VzYl9hbmNob3IoJnZzdGRldi0+c3VibWl0dGVkKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdnN0ZGV2KTsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdnN0dXNiX2NsYXNzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSIlczogTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuIiwKKwkJCV9fZnVuY19fKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwkJa3JlZl9wdXQoJnZzdGRldi0+a3JlZiwgdnN0dXNiX2RlbGV0ZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCWRldl9pbmZvKCZpbnRmLT5kZXYsCisJCSAiVlNUIFVTQiBEZXZpY2UgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZFxuIiwKKwkJIChpbnRmLT5taW5vciAtIFZTVFVTQl9NSU5PUl9CQVNFKSwgVVNCX01BSk9SLCBpbnRmLT5taW5vcik7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMsICVzXG4iLCBEUklWRVJfREVTQywgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdnN0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl92c3R1c2JfY2xhc3MpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwlpZiAodnN0ZGV2KSB7CisKKwkJbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJdnN0ZGV2LT5wcmVzZW50ID0gMDsKKworCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOworCX0KKworfQorCitzdGF0aWMgaW50IHZzdHVzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgdGltZTsKKwlpZiAoIXZzdGRldikKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCXRpbWUgPSB1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCgmdnN0ZGV2LT5zdWJtaXR0ZWQsIDEwMDApOworCWlmICghdGltZSkKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2c3R1c2JfZHJpdmVyID0geworCS5uYW1lID0gICAgICAgICAidnN0dXNiIiwKKwkucHJvYmUgPSAgICAgICAgdnN0dXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gICB2c3R1c2JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9ICAgICAgdnN0dXNiX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgICAgIHZzdHVzYl9yZXN1bWUsCisJLmlkX3RhYmxlID0gaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2c3R1c2JfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gdXNiX3JlZ2lzdGVyKCZ2c3R1c2JfZHJpdmVyKTsKKwlpZiAocmMpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciAoJWQpIiwgX19mdW5jX18sIHJjKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZzdHVzYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnZzdHVzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2c3R1c2JfaW5pdCk7Cittb2R1bGVfZXhpdCh2c3R1c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRlbm5pcyBPJ0JyaWVuL1N0ZXBoZW4gV2FyZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKaW5kZXggNDQyZDgwNy4uNWUwYWI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJfQogCS8vIE1PRF9JTkNfVVNFX0NPVU5UKHdoaWNoX21vZHVsZT8pOwogCi0JdXNiX3JlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1YnVzLCAmdXNiX2J1c19saXN0LCBidXNfbGlzdCkgewogCQltb25fYnVzX2luaXQodWJ1cyk7CiAJfQorCXVzYl9yZWdpc3Rlcl9ub3RpZnkoJm1vbl9uYik7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA1OGIyYjhmLi40Yjk1NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0zMywxMCArMzMsNiBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAogCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCi0JaGVscAotCSAgVXNlIGEgc3RhdGljIDxhc20vYXJjaC9oZHJjX2NuZi5oPiBmaWxlIHRvIGRlc2NyaWJlIGhvdyB0aGUKLQkgIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCAoZW5kcG9pbnRzLCBtZWNoYW5pc21zLCBldGMpIG9uIHRoZQotCSAgY3VycmVudCBpdGVyYXRpb24gb2YgYSBnaXZlbiBzeXN0ZW0tb24tY2hpcC4KIAogY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaAppbmRleCBmYzUyMTZiLi43MjliNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5oCkBAIC0xMTksOCArMTE5LDggQEAKIAl2b2lkIF9faW9tZW0JCQkqbXJlZ3M7CQkvKiBNZW50b3IgcmVncyAqLwogCXZvaWQgX19pb21lbQkJCSp0aWJhc2U7CS8qIFRJL0NQUEkgcmVncyAqLwogCi0Jc3RydWN0IGNwcGlfY2hhbm5lbAkJdHhbTVVTQl9DX05VTV9FUFQgLSAxXTsKLQlzdHJ1Y3QgY3BwaV9jaGFubmVsCQlyeFtNVVNCX0NfTlVNX0VQUiAtIDFdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXR4WzRdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXJ4WzRdOwogCiAJc3RydWN0IGRtYV9wb29sCQkJKnBvb2w7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggNzViYWYxOC4uZGZiM2JjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+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+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk3Niw3ICs5NzksNiBAQAogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKIAlpZiAodmVuZG9yKSB7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRWZW5kb3IgPSB2ZW5kb3I7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKQEAgLTk4NSw2ICs5ODcsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAorCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCmluZGV4IDQ4MGNhYzIuLjNhYzU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKQEAgLTQ4NSw3ICs0ODUsOCBAQAogCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDQ1ZDQwNDMuLmI2NzlhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTYwMiw3ICs2MDIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggNTM3MTBhYTcuLmUzMjA5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCkBAIC0xMTg1LDcgKzExODUsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXV1X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJml1dV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKaW5kZXggMTU0NDdhZi4uOTg3OGMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCkBAIC0yMTcsNyArMjE3LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggOTllOWExNC4uYmYxYWUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTc0MiwxMSArNzQyLDEzIEBACiAJCWZ3X25hbWUgPSAia2V5c3Bhbl9wZGEveGlyY29tX3Bncy5mdyI7CiAjZW5kaWYKIAllbHNlIHsKLQkJZXJyKCIlczogdW5rbm93biB2ZW5kb3IsIGFib3J0aW5nLiIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZzZXJpYWwtPmRldi0+ZGV2KSkgewotCQllcnIoImZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwgZndfbmFtZSk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQlmd19uYW1lKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCXJlY29yZCA9IChjb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKilmdy0+ZGF0YTsKQEAgLTc1NiwxMCArNzU4LDEwIEBACiAJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCiAJCQkJCSAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEwKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4gUERBICIKLQkJCSAgICAiZmlybXdhcmUgKCVkICUwNFggJXAgJWQpIiwKLQkJCSAgICByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkICIKKwkJCQkiZm9yIEtleXNwYW4gUERBIGZpcm13YXJlICglZCAlMDRYICVwICVkKVxuIiwKKwkJCQlyZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKKwkJCQlyZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQlyZWNvcmQgPSBpaGV4X25leHRfYmlucmVjKHJlY29yZCk7CkBAIC04NzQsNyArODc2LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKICNpZmRlZiBYSVJDT00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IGZmM2EwN2YuLmRjMzZhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtMTgyLDEyICsxODIsMTIgQEAKIAkJCXNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyksCiAJCQlLTFNJX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiQ2hhbmdlIHBvcnQgc2V0dGluZ3MgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKLQlpbmZvKCIlcyAtICVkIGJ5dGUgYmxvY2ssIGJhdWRyYXRlICV4LCBkYXRhYml0cyAlZCwgdTEgJWQsIHUyICVkIiwKLQkgICAgX19mdW5jX18sCi0JICAgIHNldHRpbmdzLT5wa3RsZW4sCi0JICAgIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAotCSAgICBzZXR0aW5ncy0+dW5rbm93bjEsIHNldHRpbmdzLT51bmtub3duMik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCSAiJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWRcbiIsCisJCSBzZXR0aW5ncy0+cGt0bGVuLCBzZXR0aW5ncy0+YmF1ZHJhdGUsIHNldHRpbmdzLT5kYXRhYml0cywKKwkJIHNldHRpbmdzLT51bmtub3duMSwgc2V0dGluZ3MtPnVua25vd24yKTsKIAlyZXR1cm4gcmM7CiB9IC8qIGtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzICovCiAKQEAgLTIxNSw3ICsyMTUsNyBAQAogCV9fdTggc3RhdHVzX2J1ZltLTFNJX1NUQVRVU0JVRl9MRU5dID0geyAtMSwgLTF9OwogCV9fdTE2IHN0YXR1czsKIAotCWluZm8oIiVzIC0gc2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAic2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0XG4iKTsKIAlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKIAkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1BPTEwsCkBAIC0yMjYsMTIgKzIyNiwxMyBAQAogCQkJICAgICAxMDAwMAogCQkJICAgICApOwogCWlmIChyYyA8IDApCi0JCWVycigiUmVhZGluZyBsaW5lIHN0YXR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJSZWFkaW5nIGxpbmUgc3RhdHVzIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsCisJCQlyYyk7CiAJZWxzZSB7CiAJCXN0YXR1cyA9IGdldF91bmFsaWduZWRfbGUxNihzdGF0dXNfYnVmKTsKIAotCQlpbmZvKCIlcyAtIHJlYWQgc3RhdHVzICV4ICV4IiwgX19mdW5jX18sCi0JCSAgICAgc3RhdHVzX2J1ZlswXSwgc3RhdHVzX2J1ZlsxXSk7CisJCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAicmVhZCBzdGF0dXMgJXggJXgiLAorCQkJIHN0YXR1c19idWZbMF0sIHN0YXR1c19idWZbMV0pOwogCiAJCSpsaW5lX3N0YXRlX3AgPSBrbHNpXzEwNV9zdGF0dXMybGluZXN0YXRlKHN0YXR1cyk7CiAJfQpAQCAtMjgwLDE1ICsyODEsMTYgQEAKIAogCQkJcHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CiAJCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJObyBtb3JlIHVyYnM/Pz9cbiIpOwogCQkJCWdvdG8gZXJyX2NsZWFudXA7CiAJCQl9CiAKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0KIAkJCQlrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlnb3RvIGVycl9jbGVhbnVwOwogCQkJfQogCQl9CkBAIC00MDksNyArNDExLDggQEAKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyYykgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgIgorCQkJImVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlyZXR2YWwgPSByYzsKIAkJZ290byBleGl0OwogCX0KQEAgLTQyNCw3ICs0MjcsNyBAQAogCQkJICAgICAwLAogCQkJICAgICBLTFNJX1RJTUVPVVQpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJFbmFibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQlyZXR2YWwgPSByYzsKIAl9IGVsc2UKIAkJZGJnKCIlcyAtIGVuYWJsZWQgcmVhZGluZyIsIF9fZnVuY19fKTsKQEAgLTQ2NCw3ICs0NjcsOCBAQAogCQkJCSAgICAgTlVMTCwgMCwKIAkJCQkgICAgIEtMU0lfVElNRU9VVCk7CiAJCWlmIChyYyA8IDApCi0JCQllcnIoIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJjKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOwogCkBAIC00NzUsOCArNDc5LDkgQEAKIAkvKiBGSVhNRSAqLwogCS8qIHdnZyAtIGRvIEkgbmVlZCB0aGlzPyBJIHRoaW5rIHNvLiAqLwogCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQlpbmZvKCJrbDVrdXNiMTA1IHBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dCIsCi0JCQkJCXByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LAorCQkgInBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dFxuIiwKKwkJIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOwogfSAvKiBrbHNpXzEwNV9jbG9zZSAqLwogCiAKQEAgLTUyMiw3ICs1MjcsOSBAQAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQogCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQkJZXJyKCIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJfQpAQCAtNTQ5LDggKzU1Niw5IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJYnVmICs9IHNpemU7CkBAIC02OTQsOCArNzAyLDkgQEAKIAkJICAgICAgcG9ydCk7CiAJcmMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJjKQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJjKTsKIH0gLyoga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrICovCiAKIApAQCAtNzk5LDcgKzgwOCw4IEBACiAJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOFxuIik7CiAJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKIAkJCWJyZWFrOwogCQl9CkBAIC04ODYsNyArODk2LDggQEAKIAogCXJjID0ga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUocG9ydCwgJmxpbmVfc3RhdGUpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJSZWFkaW5nIGxpbmUgY29udHJvbCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiUmVhZGluZyBsaW5lIGNvbnRyb2wgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQkvKiBiZXR0ZXIgcmV0dXJuIHZhbHVlPyBFQUdBSU4/ICovCiAJCXJldHVybiByYzsKIAl9CkBAIC05NDQsOCArOTU1LDkgQEAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCiAKQEAgLTk2MCw3ICs5NzIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtsNWt1c2IxMDVkX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggY2ZjZjM3Yy4uNjI4NmJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0FVVEhPUik7Ci0JaW5mbyhEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggOWIyY2VmOC4uMDc3MTBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTI0Niw3ICsyNDYsOCBAQAogCQkJCTAsIDAsICZkaXZpc29yLCBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCS8qRklYTUU6IFdoYXQgdmFsdWUgc3BlZWQgcmVzdWx0cyAqLwotCQllcnIoIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHZhbHVlLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKKwkJCXZhbHVlLCByYyk7CiAJZWxzZQogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIHNwZWVkLCBzcGVlZCk7CiAJZGJnKCJzZXRfYmF1ZF9yYXRlOiB2YWx1ZTogMHgleCwgZGl2aXNvcjogMHgleCIsIHZhbHVlLCBkaXZpc29yKTsKQEAgLTI3NCw4ICsyNzUsOSBAQAogCQkJCTAsIDAsICZ6ZXJvX2J5dGUsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9TSVpFLAogCQkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsCi0JCSAgICBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkICIKKwkJCSJmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwKKwkJCXJjKTsKIAogCWlmIChwb3J0ICYmIENfQ1JUU0NUUyh0dHkpKQogCSAgIGN0c19lbmFibGVfYnl0ZSA9IDE7CkBAIC0yODgsOCArMjkwLDggQEAKIAkJCTAsIDAsICZjdHNfZW5hYmxlX2J5dGUsIE1DVF9VMjMyX1NFVF9DVFNfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsCi0JCQkJCU1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkICIKKwkJCSJmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBNQ1RfVTIzMl9TRVRfQ1RTX1JFUVVFU1QsIHJjKTsKIAogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZSAqLwpAQCAtMzAzLDcgKzMwNSw4IEBACiAJCQkwLCAwLCAmbGNyLCBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJTZXQgTElORSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKSIsIGxjciwgcmMpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBsY3IsIHJjKTsKIAlkYmcoInNldF9saW5lX2N0cmw6IDB4JXgiLCBsY3IpOwogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2xpbmVfY3RybCAqLwpAQCAtMzI1LDcgKzMyOCw4IEBACiAJCQkwLCAwLCAmbWNyLCBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2V0IE1PREVNIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbWNyLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiU2V0IE1PREVNIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBtY3IsIHJjKTsKIAlkYmcoInNldF9tb2RlbV9jdHJsOiBzdGF0ZT0weCV4ID09PiBtY3I9MHgleCIsIGNvbnRyb2xfc3RhdGUsIG1jcik7CiAKIAlyZXR1cm4gcmM7CkBAIC0zNDEsNyArMzQ1LDggQEAKIAkJCTAsIDAsIG1zciwgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKSB7Ci0JCWVycigiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIkdldCBNT0RFTSBTVEFUdXMgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQkqbXNyID0gMDsKIAl9CiAJZGJnKCJnZXRfbW9kZW1fc3RhdDogMHgleCIsICptc3IpOwpAQCAtNDcwLDggKzQ3NSw5IEBACiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCi0JCSAgICBwb3J0LT5yZWFkX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWRcbiIsCisJCQlwb3J0LT5yZWFkX3VyYi0+cGlwZSwgcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTQ3OSw4ICs0ODUsOSBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKIAkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKLQkJZXJyKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCBwaXBlIDB4JXggZXJyICVkIiwKLQkJICAgIHBvcnQtPmludGVycnVwdF9pbl91cmItPnBpcGUsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJ1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAorCQkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+cGlwZSwgcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJcmV0dXJuIDA7CkBAIC02MTIsOCArNjE5LDkgQEAKIGV4aXQ6CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CiB9IC8qIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICovCiAKIHN0YXRpYyB2b2lkIG1jdF91MjMyX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC02ODAsNyArNjg4LDggQEAKIAljYXNlIENTODoKIAkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzg7IGJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDgiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzg7CiAJCWJyZWFrOwogCX0KQEAgLTgxNyw3ICs4MjYsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbWN0X3UyMzJfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmbWN0X3UyMzJfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCmluZGV4IDdiNTM4Y2EuLmU3NzJjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwpAQCAtMzU1LDE0ICszNTUsMTYgQEAKIAkJbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IHVyYjsKIAogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJObyBtb3JlIHVyYnM/Pz9cbiIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJdXNiX2ZyZWVfdXJiKG1vczc3MjBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0pOwogCQkJbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IE5VTEw7CiAJCQljb250aW51ZTsKQEAgLTY5NCw3ICs2OTYsOCBAQAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC03MTQsOCArNzE3LDggQEAKIAkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkid2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC05NzUsNyArOTc4LDcgQEAKIAkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KIAlzdGF0dXMgPSBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGJhdWRyYXRlLCAmZGl2aXNvcik7CiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgYmF1ZCByYXRlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0xNDc4LDcgKzE0ODEsNyBAQAogCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCiAJbW9zNzcyMF9zZXJpYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9zY2hpcF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAobW9zNzcyMF9zZXJpYWwgPT0gTlVMTCkgewotCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDkxLDcgKzE0OTQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCW1vczc3MjBfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1vczc3MjBfcG9ydCA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CiAJCQlrZnJlZShtb3M3NzIwX3NlcmlhbCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1ODUsNyArMTU4OCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHVzYiAqLwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwppbmRleCA2MDU0M2Q3Li5mZGE0YTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKQEAgLTg0NCw3ICs4NDQsNyBAQAogCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC04NTMsNyArODUzLDkgQEAKIAkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gTlVMTDsKLQkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC0xMDIxLDggKzEwMjMsOCBAQAogCQkJICAgIHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmVzcG9uc2UpIHsKLQkJCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwKLQkJCQkgICAgX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgIgorCQkJCQkiaW50ZXJydXB0IHVyYlxuIiwgX19mdW5jX18sIHJlc3BvbnNlKTsKIAkJCX0KIAogCQl9CkBAIC0xMDU1LDggKzEwNTcsOCBAQAogCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CiAJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihtb3M3ODQwX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzcG9uc2UpIHsKLQkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3BvbnNlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJX19mdW5jX18sIHJlc3BvbnNlKTsKIAl9CiAKIAkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLwpAQCAtMTQ5Miw3ICsxNDk0LDggQEAKIAkJICAgIGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewotCQkJZXJyKCIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMTUxNyw4ICsxNTIwLDggQEAKIAogCWlmIChzdGF0dXMpIHsKIAkJbW9zNzg0MF9wb3J0LT5idXN5W2ldID0gMDsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkid2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0xODU2LDggKzE4NTksNyBAQAogCQkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KIAogCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKLQkJCWRiZygiJXNcbiIsICJiYWQgYmF1ZCByYXRlIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBiYXVkIHJhdGVcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAkJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCkBAIC0yNDQ2LDcgKzI0NDgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCW1vczc4NDBfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJaS0tOyAvKiBkb24ndCBmb2xsb3cgTlVMTCBwb2ludGVyIGNsZWFuaW5nIHVwICovCiAJCQlnb3RvIGVycm9yOwpAQCAtMjc0Myw3ICsyNzQ1LDggQEAKIAkJZ290byBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAKIAlkYmcoIiVzXG4iLCAiRW50cmluZy4uLiIpOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdXNiICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKaW5kZXggYzRkNzBiMC4uZGY2NTM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC0xNTQsOCArMTU0LDggQEAKIAogCW9kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghb2QpIHsKLQkJZXJyKCIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC4iLAotCQkJCV9fZnVuY19fLCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSkpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsCisJCQlfX2Z1bmNfXywgc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2RhdGEpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBvZCk7CkBAIC0xODMsOCArMTgzLDkgQEAKIAkJCW9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI0NCw4ICsyNDUsOSBAQAogCQkJb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAJcmV0dXJuOwogfQpAQCAtMjk4LDggKzMwMCw5IEBACiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIod3BvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewogCQl3cG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9IGVsc2UKIAkJcmVzdWx0ID0gY291bnQ7CiAKQEAgLTM2NCw3ICszNjcsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb21uaW5ldF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ6eXhlbF9vbW5pbmV0X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNmIxNzI3ZS4uM2Q4N2VhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNzksMjcgKzc5LDE2IEBACiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX1ZJUEVSCQkJMHg2NjAwCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX1ZJUEVSX0JVUwkJMHg2NjAxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0dUX01BWF9SRUFEWQkJMHg2NzAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0dUX01BWAkJCTB4NjcxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0xJR0hUCQkweDY3MjEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9HVAkJMHg2NzQxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fRVgJCTB4Njc2MQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfTElHSFQJMHg2NzMxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19HVAkJMHg2NzUxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19FWAkJMHg2NzcxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0tPSV9NT0RFTQkJMHg2ODAwCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0tPSV9ORVRXT1JLCQkweDY4MTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfU0NPUlBJT05fTU9ERU0JCTB4NjkwMQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9ORVRXT1JLCQkweDY5MTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTQkJMHg3MDAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SSwkJMHg3MDExCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fTElURQkJMHg3MDIxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fR1QJCTB4NzA0MQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0VYCQkweDcwNjEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0xJVEUJMHg3MDMxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19HVAkJMHg3MDUxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19FWAkJMHg3MDcxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX01PREVNCQkweDcxMDAKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTkVUV09SSwkJMHg3MTExCiAKICNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkJCTB4MTJEMQogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FNjAwCQkJMHgxMDAxCkBAIC0yMjAsNiArMjA5LDE2IEBACiAjZGVmaW5lIFpURV9QUk9EVUNUX01GNjI4CQkJMHgwMDE1CiAjZGVmaW5lIFpURV9QUk9EVUNUX0NETUFfVEVDSAkJCTB4ZmZmZQogCisvKiBFcmljc3NvbiBwcm9kdWN0cyAqLworI2RlZmluZSBFUklDU1NPTl9WRU5ET1JfSUQJCQkweDBiZGIKKyNkZWZpbmUgRVJJQ1NTT05fUFJPRFVDVF9GMzUwN0cJCQkweDE5MDAKKworLyogUGFudGVjaCBwcm9kdWN0cyAqLworI2RlZmluZSBQQU5URUNIX1ZFTkRPUl9JRAkJCTB4MTA2YworI2RlZmluZSBQQU5URUNIX1BST0RVQ1RfUEM1NzQwCQkJMHgzNzAxCisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NTAJCQkweDM3MDIgIC8qIFBYLTUwMCAqLworI2RlZmluZSBQQU5URUNIX1BST0RVQ1RfVU0xNTAJCQkweDM3MTEKKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBKSB9LApAQCAtMjM1LDI3ICsyMzQsMTYgQEAKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfVklQRVIpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1ZJUEVSX0JVUykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfR1RfTUFYX1JFQURZKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVF9NQVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fTElHSFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fR1QpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fRVgpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19MSUdIVCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0dUKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfRVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0tPSV9NT0RFTSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfS09JX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9ORVRXT1JLKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fTElURSkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9FWCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0xJVEUpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19HVCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0VYKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9NT0RFTSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0U2MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTIyMEJJUywgMHhmZiwgMHhmZiwgMHhmZikgfSwKQEAgLTMxOCw3ICszMDYsOCBAQAogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTM2KSB9LAkvKiBEZWxsIFdpcmVsZXNzIEhTRFBBIDU1MjAgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTg2MEQgKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODEzNykgfSwJLyogRGVsbCBXaXJlbGVzcyBIU0RQQSA1NTIwICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzgpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTUyMCBWb2RhIEkgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNEUEEpIE1pbmljYXJkICovCi0JeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVX0UxMDBBKSB9LAorCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTQ3KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MzAgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNQQSkgTWluaS1DYXJkICovCisJeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVX0UxMDBBKSB9LAkvKiBBRFUtRTEwMCwgQURVLTMxMCAqLwogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV81MDBBKSB9LAogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV82MjBVVykgfSwKIAl7IFVTQl9ERVZJQ0UoQVhFU1NURUxfVkVORE9SX0lELCBBWEVTU1RFTF9QUk9EVUNUX01WMTEwSCkgfSwKQEAgLTM0OSw2ICszMzgsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoVEVMSVRfVkVORE9SX0lELCBURUxJVF9QUk9EVUNUX1VDODY0RSkgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfTUY2MjgpIH0sCiAJeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0NETUFfVEVDSCkgfSwKKwl7IFVTQl9ERVZJQ0UoRVJJQ1NTT05fVkVORE9SX0lELCBFUklDU1NPTl9QUk9EVUNUX0YzNTA3RykgfSwKKwl7IFVTQl9ERVZJQ0UoUEFOVEVDSF9WRU5ET1JfSUQsIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NDApIH0sCisJeyBVU0JfREVWSUNFKFBBTlRFQ0hfVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfUEM1NzUwKSB9LAorCXsgVVNCX0RFVklDRShQQU5URUNIX1ZFTkRPUl9JRCwgUEFOVEVDSF9QUk9EVUNUX1VNMTUwKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKQEAgLTQyNyw3ICs0MjAsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX2RyaXZlcl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIjogIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggOTA4NDM3OC4uNDkxYzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCmluZGV4IDcyOTAzYWMuLjRiNDYzY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCkBAIC0yNTAsMTcgKzI1MCwxOCBAQAogCQlpZiAoIWZjcykgewogCQkJaW50IGFjdHVhbF9sZW5ndGggPSBkYXRhW2xlbmd0aCAtIDJdID4+IDI7CiAJCQlpZiAoYWN0dWFsX2xlbmd0aCA8PSAobGVuZ3RoIC0gMikpIHsKLQkJCQlpbmZvKCIlcyAtIGFjdHVhbDogJWQiLCBfX2Z1bmNfXywKLQkJCQkJCQlhY3R1YWxfbGVuZ3RoKTsKKwkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgIiVzIC0gYWN0dWFsOiAlZFxuIiwKKwkJCQkJIF9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoKTsKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwKIAkJCQkJCQlkYXRhLCBhY3R1YWxfbGVuZ3RoKTsKIAkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJfSBlbHNlIHsKLQkJCQllcnIoIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWQiLAorCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWRcbiIsCiAJCQkJCV9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoLCBsZW5ndGgpOwogCQkJfQogCQl9IGVsc2UgewotCQkJZXJyKCIlcyAtIGJhZCBDUkMgJXgiLCBfX2Z1bmNfXywgZmNzKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIENSQyAleFxuIiwgX19mdW5jX18sIGZjcyk7CiAJCX0KIAl9IGVsc2UgewogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuZ3RoKTsKQEAgLTI3Nyw4ICsyNzgsOSBAQAogCiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkvKiBGSVhNRTogTmVlZCBhIG1lY2hhbmlzbSB0byByZXRyeSBsYXRlciBpZiB0aGlzIGhhcHBlbnMgKi8KIH0KIApAQCAtMzY5LDggKzM3MSw5IEBACiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KSB7CiAJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCXJldHVybiAwOwogCX0KIAlkYmcoIiVzIHVyYjogJXAgc3VibWl0dGVkIiwgX19mdW5jX18sIHBvcnQtPndyaXRlX3VyYik7CkBAIC00MjgsMTQgKzQzMSwxMyBAQAogewogCWludCBpLCByZXR2YWw7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKLQlpbmZvKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4IHNhZmU6ICVkIHBhZGRlZDogJWRcbiIsCi0JCQkJCXZlbmRvciwgcHJvZHVjdCwgc2FmZSwgcGFkZGVkKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogaWYgd2UgaGF2ZSB2ZW5kb3IgLyBwcm9kdWN0IHBhcmFtZXRlcnMgcGF0Y2ggdGhlbSBpbnRvIGlkIGxpc3QgKi8KIAlpZiAodmVuZG9yIHx8IHByb2R1Y3QpIHsKLQkJaW5mbygidmVuZG9yOiAleCBwcm9kdWN0OiAleFxuIiwgdmVuZG9yLCBwcm9kdWN0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiB2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4XG4iLAorCQkgICAgICAgdmVuZG9yLCBwcm9kdWN0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpZF90YWJsZSk7IGkrKykgewogCQkJaWYgKCFpZF90YWJsZVtpXS5pZFZlbmRvciAmJiAhaWRfdGFibGVbaV0uaWRQcm9kdWN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggOGI5ZWFmMy4uMGYyYjY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCV9fdTE2IGludGVyZmFjZSA9IDA7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKQEAgLTI4NCw3ICsyODQsNyBAQAogc3RhdGljIHZvaWQgc2llcnJhX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAl0dHlfdGVybWlvc19jb3B5X2h3KHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOwogCXNpZXJyYV9zZW5kX3NldHVwKHR0eSwgcG9ydCk7CiB9CkBAIC0yOTUsNiArMjk1LDcgQEAKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAl2YWx1ZSA9ICgocG9ydGRhdGEtPnJ0c19zdGF0ZSkgPyBUSU9DTV9SVFMgOiAwKSB8CkBAIC0zMzQsMTQgKzMzNSwxNCBAQAogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLwogCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAogCWlmIChzdGF0dXMpCi0JCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzICIKKwkJICAgICJyZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCS0tcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnM7CkBAIC0zNjMsMTIgKzM2NCwxMiBAQAogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlkYmcoIiVzOiB3cml0ZSAoJWQgY2hhcnMpIiwgX19mdW5jX18sIGNvdW50KTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogd3JpdGUgKCVkIGNoYXJzKSIsIF9fZnVuY19fLCBjb3VudCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMgPiBOX09VVF9VUkIpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKLQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMrKzsKQEAgLTQzNyw4ICs0MzgsOCBAQAogCXBvcnQgPSAgdXJiLT5jb250ZXh0OwogCiAJaWYgKHN0YXR1cykgewotCQlkYmcoIiVzOiBub256ZXJvIHN0YXR1czogJWQgb24gZW5kcG9pbnQgJTAyeC4iLAotCQkgICAgX19mdW5jX18sIHN0YXR1cywgZW5kcG9pbnQpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogbm9uemVybyBzdGF0dXM6ICVkIG9uIgorCQkgICAgIiBlbmRwb2ludCAlMDJ4LiIsIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKIAl9IGVsc2UgewogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwpAQCAtNDQ3LDcgKzQ0OCw4IEBACiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0gZWxzZQotCQkJZGJnKCIlczogZW1wdHkgcmVhZCB1cmIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZW1wdHkgcmVhZCB1cmIiCisJCQkJIiByZWNlaXZlZCIsIF9fZnVuY19fKTsKIAogCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CkBAIC00NjgsMTUgKzQ3MCwxNyBAQAogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKLQlkYmcoIiVzOiB1cmIgJXAgcG9ydCAlcCBoYXMgZGF0YSAlcCIsIF9fZnVuY19fLCB1cmIsIHBvcnQsIHBvcnRkYXRhKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogdXJiICVwIHBvcnQgJXAgaGFzIGRhdGEgJXAiLCBfX2Z1bmNfXywKKwkJdXJiLCBwb3J0LCBwb3J0ZGF0YSk7CiAKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxX3BrdCA9CiAJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCQlpZiAoIXJlcV9wa3QpIHsKLQkJCWRiZygiJXM6IE5VTEwgcmVxX3BrdFxuIiwgX19mdW5jX18pOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IE5VTEwgcmVxX3BrdFxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKChyZXFfcGt0LT5iUmVxdWVzdFR5cGUgPT0gMHhBMSkgJiYKQEAgLTQ4Nyw3ICs0OTEsOCBAQAogCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCkpOwogCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCQkJZGJnKCIlczogc2lnbmFsIHgleCIsIF9fZnVuY19fLCBzaWduYWxzKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBzaWduYWwgeCV4IiwgX19mdW5jX18sCisJCQkJc2lnbmFscyk7CiAKIAkJCW9sZF9kY2Rfc3RhdGUgPSBwb3J0ZGF0YS0+ZGNkX3N0YXRlOwogCQkJcG9ydGRhdGEtPmN0c19zdGF0ZSA9IDE7CkBAIC01MDEsMTkgKzUwNiwyMCBAQAogCQkJCXR0eV9oYW5ndXAodHR5KTsKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9IGVsc2UgewotCQkJZGJnKCIlczogdHlwZSAleCByZXEgJXgiLCBfX2Z1bmNfXywKLQkJCQlyZXFfcGt0LT5iUmVxdWVzdFR5cGUsIHJlcV9wa3QtPmJSZXF1ZXN0KTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB0eXBlICV4IHJlcSAleCIsCisJCQkJX19mdW5jX18sIHJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwKKwkJCQlyZXFfcGt0LT5iUmVxdWVzdCk7CiAJCX0KIAl9IGVsc2UKLQkJZGJnKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nIElSUSBkYXRhICovCiAJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCi0JCQlkYmcoIiVzOiByZXN1Ym1pdCBpbnRyIHVyYiBmYWlsZWQuICglZCkiLAotCQkJCV9fZnVuY19fLCBlcnIpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHJlc3VibWl0IGludHIgdXJiICIKKwkJCQkiZmFpbGVkLiAoJWQpIiwJX19mdW5jX18sIGVycik7CiAJfQogfQogCkBAIC01MjMsMTQgKzUyOSwxNCBAQAogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qIHRyeSB0byBnaXZlIGEgZ29vZCBudW1iZXIgYmFjayBiYXNlZCBvbiBpZiB3ZSBoYXZlIGFueSBmcmVlIHVyYnMgYXQKIAkgKiB0aGlzIHBvaW50IGluIHRpbWUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMgPiBOX09VVF9VUkIgKiAyIC8gMykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwpAQCAtNTQ5LDcgKzU1NSw3IEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBTZXQgc29tZSBzYW5lIGRlZmF1bHRzICovCiAJcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDE7CkBAIC01NjEsOCArNTY3LDggQEAKIAkJaWYgKCF1cmIpCiAJCQljb250aW51ZTsKIAkJaWYgKHVyYi0+ZGV2ICE9IHNlcmlhbC0+ZGV2KSB7Ci0JCQlkYmcoIiVzOiBkZXYgJXAgIT0gJXAiLCBfX2Z1bmNfXywKLQkJCQl1cmItPmRldiwgc2VyaWFsLT5kZXYpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGRldiAlcCAhPSAlcCIsCisJCQkJIF9fZnVuY19fLCB1cmItPmRldiwgc2VyaWFsLT5kZXYpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNjAxLDcgKzYwNyw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDA7CkBAIC02MzAsNyArNjM2LDcgQEAKIAlpbnQgaTsKIAlpbnQgajsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmc2VyaWFsLT5kZXYtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCiAJLyogU2V0IERldmljZSBtb2RlIHRvIEQwICovCiAJc2llcnJhX3NldF9wb3dlcl9zdGF0ZShzZXJpYWwtPmRldiwgMHgwMDAwKTsKQEAgLTY0NCw4ICs2NTAsOSBAQAogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0ZGF0YSksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnRkYXRhKSB7Ci0JCQlkYmcoIiVzOiBrbWFsbG9jIGZvciBzaWVycmFfcG9ydF9wcml2YXRlICglZCkgZmFpbGVkIS4iLAotCQkJCQlfX2Z1bmNfXywgaSk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczoga21hbGxvYyBmb3IgIgorCQkJCSJzaWVycmFfcG9ydF9wcml2YXRlICglZCkgZmFpbGVkIS4iLAorCQkJCV9fZnVuY19fLCBpKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCXNwaW5fbG9ja19pbml0KCZwb3J0ZGF0YS0+bG9jayk7CkBAIC02NjUsOCArNjcyLDggQEAKIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyArK2opIHsKIAkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCQlkYmcoIiVzOiBhbGxvYyBmb3IgaW4gcG9ydCBmYWlsZWQuIiwKLQkJCQkgICAgX19mdW5jX18pOworCQkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBhbGxvYyBmb3IgaW4gIgorCQkJCQkicG9ydCBmYWlsZWQuIiwgX19mdW5jX18pOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJLyogRmlsbCBVUkIgdXNpbmcgc3VwcGxpZWQgZGF0YS4gKi8KQEAgLTY4OCw3ICs2OTUsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwpAQCAtNzQzLDcgKzc1MCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfZHJpdmVyX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiOiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCmluZGV4IDE1MzNkNmUuLmE2NWJjMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtNTg5LDggKzU4OSw4IEBACiAJY2FzZSAxMDAwMDAwOgogCQkJYnVmWzBdID0gMHgwYjsJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJzcGNwODI1IGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBiYXVkcmF0ZSAiCi0JCSAgICAicmVxdWVzdGVkLCB1c2luZyBkZWZhdWx0IG9mIDk2MDAuIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInNwY3A4MjUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlICIKKwkJCSJiYXVkcmF0ZSByZXF1ZXN0ZWQsIHVzaW5nIGRlZmF1bHQgb2YgOTYwMC5cbiIpOwogCX0KIAogCS8qIFNldCBEYXRhIExlbmd0aCA6IDAwOjViaXQsIDAxOjZiaXQsIDEwOjdiaXQsIDExOjhiaXQgKi8KQEAgLTYyOSw3ICs2MjksOCBAQAogCQkJICAgIFNFVF9VQVJUX0ZPUk1BVF9UWVBFLCBTRVRfVUFSVF9GT1JNQVQsCiAJCQkgICAgdWFydGRhdGEsIDAsIE5VTEwsIDAsIDEwMCk7CiAJaWYgKGkgPCAwKQotCQllcnIoIlNldCBVQVJUIGZvcm1hdCAlI3ggZmFpbGVkIChlcnJvciA9ICVkKSIsIHVhcnRkYXRhLCBpKTsKKwkJZGV2X2VycigmcG9ydC0+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+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNikgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IDZmYTBiOWQuLmQ0Y2ZlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogCiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZGVmaW5lIEhQNjgwX01BWF9JTlRFTlNJVFkgMjU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggMjE3YzUxMS4uY2Q1ZjIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTAwMiwxMDEgKzEwMDIsMTMyIEBACiAgCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgCi1mYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKK3N0YXRpYyBsb25nCitmYl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwotCXN0cnVjdCBmYl9vcHMgKmZiID0gaW5mby0+ZmJvcHM7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGZiX29wcyAqZmI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsKIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OwogCXN0cnVjdCBmYl9jb24yZmJtYXAgY29uMmZiOwogCXN0cnVjdCBmYl9jbWFwX3VzZXIgY21hcDsKIAlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JaW50IGk7Ci0JCi0JaWYgKCFmYikKKwlsb25nIHJldCA9IDA7CisKKwlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CisJZmIgPSBpbmZvLT5mYm9wczsKKworCWlmICghZmIpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT52YXIsCisJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+dmFyLAogCQkJCSAgICBzaXplb2YodmFyKSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPUFVUX1ZTQ1JFRU5JTkZPOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhciwgYXJncCwgc2l6ZW9mKHZhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpIHsKKwkJCXJldCA9ICAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCWkgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOworCQlyZXQgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCWlmIChpKSByZXR1cm4gaTsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7CisJCWlmIChyZXQgPT0gMCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPR0VUX0ZTQ1JFRU5JTkZPOgotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT5maXgsCisJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+Zml4LAogCQkJCSAgICBzaXplb2YoZml4KSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPUFVUQ01BUDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWFwLCBhcmdwLCBzaXplb2YoY21hcCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAoZmJfc2V0X3VzZXJfY21hcCgmY21hcCwgaW5mbykpOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gZmJfc2V0X3VzZXJfY21hcCgmY21hcCwgaW5mbyk7CisJCWJyZWFrOwogCWNhc2UgRkJJT0dFVENNQVA6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY21hcCwgYXJncCwgc2l6ZW9mKGNtYXApKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gZmJfY21hcF90b191c2VyKCZpbmZvLT5jbWFwLCAmY21hcCk7CisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSBmYl9jbWFwX3RvX3VzZXIoJmluZm8tPmNtYXAsICZjbWFwKTsKKwkJYnJlYWs7CiAJY2FzZSBGQklPUEFOX0RJU1BMQVk6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CiAJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQkJaSA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZ2YXIpOworCQlyZXQgPSBmYl9wYW5fZGlzcGxheShpbmZvLCAmdmFyKTsKIAkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlpZiAoaSkKLQkJCXJldHVybiBpOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJaWYgKHJldCA9PSAwICYmIGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKIAljYXNlIEZCSU9fQ1VSU09SOgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPR0VUX0NPTjJGQk1BUDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb24yZmIsIGFyZ3AsIHNpemVvZihjb24yZmIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoY29uMmZiLmNvbnNvbGUgPCAxIHx8IGNvbjJmYi5jb25zb2xlID4gTUFYX05SX0NPTlNPTEVTKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JCWNvbjJmYi5mcmFtZWJ1ZmZlciA9IC0xOwotCQlldmVudC5pbmZvID0gaW5mbzsKLQkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQLCAmZXZlbnQpOwotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZjb24yZmIsCisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlIGlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCWNvbjJmYi5mcmFtZWJ1ZmZlciA9IC0xOworCQkJZXZlbnQuaW5mbyA9IGluZm87CisJCQlldmVudC5kYXRhID0gJmNvbjJmYjsKKwkJCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQLAorCQkJCQkJCQkmZXZlbnQpOworCQkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZjb24yZmIsCiAJCQkJICAgIHNpemVvZihjb24yZmIpKSA/IC1FRkFVTFQgOiAwOworCQl9CisJCWJyZWFrOwogCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmY29uMmZiLCBhcmdwLCBzaXplb2YoY29uMmZiKSkpCi0JCQlyZXR1cm4gLSBFRkFVTFQ7Ci0JCWlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGNvbjJmYi5mcmFtZWJ1ZmZlciA8IDAgfHwgY29uMmZiLmZyYW1lYnVmZmVyID49IEZCX01BWCkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbjJmYiwgYXJncCwgc2l6ZW9mKGNvbjJmYikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb24yZmIuZnJhbWVidWZmZXIgPCAwIHx8IGNvbjJmYi5mcmFtZWJ1ZmZlciA+PSBGQl9NQVgpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQlpZiAoIXJlZ2lzdGVyZWRfZmJbY29uMmZiLmZyYW1lYnVmZmVyXSkKLQkJICAgIHJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgY29uMmZiLmZyYW1lYnVmZmVyKTsKLQkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgY29uMmZiLmZyYW1lYnVmZmVyKTsKKwkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCXJldHVybiBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCwKKwkJcmV0ID0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAsCiAJCQkJCSAgICAgICZldmVudCk7CisJCWJyZWFrOwogCWNhc2UgRkJJT0JMQU5LOgogCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJaSA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CisJCXJldCA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIGk7CisJCWJyZWFrOzsKIAlkZWZhdWx0OgogCQlpZiAoZmItPmZiX2lvY3RsID09IE5VTEwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGZiLT5mYl9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CisJCQlyZXQgPSAtRU5PVFRZOworCQllbHNlCisJCQlyZXQgPSBmYi0+ZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOwogCX0KKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xMTUwLDcgKzExODEsNyBAQAogCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+dHJhbnNwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CisJZXJyID0gZmJfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CiAKIAlpZiAoIWVycikgewogCQlpZiAoY29weV9pbl91c2VyKCZjbWFwMzItPnN0YXJ0LApAQCAtMTIwNCw3ICsxMjM1LDcgQEAKIAogCW9sZF9mcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKKwllcnIgPSBmYl9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmICghZXJyKQpAQCAtMTIyMiw3ICsxMjUzLDcgQEAKIAlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOwogCWxvbmcgcmV0ID0gLUVOT0lPQ1RMQ01EOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgogCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKQEAgLTEyMzEsNyArMTI2Miw3IEBACiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKIAkJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTsKIAljYXNlIEZCSU9CTEFOSzoKLQkJcmV0ID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0ID0gZmJfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAogCWNhc2UgRkJJT0dFVF9GU0NSRUVOSU5GTzoKQEAgLTEyNDgsNyArMTI3OSw3IEBACiAJCQlyZXQgPSBmYi0+ZmJfY29tcGF0X2lvY3RsKGluZm8sIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKQEAgLTEyNzAsMTMgKzEzMDEsMTMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGZiLT5mYl9tbWFwKSB7CiAJCWludCByZXM7Ci0JCWxvY2tfa2VybmVsKCk7CisJCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwogCQlyZXMgPSBmYi0+ZmJfbW1hcChpbmZvLCB2bWEpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfQogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAogCS8qIGZyYW1lIGJ1ZmZlciBtZW1vcnkgKi8KIAlzdGFydCA9IGluZm8tPmZpeC5zbWVtX3N0YXJ0OwpAQCAtMTI4NSwxMyArMTMxNiwxMyBAQAogCQkvKiBtZW1vcnkgbWFwcGVkIGlvICovCiAJCW9mZiAtPSBsZW47CiAJCWlmIChpbmZvLT52YXIuYWNjZWxfZmxhZ3MpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlzdGFydCA9IGluZm8tPmZpeC5tbWlvX3N0YXJ0OwogCQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJc3RhcnQgJj0gUEFHRV9NQVNLOwogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICsgb2ZmKSA+IGxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzE1LDEzICsxMzQ2LDEzIEBACiAKIAlpZiAoZmJpZHggPj0gRkJfTUFYKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlsb2NrX2tlcm5lbCgpOwotCWlmICghKGluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XSkpCisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCWlmICghaW5mbykKIAkJcmVxdWVzdF9tb2R1bGUoImZiJWQiLCBmYmlkeCk7Ci0JaWYgKCEoaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdKSkgewotCQlyZXMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9CisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChpbmZvLT5mYm9wcy0+b3duZXIpKSB7CiAJCXJlcyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtMTMzNyw3ICsxMzY4LDcgQEAKIAkJZmJfZGVmZXJyZWRfaW9fb3BlbihpbmZvLCBpbm9kZSwgZmlsZSk7CiAjZW5kaWYKIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMzQ2LDExICsxMzc3LDExIEBACiB7CiAJc3RydWN0IGZiX2luZm8gKiBjb25zdCBpbmZvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3JlbGVhc2UpCiAJCWluZm8tPmZib3BzLT5mYl9yZWxlYXNlKGluZm8sMSk7CiAJbW9kdWxlX3B1dChpbmZvLT5mYm9wcy0+b3duZXIpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMzU4LDcgKzEzODksNyBAQAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCWZiX3JlYWQsCiAJLndyaXRlID0JZmJfd3JpdGUsCi0JLmlvY3RsID0JZmJfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gZmJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBmYl9jb21wYXRfaW9jdGwsCiAjZW5kaWYKQEAgLTE0MjksNiArMTQ2MCw3IEBACiAJCWlmICghcmVnaXN0ZXJlZF9mYltpXSkKIAkJCWJyZWFrOwogCWZiX2luZm8tPm5vZGUgPSBpOworCW11dGV4X2luaXQoJmZiX2luZm8tPmxvY2spOwogCiAJZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgZmJfaW5mby0+ZGV2aWNlLAogCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCBOVUxMLCAiZmIlZCIsIGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbWFjZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9pbWFjZmIuYworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDRjMzJjMDYuLmVmZmY2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogCiAjZGVmaW5lIFBBTEVUVEVfTlIgMTYKIApAQCAtMzQsNyArMzQsOSBAQAogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOworI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCXN0cnVjdCBjbGsgKmNsazsKKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbGRkY2tyOwogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuIGNoWzJdOwogfTsKQEAgLTI2MCw2ICsyNjIsMTEgQEAKIAkJdG1wID0gY2gtPmxkbXQxcl92YWx1ZTsKIAkJdG1wIHw9IChsY2RfY2ZnLT5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKSA/IDAgOiAxIDw8IDI4OwogCQl0bXAgfD0gKGxjZF9jZmctPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkgPyAwIDogMSA8PCAyNzsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EV1BPTCkgPyAxIDw8IDI2IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19ESVBPTCkgPyAxIDw8IDI1IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EQVBPTCkgPyAxIDw8IDI0IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19IU0NOVCkgPyAxIDw8IDE3IDogMDsKKwkJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EV0NOVCkgPyAxIDw8IDE2IDogMDsKIAkJbGNkY193cml0ZV9jaGFuKGNoLCBMRE1UMVIsIHRtcCk7CiAKIAkJLyogc2V0dXAgU1lTIGJ1cyAqLwpAQCAtNDIyLDYgKzQyOSw3IEBACiAKIAlwcml2LT5sZGRja3IgPSBpY2tzZWwgPDwgMTY7CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlpZiAoc3RyKSB7CiAJCXByaXYtPmNsayA9IGNsa19nZXQoZGV2LCBzdHIpOwogCQlpZiAoSVNfRVJSKHByaXYtPmNsaykpIHsKQEAgLTQzMSw2ICs0MzksNyBAQAogCiAJCWNsa19lbmFibGUocHJpdi0+Y2xrKTsKIAl9CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpAQCAtNTg1LDcgKzU5NCw2IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlwcml2LT5sZGRja3IgPSBwZGF0YS0+bGRkY2tyOwogCXByaXYtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKQEAgLTY4OCwxMCArNjk2LDEyIEBACiAJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiAJfQogCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKHByaXYtPmNsaykgewogCQljbGtfZGlzYWJsZShwcml2LT5jbGspOwogCQljbGtfcHV0KHByaXYtPmNsayk7CiAJfQorI2VuZGlmCiAKIAlpZiAocHJpdi0+YmFzZSkKIAkJaW91bm1hcChwcml2LT5iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjc2MC5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKaW5kZXggZWQ2YjA1Ny4uMWYwOWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKQEAgLTgwLDcgKzgwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAidzFfc2xhdmUiLAogCQkubW9kZSA9IFNfSVJVR08sCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzI3NjBfREFUQV9TSVpFLAogCS5yZWFkID0gdzFfZHMyNzYwX3JlYWRfYmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCmluZGV4IDA1YTI4MTAuLjg3ODJlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoaSA9IDB4MEY7IGkgPiAtMTsgaS0tKQotCQlpZiAod2RfdGltZXNbaV0gPiB0KQorCQlpZiAod2RfdGltZXNbaV0gPj0gdCkKIAkJCWJyZWFrOwogCXdkX21hcmdpbiA9IGk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IGMzMjkwYmMuLjljZTFhYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAogCUJVR19PTihpcnEgPT0gLTEpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlpcnFfdG9fZGVzYyhpcnEpLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAjZW5kaWYKIAogCV9fY2xlYXJfYml0KGNobiwgY3B1X2V2dGNobl9tYXNrW2NwdV9ldnRjaG5bY2huXV0pOwpAQCAtMTM3LDEwICsxMzcsMTIgQEAKIHN0YXRpYyB2b2lkIGluaXRfZXZ0Y2huX2NwdV9iaW5kaW5ncyh2b2lkKQogewogI2lmZGVmIENPTkZJR19TTVAKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CisKIAkvKiBCeSBkZWZhdWx0IGFsbCBldmVudCBjaGFubmVscyBub3RpZnkgQ1BVIzAuICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJaXJxX2Rlc2NbaV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKQorCQlkZXNjLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KDApOwogI2VuZGlmCiAKIAltZW1zZXQoY3B1X2V2dGNobiwgMCwgc2l6ZW9mKGNwdV9ldnRjaG4pKTsKQEAgLTIyOSwxMiArMjMxLDEyIEBACiAJaW50IGlycTsKIAogCS8qIE9ubHkgYWxsb2NhdGUgZnJvbSBkeW5pcnEgcmFuZ2UgKi8KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCWZvcl9lYWNoX2lycV9ucihpcnEpCiAJCWlmIChpcnFfYmluZGNvdW50W2lycV0gPT0gMCkKIAkJCWJyZWFrOwogCi0JaWYgKGlycSA9PSBOUl9JUlFTKQotCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBOUl9JUlFTIVxuIik7CisJaWYgKGlycSA9PSBucl9pcnFzKQorCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBucl9pcnFzIVxuIik7CiAKIAlyZXR1cm4gaXJxOwogfQpAQCAtNzkwLDcgKzc5Miw3IEBACiAJCW1hc2tfZXZ0Y2huKGV2dGNobik7CiAKIAkvKiBObyBJUlEgPC0+IGV2ZW50LWNoYW5uZWwgbWFwcGluZ3MuICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKKwlmb3JfZWFjaF9pcnFfbnIoaXJxKQogCQlpcnFfaW5mb1tpcnFdLmV2dGNobiA9IDA7IC8qIHphcCBldmVudC1jaGFubmVsIGJpbmRpbmcgKi8KIAogCWZvciAoZXZ0Y2huID0gMDsgZXZ0Y2huIDwgTlJfRVZFTlRfQ0hBTk5FTFM7IGV2dGNobisrKQpAQCAtODIyLDcgKzgyNCw3IEBACiAJCW1hc2tfZXZ0Y2huKGkpOwogCiAJLyogRHluYW1pYyBJUlEgc3BhY2UgaXMgY3VycmVudGx5IHVuYm91bmQuIFplcm8gdGhlIHJlZmNudHMuICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKKwlmb3JfZWFjaF9pcnFfbnIoaSkKIAkJaXJxX2JpbmRjb3VudFtpXSA9IDA7CiAKIAlpcnFfY3R4X2luaXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCBjMDYxYzNmLi4yNGViMDEwIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+Ci0jaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KKyNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInY5ZnNfdmZzLmgiCiAKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWlmICghdjlzZXMtPmNsbnQtPmRvdHUpCiAJCXY5c2VzLT5mbGFncyAmPSB+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+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJnN0LT5xaWQpOworCiAJdjlmc19zdGF0Mmlub2RlKHN0LCByb290LT5kX2lub2RlLCBzYik7CisKIAl2OWZzX2ZpZF9hZGQocm9vdCwgZmlkKTsKKwlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwogCitQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiByZXR1cm4gc2ltcGxlIHNldCBtb3VudFxuIik7CiAJcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOwogCiByZWxlYXNlX3NiOgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggOWU5ZDcwYy4uZTQ2Mjk3ZiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC02LDYxICs2LDkgQEAKIAogaWYgQkxPQ0sKIAotY29uZmlnIEVYVDJfRlMKLQl0cmlzdGF0ZSAiU2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQiCi0JaGVscAotCSAgRXh0MiBpcyBhIHN0YW5kYXJkIExpbnV4IGZpbGUgc3lzdGVtIGZvciBoYXJkIGRpc2tzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0Mi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQotY29uZmlnIEVYVDJfRlNfWEFUVFIKLQlib29sICJFeHQyIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTCi0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQyX0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0MiBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDIgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgRVhUMl9GU19YSVAKLQlib29sICJFeHQyIGV4ZWN1dGUgaW4gcGxhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEVYVDJfRlMgJiYgTU1VCi0JaGVscAotCSAgRXhlY3V0ZSBpbiBwbGFjZSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuIElmIHlvdQotCSAgZW5hYmxlIHRoaXMgb3B0aW9uLCB5b3UgY2FuIHNlbGVjdCB0byBtb3VudCBibG9jayBkZXZpY2VzIHdoaWNoIGFyZQotCSAgY2FwYWJsZSBvZiB0aGlzIGZlYXR1cmUgd2l0aG91dCB1c2luZyB0aGUgcGFnZSBjYWNoZS4KLQotCSAgSWYgeW91IGRvIG5vdCB1c2UgYSBibG9jayBkZXZpY2UgdGhhdCBpcyBjYXBhYmxlIG9mIHVzaW5nIHRoaXMsCi0JICBvciBpZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9leHQyL0tjb25maWciCitzb3VyY2UgImZzL2V4dDMvS2NvbmZpZyIKK3NvdXJjZSAiZnMvZXh0NC9LY29uZmlnIgogCiBjb25maWcgRlNfWElQCiAjIGV4ZWN1dGUgaW4gcGxhY2UKQEAgLTY4LDIxOCArMTYsOCBAQAogCWRlcGVuZHMgb24gRVhUMl9GU19YSVAKIAlkZWZhdWx0IHkKIAotY29uZmlnIEVYVDNfRlMKLQl0cmlzdGF0ZSAiRXh0MyBqb3VybmFsbGluZyBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCXNlbGVjdCBKQkQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBqb3VybmFsbGluZyB2ZXJzaW9uIG9mIHRoZSBTZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KLQkgIChvZnRlbiBjYWxsZWQgZXh0MyksIHRoZSBkZSBmYWN0byBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbQotCSAgKG1ldGhvZCB0byBvcmdhbml6ZSBmaWxlcyBvbiBhIHN0b3JhZ2UgZGV2aWNlKSBmb3IgaGFyZCBkaXNrcy4KLQotCSAgVGhlIGpvdXJuYWxsaW5nIGNvZGUgaW5jbHVkZWQgaW4gdGhpcyBkcml2ZXIgbWVhbnMgeW91IGRvIG5vdCBoYXZlCi0JICB0byBydW4gZTJmc2NrIChmaWxlIHN5c3RlbSBjaGVja2VyKSBvbiB5b3VyIGZpbGUgc3lzdGVtcyBhZnRlciBhCi0JICBjcmFzaC4gIFRoZSBqb3VybmFsIGtlZXBzIHRyYWNrIG9mIGFueSBjaGFuZ2VzIHRoYXQgd2VyZSBiZWluZyBtYWRlCi0JICBhdCB0aGUgdGltZSB0aGUgc3lzdGVtIGNyYXNoZWQsIGFuZCBjYW4gZW5zdXJlIHRoYXQgeW91ciBmaWxlIHN5c3RlbQotCSAgaXMgY29uc2lzdGVudCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxlbmd0aHkgY2hlY2suCi0KLQkgIE90aGVyIHRoYW4gYWRkaW5nIHRoZSBqb3VybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSwgdGhlIG9uLWRpc2sgZm9ybWF0Ci0JICBvZiBleHQzIGlzIGlkZW50aWNhbCB0byBleHQyLiAgSXQgaXMgcG9zc2libGUgdG8gZnJlZWx5IHN3aXRjaAotCSAgYmV0d2VlbiB1c2luZyB0aGUgZXh0MyBkcml2ZXIgYW5kIHRoZSBleHQyIGRyaXZlciwgYXMgbG9uZyBhcyB0aGUKLQkgIGZpbGUgc3lzdGVtIGhhcyBiZWVuIGNsZWFubHkgdW5tb3VudGVkLCBvciBlMmZzY2sgaXMgcnVuIG9uIHRoZSBmaWxlCi0JICBzeXN0ZW0uCi0KLQkgIFRvIGFkZCBhIGpvdXJuYWwgb24gYW4gZXhpc3RpbmcgZXh0MiBmaWxlIHN5c3RlbSBvciBjaGFuZ2UgdGhlCi0JICBiZWhhdmlvciBvZiBleHQzIGZpbGUgc3lzdGVtcywgeW91IGNhbiB1c2UgdGhlIHR1bmUyZnMgdXRpbGl0eSAoIm1hbgotCSAgdHVuZTJmcyIpLiAgVG8gbW9kaWZ5IGF0dHJpYnV0ZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIGV4dDMKLQkgIGZpbGUgc3lzdGVtcywgdXNlIGNoYXR0ciAoIm1hbiBjaGF0dHIiKS4gIFlvdSBuZWVkIHRvIGJlIHVzaW5nCi0JICBlMmZzcHJvZ3MgdmVyc2lvbiAxLjIwIG9yIGxhdGVyIGluIG9yZGVyIHRvIGNyZWF0ZSBleHQzIGpvdXJuYWxzCi0JICAoYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncy8+KS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDMuCi0KLWNvbmZpZyBFWFQzX0ZTX1hBVFRSCi0JYm9vbCAiRXh0MyBleHRlbmRlZCBhdHRyaWJ1dGVzIgotCWRlcGVuZHMgb24gRVhUM19GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLQkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDMuCi0KLWNvbmZpZyBFWFQzX0ZTX1BPU0lYX0FDTAotCWJvb2wgIkV4dDMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCi0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgRVhUM19GU19TRUNVUklUWQotCWJvb2wgIkV4dDMgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBleHQzIGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEVYVDRfRlMKLQl0cmlzdGF0ZSAiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW0iCi0Jc2VsZWN0IEpCRDIKLQlzZWxlY3QgQ1JDMTYKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS4KLQotCSAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLAotCSAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aAotCSAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdAotCSAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkCi0JICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcywKLQkgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZAotCSAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdAotCSAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLgotCi0JICBUaGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgc3VwcG9ydCBtb3VudGluZyBhbiBleHQzCi0JICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQotCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAotCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCi0JICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0Ci0JICBmaWxlc3lzdGVtIGluaXRpYWxseS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDRkZXYuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBFWFQ0REVWX0NPTVBBVAotCWJvb2wgIkVuYWJsZSBleHQ0ZGV2IGNvbXBhdGliaWxpdHkiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTCi0JaGVscAotCSAgU3RhcnRpbmcgd2l0aCAyLjYuMjgsIHRoZSBuYW1lIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0gd2FzCi0JICByZW5hbWVkIGZyb20gZXh0NGRldiB0byBleHQ0LiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZQotCSAgbGVnYWN5IHVzZXJzcGFjZSBwcm9ncmFtcyAoc3VjaCBhcyBrbGliYydzIGZzdHlwZSkgaGF2ZQotCSAgImV4dDRkZXYiIGhhcmRjb2RlZC4KLQotCSAgVG8gZW5hYmxlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNvIHRoYXQgc3lzdGVtcyB0aGF0IGFyZQotCSAgc3RpbGwgZXhwZWN0aW5nIHRvIG1vdW50IGV4dDQgZmlsZXN5c3RlbXMgdXNpbmcgZXh0NGRldiwKLQkgIGNob3NlIFkgaGVyZS4gICBUaGlzIGZlYXR1cmUgd2lsbCBnbyBhd2F5IGJ5IDIuNi4zMSwgc28KLQkgIHBsZWFzZSBhcnJhbmdlIHRvIGdldCB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyBmaXhlZCEKLQotY29uZmlnIEVYVDRfRlNfWEFUVFIKLQlib29sICJFeHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0NC4KLQotY29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDRfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUE9TSVggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0NCBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgSkJECi0JdHJpc3RhdGUKLQloZWxwCi0JICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcy4gIEl0IGlzCi0JICBjdXJyZW50bHkgdXNlZCBieSB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgYnV0IGl0IGNvdWxkIGFsc28gYmUKLQkgIHVzZWQgdG8gYWRkIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sKLQkgIGRldmljZXMgc3VjaCBhcyBSQUlEIG9yIExWTS4KLQotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDMgdGhlbiB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCBqYmQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQzIGludG8gdGhlIGtlcm5lbCwgeW91Ci0JICBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCi0KLWNvbmZpZyBKQkRfREVCVUcKLQlib29sICJKQkQgKGV4dDMpIGRlYnVnZ2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSkJEICYmIERFQlVHX0ZTCi0JaGVscAotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yIHBvdGVudGlhbGx5IGFueQotCSAgb3RoZXIgZmlsZSBzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRCksIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8KLQkgIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywgaW4gb3JkZXIgdG8KLQkgIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuICBCeSBkZWZhdWx0IHRoZQotCSAgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCi0KLQkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKLQkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLCB3aGVyZSBOIGlzIGEKLQkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUsIHRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCi0JICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbwotCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLgotCi1jb25maWcgSkJEMgotCXRyaXN0YXRlCi0Jc2VsZWN0IENSQzMyCi0JaGVscAotCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcyB0aGF0IHN1cHBvcnQKLQkgIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYmxvY2sgbnVtYmVycy4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5Ci0JICB0aGUgZXh0NCBhbmQgT0NGUzIgZmlsZXN5c3RlbXMsIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gYWRkCi0JICBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrIGRldmljZXMgc3VjaAotCSAgYXMgUkFJRCBvciBMVk0uCi0KLQkgIElmIHlvdSBhcmUgdXNpbmcgZXh0NCBvciBPQ0ZTMiwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDQgb3IgT0NGUzIgdGhlbiB5b3Ugd2lsbAotCSAgcHJvYmFibHkgd2FudCB0byBzYXkgTi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgamJkMi4gIElmIHlvdSBhcmUgY29tcGlsaW5nIGV4dDQgb3IgT0NGUzIgaW50byB0aGUga2VybmVsLAotCSAgeW91IGNhbm5vdCBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZS4KLQotY29uZmlnIEpCRDJfREVCVUcKLQlib29sICJKQkQyIChleHQ0KSBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEpCRDIgJiYgREVCVUdfRlMKLQloZWxwCi0JICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBleHQ0IGpvdXJuYWxlZCBmaWxlIHN5c3RlbSAob3IKLQkgIHBvdGVudGlhbGx5IGFueSBvdGhlciBmaWxlc3lzdGVtL2RldmljZSB1c2luZyBKQkQyKSwgdGhpcyBvcHRpb24KLQkgIGFsbG93cyB5b3UgdG8gZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQgd2hpbGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nLAotCSAgaW4gb3JkZXIgdG8gaGVscCB0cmFjayBkb3duIGFueSBwcm9ibGVtcyB5b3UgYXJlIGhhdmluZy4KLQkgIEJ5IGRlZmF1bHQsIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IHdpbGwgYmUgdHVybmVkIG9mZi4KLQotCSAgSWYgeW91IHNlbGVjdCBZIGhlcmUsIHRoZW4geW91IHdpbGwgYmUgYWJsZSB0byB0dXJuIG9uIGRlYnVnZ2luZwotCSAgd2l0aCAiZWNobyBOID4gL3N5cy9rZXJuZWwvZGVidWcvamJkMi9qYmQyLWRlYnVnIiwgd2hlcmUgTiBpcyBhCi0JICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LiBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZwotCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KLQkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQyL2piZDItZGVidWciLgorc291cmNlICJmcy9qYmQvS2NvbmZpZyIKK3NvdXJjZSAiZnMvamJkMi9LY29uZmlnIgogCiBjb25maWcgRlNfTUJDQUNIRQogIyBNZXRhIGJsb2NrIGNhY2hlIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIChleHQyL2V4dDMvZXh0NCkKQEAgLTY2NSw3ICs0MDMsNyBAQAogCSAgTiBoZXJlLgogCiBjb25maWcgRlVTRV9GUwotCXRyaXN0YXRlICJGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSBzdXBwb3J0IgorCXRyaXN0YXRlICJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydCIKIAloZWxwCiAJICBXaXRoIEZVU0UgaXQgaXMgcG9zc2libGUgdG8gaW1wbGVtZW50IGEgZnVsbHkgZnVuY3Rpb25hbCBmaWxlc3lzdGVtCiAJICBpbiBhIHVzZXJzcGFjZSBwcm9ncmFtLgpAQCAtMTE2OCwxOTUgKzkwNiw3IEBACiAJICBUbyBjb21waWxlIHRoZSBFRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZWZzLgogCi1jb25maWcgSkZGUzJfRlMKLQl0cmlzdGF0ZSAiSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0gdjIgKEpGRlMyKSBzdXBwb3J0IgotCXNlbGVjdCBDUkMzMgotCWRlcGVuZHMgb24gTVRECi0JaGVscAotCSAgSkZGUzIgaXMgdGhlIHNlY29uZCBnZW5lcmF0aW9uIG9mIHRoZSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbQotCSAgZm9yIHVzZSBvbiBkaXNrbGVzcyBlbWJlZGRlZCBkZXZpY2VzLiBJdCBwcm92aWRlcyBpbXByb3ZlZCB3ZWFyCi0JICBsZXZlbGxpbmcsIGNvbXByZXNzaW9uIGFuZCBzdXBwb3J0IGZvciBoYXJkIGxpbmtzLiBZb3UgY2Fubm90IHVzZQotCSAgdGhpcyBvbiBub3JtYWwgYmxvY2sgZGV2aWNlcywgb25seSBvbiAnTVREJyBkZXZpY2VzLgotCi0JICBGdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIEpGRlMyIGlzCi0JICBhdmFpbGFibGUgYXQgPGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vamZmczIvPi4KLQotY29uZmlnIEpGRlMyX0ZTX0RFQlVHCi0JaW50ICJKRkZTMiBkZWJ1Z2dpbmcgdmVyYm9zaXR5ICgwID0gcXVpZXQsIDIgPSBub2lzeSkiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgIjAiCi0JaGVscAotCSAgVGhpcyBjb250cm9scyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBtZXNzYWdlcyBwcm9kdWNlZCBieSB0aGUgSkZGUzIKLQkgIGNvZGUuIFNldCBpdCB0byB6ZXJvIGZvciB1c2UgaW4gcHJvZHVjdGlvbiBzeXN0ZW1zLiBGb3IgZXZhbHVhdGlvbiwKLQkgIHRlc3RpbmcgYW5kIGRlYnVnZ2luZywgaXQncyBhZHZpc2FibGUgdG8gc2V0IGl0IHRvIG9uZS4gVGhpcyB3aWxsCi0JICBlbmFibGUgYSBmZXcgYXNzZXJ0aW9ucyBhbmQgd2lsbCBwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXQgdGhlCi0JICBLRVJOX0RFQlVHIGxvZ2xldmVsLCB3aGVyZSB0aGV5IHdvbid0IG5vcm1hbGx5IGJlIHZpc2libGUuIExldmVsIDIKLQkgIGlzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCAtIGl0IGVuYWJsZXMgZXh0cmEgZGVidWdnaW5nIGluIGNlcnRhaW4KLQkgIGFyZWFzIHdoaWNoIGF0IG9uZSBwb2ludCBuZWVkZWQgZGVidWdnaW5nLCBidXQgd2hlbiB0aGUgYnVncyB3ZXJlCi0JICBsb2NhdGVkIGFuZCBmaXhlZCwgdGhlIGRldGFpbGVkIG1lc3NhZ2VzIHdlcmUgcmVsZWdhdGVkIHRvIGxldmVsIDIuCi0KLQkgIElmIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mIHRoZQotCSAgbWVzc2FnZXMgYXQgZGVidWcgbGV2ZWwgMSB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuCi0KLWNvbmZpZyBKRkZTMl9GU19XUklURUJVRkZFUgotCWJvb2wgIkpGRlMyIHdyaXRlLWJ1ZmZlcmluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgdGhlIHdyaXRlLWJ1ZmZlcmluZyBzdXBwb3J0IGluIEpGRlMyLgotCi0JICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBKRkZTMiBvbiB0aGUgZm9sbG93aW5nCi0JICB0eXBlcyBvZiBmbGFzaCBkZXZpY2VzOgotCSAgICAtIE5BTkQgZmxhc2gKLQkgICAgLSBOT1IgZmxhc2ggd2l0aCB0cmFuc3BhcmVudCBFQ0MKLQkgICAgLSBEYXRhRmxhc2gKLQotY29uZmlnIEpGRlMyX0ZTX1dCVUZfVkVSSUZZCi0JYm9vbCAiVmVyaWZ5IEpGRlMyIHdyaXRlLWJ1ZmZlciByZWFkcyIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgVGhpcyBjYXVzZXMgSkZGUzIgdG8gcmVhZCBiYWNrIGV2ZXJ5IHBhZ2Ugd3JpdHRlbiB0aHJvdWdoIHRoZQotCSAgd3JpdGUtYnVmZmVyLCBhbmQgY2hlY2sgZm9yIGVycm9ycy4KLQotY29uZmlnIEpGRlMyX1NVTU1BUlkKLQlib29sICJKRkZTMiBzdW1tYXJ5IHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUyAmJiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGZlYXR1cmUgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHN1bW1hcnkgaW5mb3JtYXRpb24KLQkgIGZvciBmYXN0ZXIgZmlsZXN5c3RlbSBtb3VudC4KLQotCSAgVGhlIHN1bW1hcnkgaW5mb3JtYXRpb24gY2FuIGJlIGluc2VydGVkIGludG8gYSBmaWxlc3lzdGVtIGltYWdlCi0JICBieSB0aGUgdXRpbGl0eSAnc3VtdG9vbCcuCi0KLQkgIElmIHVuc3VyZSwgc2F5ICdOJy4KLQotY29uZmlnIEpGRlMyX0ZTX1hBVFRSCi0JYm9vbCAiSkZGUzIgWEFUVFIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBKRkZTMl9GU19QT1NJWF9BQ0wKLQlib29sICJKRkZTMiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCi0JZGVmYXVsdCB5Ci0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgSkZGUzJfRlNfU0VDVVJJVFkKLQlib29sICJKRkZTMiBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBqZmZzMiBmaWxlc3lzdGVtLgotCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCi0JICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCi0KLWNvbmZpZyBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JYm9vbCAiQWR2YW5jZWQgY29tcHJlc3Npb24gb3B0aW9ucyBmb3IgSkZGUzIiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gZXhwbGljaXRseSBjaG9vc2Ugd2hpY2gKLQkgIGNvbXByZXNzaW9uIG1vZHVsZXMsIGlmIGFueSwgYXJlIGVuYWJsZWQgaW4gSkZGUzIuIFJlbW92aW5nCi0JICBjb21wcmVzc29ycyBjYW4gbWVhbiB5b3UgY2Fubm90IHJlYWQgZXhpc3RpbmcgZmlsZSBzeXN0ZW1zLAotCSAgYW5kIGVuYWJsaW5nIGV4cGVyaW1lbnRhbCBjb21wcmVzc29ycyBjYW4gbWVhbiB0aGF0IHlvdQotCSAgd3JpdGUgYSBmaWxlIHN5c3RlbSB3aGljaCBjYW5ub3QgYmUgcmVhZCBieSBhIHN0YW5kYXJkIGtlcm5lbC4KLQotCSAgSWYgdW5zdXJlLCB5b3Ugc2hvdWxkIF9kZWZpbml0ZWx5XyBzYXkgJ04nLgotCi1jb25maWcgSkZGUzJfWkxJQgotCWJvb2wgIkpGRlMyIFpMSUIgY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCXNlbGVjdCBaTElCX0lORkxBVEUKLQlzZWxlY3QgWkxJQl9ERUZMQVRFCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFpsaWIgaXMgZGVzaWduZWQgdG8gYmUgYSBmcmVlLCBnZW5lcmFsLXB1cnBvc2UsIGxlZ2FsbHkgdW5lbmN1bWJlcmVkLAotCSAgbG9zc2xlc3MgZGF0YS1jb21wcmVzc2lvbiBsaWJyYXJ5IGZvciB1c2Ugb24gdmlydHVhbGx5IGFueSBjb21wdXRlcgotCSAgaGFyZHdhcmUgYW5kIG9wZXJhdGluZyBzeXN0ZW0uIFNlZSA8aHR0cDovL3d3dy5nemlwLm9yZy96bGliLz4gZm9yCi0JICBmdXJ0aGVyIGluZm9ybWF0aW9uLgotCi0JICBTYXkgJ1knIGlmIHVuc3VyZS4KLQotY29uZmlnIEpGRlMyX0xaTwotCWJvb2wgIkpGRlMyIExaTyBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0Jc2VsZWN0IExaT19DT01QUkVTUwotCXNlbGVjdCBMWk9fREVDT01QUkVTUwotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBtaW5pbHpvLWJhc2VkIGNvbXByZXNzaW9uLiBHZW5lcmFsbHkgd29ya3MgYmV0dGVyIHRoYW4gWmxpYi4KLQotCSAgVGhpcyBmZWF0dXJlIHdhcyBhZGRlZCBpbiBKdWx5LCAyMDA3LiBTYXkgJ04nIGlmIHlvdSBuZWVkCi0JICBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgYm9vdGxvYWRlcnMgb3Iga2VybmVscy4KLQotY29uZmlnIEpGRlMyX1JUSU1FCi0JYm9vbCAiSkZGUzIgUlRJTUUgY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBSdGltZSBkb2VzIG1hbmFnZSB0byByZWNvbXByZXNzIGFscmVhZHktY29tcHJlc3NlZCBkYXRhLiBTYXkgJ1knIGlmIHVuc3VyZS4KLQotY29uZmlnIEpGRlMyX1JVQklOCi0JYm9vbCAiSkZGUzIgUlVCSU4gY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBSVUJJTk1JUFMgYW5kIERZTlJVQklOIGNvbXByZXNzb3JzLiBTYXkgJ04nIGlmIHVuc3VyZS4KLQotY2hvaWNlCi0JcHJvbXB0ICJKRkZTMiBkZWZhdWx0IGNvbXByZXNzaW9uIG1vZGUiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlkZWZhdWx0IEpGRlMyX0NNT0RFX1BSSU9SSVRZCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWhlbHAKLQkgIFlvdSBjYW4gc2V0IGhlcmUgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSBvZiBKRkZTMiBmcm9tCi0JICB0aGUgYXZhaWxhYmxlIGNvbXByZXNzaW9uIG1vZGVzLiBEb24ndCB0b3VjaCBpZiB1bnN1cmUuCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9OT05FCi0JYm9vbCAibm8gY29tcHJlc3Npb24iCi0JaGVscAotCSAgVXNlcyBubyBjb21wcmVzc2lvbi4KLQotY29uZmlnIEpGRlMyX0NNT0RFX1BSSU9SSVRZCi0JYm9vbCAicHJpb3JpdHkiCi0JaGVscAotCSAgVHJpZXMgdGhlIGNvbXByZXNzb3JzIGluIGEgcHJlZGVmaW5lZCBvcmRlciBhbmQgY2hvb3NlcyB0aGUgZmlyc3QKLQkgIHN1Y2Nlc3NmdWwgb25lLgotCi1jb25maWcgSkZGUzJfQ01PREVfU0laRQotCWJvb2wgInNpemUgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgVHJpZXMgYWxsIGNvbXByZXNzb3JzIGFuZCBjaG9vc2VzIHRoZSBvbmUgd2hpY2ggaGFzIHRoZSBzbWFsbGVzdAotCSAgcmVzdWx0LgotCi1jb25maWcgSkZGUzJfQ01PREVfRkFWT1VSTFpPCi0JYm9vbCAiRmF2b3VyIExaTyIKLQloZWxwCi0JICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0Ci0JICByZXN1bHQgYnV0IGdpdmVzIHNvbWUgcHJlZmVyZW5jZSB0byBMWk8gKHdoaWNoIGhhcyBmYXN0ZXIKLQkgIGRlY29tcHJlc3Npb24pIGF0IHRoZSBleHBlbnNlIG9mIHNpemUuCi0KLWVuZGNob2ljZQotCitzb3VyY2UgImZzL2pmZnMyL0tjb25maWciCiAjIFVCSUZTIEZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24KIHNvdXJjZSAiZnMvdWJpZnMvS2NvbmZpZyIKIApAQCAtMTkxMywxNDggKzE0NjMsNyBAQAogCiAJICBzbWJtb3VudCBmcm9tIHNhbWJhIDIuMi4wIG9yIGxhdGVyIHN1cHBvcnRzIHRoaXMuCiAKLWNvbmZpZyBDSUZTCi0JdHJpc3RhdGUgIkNJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtLCBTTUJGUyBzdWNjZXNzb3IpIgotCWRlcGVuZHMgb24gSU5FVAotCXNlbGVjdCBOTFMKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQotCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrIAotCSAgKFNNQikgcHJvdG9jb2wsIHRoZSBuYXRpdmUgZmlsZSBzaGFyaW5nIG1lY2hhbmlzbSBmb3IgbW9zdCBlYXJseQotCSAgUEMgb3BlcmF0aW5nIHN5c3RlbXMuICBUaGUgQ0lGUyBwcm90b2NvbCBpcyBmdWxseSBzdXBwb3J0ZWQgYnkgCi0JICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQgIAotCSAgYW5kIFdpbmRvd3MgWFApIGFzIHdlbGwgYnkgU2FtYmEgKHdoaWNoIHByb3ZpZGVzIGV4Y2VsbGVudCBDSUZTCi0JICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBMaW1pdGVkCi0JICBzdXBwb3J0IGZvciBPUy8yIGFuZCBXaW5kb3dzIE1FIGFuZCBzaW1pbGFyIHNlcnZlcnMgaXMgcHJvdmlkZWQgYXMKLQkgIHdlbGwuCi0KLQkgIFRoZSBjaWZzIG1vZHVsZSBwcm92aWRlcyBhbiBhZHZhbmNlZCBuZXR3b3JrIGZpbGUgc3lzdGVtCi0JICBjbGllbnQgZm9yIG1vdW50aW5nIHRvIENJRlMgY29tcGxpYW50IHNlcnZlcnMuICBJdCBpbmNsdWRlcwotCSAgc3VwcG9ydCBmb3IgREZTIChoaWVyYXJjaGljYWwgbmFtZSBzcGFjZSksIHNlY3VyZSBwZXItdXNlcgotCSAgc2Vzc2lvbiBlc3RhYmxpc2htZW50IHZpYSBLZXJiZXJvcyBvciBOVExNIG9yIE5UTE12MiwKLQkgIHNhZmUgZGlzdHJpYnV0ZWQgY2FjaGluZyAob3Bsb2NrKSwgb3B0aW9uYWwgcGFja2V0Ci0JICBzaWduaW5nLCBVbmljb2RlIGFuZCBvdGhlciBpbnRlcm5hdGlvbmFsaXphdGlvbiBpbXByb3ZlbWVudHMuCi0JICBJZiB5b3UgbmVlZCB0byBtb3VudCB0byBTYW1iYSBvciBXaW5kb3dzIGZyb20gdGhpcyBtYWNoaW5lLCBzYXkgWS4KLQotY29uZmlnIENJRlNfU1RBVFMKLSAgICAgICAgYm9vbCAiQ0lGUyBzdGF0aXN0aWNzIgotICAgICAgICBkZXBlbmRzIG9uIENJRlMKLSAgICAgICAgaGVscAotICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBzZXJ2ZXIgc2hhcmUKLQkgIG1vdW50ZWQgYnkgdGhlIGNpZnMgY2xpZW50IHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL1N0YXRzCi0KLWNvbmZpZyBDSUZTX1NUQVRTMgotCWJvb2wgIkV4dGVuZGVkIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBDSUZTX1NUQVRTCi0JaGVscAotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBhbGxvdyBtb3JlIGRldGFpbGVkIHN0YXRpc3RpY3Mgb24gU01CCi0JICByZXF1ZXN0IHRpbWluZyB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9EZWJ1Z0RhdGEgYW5kIGFsc28KLQkgIGFsbG93IG9wdGlvbmFsIGxvZ2dpbmcgb2Ygc2xvdyByZXNwb25zZXMgdG8gZG1lc2cgKGRlcGVuZGluZyBvbiB0aGUKLQkgIHZhbHVlIG9mIC9wcm9jL2ZzL2NpZnMvY2lmc0ZZSSwgc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbHMpLgotCSAgVGhlc2UgYWRkaXRpb25hbCBzdGF0aXN0aWNzIG1heSBoYXZlIGEgbWlub3IgZWZmZWN0IG9uIHBlcmZvcm1hbmNlCi0JICBhbmQgbWVtb3J5IHV0aWxpemF0aW9uLgotCi0JICBVbmxlc3MgeW91IGFyZSBhIGRldmVsb3BlciBvciBhcmUgZG9pbmcgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpcwotCSAgb3IgdHVuaW5nLCBzYXkgTi4KLQotY29uZmlnIENJRlNfV0VBS19QV19IQVNICi0JYm9vbCAiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2Ugd2Vha2VyIExBTk1BTiBzZWN1cml0eSIKLQlkZXBlbmRzIG9uIENJRlMKLQloZWxwCi0JICBNb2Rlcm4gQ0lGUyBzZXJ2ZXJzIGluY2x1ZGluZyBTYW1iYSBhbmQgbW9zdCBXaW5kb3dzIHZlcnNpb25zCi0JICAoc2luY2UgMTk5Nykgc3VwcG9ydCBzdHJvbmdlciBOVExNIChhbmQgZXZlbiBOVExNdjIgYW5kIEtlcmJlcm9zKQotCSAgc2VjdXJpdHkgbWVjaGFuaXNtcy4gVGhlc2UgaGFzaCB0aGUgcGFzc3dvcmQgbW9yZSBzZWN1cmVseQotCSAgdGhhbiB0aGUgbWVjaGFuaXNtcyB1c2VkIGluIHRoZSBvbGRlciBMQU5NQU4gdmVyc2lvbiBvZiB0aGUKLQkgIFNNQiBwcm90b2NvbCBidXQgTEFOTUFOIGJhc2VkIGF1dGhlbnRpY2F0aW9uIGlzIG5lZWRlZCB0bwotCSAgZXN0YWJsaXNoIHNlc3Npb25zIHdpdGggc29tZSBvbGQgU01CIHNlcnZlcnMuCi0KLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyB0aGUgY2lmcyBtb2R1bGUgdG8gbW91bnQgdG8gb2xkZXIKLQkgIExBTk1BTiBiYXNlZCBzZXJ2ZXJzIHN1Y2ggYXMgT1MvMiBhbmQgV2luZG93cyA5NSwgYnV0IHN1Y2gKLQkgIG1vdW50cyBtYXkgYmUgbGVzcyBzZWN1cmUgdGhhbiBtb3VudHMgdXNpbmcgTlRMTSBvciBtb3JlIHJlY2VudAotCSAgc2VjdXJpdHkgbWVjaGFuaXNtcyBpZiB5b3UgYXJlIG9uIGEgcHVibGljIG5ldHdvcmsuICBVbmxlc3MgeW91Ci0JICBoYXZlIGEgbmVlZCB0byBhY2Nlc3Mgb2xkIFNNQiBzZXJ2ZXJzIChhbmQgYXJlIG9uIGEgcHJpdmF0ZQotCSAgbmV0d29yaykgeW91IHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uICBFdmVuIGlmIHRoaXMgc3VwcG9ydAotCSAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLCBMQU5NQU4gYXV0aGVudGljYXRpb24gd2lsbCBub3QgYmUKLQkgIHVzZWQgYXV0b21hdGljYWxseS4gQXQgcnVudGltZSBMQU5NQU4gbW91bnRzIGFyZSBkaXNhYmxlZCBidXQKLQkgIGNhbiBiZSBzZXQgdG8gcmVxdWlyZWQgKG9yIG9wdGlvbmFsKSBlaXRoZXIgaW4KLQkgIC9wcm9jL2ZzL2NpZnMgKHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWwpIG9yIHZpYSBhbgotCSAgb3B0aW9uIG9uIHRoZSBtb3VudCBjb21tYW5kLiBUaGlzIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkKLQkgIGRlZmF1bHQgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRvd25ncmFkZQotCSAgYXR0YWNrLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19VUENBTEwKLQkgIGJvb2wgIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwIgotCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKLQkgIGhlbHAKLQkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGFjY2Vzc2VzCi0JICAgIHVzZXJzcGFjZSBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgU1BORUdPIHBhY2thZ2VkIChSRkMgNDE3OCkKLQkgICAgS2VyYmVyb3MgdGlja2V0cyB3aGljaCBhcmUgbmVlZGVkIHRvIG1vdW50IHRvIGNlcnRhaW4gc2VjdXJlIHNlcnZlcnMKLQkgICAgKGZvciB3aGljaCBtb3JlIHNlY3VyZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCkuIElmCi0JICAgIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX1hBVFRSCi0gICAgICAgIGJvb2wgIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKLSAgICAgICAgZGVwZW5kcyBvbiBDSUZTCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKLSAgICAgICAgICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0gICAgICAgICAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuICBDSUZTIG1hcHMgdGhlIG5hbWUgb2YKLSAgICAgICAgICBleHRlbmRlZCBhdHRyaWJ1dGVzIGJlZ2lubmluZyB3aXRoIHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXgKLSAgICAgICAgICB0byBTTUIvQ0lGUyBFQXMuIEVBcyBhcmUgc3RvcmVkIG9uIFdpbmRvd3Mgc2VydmVycyB3aXRob3V0IHRoZQotICAgICAgICAgIHVzZXIgbmFtZXNwYWNlIHByZWZpeCwgYnV0IHRoZWlyIG5hbWVzIGFyZSBzZWVuIGJ5IExpbnV4IGNpZnMgY2xpZW50cwotICAgICAgICAgIHByZWZhY2VkIGJ5IHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXguIFRoZSBzeXN0ZW0gbmFtZXNwYWNlCi0gICAgICAgICAgKHVzZWQgYnkgc29tZSBmaWxlc3lzdGVtcyB0byBzdG9yZSBBQ0xzKSBpcyBub3Qgc3VwcG9ydGVkIGF0Ci0gICAgICAgICAgdGhpcyB0aW1lLgotCi0gICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfUE9TSVgKLSAgICAgICAgYm9vbCAiQ0lGUyBQT1NJWCBFeHRlbnNpb25zIgotICAgICAgICBkZXBlbmRzIG9uIENJRlNfWEFUVFIKLSAgICAgICAgaGVscAotICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGNpZnMgY2xpZW50IHRvIGF0dGVtcHQgdG8KLQkgIG5lZ290aWF0ZSBhIG5ld2VyIGRpYWxlY3Qgd2l0aCBzZXJ2ZXJzLCBzdWNoIGFzIFNhbWJhIDMuMC41Ci0JICBvciBsYXRlciwgdGhhdCBvcHRpb25hbGx5IGNhbiBoYW5kbGUgbW9yZSBQT1NJWCBsaWtlIChyYXRoZXIKLQkgIHRoYW4gV2luZG93cyBsaWtlKSBmaWxlIGJlaGF2aW9yLiAgSXQgYWxzbyBlbmFibGVzCi0JICBzdXBwb3J0IGZvciBQT1NJWCBBQ0xzIChnZXRmYWNsIGFuZCBzZXRmYWNsKSB0byBzZXJ2ZXJzCi0JICAoc3VjaCBhcyBTYW1iYSAzLjEwIGFuZCBsYXRlcikgd2hpY2ggY2FuIG5lZ290aWF0ZQotCSAgQ0lGUyBQT1NJWCBBQ0wgc3VwcG9ydC4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX0RFQlVHMgotCWJvb2wgIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzIgotCWRlcGVuZHMgb24gQ0lGUwotCWhlbHAKLQkgICBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGEgZmV3IG1vcmUgZGVidWdnaW5nIHJvdXRpbmVzCi0JICAgdG8gdGhlIGNpZnMgY29kZSB3aGljaCBzbGlnaHRseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YKLQkgICB0aGUgY2lmcyBtb2R1bGUgYW5kIGNhbiBjYXVzZSBhZGRpdGlvbmFsIGxvZ2dpbmcgb2YgZGVidWcKLQkgICBtZXNzYWdlcyBpbiBzb21lIGVycm9yIHBhdGhzLCBzbG93aW5nIHBlcmZvcm1hbmNlLiBUaGlzCi0JICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwotCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19FWFBFUklNRU5UQUwKLQkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTAotCSAgaGVscAotCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMgYXJlCi0JICAgIGV4cGVyaW1lbnRhbCBhbmQgY3VycmVudGx5IGluY2x1ZGUgREZTIHN1cHBvcnQgYW5kIGRpcmVjdG9yeSAKLQkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpLCBhcyB3ZWxsIGFzIHRoZSB1cGNhbGwKLQkgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgS2VyYmVyb3Mgc2Vzc2lvbiBuZWdvdGlhdGlvbgotCSAgICBhbmQgdWlkIHJlbWFwcGluZy4gIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYWxzbyBtYXkgZGVwZW5kIG9uIAotCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKLQkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUgCi0JICAgIGZvciBtb3JlIGRldGFpbHMuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19ERlNfVVBDQUxMCi0JICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTX0VYUEVSSU1FTlRBTAotCSAgZGVwZW5kcyBvbiBLRVlTCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UKLQkgICAgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KLQkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KLQkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9jaWZzL0tjb25maWciCiAKIGNvbmZpZyBOQ1BfRlMKIAl0cmlzdGF0ZSAiTkNQIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHRvIG1vdW50IE5ldFdhcmUgdm9sdW1lcykiCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnLmJpbmZtdCBiL2ZzL0tjb25maWcuYmluZm10CmluZGV4IDgwMWRiMTMuLmNlOWZiM2YgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcuYmluZm10CisrKyBiL2ZzL0tjb25maWcuYmluZm10CkBAIC00MCw2ICs0MCwyOCBAQAogCiAJICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJ1biBGRFBJQyBFTEYgYmluYXJpZXMgb24gTU1VIGxpbnV4IGFsc28uCiAKK2NvbmZpZyBDT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUworCWJvb2wgIldyaXRlIEVMRiBjb3JlIGR1bXBzIHdpdGggcGFydGlhbCBzZWdtZW50cyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIEJJTkZNVF9FTEYKKwloZWxwCisJICBFTEYgY29yZSBkdW1wIGZpbGVzIGRlc2NyaWJlIGVhY2ggbWVtb3J5IG1hcHBpbmcgb2YgdGhlIGNyYXNoZWQKKwkgIHByb2Nlc3MsIGFuZCBjYW4gY29udGFpbiBvciBvbWl0IHRoZSBtZW1vcnkgY29udGVudHMgb2YgZWFjaCBvbmUuCisJICBUaGUgY29udGVudHMgb2YgYW4gdW5tb2RpZmllZCB0ZXh0IG1hcHBpbmcgYXJlIG9taXR0ZWQgYnkgZGVmYXVsdC4KKworCSAgRm9yIGFuIHVubW9kaWZpZWQgdGV4dCBtYXBwaW5nIG9mIGFuIEVMRiBvYmplY3QsIGluY2x1ZGluZyBqdXN0CisJICB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZmlsZSBpbiBhIGNvcmUgZHVtcCBtYWtlcyBpdCBwb3NzaWJsZSB0bworCSAgaWRlbnRpZnkgdGhlIGJ1aWxkIElEIGJpdHMgaW4gdGhlIGZpbGUsIHdpdGhvdXQgcGF5aW5nIHRoZSBpL28KKwkgIGNvc3QgYW5kIGRpc2sgc3BhY2UgdG8gZHVtcCBhbGwgdGhlIHRleHQuICBIb3dldmVyLCB2ZXJzaW9ucyBvZgorCSAgR0RCIGJlZm9yZSA2LjcgYXJlIGNvbmZ1c2VkIGJ5IEVMRiBjb3JlIGR1bXAgZmlsZXMgaW4gdGhpcyBmb3JtYXQuCisKKwkgIFRoZSBjb3JlIGR1bXAgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgcGVyIHByb2Nlc3MgdXNpbmcKKwkgIHRoZSAvcHJvYy9QSUQvY29yZWR1bXBfZmlsdGVyIHBzZXVkby1maWxlOyB0aGlzIHNldHRpbmcgaXMKKwkgIGluaGVyaXRlZC4gIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGZvciBkZXRhaWxzLgorCisJICBUaGlzIGNvbmZpZyBvcHRpb24gY2hhbmdlcyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIGNvcmVkdW1wX2ZpbHRlcgorCSAgc2VlbiBhdCBib290IHRpbWUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQklORk1UX0ZMQVQKIAlib29sICJLZXJuZWwgc3VwcG9ydCBmb3IgZmxhdCBiaW5hcmllcyIKIAlkZXBlbmRzIG9uICFNTVUgJiYgKCFGUlYgfHwgQlJPS0VOKQpkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCBkMGM2OWY1Li4yMTY4YzkwIDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtNzEsNyArNzEsNyBAQAogIyBEbyBub3QgYWRkIGFueSBmaWxlc3lzdGVtcyBiZWZvcmUgdGhpcyBsaW5lCiBvYmotJChDT05GSUdfUkVJU0VSRlNfRlMpCSs9IHJlaXNlcmZzLwogb2JqLSQoQ09ORklHX0VYVDNfRlMpCQkrPSBleHQzLyAjIEJlZm9yZSBleHQyIHNvIHJvb3QgZnMgY2FuIGJlIGV4dDMKLW9iai0kKENPTkZJR19FWFQ0X0ZTKQkJKz0gZXh0NC8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQ0ZGV2CitvYmotJChDT05GSUdfRVhUNF9GUykJCSs9IGV4dDQvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0NAogb2JqLSQoQ09ORklHX0pCRCkJCSs9IGpiZC8KIG9iai0kKENPTkZJR19KQkQyKQkJKz0gamJkMi8KIG9iai0kKENPTkZJR19FWFQyX0ZTKQkJKz0gZXh0Mi8KZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCBjNzZhZmEyLi44ZmNmYTM5IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC0xMTU2LDE2ICsxMTU2LDI0IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfZHVtcF9zaXplKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCiB7CisjZGVmaW5lIEZJTFRFUih0eXBlKQkobW1fZmxhZ3MgJiAoMVVMIDw8IE1NRl9EVU1QXyMjdHlwZSkpCisKIAkvKiBUaGUgdm1hIGNhbiBiZSBzZXQgdXAgdG8gdGVsbCB1cyB0aGUgYW5zd2VyIGRpcmVjdGx5LiAgKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0FMV0FZU0RVTVApCiAJCWdvdG8gd2hvbGU7CiAKKwkvKiBIdWdldGxiIG1lbW9yeSBjaGVjayAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVRMQikgeworCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpICYmIEZJTFRFUihIVUdFVExCX1NIQVJFRCkpCisJCQlnb3RvIHdob2xlOworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSAmJiBGSUxURVIoSFVHRVRMQl9QUklWQVRFKSkKKwkJCWdvdG8gd2hvbGU7CisJfQorCiAJLyogRG8gbm90IGR1bXAgSS9PIG1hcHBlZCBkZXZpY2VzIG9yIHNwZWNpYWwgbWFwcGluZ3MgKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1JFU0VSVkVEKSkKIAkJcmV0dXJuIDA7CiAKLSNkZWZpbmUgRklMVEVSKHR5cGUpCShtbV9mbGFncyAmICgxVUwgPDwgTU1GX0RVTVBfIyN0eXBlKSkKLQogCS8qIEJ5IGRlZmF1bHQsIGR1bXAgc2hhcmVkIG1lbW9yeSBpZiBtYXBwZWQgZnJvbSBhbiBhbm9ueW1vdXMgZmlsZS4gKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgewogCQlpZiAodm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX25saW5rID09IDAgPwpAQCAtMTMzMywyMCArMTM0MSwxNSBAQAogCXByc3RhdHVzLT5wcl9wZ3JwID0gdGFza19wZ3JwX3ZucihwKTsKIAlwcnN0YXR1cy0+cHJfc2lkID0gdGFza19zZXNzaW9uX3ZucihwKTsKIAlpZiAodGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisKIAkJLyoKLQkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgQWRkIGluIHRoZQotCQkgKiBjdW11bGF0aXZlIHRpbWVzIG9mIHByZXZpb3VzIGRlYWQgdGhyZWFkcy4gIFRoaXMgdG90YWwKLQkJICogd29uJ3QgaW5jbHVkZSB0aGUgdGltZSBvZiBlYWNoIGxpdmUgdGhyZWFkIHdob3NlIHN0YXRlCi0JCSAqIGlzIGluY2x1ZGVkIGluIHRoZSBjb3JlIGR1bXAuICBUaGUgZmluYWwgdG90YWwgcmVwb3J0ZWQKLQkJICogdG8gb3VyIHBhcmVudCBwcm9jZXNzIHdoZW4gaXQgY2FsbHMgd2FpdDQgd2lsbCBpbmNsdWRlCi0JCSAqIHRob3NlIHN1bXMgYXMgd2VsbCBhcyB0aGUgbGl0dGxlIGJpdCBtb3JlIHRpbWUgaXQgdGFrZXMKLQkJICogdGhpcyBhbmQgZWFjaCBvdGhlciB0aHJlYWQgdG8gZmluaXNoIGR5aW5nIGFmdGVyIHRoZQotCQkgKiBjb3JlIGR1bXAgc3luY2hyb25pemF0aW9uIHBoYXNlLgorCQkgKiBUaGlzIGlzIHRoZSByZWNvcmQgZm9yIHRoZSBncm91cCBsZWFkZXIuICBJdCBzaG93cyB0aGUKKwkJICogZ3JvdXAtd2lkZSB0b3RhbCwgbm90IGl0cyBpbmRpdmlkdWFsIHRocmVhZCB0b3RhbC4KIAkJICovCi0JCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lX2FkZChwLT51dGltZSwgcC0+c2lnbmFsLT51dGltZSksCi0JCQkJICAgJnByc3RhdHVzLT5wcl91dGltZSk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lX2FkZChwLT5zdGltZSwgcC0+c2lnbmFsLT5zdGltZSksCi0JCQkJICAgJnByc3RhdHVzLT5wcl9zdGltZSk7CisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWUudXRpbWUsICZwcnN0YXR1cy0+cHJfdXRpbWUpOworCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZS5zdGltZSwgJnByc3RhdHVzLT5wcl9zdGltZSk7CiAJfSBlbHNlIHsKIAkJY3B1dGltZV90b190aW1ldmFsKHAtPnV0aW1lLCAmcHJzdGF0dXMtPnByX3V0aW1lKTsKIAkJY3B1dGltZV90b190aW1ldmFsKHAtPnN0aW1lLCAmcHJzdGF0dXMtPnByX3N0aW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCAwZTgzNjdjLi41YjU0MjRjIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC0xMzkwLDIwICsxMzkwLDE1IEBACiAJcHJzdGF0dXMtPnByX3BncnAgPSB0YXNrX3BncnBfdm5yKHApOwogCXByc3RhdHVzLT5wcl9zaWQgPSB0YXNrX3Nlc3Npb25fdm5yKHApOwogCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwogCQkvKgotCQkgKiBUaGlzIGlzIHRoZSByZWNvcmQgZm9yIHRoZSBncm91cCBsZWFkZXIuICBBZGQgaW4gdGhlCi0JCSAqIGN1bXVsYXRpdmUgdGltZXMgb2YgcHJldmlvdXMgZGVhZCB0aHJlYWRzLiAgVGhpcyB0b3RhbAotCQkgKiB3b24ndCBpbmNsdWRlIHRoZSB0aW1lIG9mIGVhY2ggbGl2ZSB0aHJlYWQgd2hvc2Ugc3RhdGUKLQkJICogaXMgaW5jbHVkZWQgaW4gdGhlIGNvcmUgZHVtcC4gIFRoZSBmaW5hbCB0b3RhbCByZXBvcnRlZAotCQkgKiB0byBvdXIgcGFyZW50IHByb2Nlc3Mgd2hlbiBpdCBjYWxscyB3YWl0NCB3aWxsIGluY2x1ZGUKLQkJICogdGhvc2Ugc3VtcyBhcyB3ZWxsIGFzIHRoZSBsaXR0bGUgYml0IG1vcmUgdGltZSBpdCB0YWtlcwotCQkgKiB0aGlzIGFuZCBlYWNoIG90aGVyIHRocmVhZCB0byBmaW5pc2ggZHlpbmcgYWZ0ZXIgdGhlCi0JCSAqIGNvcmUgZHVtcCBzeW5jaHJvbml6YXRpb24gcGhhc2UuCisJCSAqIFRoaXMgaXMgdGhlIHJlY29yZCBmb3IgdGhlIGdyb3VwIGxlYWRlci4gIEl0IHNob3dzIHRoZQorCQkgKiBncm91cC13aWRlIHRvdGFsLCBub3QgaXRzIGluZGl2aWR1YWwgdGhyZWFkIHRvdGFsLgogCQkgKi8KLQkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWVfYWRkKHAtPnV0aW1lLCBwLT5zaWduYWwtPnV0aW1lKSwKLQkJCQkgICAmcHJzdGF0dXMtPnByX3V0aW1lKTsKLQkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWVfYWRkKHAtPnN0aW1lLCBwLT5zaWduYWwtPnN0aW1lKSwKLQkJCQkgICAmcHJzdGF0dXMtPnByX3N0aW1lKTsKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOworCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZS51dGltZSwgJnByc3RhdHVzLT5wcl91dGltZSk7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lLnN0aW1lLCAmcHJzdGF0dXMtPnByX3N0aW1lKTsKIAl9IGVsc2UgewogCQljcHV0aW1lX3RvX3RpbWV2YWwocC0+dXRpbWUsICZwcnN0YXR1cy0+cHJfdXRpbWUpOwogCQljcHV0aW1lX3RvX3RpbWV2YWwocC0+c3RpbWUsICZwcnN0YXR1cy0+cHJfc3RpbWUpOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBkODRmMDQ2OS4uMjE4NDA4ZSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTEyNjIsNyArMTI2Miw3IEBACiAKIC8qKgogICogbG9va3VwX2JkZXYgIC0gbG9va3VwIGEgc3RydWN0IGJsb2NrX2RldmljZSBieSBuYW1lCi0gKiBAcGF0aG5hbWU6CXNwZWNpYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlIGJsb2NrIGRldmljZQorICogQHBhdGg6CXNwZWNpYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlIGJsb2NrIGRldmljZQogICoKICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgYmxvY2tkZXZpY2UgYXQgQHBhdGhuYW1lIGluIHRoZSBjdXJyZW50CiAgKiBuYW1lc3BhY2UgaWYgcG9zc2libGUgYW5kIHJldHVybiBpdC4gIFJldHVybiBFUlJfUFRSKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCBhYzc4ZDRjLi42NTY5ZmRhIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNzYsOCArNzYsNyBAQAogCiB2b2lkIHVubG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQljbGVhcl9idWZmZXJfbG9ja2VkKGJoKTsKKwljbGVhcl9iaXRfdW5sb2NrKEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSk7CiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAl3YWtlX3VwX2JpdCgmYmgtPmJfc3RhdGUsIEJIX0xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTAsMCArMSwxNDIgQEAKK2NvbmZpZyBDSUZTCisJdHJpc3RhdGUgIkNJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtLCBTTUJGUyBzdWNjZXNzb3IpIgorCWRlcGVuZHMgb24gSU5FVAorCXNlbGVjdCBOTFMKKwloZWxwCisJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQorCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrCisJICAoU01CKSBwcm90b2NvbCwgdGhlIG5hdGl2ZSBmaWxlIHNoYXJpbmcgbWVjaGFuaXNtIGZvciBtb3N0IGVhcmx5CisJICBQQyBvcGVyYXRpbmcgc3lzdGVtcy4gIFRoZSBDSUZTIHByb3RvY29sIGlzIGZ1bGx5IHN1cHBvcnRlZCBieQorCSAgZmlsZSBzZXJ2ZXJzIHN1Y2ggYXMgV2luZG93cyAyMDAwIChpbmNsdWRpbmcgV2luZG93cyAyMDAzLCBOVCA0CisJICBhbmQgV2luZG93cyBYUCkgYXMgd2VsbCBieSBTYW1iYSAod2hpY2ggcHJvdmlkZXMgZXhjZWxsZW50IENJRlMKKwkgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcykuIExpbWl0ZWQKKwkgIHN1cHBvcnQgZm9yIE9TLzIgYW5kIFdpbmRvd3MgTUUgYW5kIHNpbWlsYXIgc2VydmVycyBpcyBwcm92aWRlZCBhcworCSAgd2VsbC4KKworCSAgVGhlIGNpZnMgbW9kdWxlIHByb3ZpZGVzIGFuIGFkdmFuY2VkIG5ldHdvcmsgZmlsZSBzeXN0ZW0KKwkgIGNsaWVudCBmb3IgbW91bnRpbmcgdG8gQ0lGUyBjb21wbGlhbnQgc2VydmVycy4gIEl0IGluY2x1ZGVzCisJICBzdXBwb3J0IGZvciBERlMgKGhpZXJhcmNoaWNhbCBuYW1lIHNwYWNlKSwgc2VjdXJlIHBlci11c2VyCisJICBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdmlhIEtlcmJlcm9zIG9yIE5UTE0gb3IgTlRMTXYyLAorCSAgc2FmZSBkaXN0cmlidXRlZCBjYWNoaW5nIChvcGxvY2spLCBvcHRpb25hbCBwYWNrZXQKKwkgIHNpZ25pbmcsIFVuaWNvZGUgYW5kIG90aGVyIGludGVybmF0aW9uYWxpemF0aW9uIGltcHJvdmVtZW50cy4KKwkgIElmIHlvdSBuZWVkIHRvIG1vdW50IHRvIFNhbWJhIG9yIFdpbmRvd3MgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgorCitjb25maWcgQ0lGU19TVEFUUworICAgICAgICBib29sICJDSUZTIHN0YXRpc3RpY3MiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGUworICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBzdGF0aXN0aWNzIGZvciBlYWNoIHNlcnZlciBzaGFyZQorCSAgbW91bnRlZCBieSB0aGUgY2lmcyBjbGllbnQgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvU3RhdHMKKworY29uZmlnIENJRlNfU1RBVFMyCisJYm9vbCAiRXh0ZW5kZWQgc3RhdGlzdGljcyIKKwlkZXBlbmRzIG9uIENJRlNfU1RBVFMKKwloZWxwCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGljcyBvbiBTTUIKKwkgIHJlcXVlc3QgdGltaW5nIHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL0RlYnVnRGF0YSBhbmQgYWxzbworCSAgYWxsb3cgb3B0aW9uYWwgbG9nZ2luZyBvZiBzbG93IHJlc3BvbnNlcyB0byBkbWVzZyAoZGVwZW5kaW5nIG9uIHRoZQorCSAgdmFsdWUgb2YgL3Byb2MvZnMvY2lmcy9jaWZzRllJLCBzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscykuCisJICBUaGVzZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgbWF5IGhhdmUgYSBtaW5vciBlZmZlY3Qgb24gcGVyZm9ybWFuY2UKKwkgIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCisKKwkgIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9yIGFyZSBkb2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzCisJICBvciB0dW5pbmcsIHNheSBOLgorCitjb25maWcgQ0lGU19XRUFLX1BXX0hBU0gKKwlib29sICJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSB3ZWFrZXIgTEFOTUFOIHNlY3VyaXR5IgorCWRlcGVuZHMgb24gQ0lGUworCWhlbHAKKwkgIE1vZGVybiBDSUZTIHNlcnZlcnMgaW5jbHVkaW5nIFNhbWJhIGFuZCBtb3N0IFdpbmRvd3MgdmVyc2lvbnMKKwkgIChzaW5jZSAxOTk3KSBzdXBwb3J0IHN0cm9uZ2VyIE5UTE0gKGFuZCBldmVuIE5UTE12MiBhbmQgS2VyYmVyb3MpCisJICBzZWN1cml0eSBtZWNoYW5pc21zLiBUaGVzZSBoYXNoIHRoZSBwYXNzd29yZCBtb3JlIHNlY3VyZWx5CisJICB0aGFuIHRoZSBtZWNoYW5pc21zIHVzZWQgaW4gdGhlIG9sZGVyIExBTk1BTiB2ZXJzaW9uIG9mIHRoZQorCSAgU01CIHByb3RvY29sIGJ1dCBMQU5NQU4gYmFzZWQgYXV0aGVudGljYXRpb24gaXMgbmVlZGVkIHRvCisJICBlc3RhYmxpc2ggc2Vzc2lvbnMgd2l0aCBzb21lIG9sZCBTTUIgc2VydmVycy4KKworCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjaWZzIG1vZHVsZSB0byBtb3VudCB0byBvbGRlcgorCSAgTEFOTUFOIGJhc2VkIHNlcnZlcnMgc3VjaCBhcyBPUy8yIGFuZCBXaW5kb3dzIDk1LCBidXQgc3VjaAorCSAgbW91bnRzIG1heSBiZSBsZXNzIHNlY3VyZSB0aGFuIG1vdW50cyB1c2luZyBOVExNIG9yIG1vcmUgcmVjZW50CisJICBzZWN1cml0eSBtZWNoYW5pc21zIGlmIHlvdSBhcmUgb24gYSBwdWJsaWMgbmV0d29yay4gIFVubGVzcyB5b3UKKwkgIGhhdmUgYSBuZWVkIHRvIGFjY2VzcyBvbGQgU01CIHNlcnZlcnMgKGFuZCBhcmUgb24gYSBwcml2YXRlCisJICBuZXR3b3JrKSB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgTi4gIEV2ZW4gaWYgdGhpcyBzdXBwb3J0CisJICBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGQsIExBTk1BTiBhdXRoZW50aWNhdGlvbiB3aWxsIG5vdCBiZQorCSAgdXNlZCBhdXRvbWF0aWNhbGx5LiBBdCBydW50aW1lIExBTk1BTiBtb3VudHMgYXJlIGRpc2FibGVkIGJ1dAorCSAgY2FuIGJlIHNldCB0byByZXF1aXJlZCAob3Igb3B0aW9uYWwpIGVpdGhlciBpbgorCSAgL3Byb2MvZnMvY2lmcyAoc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbCkgb3IgdmlhIGFuCisJICBvcHRpb24gb24gdGhlIG1vdW50IGNvbW1hbmQuIFRoaXMgc3VwcG9ydCBpcyBkaXNhYmxlZCBieQorCSAgZGVmYXVsdCBpbiBvcmRlciB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZG93bmdyYWRlCisJICBhdHRhY2suCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1VQQ0FMTAorCSAgYm9vbCAiS2VyYmVyb3MvU1BORUdPIGFkdmFuY2VkIHNlc3Npb24gc2V0dXAiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgS0VZUworCSAgaGVscAorCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggYWNjZXNzZXMKKwkgICAgdXNlcnNwYWNlIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBTUE5FR08gcGFja2FnZWQgKFJGQyA0MTc4KQorCSAgICBLZXJiZXJvcyB0aWNrZXRzIHdoaWNoIGFyZSBuZWVkZWQgdG8gbW91bnQgdG8gY2VydGFpbiBzZWN1cmUgc2VydmVycworCSAgICAoZm9yIHdoaWNoIG1vcmUgc2VjdXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkKS4gSWYKKwkgICAgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfWEFUVFIKKyAgICAgICAgYm9vbCAiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzIgorICAgICAgICBkZXBlbmRzIG9uIENJRlMKKyAgICAgICAgaGVscAorICAgICAgICAgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorICAgICAgICAgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKyAgICAgICAgICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4gIENJRlMgbWFwcyB0aGUgbmFtZSBvZgorICAgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYmVnaW5uaW5nIHdpdGggdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeAorICAgICAgICAgIHRvIFNNQi9DSUZTIEVBcy4gRUFzIGFyZSBzdG9yZWQgb24gV2luZG93cyBzZXJ2ZXJzIHdpdGhvdXQgdGhlCisgICAgICAgICAgdXNlciBuYW1lc3BhY2UgcHJlZml4LCBidXQgdGhlaXIgbmFtZXMgYXJlIHNlZW4gYnkgTGludXggY2lmcyBjbGllbnRzCisgICAgICAgICAgcHJlZmFjZWQgYnkgdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeC4gVGhlIHN5c3RlbSBuYW1lc3BhY2UKKyAgICAgICAgICAodXNlZCBieSBzb21lIGZpbGVzeXN0ZW1zIHRvIHN0b3JlIEFDTHMpIGlzIG5vdCBzdXBwb3J0ZWQgYXQKKyAgICAgICAgICB0aGlzIHRpbWUuCisKKyAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19QT1NJWAorICAgICAgICBib29sICJDSUZTIFBPU0lYIEV4dGVuc2lvbnMiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGU19YQVRUUgorICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgY2lmcyBjbGllbnQgdG8gYXR0ZW1wdCB0bworCSAgbmVnb3RpYXRlIGEgbmV3ZXIgZGlhbGVjdCB3aXRoIHNlcnZlcnMsIHN1Y2ggYXMgU2FtYmEgMy4wLjUKKwkgIG9yIGxhdGVyLCB0aGF0IG9wdGlvbmFsbHkgY2FuIGhhbmRsZSBtb3JlIFBPU0lYIGxpa2UgKHJhdGhlcgorCSAgdGhhbiBXaW5kb3dzIGxpa2UpIGZpbGUgYmVoYXZpb3IuICBJdCBhbHNvIGVuYWJsZXMKKwkgIHN1cHBvcnQgZm9yIFBPU0lYIEFDTHMgKGdldGZhY2wgYW5kIHNldGZhY2wpIHRvIHNlcnZlcnMKKwkgIChzdWNoIGFzIFNhbWJhIDMuMTAgYW5kIGxhdGVyKSB3aGljaCBjYW4gbmVnb3RpYXRlCisJICBDSUZTIFBPU0lYIEFDTCBzdXBwb3J0LiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfREVCVUcyCisJYm9vbCAiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXMiCisJZGVwZW5kcyBvbiBDSUZTCisJaGVscAorCSAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYSBmZXcgbW9yZSBkZWJ1Z2dpbmcgcm91dGluZXMKKwkgICB0byB0aGUgY2lmcyBjb2RlIHdoaWNoIHNsaWdodGx5IGluY3JlYXNlcyB0aGUgc2l6ZSBvZgorCSAgIHRoZSBjaWZzIG1vZHVsZSBhbmQgY2FuIGNhdXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBvZiBkZWJ1ZworCSAgIG1lc3NhZ2VzIGluIHNvbWUgZXJyb3IgcGF0aHMsIHNsb3dpbmcgcGVyZm9ybWFuY2UuIFRoaXMKKwkgICBvcHRpb24gY2FuIGJlIHR1cm5lZCBvZmYgdW5sZXNzIHlvdSBhcmUgZGVidWdnaW5nCisJICAgY2lmcyBwcm9ibGVtcy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAorCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCisJICBoZWxwCisJICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcyBhcmUKKwkgICAgZXhwZXJpbWVudGFsIGFuZCBjdXJyZW50bHkgaW5jbHVkZSBERlMgc3VwcG9ydCBhbmQgZGlyZWN0b3J5CisJICAgIGNoYW5nZSBub3RpZmljYXRpb24gaWUgZmNudGwoRl9ETk9USUZZKSwgYXMgd2VsbCBhcyB0aGUgdXBjYWxsCisJICAgIG1lY2hhbmlzbSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEtlcmJlcm9zIHNlc3Npb24gbmVnb3RpYXRpb24KKwkgICAgYW5kIHVpZCByZW1hcHBpbmcuICBTb21lIG9mIHRoZXNlIGZlYXR1cmVzIGFsc28gbWF5IGRlcGVuZCBvbgorCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKKwkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUKKwkgICAgZm9yIG1vcmUgZGV0YWlscy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX0RGU19VUENBTEwKKwkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlNfRVhQRVJJTUVOVEFMCisJICBkZXBlbmRzIG9uIEtFWVMKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGNvbnRhY3RzIHVzZXJzcGFjZQorCSAgICBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc2VydmVyIG5hbWUgcmVzb2x1dGlvbiAoaG9zdCBuYW1lcyB0bworCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgorCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGM0YThhMDYuLjYyZDhiZDggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0xNzkxLDcgKzE3OTEsNyBAQAogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKHBscnVfcHZlYywgcGFnZSkpCi0JCQlfX3BhZ2V2ZWNfbHJ1X2FkZChwbHJ1X3B2ZWMpOworCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZShwbHJ1X3B2ZWMpOwogCQlkYXRhICs9IFBBR0VfQ0FDSEVfU0laRTsKIAl9CiAJcmV0dXJuOwpAQCAtMTkyNSw3ICsxOTI1LDcgQEAKIAkJYnl0ZXNfcmVhZCA9IDA7CiAJfQogCi0JcGFnZXZlY19scnVfYWRkKCZscnVfcHZlYyk7CisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAogLyogbmVlZCB0byBmcmVlIHNtYl9yZWFkX2RhdGEgYnVmIGJlZm9yZSBleGl0ICovCiAJaWYgKHNtYl9yZWFkX2RhdGEpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBhNDFlNzkwLi40ZTgzNGYxIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMzg2LDcgKzEzODYsNyBAQAogICogbmFtZSBpbnRvIGNvcmVuYW1lLCB3aGljaCBtdXN0IGhhdmUgc3BhY2UgZm9yIGF0IGxlYXN0CiAgKiBDT1JFTkFNRV9NQVhfU0laRSBieXRlcyBwbHVzIG9uZSBieXRlIGZvciB0aGUgemVybyB0ZXJtaW5hdG9yLgogICovCi1zdGF0aWMgaW50IGZvcm1hdF9jb3JlbmFtZShjaGFyICpjb3JlbmFtZSwgaW50IG5yX3RocmVhZHMsIGxvbmcgc2lnbnIpCitzdGF0aWMgaW50IGZvcm1hdF9jb3JlbmFtZShjaGFyICpjb3JlbmFtZSwgbG9uZyBzaWducikKIHsKIAljb25zdCBjaGFyICpwYXRfcHRyID0gY29yZV9wYXR0ZXJuOwogCWludCBpc3BpcGUgPSAoKnBhdF9wdHIgPT0gJ3wnKTsKQEAgLTE0OTMsOCArMTQ5Myw3IEBACiAJICogSWYgY29yZV9wYXR0ZXJuIGRvZXMgbm90IGluY2x1ZGUgYSAlcCAoYXMgaXMgdGhlIGRlZmF1bHQpCiAJICogYW5kIGNvcmVfdXNlc19waWQgaXMgc2V0LCB0aGVuIC4lcGlkIHdpbGwgYmUgYXBwZW5kZWQgdG8KIAkgKiB0aGUgZmlsZW5hbWUuIERvIG5vdCBkbyB0aGlzIGZvciBwaXBlZCBjb21tYW5kcy4gKi8KLQlpZiAoIWlzcGlwZSAmJiAhcGlkX2luX3BhdHRlcm4KLQkgICAgJiYgKGNvcmVfdXNlc19waWQgfHwgbnJfdGhyZWFkcykpIHsKKwlpZiAoIWlzcGlwZSAmJiAhcGlkX2luX3BhdHRlcm4gJiYgY29yZV91c2VzX3BpZCkgewogCQlyYyA9IHNucHJpbnRmKG91dF9wdHIsIG91dF9lbmQgLSBvdXRfcHRyLAogCQkJICAgICAgIi4lZCIsIHRhc2tfdGdpZF92bnIoY3VycmVudCkpOwogCQlpZiAocmMgPiBvdXRfZW5kIC0gb3V0X3B0cikKQEAgLTE3NTcsNyArMTc1Niw3IEBACiAJICogdXNlcyBsb2NrX2tlcm5lbCgpCiAJICovCiAgCWxvY2tfa2VybmVsKCk7Ci0JaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCByZXR2YWwsIHNpZ25yKTsKKwlpc3BpcGUgPSBmb3JtYXRfY29yZW5hbWUoY29yZW5hbWUsIHNpZ25yKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJLyoKIAkgKiBEb24ndCBib3RoZXIgdG8gY2hlY2sgdGhlIFJMSU1JVF9DT1JFIHZhbHVlIGlmIGNvcmVfcGF0dGVybiBwb2ludHMKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvS2NvbmZpZyBiL2ZzL2V4dDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE2NzgwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXh0Mi9LY29uZmlnCkBAIC0wLDAgKzEsNTUgQEAKK2NvbmZpZyBFWFQyX0ZTCisJdHJpc3RhdGUgIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IgorCWhlbHAKKwkgIEV4dDIgaXMgYSBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbSBmb3IgaGFyZCBkaXNrcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDIuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBFWFQyX0ZTX1hBVFRSCisJYm9vbCAiRXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gRVhUMl9GUworCWhlbHAKKwkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBFWFQyX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkV4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAorCWhlbHAKKwkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKKwkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KKworCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCisJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitjb25maWcgRVhUMl9GU19TRUNVUklUWQorCWJvb2wgIkV4dDIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gRVhUMl9GU19YQVRUUgorCWhlbHAKKwkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscworCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgorCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQorCSAgbGFiZWxzIGluIHRoZSBleHQyIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KKworY29uZmlnIEVYVDJfRlNfWElQCisJYm9vbCAiRXh0MiBleGVjdXRlIGluIHBsYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBFWFQyX0ZTICYmIE1NVQorCWhlbHAKKwkgIEV4ZWN1dGUgaW4gcGxhY2UgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLiBJZiB5b3UKKwkgIGVuYWJsZSB0aGlzIG9wdGlvbiwgeW91IGNhbiBzZWxlY3QgdG8gbW91bnQgYmxvY2sgZGV2aWNlcyB3aGljaCBhcmUKKwkgIGNhcGFibGUgb2YgdGhpcyBmZWF0dXJlIHdpdGhvdXQgdXNpbmcgdGhlIHBhZ2UgY2FjaGUuCisKKwkgIElmIHlvdSBkbyBub3QgdXNlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLAorCSAgb3IgaWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvS2NvbmZpZyBiL2ZzL2V4dDMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTBjZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXh0My9LY29uZmlnCkBAIC0wLDAgKzEsNjcgQEAKK2NvbmZpZyBFWFQzX0ZTCisJdHJpc3RhdGUgIkV4dDMgam91cm5hbGxpbmcgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKKwlzZWxlY3QgSkJECisJaGVscAorCSAgVGhpcyBpcyB0aGUgam91cm5hbGxpbmcgdmVyc2lvbiBvZiB0aGUgU2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtCisJICAob2Z0ZW4gY2FsbGVkIGV4dDMpLCB0aGUgZGUgZmFjdG8gc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0KKwkgIChtZXRob2QgdG8gb3JnYW5pemUgZmlsZXMgb24gYSBzdG9yYWdlIGRldmljZSkgZm9yIGhhcmQgZGlza3MuCisKKwkgIFRoZSBqb3VybmFsbGluZyBjb2RlIGluY2x1ZGVkIGluIHRoaXMgZHJpdmVyIG1lYW5zIHlvdSBkbyBub3QgaGF2ZQorCSAgdG8gcnVuIGUyZnNjayAoZmlsZSBzeXN0ZW0gY2hlY2tlcikgb24geW91ciBmaWxlIHN5c3RlbXMgYWZ0ZXIgYQorCSAgY3Jhc2guICBUaGUgam91cm5hbCBrZWVwcyB0cmFjayBvZiBhbnkgY2hhbmdlcyB0aGF0IHdlcmUgYmVpbmcgbWFkZQorCSAgYXQgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkLCBhbmQgY2FuIGVuc3VyZSB0aGF0IHlvdXIgZmlsZSBzeXN0ZW0KKwkgIGlzIGNvbnNpc3RlbnQgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBsZW5ndGh5IGNoZWNrLgorCisJICBPdGhlciB0aGFuIGFkZGluZyB0aGUgam91cm5hbCB0byB0aGUgZmlsZSBzeXN0ZW0sIHRoZSBvbi1kaXNrIGZvcm1hdAorCSAgb2YgZXh0MyBpcyBpZGVudGljYWwgdG8gZXh0Mi4gIEl0IGlzIHBvc3NpYmxlIHRvIGZyZWVseSBzd2l0Y2gKKwkgIGJldHdlZW4gdXNpbmcgdGhlIGV4dDMgZHJpdmVyIGFuZCB0aGUgZXh0MiBkcml2ZXIsIGFzIGxvbmcgYXMgdGhlCisJICBmaWxlIHN5c3RlbSBoYXMgYmVlbiBjbGVhbmx5IHVubW91bnRlZCwgb3IgZTJmc2NrIGlzIHJ1biBvbiB0aGUgZmlsZQorCSAgc3lzdGVtLgorCisJICBUbyBhZGQgYSBqb3VybmFsIG9uIGFuIGV4aXN0aW5nIGV4dDIgZmlsZSBzeXN0ZW0gb3IgY2hhbmdlIHRoZQorCSAgYmVoYXZpb3Igb2YgZXh0MyBmaWxlIHN5c3RlbXMsIHlvdSBjYW4gdXNlIHRoZSB0dW5lMmZzIHV0aWxpdHkgKCJtYW4KKwkgIHR1bmUyZnMiKS4gIFRvIG1vZGlmeSBhdHRyaWJ1dGVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvbiBleHQzCisJICBmaWxlIHN5c3RlbXMsIHVzZSBjaGF0dHIgKCJtYW4gY2hhdHRyIikuICBZb3UgbmVlZCB0byBiZSB1c2luZworCSAgZTJmc3Byb2dzIHZlcnNpb24gMS4yMCBvciBsYXRlciBpbiBvcmRlciB0byBjcmVhdGUgZXh0MyBqb3VybmFscworCSAgKGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMmZzcHJvZ3MvPikuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQzLgorCitjb25maWcgRVhUM19GU19YQVRUUgorCWJvb2wgIkV4dDMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKKwlkZXBlbmRzIG9uIEVYVDNfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBZb3UgbmVlZCB0aGlzIGZvciBQT1NJWCBBQ0wgc3VwcG9ydCBvbiBleHQzLgorCitjb25maWcgRVhUM19GU19QT1NJWF9BQ0wKKwlib29sICJFeHQzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEVYVDNfRlNfU0VDVVJJVFkKKwlib29sICJFeHQzIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEVYVDNfRlNfWEFUVFIKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgZXh0MyBmaWxlc3lzdGVtLgorCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCisJICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9leHQzL2JhbGxvYy5jIGIvZnMvZXh0My9iYWxsb2MuYwppbmRleCA5MmZkMDMzLi5mNWI1N2EyIDEwMDY0NAotLS0gYS9mcy9leHQzL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDMvYmFsbG9jLmMKQEAgLTE1NDcsNiArMTU0Nyw3IEBACiAJICogdHVybiBvZmYgcmVzZXJ2YXRpb24gZm9yIHRoaXMgYWxsb2NhdGlvbgogCSAqLwogCWlmIChteV9yc3YgJiYgKGZyZWVfYmxvY2tzIDwgd2luZG93c3opCisJCSYmIChmcmVlX2Jsb2NrcyA+IDApCiAJCSYmIChyc3ZfaXNfZW1wdHkoJm15X3Jzdi0+cnN2X3dpbmRvdykpKQogCQlteV9yc3YgPSBOVUxMOwogCkBAIC0xNTg1LDcgKzE1ODYsNyBAQAogCQkgKiBmcmVlIGJsb2NrcyBpcyBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgcmVzZXJ2YXRpb24KIAkJICogd2luZG93IHNpemUuCiAJCSAqLwotCQlpZiAoZnJlZV9ibG9ja3MgPD0gKHdpbmRvd3N6LzIpKQorCQlpZiAobXlfcnN2ICYmIChmcmVlX2Jsb2NrcyA8PSAod2luZG93c3ovMikpKQogCQkJY29udGludWU7CiAKIAkJYnJlbHNlKGJpdG1hcF9iaCk7CmRpZmYgLS1naXQgYS9mcy9leHQzL2Rpci5jIGIvZnMvZXh0My9kaXIuYwppbmRleCAyZWVhOTZlLi40YzgyNTMxIDEwMDY0NAotLS0gYS9mcy9leHQzL2Rpci5jCisrKyBiL2ZzL2V4dDMvZGlyLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldCA9IDA7CisJaW50IGRpcl9oYXNfZXJyb3IgPSAwOwogCiAJc2IgPSBpbm9kZS0+aV9zYjsKIApAQCAtMTQ4LDkgKzE0OSwxMiBAQAogCQkgKiBvZiByZWNvdmVyaW5nIGRhdGEgd2hlbiB0aGVyZSdzIGEgYmFkIHNlY3RvcgogCQkgKi8KIAkJaWYgKCFiaCkgewotCQkJZXh0M19lcnJvciAoc2IsICJleHQzX3JlYWRkaXIiLAotCQkJCSJkaXJlY3RvcnkgIyVsdSBjb250YWlucyBhIGhvbGUgYXQgb2Zmc2V0ICVsdSIsCi0JCQkJaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZylmaWxwLT5mX3Bvcyk7CisJCQlpZiAoIWRpcl9oYXNfZXJyb3IpIHsKKwkJCQlleHQzX2Vycm9yKHNiLCBfX2Z1bmNfXywgImRpcmVjdG9yeSAjJWx1ICIKKwkJCQkJImNvbnRhaW5zIGEgaG9sZSBhdCBvZmZzZXQgJWxsZCIsCisJCQkJCWlub2RlLT5pX2lubywgZmlscC0+Zl9wb3MpOworCQkJCWRpcl9oYXNfZXJyb3IgPSAxOworCQkJfQogCQkJLyogY29ycnVwdCBzaXplPyAgTWF5YmUgbm8gbW9yZSBibG9ja3MgdG8gcmVhZCAqLwogCQkJaWYgKGZpbHAtPmZfcG9zID4gaW5vZGUtPmlfYmxvY2tzIDw8IDkpCiAJCQkJYnJlYWs7CkBAIC00MTAsNyArNDE0LDcgQEAKIAkJCQlnZXRfZHR5cGUoc2IsIGZuYW1lLT5maWxlX3R5cGUpKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlmaWxwLT5mX3BvcyA9IGN1cnJfcG9zOwotCQkJaW5mby0+ZXh0cmFfZm5hbWUgPSBmbmFtZS0+bmV4dDsKKwkJCWluZm8tPmV4dHJhX2ZuYW1lID0gZm5hbWU7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAkJZm5hbWUgPSBmbmFtZS0+bmV4dDsKQEAgLTQ0OSwxMSArNDUzLDIxIEBACiAJICogSWYgdGhlcmUgYXJlIGFueSBsZWZ0b3ZlciBuYW1lcyBvbiB0aGUgaGFzaCBjb2xsaXNpb24KIAkgKiBjaGFpbiwgcmV0dXJuIHRoZW0gZmlyc3QuCiAJICovCi0JaWYgKGluZm8tPmV4dHJhX2ZuYW1lICYmCi0JICAgIGNhbGxfZmlsbGRpcihmaWxwLCBkaXJlbnQsIGZpbGxkaXIsIGluZm8tPmV4dHJhX2ZuYW1lKSkKLQkJZ290byBmaW5pc2hlZDsKKwlpZiAoaW5mby0+ZXh0cmFfZm5hbWUpIHsKKwkJaWYgKGNhbGxfZmlsbGRpcihmaWxwLCBkaXJlbnQsIGZpbGxkaXIsIGluZm8tPmV4dHJhX2ZuYW1lKSkKKwkJCWdvdG8gZmluaXNoZWQ7CiAKLQlpZiAoIWluZm8tPmN1cnJfbm9kZSkKKwkJaW5mby0+ZXh0cmFfZm5hbWUgPSBOVUxMOworCQlpbmZvLT5jdXJyX25vZGUgPSByYl9uZXh0KGluZm8tPmN1cnJfbm9kZSk7CisJCWlmICghaW5mby0+Y3Vycl9ub2RlKSB7CisJCQlpZiAoaW5mby0+bmV4dF9oYXNoID09IH4wKSB7CisJCQkJZmlscC0+Zl9wb3MgPSBFWFQzX0hUUkVFX0VPRjsKKwkJCQlnb3RvIGZpbmlzaGVkOworCQkJfQorCQkJaW5mby0+Y3Vycl9oYXNoID0gaW5mby0+bmV4dF9oYXNoOworCQkJaW5mby0+Y3Vycl9taW5vcl9oYXNoID0gMDsKKwkJfQorCX0gZWxzZSBpZiAoIWluZm8tPmN1cnJfbm9kZSkKIAkJaW5mby0+Y3Vycl9ub2RlID0gcmJfZmlyc3QoJmluZm8tPnJvb3QpOwogCiAJd2hpbGUgKDEpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBlYmZlYzRkLi5mODQyNGFkIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC0xMTg2LDYgKzExODYsMTMgQEAKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJLyoKKwkJICogYmxvY2tfd3JpdGVfYmVnaW4gbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3IGJsb2NrcworCQkgKiBvdXRzaWRlIGlfc2l6ZS4gIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLiBEb24ndCBuZWVkCisJCSAqIGlfc2l6ZV9yZWFkIGJlY2F1c2Ugd2UgaG9sZCBpX211dGV4LgorCQkgKi8KKwkJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCQl2bXRydW5jYXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIAl9CiAJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCiAJCWdvdG8gcmV0cnk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCA3NzI3OGU5Li43OGZkZjM4IDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTc5MCw3ICs3OTAsOCBAQAogCiAJaWYgKHJlc2VydmVkX2dkYiB8fCBnZGJfb2ZmID09IDApIHsKIAkJaWYgKCFFWFQzX0hBU19DT01QQVRfRkVBVFVSRShzYiwKLQkJCQkJICAgICBFWFQzX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkpeworCQkJCQkgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKQorCQkgICAgfHwgIWxlMTZfdG9fY3B1KGVzLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpKSB7CiAJCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAogCQkJCSAgICAgIk5vIHJlc2VydmVkIEdEVCBibG9ja3MsIGNhbid0IHJlc2l6ZSIpOwogCQkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCAzOTlhOTZhLi4zYTI2MGFmIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC02MjUsNiArNjI1LDkgQEAKIAllbHNlIGlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQSkKIAkJc2VxX3B1dHMoc2VxLCAiLGRhdGE9d3JpdGViYWNrIik7CiAKKwlpZiAodGVzdF9vcHQoc2IsIERBVEFfRVJSX0FCT1JUKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGRhdGFfZXJyPWFib3J0Iik7CisKIAlleHQzX3Nob3dfcXVvdGFfb3B0aW9ucyhzZXEsIHNiKTsKIAogCXJldHVybiAwOwpAQCAtNzU0LDYgKzc1Nyw3IEBACiAJT3B0X3Jlc2VydmF0aW9uLCBPcHRfbm9yZXNlcnZhdGlvbiwgT3B0X25vbG9hZCwgT3B0X25vYmgsIE9wdF9iaCwKIAlPcHRfY29tbWl0LCBPcHRfam91cm5hbF91cGRhdGUsIE9wdF9qb3VybmFsX2ludW0sIE9wdF9qb3VybmFsX2RldiwKIAlPcHRfYWJvcnQsIE9wdF9kYXRhX2pvdXJuYWwsIE9wdF9kYXRhX29yZGVyZWQsIE9wdF9kYXRhX3dyaXRlYmFjaywKKwlPcHRfZGF0YV9lcnJfYWJvcnQsIE9wdF9kYXRhX2Vycl9pZ25vcmUsCiAJT3B0X3VzcmpxdW90YSwgT3B0X2dycGpxdW90YSwgT3B0X29mZnVzcmpxdW90YSwgT3B0X29mZmdycGpxdW90YSwKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCiAJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKQEAgLTc5Niw2ICs4MDAsOCBAQAogCXtPcHRfZGF0YV9qb3VybmFsLCAiZGF0YT1qb3VybmFsIn0sCiAJe09wdF9kYXRhX29yZGVyZWQsICJkYXRhPW9yZGVyZWQifSwKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKKwl7T3B0X2RhdGFfZXJyX2Fib3J0LCAiZGF0YV9lcnI9YWJvcnQifSwKKwl7T3B0X2RhdGFfZXJyX2lnbm9yZSwgImRhdGFfZXJyPWlnbm9yZSJ9LAogCXtPcHRfb2ZmdXNyanF1b3RhLCAidXNyanF1b3RhPSJ9LAogCXtPcHRfdXNyanF1b3RhLCAidXNyanF1b3RhPSVzIn0sCiAJe09wdF9vZmZncnBqcXVvdGEsICJncnBqcXVvdGE9In0sCkBAIC0xMDExLDYgKzEwMTcsMTIgQEAKIAkJCQlzYmktPnNfbW91bnRfb3B0IHw9IGRhdGFfb3B0OwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RhdGFfZXJyX2Fib3J0OgorCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0VSUl9BQk9SVCk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGF0YV9lcnJfaWdub3JlOgorCQkJY2xlYXJfb3B0KHNiaS0+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+c19maXJzdF9kYXRhX2Jsb2NrKSB8fApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCBiM2I0ODI4Li5iNWRmZjFmIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlICJleHQ0X2piZDIuaCIKICNpbmNsdWRlICJleHQ0LmgiCiAjaW5jbHVkZSAiZ3JvdXAuaCIKQEAgLTk4LDIzICsxMDAsMjkgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X3BzcGFjZV9jYWNoZXA7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmV4dDRfYWNfY2FjaGVwOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X2ZyZWVfZXh0X2NhY2hlcDsKIAotI2lmZGVmIEVYVDRfQkJfTUFYX0JMT0NLUwotI3VuZGVmIEVYVDRfQkJfTUFYX0JMT0NLUwotI2VuZGlmCi0jZGVmaW5lIEVYVDRfQkJfTUFYX0JMT0NLUwkzMAorc3RydWN0IGV4dDRfZnJlZV9kYXRhIHsKKwkvKiB0aGlzIGxpbmtzIHRoZSBmcmVlIGJsb2NrIGluZm9ybWF0aW9uIGZyb20gZ3JvdXBfaW5mbyAqLworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiAKLXN0cnVjdCBleHQ0X2ZyZWVfbWV0YWRhdGEgewotCWV4dDRfZ3JvdXBfdCBncm91cDsKLQl1bnNpZ25lZCBzaG9ydCBudW07Ci0JZXh0NF9ncnBibGtfdCAgYmxvY2tzW0VYVDRfQkJfTUFYX0JMT0NLU107CisJLyogdGhpcyBsaW5rcyB0aGUgZnJlZSBibG9jayBpbmZvcm1hdGlvbiBmcm9tIGV4dDRfc2JfaW5mbyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIGdyb3VwIHdoaWNoIGZyZWUgYmxvY2sgZXh0ZW50IGJlbG9uZ3MgKi8KKwlleHQ0X2dyb3VwX3QgZ3JvdXA7CisKKwkvKiBmcmVlIGJsb2NrIGV4dGVudCAqLworCWV4dDRfZ3JwYmxrX3Qgc3RhcnRfYmxrOworCWV4dDRfZ3JwYmxrX3QgY291bnQ7CisKKwkvKiB0cmFuc2FjdGlvbiB3aGljaCBmcmVlZCB0aGlzIGV4dGVudCAqLworCXRpZF90CXRfdGlkOwogfTsKIAogc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyB7CiAJdW5zaWduZWQgbG9uZwliYl9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nCWJiX3RpZDsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICpiYl9tZF9jdXI7CisJc3RydWN0IHJiX3Jvb3QgIGJiX2ZyZWVfcm9vdDsKIAl1bnNpZ25lZCBzaG9ydAliYl9maXJzdF9mcmVlOwogCXVuc2lnbmVkIHNob3J0CWJiX2ZyZWU7CiAJdW5zaWduZWQgc2hvcnQJYmJfZnJhZ21lbnRzOwpAQCAtMjYxLDggKzI2OSw2IEBACiAKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7Ci1zdGF0aWMgdm9pZCBleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBoYW5kbGVfdCAqKTsKLXN0YXRpYyB2b2lkIGV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyB2b2lkIGV4dDRfbWJfcmV0dXJuX3RvX3ByZWFsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGV4dDRfYnVkZHkgKmU0Yiwgc2VjdG9yX3QgYmxvY2ssCiAJCQkJCWludCBjb3VudCk7CkBAIC0yNzAsNiArMjc2LDcgQEAKIAkJCXN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpOwogc3RhdGljIGludCBleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIGludCBleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworc3RhdGljIHZvaWQgcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKTsKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9sb2NrX2dyb3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncm91cCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCBkZWE4ZjEzLi45YjJiMmJjIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0zNzQsNjYgKzM3NCw2IEBACiAJICovCiB9CiAKLWludCBleHQ0X3VwZGF0ZV9jb21wYXRfZmVhdHVyZShoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiBjb21wYXQpCi17Ci0JaW50IGVyciA9IDA7Ci0JaWYgKCFFWFQ0X0hBU19DT01QQVRfRkVBVFVSRShzYiwgY29tcGF0KSkgewotCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCUVYVDRfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLCBjb21wYXQpOwotCQlzYi0+c19kaXJ0ID0gMTsKLQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQlCVUZGRVJfVFJBQ0UoRVhUNF9TQihzYiktPnNfc2JoLAotCQkJCQkiY2FsbCBleHQ0X2pvdXJuYWxfZGlydHlfbWV0IGFkYXRhIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGV4dDRfdXBkYXRlX3JvY29tcGF0X2ZlYXR1cmUoaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgcm9jb21wYXQpCi17Ci0JaW50IGVyciA9IDA7Ci0JaWYgKCFFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwgcm9jb21wYXQpKSB7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJRVhUNF9TRVRfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIHJvY29tcGF0KTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJQlVGRkVSX1RSQUNFKEVYVDRfU0Ioc2IpLT5zX3NiaCwKLQkJCQkJImNhbGwgZXh0NF9qb3VybmFsX2RpcnR5X21ldCBhZGF0YSIpOwotCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBleHQ0X3VwZGF0ZV9pbmNvbXBhdF9mZWF0dXJlKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGluY29tcGF0KQotewotCWludCBlcnIgPSAwOwotCWlmICghRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgaW5jb21wYXQpKSB7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJRVhUNF9TRVRfSU5DT01QQVRfRkVBVFVSRShzYiwgaW5jb21wYXQpOwotCQlzYi0+c19kaXJ0ID0gMTsKLQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQlCVUZGRVJfVFJBQ0UoRVhUNF9TQihzYiktPnNfc2JoLAotCQkJCQkiY2FsbCBleHQ0X2pvdXJuYWxfZGlydHlfbWV0IGFkYXRhIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQogLyoKICAqIE9wZW4gdGhlIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlCiAgKi8KQEAgLTkwNCw3ICs4NDQsNyBAQAogZW51bSB7CiAJT3B0X2JzZF9kZiwgT3B0X21pbml4X2RmLCBPcHRfZ3JwaWQsIE9wdF9ub2dycGlkLAogCU9wdF9yZXNnaWQsIE9wdF9yZXN1aWQsIE9wdF9zYiwgT3B0X2Vycl9jb250LCBPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLAotCU9wdF9ub3VpZDMyLCBPcHRfbm9jaGVjaywgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKKwlPcHRfbm91aWQzMiwgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKIAlPcHRfdXNlcl94YXR0ciwgT3B0X25vdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X25vYWNsLAogCU9wdF9yZXNlcnZhdGlvbiwgT3B0X25vcmVzZXJ2YXRpb24sIE9wdF9ub2xvYWQsIE9wdF9ub2JoLCBPcHRfYmgsCiAJT3B0X2NvbW1pdCwgT3B0X2pvdXJuYWxfdXBkYXRlLCBPcHRfam91cm5hbF9pbnVtLCBPcHRfam91cm5hbF9kZXYsCkBAIC05MTUsNyArODU1LDcgQEAKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCiAJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKIAlPcHRfZ3JwcXVvdGEsIE9wdF9leHRlbnRzLCBPcHRfbm9leHRlbnRzLCBPcHRfaV92ZXJzaW9uLAotCU9wdF9tYmFsbG9jLCBPcHRfbm9tYmFsbG9jLCBPcHRfc3RyaXBlLCBPcHRfZGVsYWxsb2MsIE9wdF9ub2RlbGFsbG9jLAorCU9wdF9zdHJpcGUsIE9wdF9kZWxhbGxvYywgT3B0X25vZGVsYWxsb2MsCiAJT3B0X2lub2RlX3JlYWRhaGVhZF9ibGtzCiB9OwogCkBAIC05MzMsOCArODczLDYgQEAKIAl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAogCXtPcHRfZXJyX3JvLCAiZXJyb3JzPXJlbW91bnQtcm8ifSwKIAl7T3B0X25vdWlkMzIsICJub3VpZDMyIn0sCi0Je09wdF9ub2NoZWNrLCAibm9jaGVjayJ9LAotCXtPcHRfbm9jaGVjaywgImNoZWNrPW5vbmUifSwKIAl7T3B0X2RlYnVnLCAiZGVidWcifSwKIAl7T3B0X29sZGFsbG9jLCAib2xkYWxsb2MifSwKIAl7T3B0X29ybG92LCAib3Jsb3YifSwKQEAgLTk3Myw4ICs5MTEsNiBAQAogCXtPcHRfZXh0ZW50cywgImV4dGVudHMifSwKIAl7T3B0X25vZXh0ZW50cywgIm5vZXh0ZW50cyJ9LAogCXtPcHRfaV92ZXJzaW9uLCAiaV92ZXJzaW9uIn0sCi0Je09wdF9tYmFsbG9jLCAibWJhbGxvYyJ9LAotCXtPcHRfbm9tYmFsbG9jLCAibm9tYmFsbG9jIn0sCiAJe09wdF9zdHJpcGUsICJzdHJpcGU9JXUifSwKIAl7T3B0X3Jlc2l6ZSwgInJlc2l6ZSJ9LAogCXtPcHRfZGVsYWxsb2MsICJkZWxhbGxvYyJ9LApAQCAtMTA3Myw5ICsxMDA5LDYgQEAKIAkJY2FzZSBPcHRfbm91aWQzMjoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X25vY2hlY2s6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgQ0hFQ0spOwotCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBERUJVRyk7CiAJCQlicmVhazsKQEAgLTE2MTgsMTQgKzE1NTEsMTQgQEAKIAkJaWYgKGJsb2NrX2JpdG1hcCA8IGZpcnN0X2Jsb2NrIHx8IGJsb2NrX2JpdG1hcCA+IGxhc3RfYmxvY2spIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZXh0NF9jaGVja19kZXNjcmlwdG9yczogIgogCQkJICAgICAgICJCbG9jayBiaXRtYXAgZm9yIGdyb3VwICVsdSBub3QgaW4gZ3JvdXAgIgotCQkJICAgICAgICIoYmxvY2sgJWxsdSkhIiwgaSwgYmxvY2tfYml0bWFwKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgYmxvY2tfYml0bWFwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlub2RlX2JpdG1hcCA9IGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApOwogCQlpZiAoaW5vZGVfYml0bWFwIDwgZmlyc3RfYmxvY2sgfHwgaW5vZGVfYml0bWFwID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIklub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWx1IG5vdCBpbiBncm91cCAiCi0JCQkgICAgICAgIihibG9jayAlbGx1KSEiLCBpLCBpbm9kZV9iaXRtYXApOworCQkJICAgICAgICIoYmxvY2sgJWxsdSkhXG4iLCBpLCBpbm9kZV9iaXRtYXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaW5vZGVfdGFibGUgPSBleHQ0X2lub2RlX3RhYmxlKHNiLCBnZHApOwpAQCAtMTYzMyw3ICsxNTY2LDcgQEAKIAkJICAgIGlub2RlX3RhYmxlICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgLSAxID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIklub2RlIHRhYmxlIGZvciBncm91cCAlbHUgbm90IGluIGdyb3VwICIKLQkJCSAgICAgICAiKGJsb2NrICVsbHUpISIsIGksIGlub2RlX3RhYmxlKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgaW5vZGVfdGFibGUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgaSkpOwpAQCAtMTc3OCwxMyArMTcxMSwxMyBAQAogICoKICAqIE5vdGUsIHRoaXMgZG9lcyAqbm90KiBjb25zaWRlciBhbnkgbWV0YWRhdGEgb3ZlcmhlYWQgZm9yIHZmcyBpX2Jsb2Nrcy4KICAqLwotc3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzKQorc3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpCiB7CiAJbG9mZl90IHJlczsKIAlsb2ZmX3QgdXBwZXJfbGltaXQgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCiAJLyogc21hbGwgaV9ibG9ja3MgaW4gdmZzIGlub2RlPyAqLwotCWlmIChzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKKwlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgogCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCiAJCSAqIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbiA1MTIgYnl0ZXMKQEAgLTE4MTQsNyArMTc0Nyw3IEBACiAgKiBibG9jayBsaW1pdCwgYW5kIGFsc28gYSBsaW1pdCBvZiAoMl40OCAtIDEpIDUxMi1ieXRlIHNlY3RvcnMgaW4gaV9ibG9ja3MuCiAgKiBXZSBuZWVkIHRvIGJlIDEgZmlsZXN5c3RlbSBibG9jayBsZXNzIHRoYW4gdGhlIDJeNDggc2VjdG9yIGxpbWl0LgogICovCi1zdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzKQorc3RhdGljIGxvZmZfdCBleHQ0X21heF9iaXRtYXBfc2l6ZShpbnQgYml0cywgaW50IGhhc19odWdlX2ZpbGVzKQogewogCWxvZmZfdCByZXMgPSBFWFQ0X05ESVJfQkxPQ0tTOwogCWludCBtZXRhX2Jsb2NrczsKQEAgLTE4MjcsMTEgKzE3NjAsMTEgQEAKIAkgKiB0b3RhbCBudW1iZXIgb2YgIDUxMiBieXRlcyBibG9ja3Mgb2YgdGhlIGZpbGUKIAkgKi8KIAotCWlmIChzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKKwlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgotCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCi0JCSAqIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbiA1MTIgYnl0ZXMKLQkJICogMzIgPT0gc2l6ZSBvZiB2ZnMgaW5vZGUgaV9ibG9ja3MgKiA4CisJCSAqICFoYXNfaHVnZV9maWxlcyBvciBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkCisJCSAqIGltcGxpZXMgdGhlIGlub2RlIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbgorCQkgKiA1MTIgYnl0ZXMgMzIgPT0gc2l6ZSBvZiB2ZnMgaW5vZGUgaV9ibG9ja3MgKiA4CiAJCSAqLwogCQl1cHBlcl9saW1pdCA9ICgxTEwgPDwgMzIpIC0gMTsKIApAQCAtMTk0MCw3ICsxODczLDcgQEAKIAlpbnQgYmxvY2tzaXplOwogCWludCBkYl9jb3VudDsKIAlpbnQgaTsKLQlpbnQgbmVlZHNfcmVjb3Zlcnk7CisJaW50IG5lZWRzX3JlY292ZXJ5LCBoYXNfaHVnZV9maWxlczsKIAlfX2xlMzIgZmVhdHVyZXM7CiAJX191NjQgYmxvY2tzX2NvdW50OwogCWludCBlcnI7CkBAIC0yMDgxLDcgKzIwMTQsOSBAQAogCQkgICAgICAgc2ItPnNfaWQsIGxlMzJfdG9fY3B1KGZlYXR1cmVzKSk7CiAJCWdvdG8gZmFpbGVkX21vdW50OwogCX0KLQlpZiAoRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSkgeworCWhhc19odWdlX2ZpbGVzID0gRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCisJCQkJICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKTsKKwlpZiAoaGFzX2h1Z2VfZmlsZXMpIHsKIAkJLyoKIAkJICogTGFyZ2UgZmlsZSBzaXplIGVuYWJsZWQgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUKIAkJICogbW91bnQgaWYga2VybmVsIGlzIGJ1aWxkIHdpdGggQ09ORklHX0xTRgpAQCAtMjEzMSw4ICsyMDY2LDkgQEAKIAkJfQogCX0KIAotCXNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMgPSBleHQ0X21heF9iaXRtYXBfc2l6ZShzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0Jc2ItPnNfbWF4Ynl0ZXMgPSBleHQ0X21heF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlzYmktPnNfYml0bWFwX21heGJ5dGVzID0gZXh0NF9tYXhfYml0bWFwX3NpemUoc2ItPnNfYmxvY2tzaXplX2JpdHMsCisJCQkJCQkgICAgICBoYXNfaHVnZV9maWxlcyk7CisJc2ItPnNfbWF4Ynl0ZXMgPSBleHQ0X21heF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCBoYXNfaHVnZV9maWxlcyk7CiAKIAlpZiAobGUzMl90b19jcHUoZXMtPnNfcmV2X2xldmVsKSA9PSBFWFQ0X0dPT0RfT0xEX1JFVikgewogCQlzYmktPnNfaW5vZGVfc2l6ZSA9IEVYVDRfR09PRF9PTERfSU5PREVfU0laRTsKQEAgLTI0NTYsNiArMjM5MiwyMSBAQAogCQkJImF2YWlsYWJsZS5cbiIpOwogCX0KIAorCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mczogSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgorCQkJCSJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGVcbiIpOworCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOworCX0gZWxzZSBpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogZGVsYXllZCBhbGxvY2F0aW9uIGVuYWJsZWRcbiIpOworCisJZXh0NF9leHRfaW5pdChzYik7CisJZXJyID0gZXh0NF9tYl9pbml0KHNiLCBuZWVkc19yZWNvdmVyeSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGZhaWxlZCB0byBpbml0YWxpemUgbWJhbGxvYyAoJWQpXG4iLAorCQkgICAgICAgZXJyKTsKKwkJZ290byBmYWlsZWRfbW91bnQ0OworCX0KKwogCS8qCiAJICogYWtwbTogY29yZSByZWFkX3N1cGVyKCkgY2FsbHMgaW4gaGVyZSB3aXRoIHRoZSBzdXBlcmJsb2NrIGxvY2tlZC4KIAkgKiBUaGF0IGRlYWRsb2NrcywgYmVjYXVzZSBvcnBoYW4gY2xlYW51cCBuZWVkcyB0byBsb2NrIHRoZSBzdXBlcmJsb2NrCkBAIC0yNDc1LDIxICsyNDI2LDYgQEAKIAkgICAgICAgdGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfT1JERVJFRF9EQVRBID8gIm9yZGVyZWQiOgogCSAgICAgICAid3JpdGViYWNrIik7CiAKLQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnM6IElnbm9yaW5nIGRlbGFsbG9jIG9wdGlvbiAtICIKLQkJCQkicmVxdWVzdGVkIGRhdGEgam91cm5hbGluZyBtb2RlXG4iKTsKLQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCi0JCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGRlbGF5ZWQgYWxsb2NhdGlvbiBlbmFibGVkXG4iKTsKLQotCWV4dDRfZXh0X2luaXQoc2IpOwotCWVyciA9IGV4dDRfbWJfaW5pdChzYiwgbmVlZHNfcmVjb3ZlcnkpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBmYWlsZWQgdG8gaW5pdGFsaXplIG1iYWxsb2MgKCVkKVxuIiwKLQkJICAgICAgIGVycik7Ci0JCWdvdG8gZmFpbGVkX21vdW50NDsKLQl9Ci0KIAlsb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDJiYWRhNmIuLjM0OTMwYTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDEsNiArMTAxLDggQEAKIAkJZmlsZS0+Zl9vcCA9ICZmdXNlX2RpcmVjdF9pb19maWxlX29wZXJhdGlvbnM7CiAJaWYgKCEob3V0YXJnLT5vcGVuX2ZsYWdzICYgRk9QRU5fS0VFUF9DQUNIRSkpCiAJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyKGlub2RlLT5pX21hcHBpbmcpOworCWlmIChvdXRhcmctPm9wZW5fZmxhZ3MgJiBGT1BFTl9OT05TRUVLQUJMRSkKKwkJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJZmYtPmZoID0gb3V0YXJnLT5maDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmdXNlX2ZpbGVfZ2V0KGZmKTsKIH0KQEAgLTE0NDgsNiArMTQ1MCw5IEBACiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJY2FzZSBTRUVLX0VORDoKKwkJcmV0dmFsID0gZnVzZV91cGRhdGVfYXR0cmlidXRlcyhpbm9kZSwgTlVMTCwgZmlsZSwgTlVMTCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOwogCQlvZmZzZXQgKz0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlicmVhazsKIAljYXNlIFNFRUtfQ1VSOgpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggM2E4NzYwNy4uMzVhY2NmZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC02LDYgKzYsOSBAQAogICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KICovCiAKKyNpZm5kZWYgX0ZTX0ZVU0VfSV9ICisjZGVmaW5lIF9GU19GVVNFX0lfSAorCiAjaW5jbHVkZSA8bGludXgvZnVzZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTY1NSwzICs2NTgsNSBAQAogdm9pZCBmdXNlX3JlbGVhc2Vfbm93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogdTY0IGZ1c2VfZ2V0X2F0dHJfdmVyc2lvbihzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CisKKyNlbmRpZiAvKiBfRlNfRlVTRV9JX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA2YTg0Mzg4Li41NGIxZjBlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC04NjUsNyArODY1LDcgQEAKIAlpZiAoaXNfYmRldikgewogCQlmYy0+ZGVzdHJveV9yZXEgPSBmdXNlX3JlcXVlc3RfYWxsb2MoKTsKIAkJaWYgKCFmYy0+ZGVzdHJveV9yZXEpCi0JCQlnb3RvIGVycl9wdXRfcm9vdDsKKwkJCWdvdG8gZXJyX2ZyZWVfaW5pdF9yZXE7CiAJfQogCiAJbXV0ZXhfbG9jaygmZnVzZV9tdXRleCk7CkBAIC04OTUsNiArODk1LDcgQEAKIAogIGVycl91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZmdXNlX211dGV4KTsKKyBlcnJfZnJlZV9pbml0X3JlcToKIAlmdXNlX3JlcXVlc3RfZnJlZShpbml0X3JlcSk7CiAgZXJyX3B1dF9yb290OgogCWRwdXQocm9vdF9kZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCBmZWM4ZjYxLi4wMDIyZWVjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYworKysgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTk5LDYgKzE5OSw5IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlpZiAoaW5vZGUtPmlfaW5vID09IEhGU1BMVVNfRVhUX0NOSUQpCisJCXJldHVybiAtRUlPOworCiAJbXV0ZXhfbG9jaygmSEZTUExVU19JKGlub2RlKS5leHRlbnRzX2xvY2spOwogCXJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spOwogCWlmICghcmVzKSB7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggYjA4NWQ2NC4uOTYzYmU2NCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwpAQCAtMjU0LDYgKzI1NCw4IEBACiB7CiAJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiAJCWlub2RlID0gSEZTUExVU19JKGlub2RlKS5yc3JjX2lub2RlOworCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX0xBUkdFRklMRSkgJiYgaV9zaXplX3JlYWQoaW5vZGUpID4gTUFYX05PTl9MRlMpCisJCXJldHVybiAtRU9WRVJGTE9XOwogCWF0b21pY19pbmMoJkhGU1BMVVNfSShpbm9kZSkub3BlbmNudCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQvS2NvbmZpZyBiL2ZzL2piZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjhiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qYmQvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACitjb25maWcgSkJECisJdHJpc3RhdGUKKwloZWxwCisJICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcy4gIEl0IGlzCisJICBjdXJyZW50bHkgdXNlZCBieSB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgYnV0IGl0IGNvdWxkIGFsc28gYmUKKwkgIHVzZWQgdG8gYWRkIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sKKwkgIGRldmljZXMgc3VjaCBhcyBSQUlEIG9yIExWTS4KKworCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4KKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDMgdGhlbiB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBqYmQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQzIGludG8gdGhlIGtlcm5lbCwgeW91CisJICBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCisKK2NvbmZpZyBKQkRfREVCVUcKKwlib29sICJKQkQgKGV4dDMpIGRlYnVnZ2luZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSkJEICYmIERFQlVHX0ZTCisJaGVscAorCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yIHBvdGVudGlhbGx5IGFueQorCSAgb3RoZXIgZmlsZSBzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRCksIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8KKwkgIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywgaW4gb3JkZXIgdG8KKwkgIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuICBCeSBkZWZhdWx0IHRoZQorCSAgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCisKKwkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKKwkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLCB3aGVyZSBOIGlzIGEKKwkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUsIHRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCisJICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbworCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLgpkaWZmIC0tZ2l0IGEvZnMvamJkL2NvbW1pdC5jIGIvZnMvamJkL2NvbW1pdC5jCmluZGV4IGFlMDhjMDUuLjI1NzE5ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jb21taXQuYworKysgYi9mcy9qYmQvY29tbWl0LmMKQEAgLTQ4Miw2ICs0ODIsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiSkJEOiBEZXRlY3RlZCBJTyBlcnJvcnMgd2hpbGUgZmx1c2hpbmcgZmlsZSBkYXRhICIKIAkJCSJvbiAlc1xuIiwgYmRldm5hbWUoam91cm5hbC0+al9mc19kZXYsIGIpKTsKKwkJaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfQUJPUlRfT05fU1lOQ0RBVEFfRVJSKQorCQkJam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOwogCQllcnIgPSAwOwogCX0KIApAQCAtNTE4LDkgKzUyMCwxMCBAQAogCQlqaCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9idWZmZXJzOwogCiAJCS8qIElmIHdlJ3JlIGluIGFib3J0IG1vZGUsIHdlIGp1c3QgdW4tam91cm5hbCB0aGUgYnVmZmVyIGFuZAotCQkgICByZWxlYXNlIGl0IGZvciBiYWNrZ3JvdW5kIHdyaXRpbmcuICovCisJCSAgIHJlbGVhc2UgaXQuICovCiAKIAkJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgeworCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGpoMmJoKGpoKSk7CiAJCQlKQlVGRkVSX1RSQUNFKGpoLCAiam91cm5hbCBpcyBhYm9ydGluZzogcmVmaWxlIik7CiAJCQlqb3VybmFsX3JlZmlsZV9idWZmZXIoam91cm5hbCwgamgpOwogCQkJLyogSWYgdGhhdCB3YXMgdGhlIGxhc3Qgb25lLCB3ZSBuZWVkIHRvIGNsZWFuIHVwCkBAIC03NjIsNiArNzY1LDkgQEAKIAkJLyogQUtQTTogYmZvcmdldCBoZXJlICovCiAJfQogCisJaWYgKGVycikKKwkJam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOworCiAJamJkX2RlYnVnKDMsICJKQkQ6IGNvbW1pdCBwaGFzZSA2XG4iKTsKIAogCWlmIChqb3VybmFsX3dyaXRlX2NvbW1pdF9yZWNvcmQoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKSkKQEAgLTg1Miw2ICs4NTgsOCBAQAogCQlpZiAoYnVmZmVyX2piZGRpcnR5KGJoKSkgewogCQkJSkJVRkZFUl9UUkFDRShqaCwgImFkZCB0byBuZXcgY2hlY2twb2ludGluZyB0cmFucyIpOwogCQkJX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KGpoLCBjb21taXRfdHJhbnNhY3Rpb24pOworCQkJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkKKwkJCQljbGVhcl9idWZmZXJfamJkZGlydHkoYmgpOwogCQkJSkJVRkZFUl9UUkFDRShqaCwgInJlZmlsZSBmb3IgY2hlY2twb2ludCB3cml0ZWJhY2siKTsKIAkJCV9fam91cm5hbF9yZWZpbGVfYnVmZmVyKGpoKTsKIAkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCAwNTQwY2EyLi5kMTVjZDZlIDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtOTU0LDkgKzk1NCwxMCBAQAogCWpvdXJuYWxfdCAqam91cm5hbCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsOwogCWludCBuZWVkX2JyZWxzZSA9IDA7CiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqamg7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoaXNfaGFuZGxlX2Fib3J0ZWQoaGFuZGxlKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlqaCA9IGpvdXJuYWxfYWRkX2pvdXJuYWxfaGVhZChiaCk7CiAJSkJVRkZFUl9UUkFDRShqaCwgImVudHJ5Iik7CkBAIC0xMDY3LDcgKzEwNjgsMTYgQEAKIAkJCQkgICB0aW1lIGlmIGl0IGlzIHJlZGlydGllZCAqLwogCQkJfQogCi0JCQkvKiBqb3VybmFsX2NsZWFuX2RhdGFfbGlzdCgpIG1heSBoYXZlIGdvdCB0aGVyZSBmaXJzdCAqLworCQkJLyoKKwkJCSAqIFdlIGNhbm5vdCByZW1vdmUgdGhlIGJ1ZmZlciB3aXRoIGlvIGVycm9yIGZyb20gdGhlCisJCQkgKiBjb21taXR0aW5nIHRyYW5zYWN0aW9uLCBiZWNhdXNlIG90aGVyd2lzZSBpdCB3b3VsZAorCQkJICogbWlzcyB0aGUgZXJyb3IgYW5kIHRoZSBjb21taXQgd291bGQgbm90IGFib3J0LgorCQkJICovCisJCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIG5vX2pvdXJuYWw7CisJCQl9CisKIAkJCWlmIChqaC0+Yl90cmFuc2FjdGlvbiAhPSBOVUxMKSB7CiAJCQkJSkJVRkZFUl9UUkFDRShqaCwgInVuZmlsZSBmcm9tIGNvbW1pdCIpOwogCQkJCV9fam91cm5hbF90ZW1wX3VubGlua19idWZmZXIoamgpOwpAQCAtMTEwOCw3ICsxMTE4LDcgQEAKIAl9CiAJSkJVRkZFUl9UUkFDRShqaCwgImV4aXQiKTsKIAlqb3VybmFsX3B1dF9qb3VybmFsX2hlYWQoamgpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvamJkMi9LY29uZmlnIGIvZnMvamJkMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmYzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qYmQyL0tjb25maWcKQEAgLTAsMCArMSwzMyBAQAorY29uZmlnIEpCRDIKKwl0cmlzdGF0ZQorCXNlbGVjdCBDUkMzMgorCWhlbHAKKwkgIFRoaXMgaXMgYSBnZW5lcmljIGpvdXJuYWxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMgdGhhdCBzdXBwb3J0CisJICBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGJsb2NrIG51bWJlcnMuICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQorCSAgdGhlIGV4dDQgYW5kIE9DRlMyIGZpbGVzeXN0ZW1zLCBidXQgaXQgY291bGQgYWxzbyBiZSB1c2VkIHRvIGFkZAorCSAgam91cm5hbCBzdXBwb3J0IHRvIG90aGVyIGZpbGUgc3lzdGVtcyBvciBibG9jayBkZXZpY2VzIHN1Y2gKKwkgIGFzIFJBSUQgb3IgTFZNLgorCisJICBJZiB5b3UgYXJlIHVzaW5nIGV4dDQgb3IgT0NGUzIsIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQ0IG9yIE9DRlMyIHRoZW4geW91IHdpbGwKKwkgIHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkZXZpY2UgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGpiZDIuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQ0IG9yIE9DRlMyIGludG8gdGhlIGtlcm5lbCwKKwkgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCisKK2NvbmZpZyBKQkQyX0RFQlVHCisJYm9vbCAiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBKQkQyICYmIERFQlVHX0ZTCisJaGVscAorCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0NCBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yCisJICBwb3RlbnRpYWxseSBhbnkgb3RoZXIgZmlsZXN5c3RlbS9kZXZpY2UgdXNpbmcgSkJEMiksIHRoaXMgb3B0aW9uCisJICBhbGxvd3MgeW91IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywKKwkgIGluIG9yZGVyIHRvIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuCisJICBCeSBkZWZhdWx0LCB0aGUgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCisKKwkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKKwkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIsIHdoZXJlIE4gaXMgYQorCSAgbnVtYmVyIGJldHdlZW4gMSBhbmQgNS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBkZWJ1Z2dpbmcKKwkgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUbyB0dXJuIGRlYnVnZ2luZyBvZmYgYWdhaW4sIGRvCisJICAiZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvamJkMi9qYmQyLWRlYnVnIi4KZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jCmluZGV4IDBhYmUwMmMuLjhiMTE5ZTE2IDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTk5NSw2ICs5OTUsOSBAQAogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCisJaWYgKGpvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrKQorCQlqb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOworCiAJdHJhY2VfbWFyayhqYmQyX2VuZF9jb21taXQsICJkZXYgJXMgdHJhbnNhY3Rpb24gJWQgaGVhZCAlZCIsCiAJCSAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwKIAkJICAgam91cm5hbC0+al90YWlsX3NlcXVlbmNlKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCBlNWQ1NDA1Li4zOWI3ODA1IDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC01Miw2ICs1Miw3IEBACiAJdHJhbnNhY3Rpb24tPnRfZXhwaXJlcyA9IGppZmZpZXMgKyBqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbDsKIAlzcGluX2xvY2tfaW5pdCgmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0cmFuc2FjdGlvbi0+dF9pbm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnNhY3Rpb24tPnRfcHJpdmF0ZV9saXN0KTsKIAogCS8qIFNldCB1cCB0aGUgY29tbWl0IHRpbWVyIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAqLwogCWpvdXJuYWwtPmpfY29tbWl0X3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKHRyYW5zYWN0aW9uLT50X2V4cGlyZXMpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvS2NvbmZpZyBiL2ZzL2pmZnMyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMTY5YwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL0tjb25maWcKQEAgLTAsMCArMSwxODggQEAKK2NvbmZpZyBKRkZTMl9GUworCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCisJc2VsZWN0IENSQzMyCisJZGVwZW5kcyBvbiBNVEQKKwloZWxwCisJICBKRkZTMiBpcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gb2YgdGhlIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtCisJICBmb3IgdXNlIG9uIGRpc2tsZXNzIGVtYmVkZGVkIGRldmljZXMuIEl0IHByb3ZpZGVzIGltcHJvdmVkIHdlYXIKKwkgIGxldmVsbGluZywgY29tcHJlc3Npb24gYW5kIHN1cHBvcnQgZm9yIGhhcmQgbGlua3MuIFlvdSBjYW5ub3QgdXNlCisJICB0aGlzIG9uIG5vcm1hbCBibG9jayBkZXZpY2VzLCBvbmx5IG9uICdNVEQnIGRldmljZXMuCisKKwkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKKwkgIGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgorCitjb25maWcgSkZGUzJfRlNfREVCVUcKKwlpbnQgIkpGRlMyIGRlYnVnZ2luZyB2ZXJib3NpdHkgKDAgPSBxdWlldCwgMiA9IG5vaXN5KSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCAiMCIKKwloZWxwCisJICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBKRkZTMgorCSAgY29kZS4gU2V0IGl0IHRvIHplcm8gZm9yIHVzZSBpbiBwcm9kdWN0aW9uIHN5c3RlbXMuIEZvciBldmFsdWF0aW9uLAorCSAgdGVzdGluZyBhbmQgZGVidWdnaW5nLCBpdCdzIGFkdmlzYWJsZSB0byBzZXQgaXQgdG8gb25lLiBUaGlzIHdpbGwKKwkgIGVuYWJsZSBhIGZldyBhc3NlcnRpb25zIGFuZCB3aWxsIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBhdCB0aGUKKwkgIEtFUk5fREVCVUcgbG9nbGV2ZWwsIHdoZXJlIHRoZXkgd29uJ3Qgbm9ybWFsbHkgYmUgdmlzaWJsZS4gTGV2ZWwgMgorCSAgaXMgdW5saWtlbHkgdG8gYmUgdXNlZnVsIC0gaXQgZW5hYmxlcyBleHRyYSBkZWJ1Z2dpbmcgaW4gY2VydGFpbgorCSAgYXJlYXMgd2hpY2ggYXQgb25lIHBvaW50IG5lZWRlZCBkZWJ1Z2dpbmcsIGJ1dCB3aGVuIHRoZSBidWdzIHdlcmUKKwkgIGxvY2F0ZWQgYW5kIGZpeGVkLCB0aGUgZGV0YWlsZWQgbWVzc2FnZXMgd2VyZSByZWxlZ2F0ZWQgdG8gbGV2ZWwgMi4KKworCSAgSWYgcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2YgdGhlCisJICBtZXNzYWdlcyBhdCBkZWJ1ZyBsZXZlbCAxIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy4KKworY29uZmlnIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCisJYm9vbCAiSkZGUzIgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQgaW4gSkZGUzIuCisKKwkgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEpGRlMyIG9uIHRoZSBmb2xsb3dpbmcKKwkgIHR5cGVzIG9mIGZsYXNoIGRldmljZXM6CisJICAgIC0gTkFORCBmbGFzaAorCSAgICAtIE5PUiBmbGFzaCB3aXRoIHRyYW5zcGFyZW50IEVDQworCSAgICAtIERhdGFGbGFzaAorCitjb25maWcgSkZGUzJfRlNfV0JVRl9WRVJJRlkKKwlib29sICJWZXJpZnkgSkZGUzIgd3JpdGUtYnVmZmVyIHJlYWRzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGNhdXNlcyBKRkZTMiB0byByZWFkIGJhY2sgZXZlcnkgcGFnZSB3cml0dGVuIHRocm91Z2ggdGhlCisJICB3cml0ZS1idWZmZXIsIGFuZCBjaGVjayBmb3IgZXJyb3JzLgorCitjb25maWcgSkZGUzJfU1VNTUFSWQorCWJvb2wgIkpGRlMyIHN1bW1hcnkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgorCSAgZm9yIGZhc3RlciBmaWxlc3lzdGVtIG1vdW50LgorCisJICBUaGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGZpbGVzeXN0ZW0gaW1hZ2UKKwkgIGJ5IHRoZSB1dGlsaXR5ICdzdW10b29sJy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCitjb25maWcgSkZGUzJfRlNfWEFUVFIKKwlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkpGRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBKRkZTMl9GU19TRUNVUklUWQorCWJvb2wgIkpGRlMyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGpmZnMyIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlib29sICJBZHZhbmNlZCBjb21wcmVzc2lvbiBvcHRpb25zIGZvciBKRkZTMiIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaAorCSAgY29tcHJlc3Npb24gbW9kdWxlcywgaWYgYW55LCBhcmUgZW5hYmxlZCBpbiBKRkZTMi4gUmVtb3ZpbmcKKwkgIGNvbXByZXNzb3JzIGNhbiBtZWFuIHlvdSBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlIHN5c3RlbXMsCisJICBhbmQgZW5hYmxpbmcgZXhwZXJpbWVudGFsIGNvbXByZXNzb3JzIGNhbiBtZWFuIHRoYXQgeW91CisJICB3cml0ZSBhIGZpbGUgc3lzdGVtIHdoaWNoIGNhbm5vdCBiZSByZWFkIGJ5IGEgc3RhbmRhcmQga2VybmVsLgorCisJICBJZiB1bnN1cmUsIHlvdSBzaG91bGQgX2RlZmluaXRlbHlfIHNheSAnTicuCisKK2NvbmZpZyBKRkZTMl9aTElCCisJYm9vbCAiSkZGUzIgWkxJQiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJc2VsZWN0IFpMSUJfSU5GTEFURQorCXNlbGVjdCBaTElCX0RFRkxBVEUKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgWmxpYiBpcyBkZXNpZ25lZCB0byBiZSBhIGZyZWUsIGdlbmVyYWwtcHVycG9zZSwgbGVnYWxseSB1bmVuY3VtYmVyZWQsCisJICBsb3NzbGVzcyBkYXRhLWNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIHVzZSBvbiB2aXJ0dWFsbHkgYW55IGNvbXB1dGVyCisJICBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS4gU2VlIDxodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvPiBmb3IKKwkgIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisKKwkgIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfTFpPCisJYm9vbCAiSkZGUzIgTFpPIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlzZWxlY3QgTFpPX0NPTVBSRVNTCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIG1pbmlsem8tYmFzZWQgY29tcHJlc3Npb24uIEdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBabGliLgorCisJICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGluIEp1bHksIDIwMDcuIFNheSAnTicgaWYgeW91IG5lZWQKKwkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgorCitjb25maWcgSkZGUzJfUlRJTUUKKwlib29sICJKRkZTMiBSVElNRSBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFJ0aW1lIGRvZXMgbWFuYWdlIHRvIHJlY29tcHJlc3MgYWxyZWFkeS1jb21wcmVzc2VkIGRhdGEuIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfUlVCSU4KKwlib29sICJKRkZTMiBSVUJJTiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFJVQklOTUlQUyBhbmQgRFlOUlVCSU4gY29tcHJlc3NvcnMuIFNheSAnTicgaWYgdW5zdXJlLgorCitjaG9pY2UKKwlwcm9tcHQgIkpGRlMyIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworCWRlZmF1bHQgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJaGVscAorCSAgWW91IGNhbiBzZXQgaGVyZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIG9mIEpGRlMyIGZyb20KKwkgIHRoZSBhdmFpbGFibGUgY29tcHJlc3Npb24gbW9kZXMuIERvbid0IHRvdWNoIGlmIHVuc3VyZS4KKworY29uZmlnIEpGRlMyX0NNT0RFX05PTkUKKwlib29sICJubyBjb21wcmVzc2lvbiIKKwloZWxwCisJICBVc2VzIG5vIGNvbXByZXNzaW9uLgorCitjb25maWcgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlib29sICJwcmlvcml0eSIKKwloZWxwCisJICBUcmllcyB0aGUgY29tcHJlc3NvcnMgaW4gYSBwcmVkZWZpbmVkIG9yZGVyIGFuZCBjaG9vc2VzIHRoZSBmaXJzdAorCSAgc3VjY2Vzc2Z1bCBvbmUuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9TSVpFCisJYm9vbCAic2l6ZSAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0CisJICByZXN1bHQuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9GQVZPVVJMWk8KKwlib29sICJGYXZvdXIgTFpPIgorCWhlbHAKKwkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKKwkgIHJlc3VsdCBidXQgZ2l2ZXMgc29tZSBwcmVmZXJlbmNlIHRvIExaTyAod2hpY2ggaGFzIGZhc3RlcgorCSAgZGVjb21wcmVzc2lvbikgYXQgdGhlIGV4cGVuc2Ugb2Ygc2l6ZS4KKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5jIGIvZnMvamZmczIvY29tcHIuYwppbmRleCA4NjczOWVlLi5mMjVlNzBjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKyBiL2ZzL2pmZnMyL2NvbXByLmMKQEAgLTUzLDggKzUzLDggQEAKIH0KIAogLyogamZmczJfY29tcHJlc3M6Ci0gKiBAZGF0YTogUG9pbnRlciB0byB1bmNvbXByZXNzZWQgZGF0YQotICogQGNkYXRhOiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKKyAqIEBkYXRhX2luOiBQb2ludGVyIHRvIHVuY29tcHJlc3NlZCBkYXRhCisgKiBAY3BhZ2Vfb3V0OiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKICAqIEBkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZSBmb3IgY29tcHJlc3Npb24uCiAgKglPbiBleGl0LCBleHBlY3RlZCB0byBob2xkIHRoZSBhbW91bnQgb2YgZGF0YSBhY3R1YWxseSBjb21wcmVzc2VkLgogICogQGNkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgZm9yIGNvbXByZXNzZWQKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2Rpci5jIGIvZnMvamZmczIvZGlyLmMKaW5kZXggY2QyMTllZi4uYjFhYWFlOCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGlyLmMKKysrIGIvZnMvamZmczIvZGlyLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCS8qIEZJWE1FOiBJZiB5b3UgY2FyZS4gV2UnZCBuZWVkIHRvIHVzZSBmcmFncyBmb3IgdGhlIHRhcmdldAogCSAgIGlmIGl0IGdyb3dzIG11Y2ggbW9yZSB0aGFuIHRoaXMgKi8KIAlpZiAodGFyZ2V0bGVuID4gMjU0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKIAlyaSA9IGpmZnMyX2FsbG9jX3Jhd19pbm9kZSgpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9lcmFzZS5jIGIvZnMvamZmczIvZXJhc2UuYwppbmRleCBkZGRiMmE2Li4yNTk0NjFiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9lcmFzZS5jCisrKyBiL2ZzL2pmZnMyL2VyYXNlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAlpbnN0ci0+bGVuID0gYy0+c2VjdG9yX3NpemU7CiAJaW5zdHItPmNhbGxiYWNrID0gamZmczJfZXJhc2VfY2FsbGJhY2s7CiAJaW5zdHItPnByaXYgPSAodW5zaWduZWQgbG9uZykoJmluc3RyWzFdKTsKLQlpbnN0ci0+ZmFpbF9hZGRyID0gMHhmZmZmZmZmZjsKKwlpbnN0ci0+ZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktOT1dOOwogCiAJKChzdHJ1Y3QgZXJhc2VfcHJpdl9zdHJ1Y3QgKilpbnN0ci0+cHJpdiktPmplYiA9IGplYjsKIAkoKHN0cnVjdCBlcmFzZV9wcml2X3N0cnVjdCAqKWluc3RyLT5wcml2KS0+YyA9IGM7CkBAIC0xNzUsNyArMTc1LDcgQEAKIHsKIAkvKiBGb3IgTkFORCwgaWYgdGhlIGZhaWx1cmUgZGlkIG5vdCBvY2N1ciBhdCB0aGUgZGV2aWNlIGxldmVsIGZvciBhCiAJICAgc3BlY2lmaWMgcGh5c2ljYWwgcGFnZSwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBiYWQgYmxvY2sgdGFibGUuICovCi0JaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSAmJiAoYmFkX29mZnNldCAhPSAweGZmZmZmZmZmKSkgeworCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykgJiYgKGJhZF9vZmZzZXQgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKSkgewogCQkvKiBXZSBoYWQgYSBkZXZpY2UtbGV2ZWwgZmFpbHVyZSB0byBlcmFzZS4gIExldCdzIHNlZSBpZiB3ZSd2ZQogCQkgICBmYWlsZWQgdG9vIG1hbnkgdGltZXMuICovCiAJCWlmICghamZmczJfd3JpdGVfbmFuZF9iYWRibG9jayhjLCBqZWIsIGJhZF9vZmZzZXQpKSB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9mcy5jIGIvZnMvamZmczIvZnMuYwppbmRleCAwODZjNDM4Li4yNDkzMDVkIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9mcy5jCisrKyBiL2ZzL2pmZnMyL2ZzLmMKQEAgLTIwNyw2ICsyMDcsOCBAQAogCWJ1Zi0+Zl9maWxlcyA9IDA7CiAJYnVmLT5mX2ZmcmVlID0gMDsKIAlidWYtPmZfbmFtZWxlbiA9IEpGRlMyX01BWF9OQU1FX0xFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSBKRkZTMl9TVVBFUl9NQUdJQzsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSBjLT5tdGQtPmluZGV4OwogCiAJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCWF2YWlsID0gYy0+ZGlydHlfc2l6ZSArIGMtPmZyZWVfc2l6ZTsKQEAgLTQ0MCwxNCArNDQyLDE0IEBACiAKIAltZW1zZXQocmksIDAsIHNpemVvZigqcmkpKTsKIAkvKiBTZXQgT1Mtc3BlY2lmaWMgZGVmYXVsdHMgZm9yIG5ldyBpbm9kZXMgKi8KLQlyaS0+dWlkID0gY3B1X3RvX2plMTYoY3VycmVudC0+ZnN1aWQpOworCXJpLT51aWQgPSBjcHVfdG9famUxNihjdXJyZW50X2ZzdWlkKCkpOwogCiAJaWYgKGRpcl9pLT5pX21vZGUgJiBTX0lTR0lEKSB7CiAJCXJpLT5naWQgPSBjcHVfdG9famUxNihkaXJfaS0+aV9naWQpOwogCQlpZiAoU19JU0RJUihtb2RlKSkKIAkJCW1vZGUgfD0gU19JU0dJRDsKIAl9IGVsc2UgewotCQlyaS0+Z2lkID0gY3B1X3RvX2plMTYoY3VycmVudC0+ZnNnaWQpOworCQlyaS0+Z2lkID0gY3B1X3RvX2plMTYoY3VycmVudF9mc2dpZCgpKTsKIAl9CiAKIAkvKiBQT1NJWCBBQ0xzIGhhdmUgdG8gYmUgcHJvY2Vzc2VkIG5vdywgYXQgbGVhc3QgcGFydGx5LgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZW1nbXQuYyBiL2ZzL2pmZnMyL25vZGVtZ210LmMKaW5kZXggYTliZjk2MC4uMDg3NWI2MCAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZW1nbXQuYworKysgYi9mcy9qZmZzMi9ub2RlbWdtdC5jCkBAIC0yNjEsNiArMjYxLDEwIEBACiAKIAlqZmZzMl9zdW1fcmVzZXRfY29sbGVjdGVkKGMtPnN1bW1hcnkpOyAvKiByZXNldCBjb2xsZWN0ZWQgc3VtbWFyeSAqLwogCisJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCisJaWYgKCEoYy0+d2J1Zl9vZnMgJSBjLT5zZWN0b3Jfc2l6ZSkgJiYgIWMtPndidWZfbGVuKQorCQljLT53YnVmX29mcyA9IDB4ZmZmZmZmZmY7CisKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZmluZF9uZXh0YmxvY2soKTogbmV3IG5leHRibG9jayA9IDB4JTA4eFxuIiwgYy0+bmV4dGJsb2NrLT5vZmZzZXQpKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd2J1Zi5jIGIvZnMvamZmczIvd2J1Zi5jCmluZGV4IDBlNzhiMDAuLmQ5YTcyMWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3didWYuYworKysgYi9mcy9qZmZzMi93YnVmLmMKQEAgLTY3OSwxMCArNjc5LDcgQEAKIAogCW1lbXNldChjLT53YnVmLDB4ZmYsYy0+d2J1Zl9wYWdlc2l6ZSk7CiAJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCi0JaWYgKFNFQ1RPUl9BRERSKGMtPndidWZfb2ZzKSA9PSBTRUNUT1JfQUREUihjLT53YnVmX29mcytjLT53YnVmX3BhZ2VzaXplKSkKLQkJYy0+d2J1Zl9vZnMgKz0gYy0+d2J1Zl9wYWdlc2l6ZTsKLQllbHNlCi0JCWMtPndidWZfb2ZzID0gMHhmZmZmZmZmZjsKKwljLT53YnVmX29mcyArPSBjLT53YnVmX3BhZ2VzaXplOwogCWMtPndidWZfbGVuID0gMDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5jIGIvZnMvbmZzL2NhbGxiYWNrLmMKaW5kZXggNmEwOTc2MC4uYzJlOWNmZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmMKQEAgLTQwLDYgKzQwLDE2IEBACiBzdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9taW4gPSAwOwogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWF4ID0gNjU1MzU7CiAKKy8qCisgKiBJZiB0aGUga2VybmVsIGhhcyBJUHY2IHN1cHBvcnQgYXZhaWxhYmxlLCBhbHdheXMgbGlzdGVuIGZvcgorICogYm90aCBBRl9JTkVUIGFuZCBBRl9JTkVUNiByZXF1ZXN0cy4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RhdGljIGNvbnN0IHNhX2ZhbWlseV90CW5mc19jYWxsYmFja19mYW1pbHkgPSBBRl9JTkVUNjsKKyNlbHNlCitzdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmZzX2NhbGxiYWNrX2ZhbWlseSA9IEFGX0lORVQ7CisjZW5kaWYKKwogc3RhdGljIGludCBwYXJhbV9zZXRfcG9ydChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWNoYXIgKmVuZHA7CkBAIC0xMDYsNyArMTE2LDcgQEAKIAlpZiAobmZzX2NhbGxiYWNrX2luZm8udXNlcnMrKyB8fCBuZnNfY2FsbGJhY2tfaW5mby50YXNrICE9IE5VTEwpCiAJCWdvdG8gb3V0OwogCXNlcnYgPSBzdmNfY3JlYXRlKCZuZnM0X2NhbGxiYWNrX3Byb2dyYW0sIE5GUzRfQ0FMTEJBQ0tfQlVGU0laRSwKLQkJCQlBRl9JTkVULCBOVUxMKTsKKwkJCQluZnNfY2FsbGJhY2tfZmFtaWx5LCBOVUxMKTsKIAlyZXQgPSAtRU5PTUVNOwogCWlmICghc2VydikKIAkJZ290byBvdXRfZXJyOwpAQCAtMTE2LDcgKzEyNiw4IEBACiAJaWYgKHJldCA8PSAwKQogCQlnb3RvIG91dF9lcnI7CiAJbmZzX2NhbGxiYWNrX3RjcHBvcnQgPSByZXQ7Ci0JZHByaW50aygiQ2FsbGJhY2sgcG9ydCA9IDB4JXhcbiIsIG5mc19jYWxsYmFja190Y3Bwb3J0KTsKKwlkcHJpbnRrKCJORlM6IENhbGxiYWNrIGxpc3RlbmVyIHBvcnQgPSAldSAoYWYgJXUpXG4iLAorCQkJbmZzX2NhbGxiYWNrX3RjcHBvcnQsIG5mc19jYWxsYmFja19mYW1pbHkpOwogCiAJbmZzX2NhbGxiYWNrX2luZm8ucnFzdCA9IHN2Y19wcmVwYXJlX3RocmVhZChzZXJ2LCAmc2Vydi0+c3ZfcG9vbHNbMF0pOwogCWlmIChJU19FUlIobmZzX2NhbGxiYWNrX2luZm8ucnFzdCkpIHsKQEAgLTE0OSw4ICsxNjAsOCBAQAogCW11dGV4X3VubG9jaygmbmZzX2NhbGxiYWNrX211dGV4KTsKIAlyZXR1cm4gcmV0Owogb3V0X2VycjoKLQlkcHJpbnRrKCJDb3VsZG4ndCBjcmVhdGUgY2FsbGJhY2sgc29ja2V0IG9yIHNlcnZlciB0aHJlYWQ7IGVyciA9ICVkXG4iLAotCQlyZXQpOworCWRwcmludGsoIk5GUzogQ291bGRuJ3QgY3JlYXRlIGNhbGxiYWNrIHNvY2tldCBvciBzZXJ2ZXIgdGhyZWFkOyAiCisJCSJlcnIgPSAlZFxuIiwgcmV0KTsKIAluZnNfY2FsbGJhY2tfaW5mby51c2Vycy0tOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDJhYjcwZDQuLmVmZGJhMmUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE1MTcsNyArMTUxNyw3IEBACiAJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZywgMCwKIAkJCQkJCQlHRlBfS0VSTkVMKSkgewogCQlwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpOwotCQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggYzkxMDQxMy4uODNlNzAwYSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTE2NTksOCArMTY1OSwxMCBAQAogCQlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwogCiAJCWN0eCA9IG5mc19maWxlX29wZW5fY29udGV4dChzYXR0ci0+aWFfZmlsZSk7Ci0JCWNyZWQgPSBjdHgtPmNyZWQ7Ci0JCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJaWYgKGN0eCkgeworCQkJY3JlZCA9IGN0eC0+Y3JlZDsKKwkJCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJfQogCX0KIAogCXN0YXR1cyA9IG5mczRfZG9fc2V0YXR0cihpbm9kZSwgY3JlZCwgZmF0dHIsIHNhdHRyLCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IDhiMjhiOTUuLmEzYjAwNjEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0yNDU5LDcgKzI0NTksNyBAQAogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCi0JcyA9IHNnZXQoJm5mc19mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CisJcyA9IHNnZXQoJm5mczRfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOwogCWlmIChJU19FUlIocykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHMpOwogCQlnb3RvIG91dF9lcnJfbm9zYjsKQEAgLTI1NDQsNyArMjU0NCw3IEBACiAJCWNvbXBhcmVfc3VwZXIgPSBOVUxMOwogCiAJLyogR2V0IGEgc3VwZXJibG9jayAtIG5vdGUgdGhhdCB3ZSBtYXkgZW5kIHVwIHNoYXJpbmcgb25lIHRoYXQgYWxyZWFkeSBleGlzdHMgKi8KLQlzID0gc2dldCgmbmZzX2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKKwlzID0gc2dldCgmbmZzNF9mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CiAJaWYgKElTX0VSUihzKSkgewogCQllcnJvciA9IFBUUl9FUlIocyk7CiAJCWdvdG8gb3V0X2Vycl9ub3NiOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCBkMDIwODY2Li4zMTQwYTQ0IDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYworKysgYi9mcy9udGZzL2ZpbGUuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlwYWdlc1tucl0gPSAqY2FjaGVkX3BhZ2U7CiAJCQlwYWdlX2NhY2hlX2dldCgqY2FjaGVkX3BhZ2UpOwogCQkJaWYgKHVubGlrZWx5KCFwYWdldmVjX2FkZChscnVfcHZlYywgKmNhY2hlZF9wYWdlKSkpCi0JCQkJX19wYWdldmVjX2xydV9hZGQobHJ1X3B2ZWMpOworCQkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUobHJ1X3B2ZWMpOwogCQkJKmNhY2hlZF9wYWdlID0gTlVMTDsKIAkJfQogCQlpbmRleCsrOwpAQCAtMjA4NCw3ICsyMDg0LDcgQEAKIAkJCQkJCU9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOwogCQl9CiAgIAl9Ci0JcGFnZXZlY19scnVfYWRkKCZscnVfcHZlYyk7CisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAludGZzX2RlYnVnKCJEb25lLiAgUmV0dXJuaW5nICVzICh3cml0dGVuIDB4JWx4LCBzdGF0dXMgJWxpKS4iLAogCQkJd3JpdHRlbiA/ICJ3cml0dGVuIiA6ICJzdGF0dXMiLCAodW5zaWduZWQgbG9uZyl3cml0dGVuLAogCQkJKGxvbmcpc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCBmYmViMmYzLi5jZmIwYzgwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0xOTUsNiArMTk1LDE0IEBACiAJcmV0dXJuIEVSUl9QVFIocmVzKTsKIH0KIAorc3RhdGljIHNzaXplX3QgcGFydF9wYXJ0aXRpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwID0gZGV2X3RvX3BhcnQoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwLT5wYXJ0bm8pOworfQorCiBzdGF0aWMgc3NpemVfdCBwYXJ0X3N0YXJ0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0yNjAsNiArMjY4LDcgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgREVWSUNFX0FUVFIocGFydGl0aW9uLCBTX0lSVUdPLCBwYXJ0X3BhcnRpdGlvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGFydCwgU19JUlVHTywgcGFydF9zdGFydF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzaXplLCBTX0lSVUdPLCBwYXJ0X3NpemVfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdCwgU19JUlVHTywgcGFydF9zdGF0X3Nob3csIE5VTEwpOwpAQCAtMjY5LDYgKzI3OCw3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcGFydGl0aW9uLmF0dHIsCiAJJmRldl9hdHRyX3N0YXJ0LmF0dHIsCiAJJmRldl9hdHRyX3NpemUuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdC5hdHRyLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGY0YmMwZTcuLmJiOWY0YjAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTM4OCwyMCArMzg4LDIwIEBACiAKIAkJLyogYWRkIHVwIGxpdmUgdGhyZWFkIHN0YXRzIGF0IHRoZSBncm91cCBsZXZlbCAqLwogCQlpZiAod2hvbGUpIHsKKwkJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2s7CiAJCQlkbyB7CiAJCQkJbWluX2ZsdCArPSB0LT5taW5fZmx0OwogCQkJCW1hal9mbHQgKz0gdC0+bWFqX2ZsdDsKLQkJCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0YXNrX3V0aW1lKHQpKTsKLQkJCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0YXNrX3N0aW1lKHQpKTsKIAkJCQlndGltZSA9IGNwdXRpbWVfYWRkKGd0aW1lLCB0YXNrX2d0aW1lKHQpKTsKIAkJCQl0ID0gbmV4dF90aHJlYWQodCk7CiAJCQl9IHdoaWxlICh0ICE9IHRhc2spOwogCiAJCQltaW5fZmx0ICs9IHNpZy0+bWluX2ZsdDsKIAkJCW1hal9mbHQgKz0gc2lnLT5tYWpfZmx0OwotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgc2lnLT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBzaWctPnN0aW1lKTsKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHRhc2ssICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZS51dGltZTsKKwkJCXN0aW1lID0gY3B1dGltZS5zdGltZTsKIAkJCWd0aW1lID0gY3B1dGltZV9hZGQoZ3RpbWUsIHNpZy0+Z3RpbWUpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmluZGV4IDU5ZWE0MmUuLjdlYTUyYzcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIGIvZnMvcHJvYy9wcm9jX21pc2MuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xMzYsNiArMTM3LDggQEAKIAl1bnNpZ25lZCBsb25nIGFsbG93ZWQ7CiAJc3RydWN0IHZtYWxsb2NfaW5mbyB2bWk7CiAJbG9uZyBjYWNoZWQ7CisJdW5zaWduZWQgbG9uZyBwYWdlc1tOUl9MUlVfTElTVFNdOworCWludCBscnU7CiAKIC8qCiAgKiBkaXNwbGF5IGluIGtpbG9ieXRlcy4KQEAgLTE1NCw1MSArMTU3LDcwIEBACiAKIAlnZXRfdm1hbGxvY19pbmZvKCZ2bWkpOwogCisJZm9yIChscnUgPSBMUlVfQkFTRTsgbHJ1IDwgTlJfTFJVX0xJU1RTOyBscnUrKykKKwkJcGFnZXNbbHJ1XSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgbHJ1KTsKKwogCS8qCiAJICogVGFnZ2VkIGZvcm1hdCwgZm9yIGVhc3kgZ3JlcHBpbmcgYW5kIGV4cGFuc2lvbi4KIAkgKi8KIAlsZW4gPSBzcHJpbnRmKHBhZ2UsCi0JCSJNZW1Ub3RhbDogICAgICU4bHUga0JcbiIKLQkJIk1lbUZyZWU6ICAgICAgJThsdSBrQlxuIgotCQkiQnVmZmVyczogICAgICAlOGx1IGtCXG4iCi0JCSJDYWNoZWQ6ICAgICAgICU4bHUga0JcbiIKLQkJIlN3YXBDYWNoZWQ6ICAgJThsdSBrQlxuIgotCQkiQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSJJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKKwkJIk1lbVRvdGFsOiAgICAgICAlOGx1IGtCXG4iCisJCSJNZW1GcmVlOiAgICAgICAgJThsdSBrQlxuIgorCQkiQnVmZmVyczogICAgICAgICU4bHUga0JcbiIKKwkJIkNhY2hlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTd2FwQ2FjaGVkOiAgICAgJThsdSBrQlxuIgorCQkiQWN0aXZlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIkluYWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCisJCSJBY3RpdmUoYW5vbik6ICAgJThsdSBrQlxuIgorCQkiSW5hY3RpdmUoYW5vbik6ICU4bHUga0JcbiIKKwkJIkFjdGl2ZShmaWxlKTogICAlOGx1IGtCXG4iCisJCSJJbmFjdGl2ZShmaWxlKTogJThsdSBrQlxuIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIlVuZXZpY3RhYmxlOiAgICAlOGx1IGtCXG4iCisJCSJNbG9ja2VkOiAgICAgICAgJThsdSBrQlxuIgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJIkhpZ2hUb3RhbDogICAgJThsdSBrQlxuIgotCQkiSGlnaEZyZWU6ICAgICAlOGx1IGtCXG4iCi0JCSJMb3dUb3RhbDogICAgICU4bHUga0JcbiIKLQkJIkxvd0ZyZWU6ICAgICAgJThsdSBrQlxuIgorCQkiSGlnaFRvdGFsOiAgICAgICU4bHUga0JcbiIKKwkJIkhpZ2hGcmVlOiAgICAgICAlOGx1IGtCXG4iCisJCSJMb3dUb3RhbDogICAgICAgJThsdSBrQlxuIgorCQkiTG93RnJlZTogICAgICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkiU3dhcFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSJTd2FwRnJlZTogICAgICU4bHUga0JcbiIKLQkJIkRpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkiV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSJBbm9uUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJIk1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkiU2xhYjogICAgICAgICAlOGx1IGtCXG4iCi0JCSJTUmVjbGFpbWFibGU6ICU4bHUga0JcbiIKLQkJIlNVbnJlY2xhaW06ICAgJThsdSBrQlxuIgotCQkiUGFnZVRhYmxlczogICAlOGx1IGtCXG4iCisJCSJTd2FwVG90YWw6ICAgICAgJThsdSBrQlxuIgorCQkiU3dhcEZyZWU6ICAgICAgICU4bHUga0JcbiIKKwkJIkRpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSJXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkiQW5vblBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJIk1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTbGFiOiAgICAgICAgICAgJThsdSBrQlxuIgorCQkiU1JlY2xhaW1hYmxlOiAgICU4bHUga0JcbiIKKwkJIlNVbnJlY2xhaW06ICAgICAlOGx1IGtCXG4iCisJCSJQYWdlVGFibGVzOiAgICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19RVUlDS0xJU1QKLQkJIlF1aWNrbGlzdHM6ICAgJThsdSBrQlxuIgorCQkiUXVpY2tsaXN0czogICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkiTkZTX1Vuc3RhYmxlOiAlOGx1IGtCXG4iCi0JCSJCb3VuY2U6ICAgICAgICU4bHUga0JcbiIKLQkJIldyaXRlYmFja1RtcDogJThsdSBrQlxuIgotCQkiQ29tbWl0TGltaXQ6ICAlOGx1IGtCXG4iCi0JCSJDb21taXR0ZWRfQVM6ICU4bHUga0JcbiIKLQkJIlZtYWxsb2NUb3RhbDogJThsdSBrQlxuIgotCQkiVm1hbGxvY1VzZWQ6ICAlOGx1IGtCXG4iCi0JCSJWbWFsbG9jQ2h1bms6ICU4bHUga0JcbiIsCisJCSJORlNfVW5zdGFibGU6ICAgJThsdSBrQlxuIgorCQkiQm91bmNlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIldyaXRlYmFja1RtcDogICAlOGx1IGtCXG4iCisJCSJDb21taXRMaW1pdDogICAgJThsdSBrQlxuIgorCQkiQ29tbWl0dGVkX0FTOiAgICU4bHUga0JcbiIKKwkJIlZtYWxsb2NUb3RhbDogICAlOGx1IGtCXG4iCisJCSJWbWFsbG9jVXNlZDogICAgJThsdSBrQlxuIgorCQkiVm1hbGxvY0NodW5rOiAgICU4bHUga0JcbiIsCiAJCUsoaS50b3RhbHJhbSksCiAJCUsoaS5mcmVlcmFtKSwKIAkJSyhpLmJ1ZmZlcnJhbSksCiAJCUsoY2FjaGVkKSwKIAkJSyh0b3RhbF9zd2FwY2FjaGVfcGFnZXMpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSksCisJCUsocGFnZXNbTFJVX0FDVElWRV9BTk9OXSAgICsgcGFnZXNbTFJVX0FDVElWRV9GSUxFXSksCisJCUsocGFnZXNbTFJVX0lOQUNUSVZFX0FOT05dICsgcGFnZXNbTFJVX0lOQUNUSVZFX0ZJTEVdKSwKKwkJSyhwYWdlc1tMUlVfQUNUSVZFX0FOT05dKSwKKwkJSyhwYWdlc1tMUlVfSU5BQ1RJVkVfQU5PTl0pLAorCQlLKHBhZ2VzW0xSVV9BQ1RJVkVfRklMRV0pLAorCQlLKHBhZ2VzW0xSVV9JTkFDVElWRV9GSUxFXSksCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQlLKHBhZ2VzW0xSVV9VTkVWSUNUQUJMRV0pLAorCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQlLKGkudG90YWxoaWdoKSwKIAkJSyhpLmZyZWVoaWdoKSwKQEAgLTUwMCwxNyArNTIyLDEzIEBACiAKIHN0YXRpYyBpbnQgc2hvd19zdGF0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAl1bnNpZ25lZCBsb25nIGppZjsKIAljcHV0aW1lNjRfdCB1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvd2FpdCwgaXJxLCBzb2Z0aXJxLCBzdGVhbDsKIAljcHV0aW1lNjRfdCBndWVzdDsKIAl1NjQgc3VtID0gMDsKIAlzdHJ1Y3QgdGltZXNwZWMgYm9vdHRpbWU7Ci0JdW5zaWduZWQgaW50ICpwZXJfaXJxX3N1bTsKLQotCXBlcl9pcnFfc3VtID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSpOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBlcl9pcnFfc3VtKQotCQlyZXR1cm4gLUVOT01FTTsKKwl1bnNpZ25lZCBpbnQgcGVyX2lycV9zdW07CiAKIAl1c2VyID0gbmljZSA9IHN5c3RlbSA9IGlkbGUgPSBpb3dhaXQgPQogCQlpcnEgPSBzb2Z0aXJxID0gc3RlYWwgPSBjcHV0aW1lNjRfemVybzsKQEAgLTUxOSw4ICs1MzcsNiBAQAogCWppZiA9IGJvb3R0aW1lLnR2X3NlYzsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWludCBqOwotCiAJCXVzZXIgPSBjcHV0aW1lNjRfYWRkKHVzZXIsIGtzdGF0X2NwdShpKS5jcHVzdGF0LnVzZXIpOwogCQluaWNlID0gY3B1dGltZTY0X2FkZChuaWNlLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5uaWNlKTsKIAkJc3lzdGVtID0gY3B1dGltZTY0X2FkZChzeXN0ZW0sIGtzdGF0X2NwdShpKS5jcHVzdGF0LnN5c3RlbSk7CkBAIC01MzAsMTEgKzU0NiwxMCBAQAogCQlzb2Z0aXJxID0gY3B1dGltZTY0X2FkZChzb2Z0aXJxLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxKTsKIAkJc3RlYWwgPSBjcHV0aW1lNjRfYWRkKHN0ZWFsLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbCk7CiAJCWd1ZXN0ID0gY3B1dGltZTY0X2FkZChndWVzdCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3QpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdGVtcCA9IGtzdGF0X2NwdShpKS5pcnFzW2pdOwotCQkJc3VtICs9IHRlbXA7Ci0JCQlwZXJfaXJxX3N1bVtqXSArPSB0ZW1wOwotCQl9CisKKwkJZm9yX2VhY2hfaXJxX25yKGopCisJCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaiwgaSk7CisKIAkJc3VtICs9IGFyY2hfaXJxX3N0YXRfY3B1KGkpOwogCX0KIAlzdW0gKz0gYXJjaF9pcnFfc3RhdCgpOwpAQCAtNTc2LDggKzU5MSwxNSBAQAogCX0KIAlzZXFfcHJpbnRmKHAsICJpbnRyICVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXN1bSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfaXJxX3N1bVtpXSk7CisJLyogc3VtIGFnYWluID8gaXQgY291bGQgYmUgdXBkYXRlZD8gKi8KKwlmb3JfZWFjaF9pcnFfbnIoaikgeworCQlwZXJfaXJxX3N1bSA9IDA7CisKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCQlwZXJfaXJxX3N1bSArPSBrc3RhdF9pcnFzX2NwdShqLCBpKTsKKworCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfaXJxX3N1bSk7CisJfQogCiAJc2VxX3ByaW50ZihwLAogCQkiXG5jdHh0ICVsbHVcbiIKQEAgLTU5MSw3ICs2MTMsNiBAQAogCQlucl9ydW5uaW5nKCksCiAJCW5yX2lvd2FpdCgpKTsKIAotCWtmcmVlKHBlcl9pcnFfc3VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMwLDE1ICs2NTEsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgKmludF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKCpwb3MgPD0gTlJfSVJRUykgPyBwb3MgOiBOVUxMOworCXJldHVybiAoKnBvcyA8PSBucl9pcnFzKSA/IHBvcyA6IE5VTEw7CiB9CiAKKwogc3RhdGljIHZvaWQgKmludF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCSgqcG9zKSsrOwotCWlmICgqcG9zID4gTlJfSVJRUykKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBvczsKKwlyZXR1cm4gKCpwb3MgPD0gbnJfaXJxcykgPyBwb3MgOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpbnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQpAQCAtNjQ2LDcgKzY2Niw2IEBACiAJLyogTm90aGluZyB0byBkbyAqLwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW50X3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaW50X3NlcV9zdGFydCwKIAkubmV4dCAgPSBpbnRfc2VxX25leHQsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3ZtY29yZS5jIGIvZnMvcHJvYy92bWNvcmUuYwppbmRleCA4NDEzNjhiLi5jZDljYTY3IDEwMDY0NAotLS0gYS9mcy9wcm9jL3ZtY29yZS5jCisrKyBiL2ZzL3Byb2Mvdm1jb3JlLmMKQEAgLTMyLDkgKzMyLDYgQEAKIC8qIFRvdGFsIHNpemUgb2Ygdm1jb3JlIGZpbGUuICovCiBzdGF0aWMgdTY0IHZtY29yZV9zaXplOwogCi0vKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfdm1jb3JlID0gTlVMTDsKIAogLyogUmVhZHMgYSBwYWdlIGZyb20gdGhlIG9sZG1lbSBkZXZpY2UgZnJvbSBnaXZlbiBvZmZzZXQuICovCkBAIC02NDcsNyArNjQ0LDcgQEAKIAlpbnQgcmMgPSAwOwogCiAJLyogSWYgZWxmY29yZWhkcj0gaGFzIGJlZW4gcGFzc2VkIGluIGNtZGxpbmUsIHRoZW4gY2FwdHVyZSB0aGUgZHVtcC4qLwotCWlmICghKGVsZmNvcmVoZHJfYWRkciA8IEVMRkNPUkVfQUREUl9NQVgpKQorCWlmICghKGlzX3ZtY29yZV91c2FibGUoKSkpCiAJCXJldHVybiByYzsKIAlyYyA9IHBhcnNlX2NyYXNoX2VsZl9oZWFkZXJzKCk7CiAJaWYgKHJjKSB7CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggNTE0NWNiOS4uNzZhY2RiYyAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtMTEyLDEyICsxMTIsMTIgQEAKIAkJCWdvdG8gYWRkX2Vycm9yOwogCiAJCWlmICghcGFnZXZlY19hZGQoJmxydV9wdmVjLCBwYWdlKSkKLQkJCV9fcGFnZXZlY19scnVfYWRkKCZscnVfcHZlYyk7CisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CiAKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJfQogCi0JcGFnZXZlY19scnVfYWRkKCZscnVfcHZlYyk7CisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAlyZXR1cm4gMDsKIAogIGZzaXplX2V4Y2VlZGVkOgpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvaW5vZGUuYyBiL2ZzL3JhbWZzL2lub2RlLmMKaW5kZXggYjEzMTIzNC4uZjAzMWQxYyAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvaW5vZGUuYworKysgYi9mcy9yYW1mcy9pbm9kZS5jCkBAIC02MSw2ICs2MSw3IEBACiAJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnJhbWZzX2FvcHM7CiAJCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmcmFtZnNfYmFja2luZ19kZXZfaW5mbzsKIAkJbWFwcGluZ19zZXRfZ2ZwX21hc2soaW5vZGUtPmlfbWFwcGluZywgR0ZQX0hJR0hVU0VSKTsKKwkJbWFwcGluZ19zZXRfdW5ldmljdGFibGUoaW5vZGUtPmlfbWFwcGluZyk7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9mcy9zZXFfZmlsZS5jIGIvZnMvc2VxX2ZpbGUuYwppbmRleCBiZDIwZjdmLi5lYmEyZWFiIDEwMDY0NAotLS0gYS9mcy9zZXFfZmlsZS5jCisrKyBiL2ZzL3NlcV9maWxlLmMKQEAgLTQ1MiwxNyArNDUyLDM0IEBACiAKIGludCBzZXFfYml0bWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyAqYml0cywgdW5zaWduZWQgaW50IG5yX2JpdHMpCiB7Ci0Jc2l6ZV90IGxlbiA9IGJpdG1hcF9zY25wcmludGZfbGVuKG5yX2JpdHMpOwotCi0JaWYgKG0tPmNvdW50ICsgbGVuIDwgbS0+c2l6ZSkgewotCQliaXRtYXBfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCi0JCQkJIGJpdHMsIG5yX2JpdHMpOwotCQltLT5jb3VudCArPSBsZW47Ci0JCXJldHVybiAwOworCWlmIChtLT5jb3VudCA8IG0tPnNpemUpIHsKKwkJaW50IGxlbiA9IGJpdG1hcF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsCisJCQkJbS0+c2l6ZSAtIG0tPmNvdW50LCBiaXRzLCBucl9iaXRzKTsKKwkJaWYgKG0tPmNvdW50ICsgbGVuIDwgbS0+c2l6ZSkgeworCQkJbS0+Y291bnQgKz0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAJbS0+Y291bnQgPSBtLT5zaXplOwogCXJldHVybiAtMTsKIH0KK0VYUE9SVF9TWU1CT0woc2VxX2JpdG1hcCk7CisKK2ludCBzZXFfYml0bWFwX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLAorCQl1bnNpZ25lZCBpbnQgbnJfYml0cykKK3sKKwlpZiAobS0+Y291bnQgPCBtLT5zaXplKSB7CisJCWludCBsZW4gPSBiaXRtYXBfc2NubGlzdHByaW50ZihtLT5idWYgKyBtLT5jb3VudCwKKwkJCQltLT5zaXplIC0gbS0+Y291bnQsIGJpdHMsIG5yX2JpdHMpOworCQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7CisJCQltLT5jb3VudCArPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwltLT5jb3VudCA9IG0tPnNpemU7CisJcmV0dXJuIC0xOworfQorRVhQT1JUX1NZTUJPTChzZXFfYml0bWFwX2xpc3QpOwogCiBzdGF0aWMgdm9pZCAqc2luZ2xlX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcCwgbG9mZl90ICpwb3MpCiB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9idWRnZXQuYyBiL2ZzL3ViaWZzL2J1ZGdldC5jCmluZGV4IDczZGI0NjQuLjFhNDk3M2UgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2J1ZGdldC5jCisrKyBiL2ZzL3ViaWZzL2J1ZGdldC5jCkBAIC00MTQsMTkgKzQxNCwyMSBAQAogCSAqICAgIEBjLT5sc3QuZW1wdHlfbGVicyArIEBjLT5mcmVlYWJsZV9jbnQgKyBAYy0+aWR4X2djX2NudCAtCiAJICogICAgQGMtPmxzdC50YWtlbl9lbXB0eV9sZWJzCiAJICoKLQkgKiBAZW1wdHlfbGVicyBhcmUgYXZhaWxhYmxlIGJlY2F1c2UgdGhleSBhcmUgZW1wdHkuIEBmcmVlYWJsZV9jbnQgYXJlCi0JICogYXZhaWxhYmxlIGJlY2F1c2UgdGhleSBjb250YWluIG9ubHkgZnJlZSBhbmQgZGlydHkgc3BhY2UgYW5kIHRoZQotCSAqIGluZGV4IGFsbG9jYXRpb24gYWx3YXlzIG9jY3VycyBhZnRlciB3YnVmcyBhcmUgc3luY2gnZWQuCi0JICogQGlkeF9nY19jbnQgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgYXJlIGluZGV4IExFQnMgdGhhdCBoYXZlIGJlZW4KLQkgKiBnYXJiYWdlIGNvbGxlY3RlZCAoaW5jbHVkaW5nIHRyaXZpYWwgR0MpIGFuZCBhcmUgYXdhaXRpbmcgdGhlIGNvbW1pdAotCSAqIGJlZm9yZSB0aGV5IGNhbiBiZSB1bm1hcHBlZCAtIG5vdGUgdGhhdCB0aGUgaW4tdGhlLWdhcHMgbWV0aG9kIHdpbGwKLQkgKiBncmFiIHRoZXNlIGlmIGl0IG5lZWRzIHRoZW0uIEB0YWtlbl9lbXB0eV9sZWJzIGFyZSBlbXB0eV9sZWJzIHRoYXQKLQkgKiBoYXZlIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgZm9yIHNvbWUgcHVycG9zZSAoYWxzbyBpbmNsdWRlcyB0aG9zZQotCSAqIExFQnMgb24gdGhlIEBpZHhfZ2MgbGlzdCkuCisJICogQGMtPmxzdC5lbXB0eV9sZWJzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBlbXB0eS4KKwkgKiBAYy0+ZnJlZWFibGVfY250IGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGNvbnRhaW4gb25seSBmcmVlIGFuZAorCSAqIGRpcnR5IHNwYWNlLCBAYy0+aWR4X2djX2NudCBhcmUgYXZhaWxhYmxlIGJlY2F1c2UgdGhleSBhcmUgaW5kZXgKKwkgKiBMRUJzIHRoYXQgaGF2ZSBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkIGFuZCBhcmUgYXdhaXRpbmcgdGhlIGNvbW1pdAorCSAqIGJlZm9yZSB0aGV5IGNhbiBiZSB1c2VkLiBBbmQgdGhlIGluLXRoZS1nYXBzIG1ldGhvZCB3aWxsIGdyYWIgdGhlc2UKKwkgKiBpZiBpdCBuZWVkcyB0aGVtLiBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMgYXJlIGVtcHR5IExFQnMgdGhhdCBoYXZlCisJICogYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3Igc29tZSBwdXJwb3NlLgogCSAqCi0JICogTm90ZSwgQHRha2VuX2VtcHR5X2xlYnMgbWF5IHRlbXBvcmFyaWx5IGJlIGhpZ2hlciBieSBvbmUgYmVjYXVzZSBvZgotCSAqIHRoZSB3YXkgd2Ugc2VyaWFsaXplIExFQiBhbGxvY2F0aW9ucyBhbmQgYnVkZ2V0aW5nLiBTZWUgYSBjb21tZW50IGluCi0JICogJ3ViaWZzX2ZpbmRfZnJlZV9zcGFjZSgpJy4KKwkgKiBOb3RlLCBAYy0+aWR4X2djX2NudCBpcyBpbmNsdWRlZCB0byBib3RoIEBjLT5sc3QuZW1wdHlfbGVicyAoYmVjYXVzZQorCSAqIHRoZXNlIExFQnMgYXJlIGVtcHR5KSBhbmQgdG8gQGMtPmxzdC50YWtlbl9lbXB0eV9sZWJzIChiZWNhdXNlIHRoZXkKKwkgKiBhcmUgdGFrZW4gdW50aWwgYWZ0ZXIgdGhlIGNvbW1pdCkuCisJICoKKwkgKiBOb3RlLCBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMgbWF5IHRlbXBvcmFyaWx5IGJlIGhpZ2hlciBieSBvbmUKKwkgKiBiZWNhdXNlIG9mIHRoZSB3YXkgd2Ugc2VyaWFsaXplIExFQiBhbGxvY2F0aW9ucyBhbmQgYnVkZ2V0aW5nLiBTZWUgYQorCSAqIGNvbW1lbnQgaW4gJ3ViaWZzX2ZpbmRfZnJlZV9zcGFjZSgpJy4KIAkgKi8KIAlsZWJzID0gYy0+bHN0LmVtcHR5X2xlYnMgKyBjLT5mcmVlYWJsZV9jbnQgKyBjLT5pZHhfZ2NfY250IC0KIAkgICAgICAgYy0+bHN0LnRha2VuX2VtcHR5X2xlYnM7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9jb21wcmVzcy5jIGIvZnMvdWJpZnMvY29tcHJlc3MuYwppbmRleCA1YmI1MWRhLi5hMGFkYTU5IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9jb21wcmVzcy5jCisrKyBiL2ZzL3ViaWZzL2NvbXByZXNzLmMKQEAgLTkxLDggKzkxLDYgQEAKICAqCiAgKiBOb3RlLCBpZiB0aGUgaW5wdXQgYnVmZmVyIHdhcyBub3QgY29tcHJlc3NlZCwgaXQgaXMgY29waWVkIHRvIHRoZSBvdXRwdXQKICAqIGJ1ZmZlciBhbmQgJVVCSUZTX0NPTVBSX05PTkUgaXMgcmV0dXJuZWQgaW4gQGNvbXByX3R5cGUuCi0gKgotICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyAlMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiB2b2lkIHViaWZzX2NvbXByZXNzKGNvbnN0IHZvaWQgKmluX2J1ZiwgaW50IGluX2xlbiwgdm9pZCAqb3V0X2J1ZiwgaW50ICpvdXRfbGVuLAogCQkgICAgaW50ICpjb21wcl90eXBlKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuYyBiL2ZzL3ViaWZzL2RlYnVnLmMKaW5kZXggZDdmNzY0NS4uNzE4NjQwMCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuYworKysgYi9mcy91Ymlmcy9kZWJ1Zy5jCkBAIC0yMjIsMzAgKzIyMiwzOCBAQAogewogCWNvbnN0IHN0cnVjdCB1Ymlmc19pbm9kZSAqdWkgPSB1Ymlmc19pbm9kZShpbm9kZSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiaW5vZGUgICAgICAlbHVcbiIsIGlub2RlLT5pX2lubyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInNpemUgICAgICAgJWxsdVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiRHVtcCBpbi1tZW1vcnkgaW5vZGU6Iik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0aW5vZGUgICAgICAgICAgJWx1XG4iLCBpbm9kZS0+aV9pbm8pOworCXByaW50ayhLRVJOX0RFQlVHICJcdHNpemUgICAgICAgICAgICVsbHVcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaV9zaXplX3JlYWQoaW5vZGUpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAibmxpbmsgICAgICAldVxuIiwgaW5vZGUtPmlfbmxpbmspOwotCXByaW50ayhLRVJOX0RFQlVHICJ1aWQgICAgICAgICV1XG4iLCAodW5zaWduZWQgaW50KWlub2RlLT5pX3VpZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImdpZCAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfZ2lkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiYXRpbWUgICAgICAldS4ldVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRubGluayAgICAgICAgICAldVxuIiwgaW5vZGUtPmlfbmxpbmspOworCXByaW50ayhLRVJOX0RFQlVHICJcdHVpZCAgICAgICAgICAgICV1XG4iLCAodW5zaWduZWQgaW50KWlub2RlLT5pX3VpZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0Z2lkICAgICAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfZ2lkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRhdGltZSAgICAgICAgICAldS4ldVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9hdGltZS50dl9zZWMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfYXRpbWUudHZfbnNlYyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIm10aW1lICAgICAgJXUuJXVcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bXRpbWUgICAgICAgICAgJXUuJXVcbiIsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfbXRpbWUudHZfc2VjLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX210aW1lLnR2X25zZWMpOwotCXByaW50ayhLRVJOX0RFQlVHICJjdGltZSAgICAgICAldS4ldVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRjdGltZSAgICAgICAgICAldS4ldVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9jdGltZS50dl9zZWMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfY3RpbWUudHZfbnNlYyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImNyZWF0X3NxbnVtICVsbHVcbiIsIHVpLT5jcmVhdF9zcW51bSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInhhdHRyX3NpemUgICV1XG4iLCB1aS0+eGF0dHJfc2l6ZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInhhdHRyX2NudCAgICV1XG4iLCB1aS0+eGF0dHJfY250KTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfbmFtZXMgJXVcbiIsIHVpLT54YXR0cl9uYW1lcyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImRpcnR5ICAgICAgICV1XG4iLCB1aS0+ZGlydHkpOwotCXByaW50ayhLRVJOX0RFQlVHICJ4YXR0ciAgICAgICAldVxuIiwgdWktPnhhdHRyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZmxhZ3MgICAgICAgJWRcbiIsIHVpLT5mbGFncyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImNvbXByX3R5cGUgICVkXG4iLCB1aS0+Y29tcHJfdHlwZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImRhdGFfbGVuICAgICVkXG4iLCB1aS0+ZGF0YV9sZW4pOworCXByaW50ayhLRVJOX0RFQlVHICJcdGNyZWF0X3NxbnVtICAgICVsbHVcbiIsIHVpLT5jcmVhdF9zcW51bSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0eGF0dHJfc2l6ZSAgICAgJXVcbiIsIHVpLT54YXR0cl9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9jbnQgICAgICAldVxuIiwgdWktPnhhdHRyX2NudCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0eGF0dHJfbmFtZXMgICAgJXVcbiIsIHVpLT54YXR0cl9uYW1lcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0ZGlydHkgICAgICAgICAgJXVcbiIsIHVpLT5kaXJ0eSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0eGF0dHIgICAgICAgICAgJXVcbiIsIHVpLT54YXR0cik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0YnVsa19yZWFkICAgICAgJXVcbiIsIHVpLT54YXR0cik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0c3luY2VkX2lfc2l6ZSAgJWxsdVxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl1aS0+c3luY2VkX2lfc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0dWlfc2l6ZSAgICAgICAgJWxsdVxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl1aS0+dWlfc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0ZmxhZ3MgICAgICAgICAgJWRcbiIsIHVpLT5mbGFncyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0Y29tcHJfdHlwZSAgICAgJWRcbiIsIHVpLT5jb21wcl90eXBlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsYXN0X3BhZ2VfcmVhZCAlbHVcbiIsIHVpLT5sYXN0X3BhZ2VfcmVhZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0cmVhZF9pbl9hX3JvdyAgJWx1XG4iLCB1aS0+cmVhZF9pbl9hX3Jvdyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0ZGF0YV9sZW4gICAgICAgJWRcbiIsIHVpLT5kYXRhX2xlbik7CiB9CiAKIHZvaWQgZGJnX2R1bXBfbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgdm9pZCAqbm9kZSkKQEAgLTY0Nyw2ICs2NTUsNDMgQEAKIAl9CiB9CiAKK3ZvaWQgZGJnX2R1bXBfbHB0X2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmRiZ19sb2NrKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfc3o6ICAgICAgICAlbGxkXG4iLCBjLT5scHRfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBub2RlX3N6OiAgICAgICVkXG4iLCBjLT5wbm9kZV9zeik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bm5vZGVfc3o6ICAgICAgJWRcbiIsIGMtPm5ub2RlX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsdGFiX3N6OiAgICAgICAlZFxuIiwgYy0+bHRhYl9zeik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bHNhdmVfc3o6ICAgICAgJWRcbiIsIGMtPmxzYXZlX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRiaWdfbHB0OiAgICAgICAlZFxuIiwgYy0+YmlnX2xwdCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bHB0X2hnaHQ6ICAgICAgJWRcbiIsIGMtPmxwdF9oZ2h0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRwbm9kZV9jbnQ6ICAgICAlZFxuIiwgYy0+cG5vZGVfY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRubm9kZV9jbnQ6ICAgICAlZFxuIiwgYy0+bm5vZGVfY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkaXJ0eV9wbl9jbnQ6ICAlZFxuIiwgYy0+ZGlydHlfcG5fY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkaXJ0eV9ubl9jbnQ6ICAlZFxuIiwgYy0+ZGlydHlfbm5fY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsc2F2ZV9jbnQ6ICAgICAlZFxuIiwgYy0+bHNhdmVfY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRzcGFjZV9iaXRzOiAgICAlZFxuIiwgYy0+c3BhY2VfYml0cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bHB0X2xudW1fYml0czogJWRcbiIsIGMtPmxwdF9sbnVtX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9vZmZzX2JpdHM6ICVkXG4iLCBjLT5scHRfb2Zmc19iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfc3BjX2JpdHM6ICAlZFxuIiwgYy0+bHB0X3NwY19iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRwY250X2JpdHM6ICAgICAlZFxuIiwgYy0+cGNudF9iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsbnVtX2JpdHM6ICAgICAlZFxuIiwgYy0+bG51bV9iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgcm9vdCBpcyBhdCAlZDolZFxuIiwgYy0+bHB0X2xudW0sIGMtPmxwdF9vZmZzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgaGVhZCBpcyBhdCAlZDolZFxuIiwKKwkgICAgICAgYy0+bmhlYWRfbG51bSwgYy0+bmhlYWRfb2Zmcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0TFBUIGx0YWIgaXMgYXQgJWQ6JWRcbiIsIGMtPmx0YWJfbG51bSwgYy0+bHRhYl9vZmZzKTsKKwlpZiAoYy0+YmlnX2xwdCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0TFBUIGxzYXZlIGlzIGF0ICVkOiVkXG4iLAorCQkgICAgICAgYy0+bHNhdmVfbG51bSwgYy0+bHNhdmVfb2Zmcyk7CisJZm9yIChpID0gMDsgaSA8IGMtPmxwdF9sZWJzOyBpKyspCisJCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCBMRUIgJWQgZnJlZSAlZCBkaXJ0eSAlZCB0Z2MgJWQgIgorCQkgICAgICAgImNtdCAlZFxuIiwgaSArIGMtPmxwdF9maXJzdCwgYy0+bHRhYltpXS5mcmVlLAorCQkgICAgICAgYy0+bHRhYltpXS5kaXJ0eSwgYy0+bHRhYltpXS50Z2MsIGMtPmx0YWJbaV0uY210KTsKKwlzcGluX3VubG9jaygmZGJnX2xvY2spOworfQorCiB2b2lkIGRiZ19kdW1wX2xlYihjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IGxudW0pCiB7CiAJc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuaCBiL2ZzL3ViaWZzL2RlYnVnLmgKaW5kZXggNTAzMTVmYy4uMzNkNmI5NSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuaAorKysgYi9mcy91Ymlmcy9kZWJ1Zy5oCkBAIC0yMjQsNiArMjI0LDcgQEAKIHZvaWQgZGJnX2R1bXBfYnVkZyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiB2b2lkIGRiZ19kdW1wX2xwcm9wKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCBzdHJ1Y3QgdWJpZnNfbHByb3BzICpscCk7CiB2b2lkIGRiZ19kdW1wX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7Cit2b2lkIGRiZ19kdW1wX2xwdF9pbmZvKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIHZvaWQgZGJnX2R1bXBfbGViKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSk7CiB2b2lkIGRiZ19kdW1wX3pub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAogCQkgICAgY29uc3Qgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSk7CkBAIC0yNDksNiArMjUwLDggQEAKIGludCBkYmdfY2hlY2tfb2xkX2luZGV4KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfemJyYW5jaCAqenJvb3QpOwogaW50IGRiZ19jaGVja19jYXRzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGludCBkYmdfY2hlY2tfbHRhYihzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CitpbnQgZGJnX2Noa19scHRfZnJlZV9zcGMoc3RydWN0IHViaWZzX2luZm8gKmMpOworaW50IGRiZ19jaGtfbHB0X3N6KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgYWN0aW9uLCBpbnQgbGVuKTsKIGludCBkYmdfY2hlY2tfc3luY2VkX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBkYmdfY2hlY2tfZGlyX3NpemUoc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyKTsKIGludCBkYmdfY2hlY2tfdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgZXh0cmEpOwpAQCAtMzY3LDYgKzM3MCw3IEBACiAjZGVmaW5lIGRiZ19kdW1wX2J1ZGcoYykgICAgICAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF9scHJvcChjLCBscCkgICAgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfbHByb3BzKGMpICAgICAgICAgICAgICAgICAgICAoe30pCisjZGVmaW5lIGRiZ19kdW1wX2xwdF9pbmZvKGMpICAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF9sZWIoYywgbG51bSkgICAgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfem5vZGUoYywgem5vZGUpICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2hlYXAoYywgaGVhcCwgY2F0KSAgICAgICAgICAgKHt9KQpAQCAtMzc5LDYgKzM4Myw4IEBACiAjZGVmaW5lIGRiZ19jaGVja19vbGRfaW5kZXgoYywgenJvb3QpICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja19jYXRzKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja19sdGFiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRiZ19jaGtfbHB0X2ZyZWVfc3BjKGMpICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRiZ19jaGtfbHB0X3N6KGMsIGFjdGlvbiwgbGVuKSAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja19zeW5jZWRfaV9zaXplKGlub2RlKSAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja19kaXJfc2l6ZShjLCBkaXIpICAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIGRiZ19jaGVja190bmMoYywgeCkgICAgICAgICAgICAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggM2Q2OThlMi4uNTFjZjUxMSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmlsZS5jCisrKyBiL2ZzL3ViaWZzL2ZpbGUuYwpAQCAtMTQ3LDYgKzE0NywxMiBAQAogCQkJCWVyciA9IHJldDsKIAkJCQlpZiAoZXJyICE9IC1FTk9FTlQpCiAJCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChibG9jayArIDEgPT0gYmV5b25kKSB7CisJCQkJaW50IGRsZW4gPSBsZTMyX3RvX2NwdShkbi0+c2l6ZSk7CisJCQkJaW50IGlsZW4gPSBpX3NpemUgJiAoVUJJRlNfQkxPQ0tfU0laRSAtIDEpOworCisJCQkJaWYgKGlsZW4gJiYgaWxlbiA8IGRsZW4pCisJCQkJCW1lbXNldChhZGRyICsgaWxlbiwgMCwgZGxlbiAtIGlsZW4pOwogCQkJfQogCQl9CiAJCWlmICgrK2kgPj0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFKQpAQCAtNTc3LDggKzU4MywyNjIgQEAKIAlyZXR1cm4gY29waWVkOwogfQogCisvKioKKyAqIHBvcHVsYXRlX3BhZ2UgLSBjb3B5IGRhdGEgbm9kZXMgaW50byBhIHBhZ2UgZm9yIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBwYWdlOiBwYWdlCisgKiBAYnU6IGJ1bGstcmVhZCBpbmZvcm1hdGlvbgorICogQG46IG5leHQgemJyYW5jaCBzbG90CisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICUwIG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHBvcHVsYXRlX3BhZ2Uoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJIHN0cnVjdCBidV9pbmZvICpidSwgaW50ICpuKQoreworCWludCBpID0gMCwgbm4gPSAqbiwgb2ZmcyA9IGJ1LT56YnJhbmNoWzBdLm9mZnMsIGhvbGUgPSAwLCByZWFkID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCXVuc2lnbmVkIGludCBwYWdlX2Jsb2NrOworCXZvaWQgKmFkZHIsICp6YWRkcjsKKwlwZ29mZl90IGVuZF9pbmRleDsKKworCWRiZ19nZW4oImlubyAlbHUsIHBnICVsdSwgaV9zaXplICVsbGQsIGZsYWdzICUjbHgiLAorCQlpbm9kZS0+aV9pbm8sIHBhZ2UtPmluZGV4LCBpX3NpemUsIHBhZ2UtPmZsYWdzKTsKKworCWFkZHIgPSB6YWRkciA9IGttYXAocGFnZSk7CisKKwllbmRfaW5kZXggPSAoaV9zaXplIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpZiAoIWlfc2l6ZSB8fCBwYWdlLT5pbmRleCA+IGVuZF9pbmRleCkgeworCQlob2xlID0gMTsKKwkJbWVtc2V0KGFkZHIsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJCWdvdG8gb3V0X2hvbGU7CisJfQorCisJcGFnZV9ibG9jayA9IHBhZ2UtPmluZGV4IDw8IFVCSUZTX0JMT0NLU19QRVJfUEFHRV9TSElGVDsKKwl3aGlsZSAoMSkgeworCQlpbnQgZXJyLCBsZW4sIG91dF9sZW4sIGRsZW47CisKKwkJaWYgKG5uID49IGJ1LT5jbnQpIHsKKwkJCWhvbGUgPSAxOworCQkJbWVtc2V0KGFkZHIsIDAsIFVCSUZTX0JMT0NLX1NJWkUpOworCQl9IGVsc2UgaWYgKGtleV9ibG9jayhjLCAmYnUtPnpicmFuY2hbbm5dLmtleSkgPT0gcGFnZV9ibG9jaykgeworCQkJc3RydWN0IHViaWZzX2RhdGFfbm9kZSAqZG47CisKKwkJCWRuID0gYnUtPmJ1ZiArIChidS0+emJyYW5jaFtubl0ub2ZmcyAtIG9mZnMpOworCisJCQl1Ymlmc19hc3NlcnQoZG4tPmNoLnNxbnVtID4KKwkJCQkgICAgIHViaWZzX2lub2RlKGlub2RlKS0+Y3JlYXRfc3FudW0pOworCisJCQlsZW4gPSBsZTMyX3RvX2NwdShkbi0+c2l6ZSk7CisJCQlpZiAobGVuIDw9IDAgfHwgbGVuID4gVUJJRlNfQkxPQ0tfU0laRSkKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWRsZW4gPSBsZTMyX3RvX2NwdShkbi0+Y2gubGVuKSAtIFVCSUZTX0RBVEFfTk9ERV9TWjsKKwkJCW91dF9sZW4gPSBVQklGU19CTE9DS19TSVpFOworCQkJZXJyID0gdWJpZnNfZGVjb21wcmVzcygmZG4tPmRhdGEsIGRsZW4sIGFkZHIsICZvdXRfbGVuLAorCQkJCQkgICAgICAgbGUxNl90b19jcHUoZG4tPmNvbXByX3R5cGUpKTsKKwkJCWlmIChlcnIgfHwgbGVuICE9IG91dF9sZW4pCisJCQkJZ290byBvdXRfZXJyOworCisJCQlpZiAobGVuIDwgVUJJRlNfQkxPQ0tfU0laRSkKKwkJCQltZW1zZXQoYWRkciArIGxlbiwgMCwgVUJJRlNfQkxPQ0tfU0laRSAtIGxlbik7CisKKwkJCW5uICs9IDE7CisJCQlyZWFkID0gKGkgPDwgVUJJRlNfQkxPQ0tfU0hJRlQpICsgbGVuOworCQl9IGVsc2UgaWYgKGtleV9ibG9jayhjLCAmYnUtPnpicmFuY2hbbm5dLmtleSkgPCBwYWdlX2Jsb2NrKSB7CisJCQlubiArPSAxOworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlob2xlID0gMTsKKwkJCW1lbXNldChhZGRyLCAwLCBVQklGU19CTE9DS19TSVpFKTsKKwkJfQorCQlpZiAoKytpID49IFVCSUZTX0JMT0NLU19QRVJfUEFHRSkKKwkJCWJyZWFrOworCQlhZGRyICs9IFVCSUZTX0JMT0NLX1NJWkU7CisJCXBhZ2VfYmxvY2sgKz0gMTsKKwl9CisKKwlpZiAoZW5kX2luZGV4ID09IHBhZ2UtPmluZGV4KSB7CisJCWludCBsZW4gPSBpX3NpemUgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisKKwkJaWYgKGxlbiAmJiBsZW4gPCByZWFkKQorCQkJbWVtc2V0KHphZGRyICsgbGVuLCAwLCByZWFkIC0gbGVuKTsKKwl9CisKK291dF9ob2xlOgorCWlmIChob2xlKSB7CisJCVNldFBhZ2VDaGVja2VkKHBhZ2UpOworCQlkYmdfZ2VuKCJob2xlIik7CisJfQorCisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCUNsZWFyUGFnZUVycm9yKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcChwYWdlKTsKKwkqbiA9IG5uOworCXJldHVybiAwOworCitvdXRfZXJyOgorCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCVNldFBhZ2VFcnJvcihwYWdlKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlrdW5tYXAocGFnZSk7CisJdWJpZnNfZXJyKCJiYWQgZGF0YSBub2RlIChibG9jayAldSwgaW5vZGUgJWx1KSIsCisJCSAgcGFnZV9ibG9jaywgaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB1Ymlmc19kb19idWxrX3JlYWQgLSBkbyBidWxrLXJlYWQuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAcGFnZTE6IGZpcnN0IHBhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTEgaWYgdGhlIGJ1bGstcmVhZCBpcyBkb25lLCBvdGhlcndpc2UgJTAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgdWJpZnNfZG9fYnVsa19yZWFkKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgcGFnZSAqcGFnZTEpCit7CisJcGdvZmZfdCBvZmZzZXQgPSBwYWdlMS0+aW5kZXgsIGVuZF9pbmRleDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UxLT5tYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCB1Ymlmc19pbm9kZSAqdWkgPSB1Ymlmc19pbm9kZShpbm9kZSk7CisJc3RydWN0IGJ1X2luZm8gKmJ1OworCWludCBlcnIsIHBhZ2VfaWR4LCBwYWdlX2NudCwgcmV0ID0gMCwgbiA9IDA7CisJbG9mZl90IGlzaXplOworCisJYnUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnVfaW5mbyksIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1KQorCQlyZXR1cm4gMDsKKworCWJ1LT5idWZfbGVuID0gYy0+YnVsa19yZWFkX2J1Zl9zaXplOworCWJ1LT5idWYgPSBrbWFsbG9jKGJ1LT5idWZfbGVuLCBHRlBfTk9GUyk7CisJaWYgKCFidS0+YnVmKQorCQlnb3RvIG91dF9mcmVlOworCisJZGF0YV9rZXlfaW5pdChjLCAmYnUtPmtleSwgaW5vZGUtPmlfaW5vLAorCQkgICAgICBvZmZzZXQgPDwgVUJJRlNfQkxPQ0tTX1BFUl9QQUdFX1NISUZUKTsKKworCWVyciA9IHViaWZzX3RuY19nZXRfYnVfa2V5cyhjLCBidSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfd2FybjsKKworCWlmIChidS0+ZW9mKSB7CisJCS8qIFR1cm4gb2ZmIGJ1bGstcmVhZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlICovCisJCXVpLT5yZWFkX2luX2Ffcm93ID0gMTsKKwkJdWktPmJ1bGtfcmVhZCA9IDA7CisJfQorCisJcGFnZV9jbnQgPSBidS0+YmxrX2NudCA+PiBVQklGU19CTE9DS1NfUEVSX1BBR0VfU0hJRlQ7CisJaWYgKCFwYWdlX2NudCkgeworCQkvKgorCQkgKiBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgYmxvY2tzIHBlciBwYWdlIGFuZCB0aGUKKwkJICogYmxvY2tzIGZvciB0aGUgZmlyc3QgcGFnZSB3ZSBhcmUgbG9va2luZyBmb3IsIGFyZSBub3QKKwkJICogdG9nZXRoZXIuIElmIGFsbCB0aGUgcGFnZXMgd2VyZSBsaWtlIHRoaXMsIGJ1bGstcmVhZCB3b3VsZAorCQkgKiByZWR1Y2UgcGVyZm9ybWFuY2UsIHNvIHdlIHR1cm4gaXQgb2ZmIGZvciBhIHdoaWxlLgorCQkgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAwOworCQl1aS0+YnVsa19yZWFkID0gMDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlpZiAoYnUtPmNudCkgeworCQllcnIgPSB1Ymlmc190bmNfYnVsa19yZWFkKGMsIGJ1KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3dhcm47CisJfQorCisJZXJyID0gcG9wdWxhdGVfcGFnZShjLCBwYWdlMSwgYnUsICZuKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF93YXJuOworCisJdW5sb2NrX3BhZ2UocGFnZTEpOworCXJldCA9IDE7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAoaXNpemUgPT0gMCkKKwkJZ290byBvdXRfZnJlZTsKKwllbmRfaW5kZXggPSAoKGlzaXplIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisKKwlmb3IgKHBhZ2VfaWR4ID0gMTsgcGFnZV9pZHggPCBwYWdlX2NudDsgcGFnZV9pZHgrKykgeworCQlwZ29mZl90IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICsgcGFnZV9pZHg7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCWlmIChwYWdlX29mZnNldCA+IGVuZF9pbmRleCkKKwkJCWJyZWFrOworCQlwYWdlID0gZmluZF9vcl9jcmVhdGVfcGFnZShtYXBwaW5nLCBwYWdlX29mZnNldCwKKwkJCQkJICAgR0ZQX05PRlMgfCBfX0dGUF9DT0xEKTsKKwkJaWYgKCFwYWdlKQorCQkJYnJlYWs7CisJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQorCQkJZXJyID0gcG9wdWxhdGVfcGFnZShjLCBwYWdlLCBidSwgJm4pOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJdWktPmxhc3RfcGFnZV9yZWFkID0gb2Zmc2V0ICsgcGFnZV9pZHggLSAxOworCitvdXRfZnJlZToKKwlrZnJlZShidS0+YnVmKTsKKwlrZnJlZShidSk7CisJcmV0dXJuIHJldDsKKworb3V0X3dhcm46CisJdWJpZnNfd2FybigiaWdub3JpbmcgZXJyb3IgJWQgYW5kIHNraXBwaW5nIGJ1bGstcmVhZCIsIGVycik7CisJZ290byBvdXRfZnJlZTsKK30KKworLyoqCisgKiB1Ymlmc19idWxrX3JlYWQgLSBkZXRlcm1pbmUgd2hldGhlciB0byBidWxrLXJlYWQgYW5kLCBpZiBzbywgZG8gaXQuCisgKiBAcGFnZTogcGFnZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IGJ1bGstcmVhZC4KKyAqCisgKiBTb21lIGZsYXNoIG1lZGlhIGFyZSBjYXBhYmxlIG9mIHJlYWRpbmcgc2VxdWVudGlhbGx5IGF0IGZhc3RlciByYXRlcy4gVUJJRlMKKyAqIGJ1bGstcmVhZCBmYWNpbGl0eSBpcyBkZXNpZ25lZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGF0LCBieSByZWFkaW5nIGluIG9uZQorICogZ28gY29uc2VjdXRpdmUgZGF0YSBub2RlcyB0aGF0IGFyZSBhbHNvIGxvY2F0ZWQgY29uc2VjdXRpdmVseSBpbiB0aGUgc2FtZQorICogTEVCLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTEgaWYgYSBidWxrLXJlYWQgaXMgZG9uZSBhbmQgJTAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHViaWZzX2J1bGtfcmVhZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKKwlwZ29mZl90IGluZGV4ID0gcGFnZS0+aW5kZXgsIGxhc3RfcGFnZV9yZWFkID0gdWktPmxhc3RfcGFnZV9yZWFkOworCWludCByZXQgPSAwOworCisJdWktPmxhc3RfcGFnZV9yZWFkID0gaW5kZXg7CisKKwlpZiAoIWMtPmJ1bGtfcmVhZCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBCdWxrLXJlYWQgaXMgcHJvdGVjdGVkIGJ5IHVpX211dGV4LCBidXQgaXQgaXMgYW4gb3B0aW1pemF0aW9uLCBzbworCSAqIGRvbid0IGJvdGhlciBpZiB3ZSBjYW5ub3QgbG9jayB0aGUgbXV0ZXguCisJICovCisJaWYgKCFtdXRleF90cnlsb2NrKCZ1aS0+dWlfbXV0ZXgpKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5kZXggIT0gbGFzdF9wYWdlX3JlYWQgKyAxKSB7CisJCS8qIFR1cm4gb2ZmIGJ1bGstcmVhZCBpZiB3ZSBzdG9wIHJlYWRpbmcgc2VxdWVudGlhbGx5ICovCisJCXVpLT5yZWFkX2luX2Ffcm93ID0gMTsKKwkJaWYgKHVpLT5idWxrX3JlYWQpCisJCQl1aS0+YnVsa19yZWFkID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwlpZiAoIXVpLT5idWxrX3JlYWQpIHsKKwkJdWktPnJlYWRfaW5fYV9yb3cgKz0gMTsKKwkJaWYgKHVpLT5yZWFkX2luX2Ffcm93IDwgMykKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJLyogVGhyZWUgcmVhZHMgaW4gYSByb3csIHNvIHN3aXRjaCBvbiBidWxrLXJlYWQgKi8KKwkJdWktPmJ1bGtfcmVhZCA9IDE7CisJfQorCXJldCA9IHViaWZzX2RvX2J1bGtfcmVhZChjLCBwYWdlKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ1aS0+dWlfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgdWJpZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQogeworCWlmICh1Ymlmc19idWxrX3JlYWQocGFnZSkpCisJCXJldHVybiAwOwogCWRvX3JlYWRwYWdlKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmluZC5jIGIvZnMvdWJpZnMvZmluZC5jCmluZGV4IDQ3ODE0Y2QuLjcxN2Q3OWMgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbmQuYworKysgYi9mcy91Ymlmcy9maW5kLmMKQEAgLTkwMSwxMSArOTAxLDExIEBACiAJICogaXQgaXMgbmVlZGVkIG5vdyBmb3IgdGhpcyBjb21taXQuCiAJICovCiAJbHAgPSB1Ymlmc19scHRfbG9va3VwX2RpcnR5KGMsIGxudW0pOwotCWlmICh1bmxpa2VseShJU19FUlIobHApKSkKKwlpZiAoSVNfRVJSKGxwKSkKIAkJcmV0dXJuIFBUUl9FUlIobHApOwogCWxwID0gdWJpZnNfY2hhbmdlX2xwKGMsIGxwLCBMUFJPUFNfTkMsIExQUk9QU19OQywKIAkJCSAgICAgbHAtPmZsYWdzIHwgTFBST1BTX0lOREVYLCAtMSk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihscCkpKQorCWlmIChJU19FUlIobHApKQogCQlyZXR1cm4gUFRSX0VSUihscCk7CiAJZGJnX2ZpbmQoIkxFQiAlZCwgZGlydHkgJWQgYW5kIGZyZWUgJWQgZmxhZ3MgJSN4IiwKIAkJIGxwLT5sbnVtLCBscC0+ZGlydHksIGxwLT5mcmVlLCBscC0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZ2MuYyBiL2ZzL3ViaWZzL2djLmMKaW5kZXggMDJhYmEzNi4uMGJlZjY1MCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZ2MuYworKysgYi9mcy91Ymlmcy9nYy5jCkBAIC05Niw2ICs5Niw0OCBAQAogfQogCiAvKioKKyAqIGpvaW51cCAtIGJyaW5nIGRhdGEgbm9kZXMgZm9yIGFuIGlub2RlIHRvZ2V0aGVyLgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQHNsZWI6IGRlc2NyaWJlcyBzY2FubmVkIExFQgorICogQGludW06IGlub2RlIG51bWJlcgorICogQGJsazogYmxvY2sgbnVtYmVyCisgKiBAZGF0YTogbGlzdCB0byB3aGljaCB0byBhZGQgZGF0YSBub2RlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgYXQgdGhlIGZpcnN0IGZldyBub2RlcyBpbiB0aGUgc2Nhbm5lZCBMRUIgQHNsZWIgYW5kIGFkZHMKKyAqIHRoZW0gdG8gQGRhdGEgaWYgdGhleSBhcmUgZGF0YSBub2RlcyBmcm9tIEBpbnVtIGFuZCBoYXZlIGEgbGFyZ2VyIGJsb2NrCisgKiBudW1iZXIgdGhhbiBAYmxrLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvcgorICogY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGpvaW51cChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViLCBpbm9fdCBpbnVtLAorCQkgIHVuc2lnbmVkIGludCBibGssIHN0cnVjdCBsaXN0X2hlYWQgKmRhdGEpCit7CisJaW50IGVyciwgY250ID0gNiwgbG51bSA9IHNsZWItPmxudW0sIG9mZnM7CisJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZCwgKnRtcDsKKwl1bmlvbiB1Ymlmc19rZXkgKmtleTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbm9kLCB0bXAsICZzbGViLT5ub2RlcywgbGlzdCkgeworCQlrZXkgPSAmc25vZC0+a2V5OworCQlpZiAoa2V5X2ludW0oYywga2V5KSA9PSBpbnVtICYmCisJCSAgICBrZXlfdHlwZShjLCBrZXkpID09IFVCSUZTX0RBVEFfS0VZICYmCisJCSAgICBrZXlfYmxvY2soYywga2V5KSA+IGJsaykgeworCQkJb2ZmcyA9IHNub2QtPm9mZnM7CisJCQllcnIgPSB1Ymlmc190bmNfaGFzX25vZGUoYywga2V5LCAwLCBsbnVtLCBvZmZzLCAwKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlsaXN0X2RlbCgmc25vZC0+bGlzdCk7CisJCQlpZiAoZXJyKSB7CisJCQkJbGlzdF9hZGRfdGFpbCgmc25vZC0+bGlzdCwgZGF0YSk7CisJCQkJYmxrID0ga2V5X2Jsb2NrKGMsIGtleSk7CisJCQl9IGVsc2UKKwkJCQlrZnJlZShzbm9kKTsKKwkJCWNudCA9IDY7CisJCX0gZWxzZSBpZiAoLS1jbnQgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBtb3ZlX25vZGVzIC0gbW92ZSBub2Rlcy4KICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBzbGViOiBkZXNjcmliZXMgbm9kZXMgdG8gbW92ZQpAQCAtMTE2LDE2ICsxNTgsMjEgQEAKIHN0YXRpYyBpbnQgbW92ZV9ub2RlcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX3NjYW5fbGViICpzbGViKQogewogCXN0cnVjdCB1Ymlmc19zY2FuX25vZGUgKnNub2QsICp0bXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsYXJnZSwgbWVkaXVtLCBzbWFsbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRhdGEsIGxhcmdlLCBtZWRpdW0sIHNtYWxsOwogCXN0cnVjdCB1Ymlmc193YnVmICp3YnVmID0gJmMtPmpoZWFkc1tHQ0hEXS53YnVmOwogCWludCBhdmFpbCwgZXJyLCBtaW4gPSBJTlRfTUFYOworCXVuc2lnbmVkIGludCBibGsgPSAwOworCWlub190IGludW0gPSAwOwogCisJSU5JVF9MSVNUX0hFQUQoJmRhdGEpOwogCUlOSVRfTElTVF9IRUFEKCZsYXJnZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm1lZGl1bSk7CiAJSU5JVF9MSVNUX0hFQUQoJnNtYWxsKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbm9kLCB0bXAsICZzbGViLT5ub2RlcywgbGlzdCkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICpsc3Q7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzbGViLT5ub2RlcykpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbHN0ID0gc2xlYi0+bm9kZXMubmV4dDsKKworCQlzbm9kID0gbGlzdF9lbnRyeShsc3QsIHN0cnVjdCB1Ymlmc19zY2FuX25vZGUsIGxpc3QpOwogCiAJCXViaWZzX2Fzc2VydChzbm9kLT50eXBlICE9IFVCSUZTX0lEWF9OT0RFKTsKIAkJdWJpZnNfYXNzZXJ0KHNub2QtPnR5cGUgIT0gVUJJRlNfUkVGX05PREUpOwpAQCAtMTM2LDcgKzE4Myw2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXQ7CiAKLQkJbHN0ID0gJnNub2QtPmxpc3Q7CiAJCWxpc3RfZGVsKGxzdCk7CiAJCWlmICghZXJyKSB7CiAJCQkvKiBUaGUgbm9kZSBpcyBvYnNvbGV0ZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KQEAgLTE0NSwxNSArMTkxLDMwIEBACiAJCX0KIAogCQkvKgotCQkgKiBTb3J0IHRoZSBsaXN0IG9mIG5vZGVzIHNvIHRoYXQgbGFyZ2Ugbm9kZXMgZ28gZmlyc3QsIGFuZAotCQkgKiBzbWFsbCBub2RlcyBnbyBsYXN0LgorCQkgKiBTb3J0IHRoZSBsaXN0IG9mIG5vZGVzIHNvIHRoYXQgZGF0YSBub2RlcyBnbyBmaXJzdCwgbGFyZ2UKKwkJICogbm9kZXMgZ28gc2Vjb25kLCBhbmQgc21hbGwgbm9kZXMgZ28gbGFzdC4KIAkJICovCi0JCWlmIChzbm9kLT5sZW4gPiBNRURJVU1fTk9ERV9XTSkKLQkJCWxpc3RfYWRkKGxzdCwgJmxhcmdlKTsKKwkJaWYgKGtleV90eXBlKGMsICZzbm9kLT5rZXkpID09IFVCSUZTX0RBVEFfS0VZKSB7CisJCQlpZiAoaW51bSAhPSBrZXlfaW51bShjLCAmc25vZC0+a2V5KSkgeworCQkJCWlmIChpbnVtKSB7CisJCQkJCS8qCisJCQkJCSAqIFRyeSB0byBtb3ZlIGRhdGEgbm9kZXMgZnJvbSB0aGUgc2FtZQorCQkJCQkgKiBpbm9kZSB0b2dldGhlci4KKwkJCQkJICovCisJCQkJCWVyciA9IGpvaW51cChjLCBzbGViLCBpbnVtLCBibGssICZkYXRhKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlpbnVtID0ga2V5X2ludW0oYywgJnNub2QtPmtleSk7CisJCQkJYmxrID0ga2V5X2Jsb2NrKGMsICZzbm9kLT5rZXkpOworCQkJfQorCQkJbGlzdF9hZGRfdGFpbChsc3QsICZkYXRhKTsKKwkJfSBlbHNlIGlmIChzbm9kLT5sZW4gPiBNRURJVU1fTk9ERV9XTSkKKwkJCWxpc3RfYWRkX3RhaWwobHN0LCAmbGFyZ2UpOwogCQllbHNlIGlmIChzbm9kLT5sZW4gPiBTTUFMTF9OT0RFX1dNKQotCQkJbGlzdF9hZGQobHN0LCAmbWVkaXVtKTsKKwkJCWxpc3RfYWRkX3RhaWwobHN0LCAmbWVkaXVtKTsKIAkJZWxzZQotCQkJbGlzdF9hZGQobHN0LCAmc21hbGwpOworCQkJbGlzdF9hZGRfdGFpbChsc3QsICZzbWFsbCk7CiAKIAkJLyogQW5kIGZpbmQgdGhlIHNtYWxsZXN0IG5vZGUgKi8KIAkJaWYgKHNub2QtPmxlbiA8IG1pbikKQEAgLTE2NCw2ICsyMjUsNyBAQAogCSAqIEpvaW4gdGhlIHRyZWUgbGlzdHMgc28gdGhhdCB3ZSdkIGhhdmUgb25lIHJvdWdobHkgc29ydGVkIGxpc3QKIAkgKiAoJ2xhcmdlJyB3aWxsIGJlIHRoZSBoZWFkIG9mIHRoZSBqb2luZWQgbGlzdCkuCiAJICovCisJbGlzdF9zcGxpY2UoJmRhdGEsICZsYXJnZSk7CiAJbGlzdF9zcGxpY2UoJm1lZGl1bSwgbGFyZ2UucHJldik7CiAJbGlzdF9zcGxpY2UoJnNtYWxsLCBsYXJnZS5wcmV2KTsKIApAQCAtNjUzLDcgKzcxNSw3IEBACiAJICovCiAJd2hpbGUgKDEpIHsKIAkJbHAgPSB1Ymlmc19mYXN0X2ZpbmRfZnJlZWFibGUoYyk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIobHApKSkgeworCQlpZiAoSVNfRVJSKGxwKSkgewogCQkJZXJyID0gUFRSX0VSUihscCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjY1LDcgKzcyNyw3IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJbHAgPSB1Ymlmc19jaGFuZ2VfbHAoYywgbHAsIGMtPmxlYl9zaXplLCAwLCBscC0+ZmxhZ3MsIDApOwotCQlpZiAodW5saWtlbHkoSVNfRVJSKGxwKSkpIHsKKwkJaWYgKElTX0VSUihscCkpIHsKIAkJCWVyciA9IFBUUl9FUlIobHApOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTY4MCw3ICs3NDIsNyBAQAogCS8qIFJlY29yZCBpbmRleCBmcmVlYWJsZSBMRUJzIGZvciB1bm1hcHBpbmcgYWZ0ZXIgY29tbWl0ICovCiAJd2hpbGUgKDEpIHsKIAkJbHAgPSB1Ymlmc19mYXN0X2ZpbmRfZnJkaV9pZHgoYyk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIobHApKSkgeworCQlpZiAoSVNfRVJSKGxwKSkgewogCQkJZXJyID0gUFRSX0VSUihscCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjk2LDcgKzc1OCw3IEBACiAJCS8qIERvbid0IHJlbGVhc2UgdGhlIExFQiB1bnRpbCBhZnRlciB0aGUgbmV4dCBjb21taXQgKi8KIAkJZmxhZ3MgPSAobHAtPmZsYWdzIHwgTFBST1BTX1RBS0VOKSBeIExQUk9QU19JTkRFWDsKIAkJbHAgPSB1Ymlmc19jaGFuZ2VfbHAoYywgbHAsIGMtPmxlYl9zaXplLCAwLCBmbGFncywgMSk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIobHApKSkgeworCQlpZiAoSVNfRVJSKGxwKSkgewogCQkJZXJyID0gUFRSX0VSUihscCk7CiAJCQlrZnJlZShpZHhfZ2MpOwogCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9pby5jIGIvZnMvdWJpZnMvaW8uYwppbmRleCAwNTQzNjNmLi4wMTY4MjcxIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9pby5jCisrKyBiL2ZzL3ViaWZzL2lvLmMKQEAgLTYyLDYgKzYyLDcgQEAKIHsKIAlpZiAoIWMtPnJvX21lZGlhKSB7CiAJCWMtPnJvX21lZGlhID0gMTsKKwkJYy0+bm9fY2hrX2RhdGFfY3JjID0gMDsKIAkJdWJpZnNfd2Fybigic3dpdGNoZWQgdG8gcmVhZC1vbmx5IG1vZGUsIGVycm9yICVkIiwgZXJyKTsKIAkJZGJnX2R1bXBfc3RhY2soKTsKIAl9CkBAIC03NCw2ICs3NSw3IEBACiAgKiBAbG51bTogbG9naWNhbCBlcmFzZWJsb2NrIG51bWJlcgogICogQG9mZnM6IG9mZnNldCB3aXRoaW4gdGhlIGxvZ2ljYWwgZXJhc2VibG9jawogICogQHF1aWV0OiBwcmludCBubyBtZXNzYWdlcworICogQGNoa19jcmM6IGluZGljYXRlcyB3aGV0aGVyIHRvIGFsd2F5cyBjaGVjayB0aGUgQ1JDCiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgbm9kZSBtYWdpYyBudW1iZXIgYW5kIENSQyBjaGVja3N1bS4gVGhpcyBmdW5jdGlvbiBhbHNvCiAgKiB2YWxpZGF0ZXMgbm9kZSBsZW5ndGggdG8gcHJldmVudCBVQklGUyBmcm9tIGJlY29taW5nIGNyYXp5IHdoZW4gYW4gYXR0YWNrZXIKQEAgLTg1LDcgKzg3LDcgQEAKICAqIG9yIG1hZ2ljLgogICovCiBpbnQgdWJpZnNfY2hlY2tfbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbG51bSwKLQkJICAgICBpbnQgb2ZmcywgaW50IHF1aWV0KQorCQkgICAgIGludCBvZmZzLCBpbnQgcXVpZXQsIGludCBjaGtfY3JjKQogewogCWludCBlcnIgPSAtRUlOVkFMLCB0eXBlLCBub2RlX2xlbjsKIAl1aW50MzJfdCBjcmMsIG5vZGVfY3JjLCBtYWdpYzsKQEAgLTEyMSw2ICsxMjMsMTAgQEAKIAkJICAgbm9kZV9sZW4gPiBjLT5yYW5nZXNbdHlwZV0ubWF4X2xlbikKIAkJZ290byBvdXRfbGVuOwogCisJaWYgKCFjaGtfY3JjICYmIHR5cGUgPT0gVUJJRlNfREFUQV9OT0RFICYmICFjLT5hbHdheXNfY2hrX2NyYykKKwkJaWYgKGMtPm5vX2Noa19kYXRhX2NyYykKKwkJCXJldHVybiAwOworCiAJY3JjID0gY3JjMzIoVUJJRlNfQ1JDMzJfSU5JVCwgYnVmICsgOCwgbm9kZV9sZW4gLSA4KTsKIAlub2RlX2NyYyA9IGxlMzJfdG9fY3B1KGNoLT5jcmMpOwogCWlmIChjcmMgIT0gbm9kZV9jcmMpIHsKQEAgLTcyMiw3ICs3MjgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCk7CisJZXJyID0gdWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIGxudW0sIG9mZnMsIDAsIDApOwogCWlmIChlcnIpIHsKIAkJdWJpZnNfZXJyKCJleHBlY3RlZCBub2RlIHR5cGUgJWQiLCB0eXBlKTsKIAkJcmV0dXJuIGVycjsKQEAgLTc4MSw3ICs3ODcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCk7CisJZXJyID0gdWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIGxudW0sIG9mZnMsIDAsIDApOwogCWlmIChlcnIpIHsKIAkJdWJpZnNfZXJyKCJleHBlY3RlZCBub2RlIHR5cGUgJWQiLCB0eXBlKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2tleS5oIGIvZnMvdWJpZnMva2V5LmgKaW5kZXggOGY3NDc2MC4uOWVlNjUwOCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMva2V5LmgKKysrIGIvZnMvdWJpZnMva2V5LmgKQEAgLTQ4NCw3ICs0ODQsNyBAQAogICogQGtleTI6IHRoZSBzZWNvbmQga2V5IHRvIGNvbXBhcmUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIDIga2V5cyBhbmQgcmV0dXJucyAlLTEgaWYgQGtleTEgaXMgbGVzcyB0aGFuCi0gKiBAa2V5MiwgMCBpZiB0aGUga2V5cyBhcmUgZXF1aXZhbGVudCBhbmQgJTEgaWYgQGtleTEgaXMgZ3JlYXRlciB0aGFuIEBrZXkyLgorICogQGtleTIsICUwIGlmIHRoZSBrZXlzIGFyZSBlcXVpdmFsZW50IGFuZCAlMSBpZiBAa2V5MSBpcyBncmVhdGVyIHRoYW4gQGtleTIuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGtleXNfY21wKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAogCQkJICAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkxLApAQCAtNTAzLDYgKzUwMywyNiBAQAogfQogCiAvKioKKyAqIGtleXNfZXEgLSBkZXRlcm1pbmUgaWYga2V5cyBhcmUgZXF1aXZhbGVudC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBrZXkxOiB0aGUgZmlyc3Qga2V5IHRvIGNvbXBhcmUKKyAqIEBrZXkyOiB0aGUgc2Vjb25kIGtleSB0byBjb21wYXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyAyIGtleXMgYW5kIHJldHVybnMgJTEgaWYgQGtleTEgaXMgZXF1YWwgdG8gQGtleTIgYW5kCisgKiAlMCBpZiBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGtleXNfZXEoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkgIGNvbnN0IHVuaW9uIHViaWZzX2tleSAqa2V5MSwKKwkJCSAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkyKQoreworCWlmIChrZXkxLT51MzJbMF0gIT0ga2V5Mi0+dTMyWzBdKQorCQlyZXR1cm4gMDsKKwlpZiAoa2V5MS0+dTMyWzFdICE9IGtleTItPnUzMlsxXSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgogICogaXNfaGFzaF9rZXkgLSBpcyBhIGtleSB2dWxuZXJhYmxlIHRvIGhhc2ggY29sbGlzaW9ucy4KICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBrZXk6IGtleQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbHByb3BzLmMgYi9mcy91Ymlmcy9scHJvcHMuYwppbmRleCAyYmE5M2RhLi5mMjcxNzZlIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9scHJvcHMuYworKysgYi9mcy91Ymlmcy9scHJvcHMuYwpAQCAtMTI1LDYgKzEyNSw3IEBACiAJCQl9CiAJCX0KIAl9CisKIAkvKiBOb3QgZ3JlYXRlciB0aGFuIHBhcmVudCwgc28gY29tcGFyZSB0byBjaGlsZHJlbiAqLwogCXdoaWxlICgxKSB7CiAJCS8qIENvbXBhcmUgdG8gbGVmdCBjaGlsZCAqLwpAQCAtNDYwLDE4ICs0NjEsNiBAQAogfQogCiAvKioKLSAqIHViaWZzX2dldF9scHJvcHMgLSBnZXQgcmVmZXJlbmNlIHRvIExFQiBwcm9wZXJ0aWVzLgotICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGxvY2tzIGxwcm9wcy4gTHByb3BzIGhhdmUgdG8gYmUgdW5sb2NrZWQgYnkKLSAqICd1Ymlmc19yZWxlYXNlX2xwcm9wcygpJy4KLSAqLwotdm9pZCB1Ymlmc19nZXRfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQotewotCW11dGV4X2xvY2soJmMtPmxwX211dGV4KTsKLX0KLQotLyoqCiAgKiBjYWxjX2RhcmsgLSBjYWxjdWxhdGUgTEVCIGRhcmsgc3BhY2Ugc2l6ZS4KICAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAc3BjOiBhbW91bnQgb2YgZnJlZSBhbmQgZGlydHkgc3BhY2UgaW4gdGhlIExFQgpAQCAtNTc2LDcgKzU2NSw2IEBACiAJdWJpZnNfYXNzZXJ0KCEobHByb3BzLT5mcmVlICYgNykgJiYgIShscHJvcHMtPmRpcnR5ICYgNykpOwogCiAJc3Bpbl9sb2NrKCZjLT5zcGFjZV9sb2NrKTsKLQogCWlmICgobHByb3BzLT5mbGFncyAmIExQUk9QU19UQUtFTikgJiYgbHByb3BzLT5mcmVlID09IGMtPmxlYl9zaXplKQogCQljLT5sc3QudGFrZW5fZW1wdHlfbGVicyAtPSAxOwogCkBAIC02MzcsMzEgKzYyNSwxMiBAQAogCQljLT5sc3QudGFrZW5fZW1wdHlfbGVicyArPSAxOwogCiAJY2hhbmdlX2NhdGVnb3J5KGMsIGxwcm9wcyk7Ci0KIAljLT5pZHhfZ2NfY250ICs9IGlkeF9nY19jbnQ7Ci0KIAlzcGluX3VubG9jaygmYy0+c3BhY2VfbG9jayk7Ci0KIAlyZXR1cm4gbHByb3BzOwogfQogCiAvKioKLSAqIHViaWZzX3JlbGVhc2VfbHByb3BzIC0gcmVsZWFzZSBscHJvcHMgbG9jay4KLSAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0Ci0gKgotICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGFmdGVyIGVhY2ggJ3ViaWZzX2dldF9scHJvcHMoKScgY2FsbCB0bwotICogdW5sb2NrIGxwcm9wcy4KLSAqLwotdm9pZCB1Ymlmc19yZWxlYXNlX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKLXsKLQl1Ymlmc19hc3NlcnQobXV0ZXhfaXNfbG9ja2VkKCZjLT5scF9tdXRleCkpOwotCXViaWZzX2Fzc2VydChjLT5sc3QuZW1wdHlfbGVicyA+PSAwICYmCi0JCSAgICAgYy0+bHN0LmVtcHR5X2xlYnMgPD0gYy0+bWFpbl9sZWJzKTsKLQotCW11dGV4X3VubG9jaygmYy0+bHBfbXV0ZXgpOwotfQotCi0vKioKICAqIHViaWZzX2dldF9scF9zdGF0cyAtIGdldCBscHJvcHMgc3RhdGlzdGljcy4KICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBzdDogcmV0dXJuIHN0YXRpc3RpY3MKQEAgLTEyNjIsNyArMTIzMSw2IEBACiAJfQogCiAJdWJpZnNfc2Nhbl9kZXN0cm95KHNsZWIpOwotCiAJcmV0dXJuIExQVF9TQ0FOX0NPTlRJTlVFOwogCiBvdXRfcHJpbnQ6CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHQuYyBiL2ZzL3ViaWZzL2xwdC5jCmluZGV4IDlmZjI0NjMuLmRiOGJkMGUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwdC5jCisrKyBiL2ZzL3ViaWZzL2xwdC5jCkBAIC0xMDksNyArMTA5LDggQEAKIAljLT5scHRfc3ogPSAobG9uZyBsb25nKWMtPnBub2RlX2NudCAqIGMtPnBub2RlX3N6OwogCWMtPmxwdF9zeiArPSAobG9uZyBsb25nKWMtPm5ub2RlX2NudCAqIGMtPm5ub2RlX3N6OwogCWMtPmxwdF9zeiArPSBjLT5sdGFiX3N6OwotCWMtPmxwdF9zeiArPSBjLT5sc2F2ZV9zejsKKwlpZiAoYy0+YmlnX2xwdCkKKwkJYy0+bHB0X3N6ICs9IGMtPmxzYXZlX3N6OwogCiAJLyogQWRkIHdhc3RhZ2UgKi8KIAlzeiA9IGMtPmxwdF9zejsKQEAgLTI4NywyNSArMjg4LDU2IEBACiAJY29uc3QgaW50IGsgPSAzMiAtIG5yYml0czsKIAl1aW50OF90ICpwID0gKmFkZHI7CiAJaW50IGIgPSAqcG9zOwotCXVpbnQzMl90IHZhbDsKKwl1aW50MzJfdCB1bmluaXRpYWxpemVkX3Zhcih2YWwpOworCWNvbnN0IGludCBieXRlcyA9IChucmJpdHMgKyBiICsgNykgPj4gMzsKIAogCXViaWZzX2Fzc2VydChucmJpdHMgPiAwKTsKIAl1Ymlmc19hc3NlcnQobnJiaXRzIDw9IDMyKTsKIAl1Ymlmc19hc3NlcnQoKnBvcyA+PSAwKTsKIAl1Ymlmc19hc3NlcnQoKnBvcyA8IDgpOwogCWlmIChiKSB7Ci0JCXZhbCA9IHBbMV0gfCAoKHVpbnQzMl90KXBbMl0gPDwgOCkgfCAoKHVpbnQzMl90KXBbM10gPDwgMTYpIHwKLQkJICAgICAgKCh1aW50MzJfdClwWzRdIDw8IDI0KTsKKwkJc3dpdGNoIChieXRlcykgeworCQljYXNlIDI6CisJCQl2YWwgPSBwWzFdOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXZhbCA9IHBbMV0gfCAoKHVpbnQzMl90KXBbMl0gPDwgOCk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbM10gPDwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXZhbCA9IHBbMV0gfCAoKHVpbnQzMl90KXBbMl0gPDwgOCkgfAorCQkJCSAgICAgKCh1aW50MzJfdClwWzNdIDw8IDE2KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbNF0gPDwgMjQpOworCQl9CiAJCXZhbCA8PD0gKDggLSBiKTsKIAkJdmFsIHw9ICpwID4+IGI7CiAJCW5yYml0cyArPSBiOwotCX0gZWxzZQotCQl2YWwgPSBwWzBdIHwgKCh1aW50MzJfdClwWzFdIDw8IDgpIHwgKCh1aW50MzJfdClwWzJdIDw8IDE2KSB8Ci0JCSAgICAgICgodWludDMyX3QpcFszXSA8PCAyNCk7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChieXRlcykgeworCQljYXNlIDE6CisJCQl2YWwgPSBwWzBdOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXZhbCA9IHBbMF0gfCAoKHVpbnQzMl90KXBbMV0gPDwgOCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbMl0gPDwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXZhbCA9IHBbMF0gfCAoKHVpbnQzMl90KXBbMV0gPDwgOCkgfAorCQkJCSAgICAgKCh1aW50MzJfdClwWzJdIDw8IDE2KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbM10gPDwgMjQpOworCQkJYnJlYWs7CisJCX0KKwl9CiAJdmFsIDw8PSBrOwogCXZhbCA+Pj0gazsKIAliID0gbnJiaXRzICYgNzsKLQlwICs9IG5yYml0cyAvIDg7CisJcCArPSBucmJpdHMgPj4gMzsKIAkqYWRkciA9IHA7CiAJKnBvcyA9IGI7CiAJdWJpZnNfYXNzZXJ0KCh2YWwgPj4gbnJiaXRzKSA9PSAwIHx8IG5yYml0cyAtIGIgPT0gMzIpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbHB0X2NvbW1pdC5jIGIvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCmluZGV4IDVmMGI4M2UuLmVlZDVhMDAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwdF9jb21taXQuYworKysgYi9mcy91Ymlmcy9scHRfY29tbWl0LmMKQEAgLTE3Nyw4ICsxNzcsNiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JZGJnX2VycigibGFzdCBMRUIgJWQiLCAqbG51bSk7Ci0JZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC0xOTMsNiArMTkxLDkgQEAKIAlpbnQgbG51bSwgb2ZmcywgbGVuLCBhbGVuLCBkb25lX2xzYXZlLCBkb25lX2x0YWIsIGVycjsKIAlzdHJ1Y3QgdWJpZnNfY25vZGUgKmNub2RlOwogCisJZXJyID0gZGJnX2Noa19scHRfc3ooYywgMCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAljbm9kZSA9IGMtPmxwdF9jbmV4dDsKIAlpZiAoIWNub2RlKQogCQlyZXR1cm4gMDsKQEAgLTIwNiw2ICsyMDcsNyBAQAogCQljLT5sc2F2ZV9sbnVtID0gbG51bTsKIAkJYy0+bHNhdmVfb2ZmcyA9IG9mZnM7CiAJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAl9CiAKIAlpZiAob2ZmcyArIGMtPmx0YWJfc3ogPD0gYy0+bGViX3NpemUpIHsKQEAgLTIxMyw2ICsyMTUsNyBAQAogCQljLT5sdGFiX2xudW0gPSBsbnVtOwogCQljLT5sdGFiX29mZnMgPSBvZmZzOwogCQlvZmZzICs9IGMtPmx0YWJfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmx0YWJfc3opOwogCX0KIAogCWRvIHsKQEAgLTIyNiw5ICsyMjksMTAgQEAKIAkJd2hpbGUgKG9mZnMgKyBsZW4gPiBjLT5sZWJfc2l6ZSkgewogCQkJYWxlbiA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIAkJCXVwZF9sdGFiKGMsIGxudW0sIGMtPmxlYl9zaXplIC0gYWxlbiwgYWxlbiAtIG9mZnMpOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIG9mZnMpOwogCQkJZXJyID0gYWxsb2NfbHB0X2xlYihjLCAmbG51bSk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CisJCQkJZ290byBub19zcGFjZTsKIAkJCW9mZnMgPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCiAJCQkJICAgICBsbnVtIDw9IGMtPmxwdF9sYXN0KTsKQEAgLTIzOCw2ICsyNDIsNyBAQAogCQkJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQkJCWMtPmxzYXZlX29mZnMgPSBvZmZzOwogCQkJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCQkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFkb25lX2x0YWIpIHsKQEAgLTI0NSw2ICsyNTAsNyBAQAogCQkJCWMtPmx0YWJfbG51bSA9IGxudW07CiAJCQkJYy0+bHRhYl9vZmZzID0gb2ZmczsKIAkJCQlvZmZzICs9IGMtPmx0YWJfc3o7CisJCQkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlicmVhazsKQEAgLTI1Nyw2ICsyNjMsNyBAQAogCQkJYy0+bHB0X29mZnMgPSBvZmZzOwogCQl9CiAJCW9mZnMgKz0gbGVuOworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBsZW4pOwogCQljbm9kZSA9IGNub2RlLT5jbmV4dDsKIAl9IHdoaWxlIChjbm9kZSAmJiBjbm9kZSAhPSBjLT5scHRfY25leHQpOwogCkBAIC0yNjUsOSArMjcyLDEwIEBACiAJCWlmIChvZmZzICsgYy0+bHNhdmVfc3ogPiBjLT5sZWJfc2l6ZSkgewogCQkJYWxlbiA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIAkJCXVwZF9sdGFiKGMsIGxudW0sIGMtPmxlYl9zaXplIC0gYWxlbiwgYWxlbiAtIG9mZnMpOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIG9mZnMpOwogCQkJZXJyID0gYWxsb2NfbHB0X2xlYihjLCAmbG51bSk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CisJCQkJZ290byBub19zcGFjZTsKIAkJCW9mZnMgPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCiAJCQkJICAgICBsbnVtIDw9IGMtPmxwdF9sYXN0KTsKQEAgLTI3Niw2ICsyODQsNyBAQAogCQljLT5sc2F2ZV9sbnVtID0gbG51bTsKIAkJYy0+bHNhdmVfb2ZmcyA9IG9mZnM7CiAJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAl9CiAKIAkvKiBNYWtlIHN1cmUgdG8gcGxhY2UgTFBUJ3Mgb3duIGxwcm9wcyB0YWJsZSAqLwpAQCAtMjgzLDkgKzI5MiwxMCBAQAogCQlpZiAob2ZmcyArIGMtPmx0YWJfc3ogPiBjLT5sZWJfc2l6ZSkgewogCQkJYWxlbiA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIAkJCXVwZF9sdGFiKGMsIGxudW0sIGMtPmxlYl9zaXplIC0gYWxlbiwgYWxlbiAtIG9mZnMpOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIG9mZnMpOwogCQkJZXJyID0gYWxsb2NfbHB0X2xlYihjLCAmbG51bSk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CisJCQkJZ290byBub19zcGFjZTsKIAkJCW9mZnMgPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCiAJCQkJICAgICBsbnVtIDw9IGMtPmxwdF9sYXN0KTsKQEAgLTI5NCwxMSArMzA0LDIzIEBACiAJCWMtPmx0YWJfbG51bSA9IGxudW07CiAJCWMtPmx0YWJfb2ZmcyA9IG9mZnM7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJYWxlbiA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIAl1cGRfbHRhYihjLCBsbnVtLCBjLT5sZWJfc2l6ZSAtIGFsZW4sIGFsZW4gLSBvZmZzKTsKKwlkYmdfY2hrX2xwdF9zeihjLCA0LCBhbGVuIC0gb2Zmcyk7CisJZXJyID0gZGJnX2Noa19scHRfc3ooYywgMywgYWxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKKworbm9fc3BhY2U6CisJdWJpZnNfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIik7CisJZGJnX2VycigiTFBUIG91dCBvZiBzcGFjZSBhdCBMRUIgJWQ6JWQgbmVlZGluZyAlZCwgZG9uZV9sdGFiICVkLCAiCisJCSJkb25lX2xzYXZlICVkIiwgbG51bSwgb2ZmcywgbGVuLCBkb25lX2x0YWIsIGRvbmVfbHNhdmUpOworCWRiZ19kdW1wX2xwdF9pbmZvKGMpOworCXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMzMzLDggKzM1NSw2IEBACiAJCQkqbG51bSA9IGkgKyBjLT5scHRfZmlyc3Q7CiAJCQlyZXR1cm4gMDsKIAkJfQotCWRiZ19lcnIoImxhc3QgTEVCICVkIiwgKmxudW0pOwotCWR1bXBfc3RhY2soKTsKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIApAQCAtMzY5LDEyICszODksMTQgQEAKIAkJZG9uZV9sc2F2ZSA9IDE7CiAJCXViaWZzX3BhY2tfbHNhdmUoYywgYnVmICsgb2ZmcywgYy0+bHNhdmUpOwogCQlvZmZzICs9IGMtPmxzYXZlX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sc2F2ZV9zeik7CiAJfQogCiAJaWYgKG9mZnMgKyBjLT5sdGFiX3N6IDw9IGMtPmxlYl9zaXplKSB7CiAJCWRvbmVfbHRhYiA9IDE7CiAJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJLyogTG9vcCBmb3IgZWFjaCBjbm9kZSAqLwpAQCAtMzkyLDEwICs0MTQsMTIgQEAKIAkJCQkJCSAgICAgICBhbGVuLCBVQklfU0hPUlRURVJNKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlyZXR1cm4gZXJyOworCQkJCWRiZ19jaGtfbHB0X3N6KGMsIDQsIGFsZW4gLSB3bGVuKTsKIAkJCX0KKwkJCWRiZ19jaGtfbHB0X3N6KGMsIDIsIDApOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQlmcm9tID0gMDsKIAkJCXViaWZzX2Fzc2VydChsbnVtID49IGMtPmxwdF9maXJzdCAmJgpAQCAtNDA4LDEyICs0MzIsMTQgQEAKIAkJCQlkb25lX2xzYXZlID0gMTsKIAkJCQl1Ymlmc19wYWNrX2xzYXZlKGMsIGJ1ZiArIG9mZnMsIGMtPmxzYXZlKTsKIAkJCQlvZmZzICs9IGMtPmxzYXZlX3N6OworCQkJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghZG9uZV9sdGFiKSB7CiAJCQkJZG9uZV9sdGFiID0gMTsKIAkJCQl1Ymlmc19wYWNrX2x0YWIoYywgYnVmICsgb2ZmcywgYy0+bHRhYl9jbXQpOwogCQkJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDM1LDYgKzQ2MSw3IEBACiAJCWNsZWFyX2JpdChDT1dfWk5PREUsICZjbm9kZS0+ZmxhZ3MpOwogCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCQlvZmZzICs9IGxlbjsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgbGVuKTsKIAkJY25vZGUgPSBjbm9kZS0+Y25leHQ7CiAJfSB3aGlsZSAoY25vZGUgJiYgY25vZGUgIT0gYy0+bHB0X2NuZXh0KTsKIApAQCAtNDQ4LDkgKzQ3NSwxMCBAQAogCQkJCQkgICAgICBVQklfU0hPUlRURVJNKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKKwkJCWRiZ19jaGtfbHB0X3N6KGMsIDIsIGFsZW4gLSB3bGVuKTsKIAkJCWVyciA9IHJlYWxsb2NfbHB0X2xlYihjLCAmbG51bSk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CisJCQkJZ290byBub19zcGFjZTsKIAkJCW9mZnMgPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCiAJCQkJICAgICBsbnVtIDw9IGMtPmxwdF9sYXN0KTsKQEAgLTQ2MSw2ICs0ODksNyBAQAogCQlkb25lX2xzYXZlID0gMTsKIAkJdWJpZnNfcGFja19sc2F2ZShjLCBidWYgKyBvZmZzLCBjLT5sc2F2ZSk7CiAJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAl9CiAKIAkvKiBNYWtlIHN1cmUgdG8gcGxhY2UgTFBUJ3Mgb3duIGxwcm9wcyB0YWJsZSAqLwpAQCAtNDczLDkgKzUwMiwxMCBAQAogCQkJCQkgICAgICBVQklfU0hPUlRURVJNKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKKwkJCWRiZ19jaGtfbHB0X3N6KGMsIDIsIGFsZW4gLSB3bGVuKTsKIAkJCWVyciA9IHJlYWxsb2NfbHB0X2xlYihjLCAmbG51bSk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CisJCQkJZ290byBub19zcGFjZTsKIAkJCW9mZnMgPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCiAJCQkJICAgICBsbnVtIDw9IGMtPmxwdF9sYXN0KTsKQEAgLTQ4Niw2ICs1MTYsNyBAQAogCQlkb25lX2x0YWIgPSAxOwogCQl1Ymlmc19wYWNrX2x0YWIoYywgYnVmICsgb2ZmcywgYy0+bHRhYl9jbXQpOwogCQlvZmZzICs9IGMtPmx0YWJfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmx0YWJfc3opOwogCX0KIAogCS8qIFdyaXRlIHJlbWFpbmluZyBkYXRhIGluIGJ1ZmZlciAqLwpAQCAtNDk1LDYgKzUyNiwxMiBAQAogCWVyciA9IHViaWZzX2xlYl93cml0ZShjLCBsbnVtLCBidWYgKyBmcm9tLCBmcm9tLCBhbGVuLCBVQklfU0hPUlRURVJNKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOworCisJZGJnX2Noa19scHRfc3ooYywgNCwgYWxlbiAtIHdsZW4pOworCWVyciA9IGRiZ19jaGtfbHB0X3N6KGMsIDMsIEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWMtPm5oZWFkX2xudW0gPSBsbnVtOwogCWMtPm5oZWFkX29mZnMgPSBBTElHTihvZmZzLCBjLT5taW5faW9fc2l6ZSk7CiAKQEAgLTUwMyw3ICs1NDAsMTUgQEAKIAlkYmdfbHAoIkxQVCBsdGFiIGlzIGF0ICVkOiVkIiwgYy0+bHRhYl9sbnVtLCBjLT5sdGFiX29mZnMpOwogCWlmIChjLT5iaWdfbHB0KQogCQlkYmdfbHAoIkxQVCBsc2F2ZSBpcyBhdCAlZDolZCIsIGMtPmxzYXZlX2xudW0sIGMtPmxzYXZlX29mZnMpOworCiAJcmV0dXJuIDA7CisKK25vX3NwYWNlOgorCXViaWZzX2VycigiTFBUIG91dCBvZiBzcGFjZSBtaXNtYXRjaCIpOworCWRiZ19lcnIoIkxQVCBvdXQgb2Ygc3BhY2UgbWlzbWF0Y2ggYXQgTEVCICVkOiVkIG5lZWRpbmcgJWQsIGRvbmVfbHRhYiAiCisJICAgICAgICAiJWQsIGRvbmVfbHNhdmUgJWQiLCBsbnVtLCBvZmZzLCBsZW4sIGRvbmVfbHRhYiwgZG9uZV9sc2F2ZSk7CisJZGJnX2R1bXBfbHB0X2luZm8oYyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0xMDQ0LDYgKzEwODksOCBAQAogCWludCBwb3MgPSAwLCBub2RlX3R5cGUsIG5vZGVfbGVuOwogCXVpbnQxNl90IGNyYywgY2FsY19jcmM7CiAKKwlpZiAobGVuIDwgVUJJRlNfTFBUX0NSQ19CWVRFUyArIChVQklGU19MUFRfVFlQRV9CSVRTICsgNykgLyA4KQorCQlyZXR1cm4gMDsKIAlub2RlX3R5cGUgPSB1Ymlmc191bnBhY2tfYml0cygmYWRkciwgJnBvcywgVUJJRlNfTFBUX1RZUEVfQklUUyk7CiAJaWYgKG5vZGVfdHlwZSA9PSBVQklGU19MUFRfTk9UX0FfTk9ERSkKIAkJcmV0dXJuIDA7CkBAIC0xMTU2LDYgKzEyMDMsOSBAQAogCWRiZ19scCgiIik7CiAKIAltdXRleF9sb2NrKCZjLT5scF9tdXRleCk7CisJZXJyID0gZGJnX2Noa19scHRfZnJlZV9zcGMoYyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CiAJZXJyID0gZGJnX2NoZWNrX2x0YWIoYyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC0xNjQ1LDQgKzE2OTUsMTIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogZGJnX2Noa19scHRfZnJlZV9zcGMgLSBjaGVjayBMUFQgZnJlZSBzcGFjZSBpcyBlbm91Z2ggdG8gd3JpdGUgZW50aXJlIExQVC4KKyAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICUwIG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZGJnX2Noa19scHRfZnJlZV9zcGMoc3RydWN0IHViaWZzX2luZm8gKmMpCit7CisJbG9uZyBsb25nIGZyZWUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGMtPmxwdF9sZWJzOyBpKyspIHsKKwkJaWYgKGMtPmx0YWJbaV0udGdjIHx8IGMtPmx0YWJbaV0uY210KQorCQkJY29udGludWU7CisJCWlmIChpICsgYy0+bHB0X2ZpcnN0ID09IGMtPm5oZWFkX2xudW0pCisJCQlmcmVlICs9IGMtPmxlYl9zaXplIC0gYy0+bmhlYWRfb2ZmczsKKwkJZWxzZSBpZiAoYy0+bHRhYltpXS5mcmVlID09IGMtPmxlYl9zaXplKQorCQkJZnJlZSArPSBjLT5sZWJfc2l6ZTsKKwl9CisJaWYgKGZyZWUgPCBjLT5scHRfc3opIHsKKwkJZGJnX2VycigiTFBUIHNwYWNlIGVycm9yOiBmcmVlICVsbGQgbHB0X3N6ICVsbGQiLAorCQkJZnJlZSwgYy0+bHB0X3N6KTsKKwkJZGJnX2R1bXBfbHB0X2luZm8oYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkYmdfY2hrX2xwdF9zeiAtIGNoZWNrIExQVCBkb2VzIG5vdCB3cml0ZSBtb3JlIHRoYW4gTFBUIHNpemUuCisgKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGFjdGlvbjogYWN0aW9uCisgKiBAbGVuOiBsZW5ndGggd3JpdHRlbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRiZ19jaGtfbHB0X3N6KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgYWN0aW9uLCBpbnQgbGVuKQoreworCWxvbmcgbG9uZyBjaGtfbHB0X3N6LCBscHRfc3o7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgMDoKKwkJYy0+Y2hrX2xwdF9zeiA9IDA7CisJCWMtPmNoa19scHRfc3oyID0gMDsKKwkJYy0+Y2hrX2xwdF9sZWJzID0gMDsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlID0gMDsKKwkJaWYgKGMtPmRpcnR5X3BuX2NudCA+IGMtPnBub2RlX2NudCkgeworCQkJZGJnX2VycigiZGlydHkgcG5vZGVzICVkIGV4Y2VlZCBtYXggJWQiLAorCQkJCWMtPmRpcnR5X3BuX2NudCwgYy0+cG5vZGVfY250KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGMtPmRpcnR5X25uX2NudCA+IGMtPm5ub2RlX2NudCkgeworCQkJZGJnX2VycigiZGlydHkgbm5vZGVzICVkIGV4Y2VlZCBtYXggJWQiLAorCQkJCWMtPmRpcnR5X25uX2NudCwgYy0+bm5vZGVfY250KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIGVycjsKKwljYXNlIDE6CisJCWMtPmNoa19scHRfc3ogKz0gbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIDI6CisJCWMtPmNoa19scHRfc3ogKz0gbGVuOworCQljLT5jaGtfbHB0X3dhc3RhZ2UgKz0gbGVuOworCQljLT5jaGtfbHB0X2xlYnMgKz0gMTsKKwkJcmV0dXJuIDA7CisJY2FzZSAzOgorCQljaGtfbHB0X3N6ID0gYy0+bGViX3NpemU7CisJCWNoa19scHRfc3ogKj0gYy0+Y2hrX2xwdF9sZWJzOworCQljaGtfbHB0X3N6ICs9IGxlbiAtIGMtPm5oZWFkX29mZnM7CisJCWlmIChjLT5jaGtfbHB0X3N6ICE9IGNoa19scHRfc3opIHsKKwkJCWRiZ19lcnIoIkxQVCB3cm90ZSAlbGxkIGJ1dCBzcGFjZSB1c2VkIHdhcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjaGtfbHB0X3N6KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGMtPmNoa19scHRfc3ogPiBjLT5scHRfc3opIHsKKwkJCWRiZ19lcnIoIkxQVCB3cm90ZSAlbGxkIGJ1dCBscHRfc3ogaXMgJWxsZCIsCisJCQkJYy0+Y2hrX2xwdF9zeiwgYy0+bHB0X3N6KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGMtPmNoa19scHRfc3oyICYmIGMtPmNoa19scHRfc3ogIT0gYy0+Y2hrX2xwdF9zejIpIHsKKwkJCWRiZ19lcnIoIkxQVCBsYXlvdXQgc2l6ZSAlbGxkIGJ1dCB3cm90ZSAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5jaGtfbHB0X3N6Mik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWlmIChjLT5jaGtfbHB0X3N6MiAmJiBjLT5uZXdfbmhlYWRfb2ZmcyAhPSBsZW4pIHsKKwkJCWRiZ19lcnIoIkxQVCBuZXcgbmhlYWQgb2ZmczogZXhwZWN0ZWQgJWQgd2FzICVkIiwKKwkJCQljLT5uZXdfbmhlYWRfb2ZmcywgbGVuKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJbHB0X3N6ID0gKGxvbmcgbG9uZyljLT5wbm9kZV9jbnQgKiBjLT5wbm9kZV9zejsKKwkJbHB0X3N6ICs9IChsb25nIGxvbmcpYy0+bm5vZGVfY250ICogYy0+bm5vZGVfc3o7CisJCWxwdF9zeiArPSBjLT5sdGFiX3N6OworCQlpZiAoYy0+YmlnX2xwdCkKKwkJCWxwdF9zeiArPSBjLT5sc2F2ZV9zejsKKwkJaWYgKGMtPmNoa19scHRfc3ogLSBjLT5jaGtfbHB0X3dhc3RhZ2UgPiBscHRfc3opIHsKKwkJCWRiZ19lcnIoIkxQVCBjaGtfbHB0X3N6ICVsbGQgKyB3YXN0ZSAlbGxkIGV4Y2VlZHMgJWxsZCIsCisJCQkJYy0+Y2hrX2xwdF9zeiwgYy0+Y2hrX2xwdF93YXN0YWdlLCBscHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoZXJyKQorCQkJZGJnX2R1bXBfbHB0X2luZm8oYyk7CisJCWMtPmNoa19scHRfc3oyID0gYy0+Y2hrX2xwdF9zejsKKwkJYy0+Y2hrX2xwdF9zeiA9IDA7CisJCWMtPmNoa19scHRfd2FzdGFnZSA9IDA7CisJCWMtPmNoa19scHRfbGVicyA9IDA7CisJCWMtPm5ld19uaGVhZF9vZmZzID0gbGVuOworCQlyZXR1cm4gZXJyOworCWNhc2UgNDoKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCWMtPmNoa19scHRfd2FzdGFnZSArPSBsZW47CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwogI2VuZGlmIC8qIENPTkZJR19VQklGU19GU19ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbWlzYy5oIGIvZnMvdWJpZnMvbWlzYy5oCmluZGV4IDRjMTJhOTIuLjRmYTgxZDggMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL21pc2MuaAorKysgYi9mcy91Ymlmcy9taXNjLmgKQEAgLTMxMCw0ICszMTAsMzEgQEAKIAlyZXR1cm4gdWJpZnNfdG5jX2xvY2F0ZShjLCBrZXksIG5vZGUsIE5VTEwsIE5VTEwpOwogfQogCisvKioKKyAqIHViaWZzX2dldF9scHJvcHMgLSBnZXQgcmVmZXJlbmNlIHRvIExFQiBwcm9wZXJ0aWVzLgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvY2tzIGxwcm9wcy4gTHByb3BzIGhhdmUgdG8gYmUgdW5sb2NrZWQgYnkKKyAqICd1Ymlmc19yZWxlYXNlX2xwcm9wcygpJy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHViaWZzX2dldF9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCit7CisJbXV0ZXhfbG9jaygmYy0+bHBfbXV0ZXgpOworfQorCisvKioKKyAqIHViaWZzX3JlbGVhc2VfbHByb3BzIC0gcmVsZWFzZSBscHJvcHMgbG9jay4KKyAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGFmdGVyIGVhY2ggJ3ViaWZzX2dldF9scHJvcHMoKScgY2FsbCB0bworICogdW5sb2NrIGxwcm9wcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHViaWZzX3JlbGVhc2VfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQoreworCXViaWZzX2Fzc2VydChtdXRleF9pc19sb2NrZWQoJmMtPmxwX211dGV4KSk7CisJdWJpZnNfYXNzZXJ0KGMtPmxzdC5lbXB0eV9sZWJzID49IDAgJiYKKwkJICAgICBjLT5sc3QuZW1wdHlfbGVicyA8PSBjLT5tYWluX2xlYnMpOworCW11dGV4X3VubG9jaygmYy0+bHBfbXV0ZXgpOworfQorCiAjZW5kaWYgLyogX19VQklGU19NSVNDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc2Nhbi5jIGIvZnMvdWJpZnMvc2Nhbi5jCmluZGV4IGFjZjVjNWYuLjBlZDgyNDcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3NjYW4uYworKysgYi9mcy91Ymlmcy9zY2FuLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogCWRiZ19zY2FuKCJzY2FubmluZyAlcyIsIGRiZ19udHlwZShjaC0+bm9kZV90eXBlKSk7CiAKLQlpZiAodWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIGxudW0sIG9mZnMsIHF1aWV0KSkKKwlpZiAodWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIGxudW0sIG9mZnMsIHF1aWV0LCAxKSkKIAkJcmV0dXJuIFNDQU5ORURfQV9DT1JSVVBUX05PREU7CiAKIAlpZiAoY2gtPm5vZGVfdHlwZSA9PSBVQklGU19QQURfTk9ERSkgewpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc3VwZXIuYyBiL2ZzL3ViaWZzL3N1cGVyLmMKaW5kZXggOWE5MjIwMy4uODc4MGVmYiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc3VwZXIuYworKysgYi9mcy91Ymlmcy9zdXBlci5jCkBAIC00MDEsNiArNDAxLDE2IEBACiAJZWxzZSBpZiAoYy0+bW91bnRfb3B0cy51bm1vdW50X21vZGUgPT0gMSkKIAkJc2VxX3ByaW50ZihzLCAiLG5vcm1fdW5tb3VudCIpOwogCisJaWYgKGMtPm1vdW50X29wdHMuYnVsa19yZWFkID09IDIpCisJCXNlcV9wcmludGYocywgIixidWxrX3JlYWQiKTsKKwllbHNlIGlmIChjLT5tb3VudF9vcHRzLmJ1bGtfcmVhZCA9PSAxKQorCQlzZXFfcHJpbnRmKHMsICIsbm9fYnVsa19yZWFkIik7CisKKwlpZiAoYy0+bW91bnRfb3B0cy5jaGtfZGF0YV9jcmMgPT0gMikKKwkJc2VxX3ByaW50ZihzLCAiLGNoa19kYXRhX2NyYyIpOworCWVsc2UgaWYgKGMtPm1vdW50X29wdHMuY2hrX2RhdGFfY3JjID09IDEpCisJCXNlcV9wcmludGYocywgIixub19jaGtfZGF0YV9jcmMiKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MDgsMTMgKzQxOCwyNiBAQAogewogCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gc2ItPnNfZnNfaW5mbzsKIAlpbnQgaSwgcmV0ID0gMCwgZXJyOworCWxvbmcgbG9uZyBidWRfYnl0ZXM7CiAKLQlpZiAoYy0+amhlYWRzKQorCWlmIChjLT5qaGVhZHMpIHsKIAkJZm9yIChpID0gMDsgaSA8IGMtPmpoZWFkX2NudDsgaSsrKSB7CiAJCQllcnIgPSB1Ymlmc193YnVmX3N5bmMoJmMtPmpoZWFkc1tpXS53YnVmKTsKIAkJCWlmIChlcnIgJiYgIXJldCkKIAkJCQlyZXQgPSBlcnI7CiAJCX0KKworCQkvKiBDb21taXQgdGhlIGpvdXJuYWwgdW5sZXNzIGl0IGhhcyB0b28gbGl0dGxlIGRhdGEgKi8KKwkJc3Bpbl9sb2NrKCZjLT5idWRzX2xvY2spOworCQlidWRfYnl0ZXMgPSBjLT5idWRfYnl0ZXM7CisJCXNwaW5fdW5sb2NrKCZjLT5idWRzX2xvY2spOworCQlpZiAoYnVkX2J5dGVzID4gYy0+bGViX3NpemUpIHsKKwkJCWVyciA9IHViaWZzX3J1bl9jb21taXQoYyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAkvKgogCSAqIFdlIG91Z2h0IHRvIGNhbGwgc3luYyBmb3IgYy0+dWJpIGJ1dCBpdCBkb2VzIG5vdCBoYXZlIG9uZS4gSWYgaXQgaGFkCiAJICogaXQgd291bGQgaW4gdHVybiBjYWxsIG10ZC0+c3luYywgaG93ZXZlciBtdGQgb3BlcmF0aW9ucyBhcmUKQEAgLTUzOCw2ICs1NjEsMTggQEAKIAkgKiBjYWxjdWxhdGlvbnMgd2hlbiByZXBvcnRpbmcgZnJlZSBzcGFjZS4KIAkgKi8KIAljLT5sZWJfb3ZlcmhlYWQgPSBjLT5sZWJfc2l6ZSAlIFVCSUZTX01BWF9EQVRBX05PREVfU1o7CisJLyogQnVmZmVyIHNpemUgZm9yIGJ1bGstcmVhZHMgKi8KKwljLT5idWxrX3JlYWRfYnVmX3NpemUgPSBVQklGU19NQVhfQlVMS19SRUFEICogVUJJRlNfTUFYX0RBVEFfTk9ERV9TWjsKKwlpZiAoYy0+YnVsa19yZWFkX2J1Zl9zaXplID4gYy0+bGViX3NpemUpCisJCWMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA9IGMtPmxlYl9zaXplOworCWlmIChjLT5idWxrX3JlYWRfYnVmX3NpemUgPiAxMjggKiAxMDI0KSB7CisJCS8qIENoZWNrIGlmIHdlIGNhbiBrbWFsbG9jIG1vcmUgdGhhbiAxMjhLaUIgKi8KKwkJdm9pZCAqdHJ5ID0ga21hbGxvYyhjLT5idWxrX3JlYWRfYnVmX3NpemUsIEdGUF9LRVJORUwpOworCisJCWtmcmVlKHRyeSk7CisJCWlmICghdHJ5KQorCQkJYy0+YnVsa19yZWFkX2J1Zl9zaXplID0gMTI4ICogMTAyNDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0MCwxNyArODc1LDI5IEBACiAgKgogICogT3B0X2Zhc3RfdW5tb3VudDogZG8gbm90IHJ1biBhIGpvdXJuYWwgY29tbWl0IGJlZm9yZSB1bi1tb3VudGluZwogICogT3B0X25vcm1fdW5tb3VudDogcnVuIGEgam91cm5hbCBjb21taXQgYmVmb3JlIHVuLW1vdW50aW5nCisgKiBPcHRfYnVsa19yZWFkOiBlbmFibGUgYnVsay1yZWFkcworICogT3B0X25vX2J1bGtfcmVhZDogZGlzYWJsZSBidWxrLXJlYWRzCisgKiBPcHRfY2hrX2RhdGFfY3JjOiBjaGVjayBDUkNzIHdoZW4gcmVhZGluZyBkYXRhIG5vZGVzCisgKiBPcHRfbm9fY2hrX2RhdGFfY3JjOiBkbyBub3QgY2hlY2sgQ1JDcyB3aGVuIHJlYWRpbmcgZGF0YSBub2RlcwogICogT3B0X2VycjoganVzdCBlbmQgb2YgYXJyYXkgbWFya2VyCiAgKi8KIGVudW0gewogCU9wdF9mYXN0X3VubW91bnQsCiAJT3B0X25vcm1fdW5tb3VudCwKKwlPcHRfYnVsa19yZWFkLAorCU9wdF9ub19idWxrX3JlYWQsCisJT3B0X2Noa19kYXRhX2NyYywKKwlPcHRfbm9fY2hrX2RhdGFfY3JjLAogCU9wdF9lcnIsCiB9OwogCiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9mYXN0X3VubW91bnQsICJmYXN0X3VubW91bnQifSwKIAl7T3B0X25vcm1fdW5tb3VudCwgIm5vcm1fdW5tb3VudCJ9LAorCXtPcHRfYnVsa19yZWFkLCAiYnVsa19yZWFkIn0sCisJe09wdF9ub19idWxrX3JlYWQsICJub19idWxrX3JlYWQifSwKKwl7T3B0X2Noa19kYXRhX2NyYywgImNoa19kYXRhX2NyYyJ9LAorCXtPcHRfbm9fY2hrX2RhdGFfY3JjLCAibm9fY2hrX2RhdGFfY3JjIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtODg4LDYgKzkzNSwyMiBAQAogCQkJYy0+bW91bnRfb3B0cy51bm1vdW50X21vZGUgPSAxOwogCQkJYy0+ZmFzdF91bm1vdW50ID0gMDsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9idWxrX3JlYWQ6CisJCQljLT5tb3VudF9vcHRzLmJ1bGtfcmVhZCA9IDI7CisJCQljLT5idWxrX3JlYWQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vX2J1bGtfcmVhZDoKKwkJCWMtPm1vdW50X29wdHMuYnVsa19yZWFkID0gMTsKKwkJCWMtPmJ1bGtfcmVhZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfY2hrX2RhdGFfY3JjOgorCQkJYy0+bW91bnRfb3B0cy5jaGtfZGF0YV9jcmMgPSAyOworCQkJYy0+bm9fY2hrX2RhdGFfY3JjID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub19jaGtfZGF0YV9jcmM6CisJCQljLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9IDE7CisJCQljLT5ub19jaGtfZGF0YV9jcmMgPSAxOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl1Ymlmc19lcnIoInVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKIAkJCQkgICJvciBtaXNzaW5nIHZhbHVlIiwgcCk7CkBAIC05OTYsNiArMTA1OSw4IEBACiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIAorCWMtPmFsd2F5c19jaGtfY3JjID0gMTsKKwogCWVyciA9IHViaWZzX3JlYWRfc3VwZXJibG9jayhjKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMTAzMiw4ICsxMDk3LDYgQEAKIAogCQkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAkJYy0+Ymd0ID0ga3RocmVhZF9jcmVhdGUodWJpZnNfYmdfdGhyZWFkLCBjLCBjLT5iZ3RfbmFtZSk7Ci0JCWlmICghYy0+Ymd0KQotCQkJYy0+Ymd0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJaWYgKElTX0VSUihjLT5iZ3QpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGMtPmJndCk7CiAJCQljLT5iZ3QgPSBOVUxMOwpAQCAtMTEzOSwyNCArMTIwMiwyOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2luZm9zOwogCisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOworCiAJdWJpZnNfbXNnKCJtb3VudGVkIFVCSSBkZXZpY2UgJWQsIHZvbHVtZSAlZCwgbmFtZSBcIiVzXCIiLAogCQkgIGMtPnZpLnViaV9udW0sIGMtPnZpLnZvbF9pZCwgYy0+dmkubmFtZSk7CiAJaWYgKG1vdW50ZWRfcmVhZF9vbmx5KQogCQl1Ymlmc19tc2coIm1vdW50ZWQgcmVhZC1vbmx5Iik7CiAJeCA9IChsb25nIGxvbmcpYy0+bWFpbl9sZWJzICogYy0+bGViX3NpemU7Ci0JdWJpZnNfbXNnKCJmaWxlIHN5c3RlbSBzaXplOiAlbGxkIGJ5dGVzICglbGxkIEtpQiwgJWxsZCBNaUIsICVkIExFQnMpIiwKLQkJICB4LCB4ID4+IDEwLCB4ID4+IDIwLCBjLT5tYWluX2xlYnMpOworCXViaWZzX21zZygiZmlsZSBzeXN0ZW0gc2l6ZTogICAlbGxkIGJ5dGVzICglbGxkIEtpQiwgJWxsZCBNaUIsICVkICIKKwkJICAiTEVCcykiLCB4LCB4ID4+IDEwLCB4ID4+IDIwLCBjLT5tYWluX2xlYnMpOwogCXggPSAobG9uZyBsb25nKWMtPmxvZ19sZWJzICogYy0+bGViX3NpemUgKyBjLT5tYXhfYnVkX2J5dGVzOwotCXViaWZzX21zZygiam91cm5hbCBzaXplOiAlbGxkIGJ5dGVzICglbGxkIEtpQiwgJWxsZCBNaUIsICVkIExFQnMpIiwKLQkJICB4LCB4ID4+IDEwLCB4ID4+IDIwLCBjLT5sb2dfbGVicyArIGMtPm1heF9idWRfY250KTsKLQl1Ymlmc19tc2coImRlZmF1bHQgY29tcHJlc3NvcjogJXMiLCB1Ymlmc19jb21wcl9uYW1lKGMtPmRlZmF1bHRfY29tcHIpKTsKLQl1Ymlmc19tc2coIm1lZGlhIGZvcm1hdCAlZCwgbGF0ZXN0IGZvcm1hdCAlZCIsCisJdWJpZnNfbXNnKCJqb3VybmFsIHNpemU6ICAgICAgICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgIgorCQkgICJMRUJzKSIsIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPmxvZ19sZWJzICsgYy0+bWF4X2J1ZF9jbnQpOworCXViaWZzX21zZygibWVkaWEgZm9ybWF0OiAgICAgICAlZCAobGF0ZXN0IGlzICVkKSIsCiAJCSAgYy0+Zm10X3ZlcnNpb24sIFVCSUZTX0ZPUk1BVF9WRVJTSU9OKTsKKwl1Ymlmc19tc2coImRlZmF1bHQgY29tcHJlc3NvcjogJXMiLCB1Ymlmc19jb21wcl9uYW1lKGMtPmRlZmF1bHRfY29tcHIpKTsKKwl1Ymlmc19tc2coInJlc2VydmVkIGZvciByb290OiAgJWxsdSBieXRlcyAoJWxsdSBLaUIpIiwKKwkJYy0+cmVwb3J0X3JwX3NpemUsIGMtPnJlcG9ydF9ycF9zaXplID4+IDEwKTsKIAogCWRiZ19tc2coImNvbXBpbGVkIG9uOiAgICAgICAgICIgX19EQVRFX18gIiBhdCAiIF9fVElNRV9fKTsKIAlkYmdfbXNnKCJtaW4uIEkvTyB1bml0IHNpemU6ICAlZCBieXRlcyIsIGMtPm1pbl9pb19zaXplKTsKIAlkYmdfbXNnKCJMRUIgc2l6ZTogICAgICAgICAgICAlZCBieXRlcyAoJWQgS2lCKSIsCi0JCWMtPmxlYl9zaXplLCBjLT5sZWJfc2l6ZSAvIDEwMjQpOworCQljLT5sZWJfc2l6ZSwgYy0+bGViX3NpemUgPj4gMTApOwogCWRiZ19tc2coImRhdGEgam91cm5hbCBoZWFkczogICVkIiwKIAkJYy0+amhlYWRfY250IC0gTk9OREFUQV9KSEVBRFNfQ05UKTsKIAlkYmdfbXNnKCJVVUlEOiAgICAgICAgICAgICAgICAlMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYIgpAQCAtMTI4Miw2ICsxMzQ5LDcgQEAKIAogCW11dGV4X2xvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDE7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAxOwogCiAJLyogQ2hlY2sgZm9yIGVub3VnaCBmcmVlIHNwYWNlICovCiAJaWYgKHViaWZzX2NhbGNfYXZhaWxhYmxlKGMsIGMtPm1pbl9pZHhfbGVicykgPD0gMCkgewpAQCAtMTM0NSwyMCArMTQxMywyMCBAQAogCiAJLyogQ3JlYXRlIGJhY2tncm91bmQgdGhyZWFkICovCiAJYy0+Ymd0ID0ga3RocmVhZF9jcmVhdGUodWJpZnNfYmdfdGhyZWFkLCBjLCBjLT5iZ3RfbmFtZSk7Ci0JaWYgKCFjLT5iZ3QpCi0JCWMtPmJndCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJaWYgKElTX0VSUihjLT5iZ3QpKSB7CiAJCWVyciA9IFBUUl9FUlIoYy0+Ymd0KTsKIAkJYy0+Ymd0ID0gTlVMTDsKIAkJdWJpZnNfZXJyKCJjYW5ub3Qgc3Bhd24gXCIlc1wiLCBlcnJvciAlZCIsCiAJCQkgIGMtPmJndF9uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAl9CiAJd2FrZV91cF9wcm9jZXNzKGMtPmJndCk7CiAKIAljLT5vcnBoX2J1ZiA9IHZtYWxsb2MoYy0+bGViX3NpemUpOwotCWlmICghYy0+b3JwaF9idWYpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghYy0+b3JwaF9idWYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCiAJLyogQ2hlY2sgZm9yIGVub3VnaCBsb2cgc3BhY2UgKi8KIAlsbnVtID0gYy0+bGhlYWRfbG51bSArIDE7CkBAIC0xMzg1LDYgKzE0NTMsNyBAQAogCWRiZ19nZW4oInJlLW1vdW50ZWQgcmVhZC13cml0ZSIpOwogCWMtPnZmc19zYi0+c19mbGFncyAmPSB+TVNfUkRPTkxZOwogCWMtPnJlbW91bnRpbmdfcncgPSAwOworCWMtPmFsd2F5c19jaGtfY3JjID0gMDsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJcmV0dXJuIDA7CiAKQEAgLTE0MDAsNiArMTQ2OSw3IEBACiAJYy0+aWxlYl9idWYgPSBOVUxMOwogCXViaWZzX2xwdF9mcmVlKGMsIDEpOwogCWMtPnJlbW91bnRpbmdfcncgPSAwOworCWMtPmFsd2F5c19jaGtfY3JjID0gMDsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0MDgsMTIgKzE0NzgsOSBAQAogICogY29tbWl0X29uX3VubW91bnQgLSBjb21taXQgdGhlIGpvdXJuYWwgd2hlbiB1bi1tb3VudGluZy4KICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdW4tbW91bnRpbmcgYW5kIGl0IGNvbW1pdHMgdGhlIGpvdXJuYWwgdW5sZXNzCi0gKiB0aGUgImZhc3QgdW5tb3VudCIgbW9kZSBpcyBlbmFibGVkLiBJdCBhbHNvIGF2b2lkcyBjb21taXR0aW5nIHRoZSBqb3VybmFsIGlmCi0gKiBpdCBjb250YWlucyB0b28gZmV3IGRhdGEuCi0gKgotICogU29tZXRpbWVzIHJlY292ZXJ5IHJlcXVpcmVzIHRoZSBqb3VybmFsIHRvIGJlIGNvbW1pdHRlZCBhdCBsZWFzdCBvbmNlLCBhbmQKLSAqIHRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBhYm91dCB0aGlzLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHVuLW1vdW50aW5nIGFuZCByZS1tb3VudGluZywgYW5kIGl0IGNvbW1pdHMKKyAqIHRoZSBqb3VybmFsIHVubGVzcyB0aGUgImZhc3QgdW5tb3VudCIgbW9kZSBpcyBlbmFibGVkLiBJdCBhbHNvIGF2b2lkcworICogY29tbWl0dGluZyB0aGUgam91cm5hbCBpZiBpdCBjb250YWlucyB0b28gZmV3IGRhdGEuCiAgKi8KIHN0YXRpYyB2b2lkIGNvbW1pdF9vbl91bm1vdW50KHN0cnVjdCB1Ymlmc19pbmZvICpjKQogewpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdG5jLmMgYi9mcy91Ymlmcy90bmMuYwppbmRleCA3NjM0YzU5Li5kMjdmZDkxIDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmMuYworKysgYi9mcy91Ymlmcy90bmMuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJfQogCiAJem4gPSBjb3B5X3pub2RlKGMsIHpub2RlKTsKLQlpZiAodW5saWtlbHkoSVNfRVJSKHpuKSkpCisJaWYgKElTX0VSUih6bikpCiAJCXJldHVybiB6bjsKIAogCWlmICh6YnItPmxlbikgewpAQCAtNDcwLDYgKzQ3MCwxMCBAQAogCWlmIChub2RlX2xlbiAhPSBsZW4pCiAJCXJldHVybiAwOwogCisJaWYgKHR5cGUgPT0gVUJJRlNfREFUQV9OT0RFICYmICFjLT5hbHdheXNfY2hrX2NyYykKKwkJaWYgKGMtPm5vX2Noa19kYXRhX2NyYykKKwkJCXJldHVybiAwOworCiAJY3JjID0gY3JjMzIoVUJJRlNfQ1JDMzJfSU5JVCwgYnVmICsgOCwgbm9kZV9sZW4gLSA4KTsKIAlub2RlX2NyYyA9IGxlMzJfdG9fY3B1KGNoLT5jcmMpOwogCWlmIChjcmMgIT0gbm9kZV9jcmMpCkBAIC0xMTI4LDcgKzExMzIsNyBAQAogCQkJdWJpZnNfYXNzZXJ0KHpub2RlID09IGMtPnpyb290Lnpub2RlKTsKIAkJCXpub2RlID0gZGlydHlfY293X3pub2RlKGMsICZjLT56cm9vdCk7CiAJCX0KLQkJaWYgKHVubGlrZWx5KElTX0VSUih6bm9kZSkpIHx8ICFwKQorCQlpZiAoSVNfRVJSKHpub2RlKSB8fCAhcCkKIAkJCWJyZWFrOwogCQl1Ymlmc19hc3NlcnQocGF0aFtwIC0gMV0gPj0gMCk7CiAJCXViaWZzX2Fzc2VydChwYXRoW3AgLSAxXSA8IHpub2RlLT5jaGlsZF9jbnQpOwpAQCAtMTQ5Miw2ICsxNDk2LDI4OSBAQAogfQogCiAvKioKKyAqIHViaWZzX3RuY19nZXRfYnVfa2V5cyAtIGxvb2t1cCBrZXlzIGZvciBidWxrLXJlYWQuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnU6IGJ1bGstcmVhZCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCisgKgorICogTG9va3VwIGNvbnNlY3V0aXZlIGRhdGEgbm9kZSBrZXlzIGZvciB0aGUgc2FtZSBpbm9kZSB0aGF0IHJlc2lkZQorICogY29uc2VjdXRpdmVseSBpbiB0aGUgc2FtZSBMRUIuCisgKi8KK2ludCB1Ymlmc190bmNfZ2V0X2J1X2tleXMoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSkKK3sKKwlpbnQgbiwgZXJyID0gMCwgbG51bSA9IC0xLCB1bmluaXRpYWxpemVkX3ZhcihvZmZzKTsKKwlpbnQgdW5pbml0aWFsaXplZF92YXIobGVuKTsKKwl1bnNpZ25lZCBpbnQgYmxvY2sgPSBrZXlfYmxvY2soYywgJmJ1LT5rZXkpOworCXN0cnVjdCB1Ymlmc196bm9kZSAqem5vZGU7CisKKwlidS0+Y250ID0gMDsKKwlidS0+YmxrX2NudCA9IDA7CisJYnUtPmVvZiA9IDA7CisKKwltdXRleF9sb2NrKCZjLT50bmNfbXV0ZXgpOworCS8qIEZpbmQgZmlyc3Qga2V5ICovCisJZXJyID0gdWJpZnNfbG9va3VwX2xldmVsMChjLCAmYnUtPmtleSwgJnpub2RlLCAmbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCWlmIChlcnIpIHsKKwkJLyogS2V5IGZvdW5kICovCisJCWxlbiA9IHpub2RlLT56YnJhbmNoW25dLmxlbjsKKwkJLyogVGhlIGJ1ZmZlciBtdXN0IGJlIGJpZyBlbm91Z2ggZm9yIGF0IGxlYXN0IDEgbm9kZSAqLworCQlpZiAobGVuID4gYnUtPmJ1Zl9sZW4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBBZGQgdGhpcyBrZXkgKi8KKwkJYnUtPnpicmFuY2hbYnUtPmNudCsrXSA9IHpub2RlLT56YnJhbmNoW25dOworCQlidS0+YmxrX2NudCArPSAxOworCQlsbnVtID0gem5vZGUtPnpicmFuY2hbbl0ubG51bTsKKwkJb2ZmcyA9IEFMSUdOKHpub2RlLT56YnJhbmNoW25dLm9mZnMgKyBsZW4sIDgpOworCX0KKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgdWJpZnNfemJyYW5jaCAqemJyOworCQl1bmlvbiB1Ymlmc19rZXkgKmtleTsKKwkJdW5zaWduZWQgaW50IG5leHRfYmxvY2s7CisKKwkJLyogRmluZCBuZXh0IGtleSAqLworCQllcnIgPSB0bmNfbmV4dChjLCAmem5vZGUsICZuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQl6YnIgPSAmem5vZGUtPnpicmFuY2hbbl07CisJCWtleSA9ICZ6YnItPmtleTsKKwkJLyogU2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgZGF0YSBrZXkgZm9yIHRoaXMgZmlsZSAqLworCQlpZiAoa2V5X2ludW0oYywga2V5KSAhPSBrZXlfaW51bShjLCAmYnUtPmtleSkgfHwKKwkJICAgIGtleV90eXBlKGMsIGtleSkgIT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCWVyciA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAobG51bSA8IDApIHsKKwkJCS8qIEZpcnN0IGtleSBmb3VuZCAqLworCQkJbG51bSA9IHpici0+bG51bTsKKwkJCW9mZnMgPSBBTElHTih6YnItPm9mZnMgKyB6YnItPmxlbiwgOCk7CisJCQlsZW4gPSB6YnItPmxlbjsKKwkJCWlmIChsZW4gPiBidS0+YnVmX2xlbikgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIGRhdGEgbm9kZXMgbXVzdCBiZSBpbiBjb25zZWN1dGl2ZSBwb3NpdGlvbnMgaW4KKwkJCSAqIHRoZSBzYW1lIExFQi4KKwkJCSAqLworCQkJaWYgKHpici0+bG51bSAhPSBsbnVtIHx8IHpici0+b2ZmcyAhPSBvZmZzKQorCQkJCWdvdG8gb3V0OworCQkJb2ZmcyArPSBBTElHTih6YnItPmxlbiwgOCk7CisJCQlsZW4gPSBBTElHTihsZW4sIDgpICsgemJyLT5sZW47CisJCQkvKiBNdXN0IG5vdCBleGNlZWQgYnVmZmVyIGxlbmd0aCAqLworCQkJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKQorCQkJCWdvdG8gb3V0OworCQl9CisJCS8qIEFsbG93IGZvciBob2xlcyAqLworCQluZXh0X2Jsb2NrID0ga2V5X2Jsb2NrKGMsIGtleSk7CisJCWJ1LT5ibGtfY250ICs9IChuZXh0X2Jsb2NrIC0gYmxvY2sgLSAxKTsKKwkJaWYgKGJ1LT5ibGtfY250ID49IFVCSUZTX01BWF9CVUxLX1JFQUQpCisJCQlnb3RvIG91dDsKKwkJYmxvY2sgPSBuZXh0X2Jsb2NrOworCQkvKiBBZGQgdGhpcyBrZXkgKi8KKwkJYnUtPnpicmFuY2hbYnUtPmNudCsrXSA9ICp6YnI7CisJCWJ1LT5ibGtfY250ICs9IDE7CisJCS8qIFNlZSBpZiB3ZSBoYXZlIHJvb20gZm9yIG1vcmUgKi8KKwkJaWYgKGJ1LT5jbnQgPj0gVUJJRlNfTUFYX0JVTEtfUkVBRCkKKwkJCWdvdG8gb3V0OworCQlpZiAoYnUtPmJsa19jbnQgPj0gVUJJRlNfTUFYX0JVTEtfUkVBRCkKKwkJCWdvdG8gb3V0OworCX0KK291dDoKKwlpZiAoZXJyID09IC1FTk9FTlQpIHsKKwkJYnUtPmVvZiA9IDE7CisJCWVyciA9IDA7CisJfQorCWJ1LT5nY19zZXEgPSBjLT5nY19zZXE7CisJbXV0ZXhfdW5sb2NrKCZjLT50bmNfbXV0ZXgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJLyoKKwkgKiBBbiBlbm9ybW91cyBob2xlIGNvdWxkIGNhdXNlIGJ1bGstcmVhZCB0byBlbmNvbXBhc3MgdG9vIG1hbnkKKwkgKiBwYWdlIGNhY2hlIHBhZ2VzLCBzbyBsaW1pdCB0aGUgbnVtYmVyIGhlcmUuCisJICovCisJaWYgKGJ1LT5ibGtfY250ID4gVUJJRlNfTUFYX0JVTEtfUkVBRCkKKwkJYnUtPmJsa19jbnQgPSBVQklGU19NQVhfQlVMS19SRUFEOworCS8qCisJICogRW5zdXJlIHRoYXQgYnVsay1yZWFkIGNvdmVycyBhIHdob2xlIG51bWJlciBvZiBwYWdlIGNhY2hlCisJICogcGFnZXMuCisJICovCisJaWYgKFVCSUZTX0JMT0NLU19QRVJfUEFHRSA9PSAxIHx8CisJICAgICEoYnUtPmJsa19jbnQgJiAoVUJJRlNfQkxPQ0tTX1BFUl9QQUdFIC0gMSkpKQorCQlyZXR1cm4gMDsKKwlpZiAoYnUtPmVvZikgeworCQkvKiBBdCB0aGUgZW5kIG9mIGZpbGUgd2UgY2FuIHJvdW5kIHVwICovCisJCWJ1LT5ibGtfY250ICs9IFVCSUZTX0JMT0NLU19QRVJfUEFHRSAtIDE7CisJCXJldHVybiAwOworCX0KKwkvKiBFeGNsdWRlIGRhdGEgbm9kZXMgdGhhdCBkbyBub3QgbWFrZSB1cCBhIHdob2xlIHBhZ2UgY2FjaGUgcGFnZSAqLworCWJsb2NrID0ga2V5X2Jsb2NrKGMsICZidS0+a2V5KSArIGJ1LT5ibGtfY250OworCWJsb2NrICY9IH4oVUJJRlNfQkxPQ0tTX1BFUl9QQUdFIC0gMSk7CisJd2hpbGUgKGJ1LT5jbnQpIHsKKwkJaWYgKGtleV9ibG9jayhjLCAmYnUtPnpicmFuY2hbYnUtPmNudCAtIDFdLmtleSkgPCBibG9jaykKKwkJCWJyZWFrOworCQlidS0+Y250IC09IDE7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHJlYWRfd2J1ZiAtIGJ1bGstcmVhZCBmcm9tIGEgTEVCIHdpdGggYSB3YnVmLgorICogQHdidWY6IHdidWYgdGhhdCBtYXkgb3ZlcmxhcCB0aGUgcmVhZAorICogQGJ1ZjogYnVmZmVyIGludG8gd2hpY2ggdG8gcmVhZAorICogQGxlbjogcmVhZCBsZW5ndGgKKyAqIEBsbnVtOiBMRUIgbnVtYmVyIGZyb20gd2hpY2ggdG8gcmVhZAorICogQG9mZnM6IG9mZnNldCBmcm9tIHdoaWNoIHRvIHJlYWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zICUwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF93YnVmKHN0cnVjdCB1Ymlmc193YnVmICp3YnVmLCB2b2lkICpidWYsIGludCBsZW4sIGludCBsbnVtLAorCQkgICAgIGludCBvZmZzKQoreworCWNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjID0gd2J1Zi0+YzsKKwlpbnQgcmxlbiwgb3ZlcmxhcDsKKworCWRiZ19pbygiTEVCICVkOiVkLCBsZW5ndGggJWQiLCBsbnVtLCBvZmZzLCBsZW4pOworCXViaWZzX2Fzc2VydCh3YnVmICYmIGxudW0gPj0gMCAmJiBsbnVtIDwgYy0+bGViX2NudCAmJiBvZmZzID49IDApOworCXViaWZzX2Fzc2VydCghKG9mZnMgJiA3KSAmJiBvZmZzIDwgYy0+bGViX3NpemUpOworCXViaWZzX2Fzc2VydChvZmZzICsgbGVuIDw9IGMtPmxlYl9zaXplKTsKKworCXNwaW5fbG9jaygmd2J1Zi0+bG9jayk7CisJb3ZlcmxhcCA9IChsbnVtID09IHdidWYtPmxudW0gJiYgb2ZmcyArIGxlbiA+IHdidWYtPm9mZnMpOworCWlmICghb3ZlcmxhcCkgeworCQkvKiBXZSBtYXkgc2FmZWx5IHVubG9jayB0aGUgd3JpdGUtYnVmZmVyIGFuZCByZWFkIHRoZSBkYXRhICovCisJCXNwaW5fdW5sb2NrKCZ3YnVmLT5sb2NrKTsKKwkJcmV0dXJuIHViaV9yZWFkKGMtPnViaSwgbG51bSwgYnVmLCBvZmZzLCBsZW4pOworCX0KKworCS8qIERvbid0IHJlYWQgdW5kZXIgd2J1ZiAqLworCXJsZW4gPSB3YnVmLT5vZmZzIC0gb2ZmczsKKwlpZiAocmxlbiA8IDApCisJCXJsZW4gPSAwOworCisJLyogQ29weSB0aGUgcmVzdCBmcm9tIHRoZSB3cml0ZS1idWZmZXIgKi8KKwltZW1jcHkoYnVmICsgcmxlbiwgd2J1Zi0+YnVmICsgb2ZmcyArIHJsZW4gLSB3YnVmLT5vZmZzLCBsZW4gLSBybGVuKTsKKwlzcGluX3VubG9jaygmd2J1Zi0+bG9jayk7CisKKwlpZiAocmxlbiA+IDApCisJCS8qIFJlYWQgZXZlcnl0aGluZyB0aGF0IGdvZXMgYmVmb3JlIHdyaXRlLWJ1ZmZlciAqLworCQlyZXR1cm4gdWJpX3JlYWQoYy0+dWJpLCBsbnVtLCBidWYsIG9mZnMsIHJsZW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdmFsaWRhdGVfZGF0YV9ub2RlIC0gdmFsaWRhdGUgZGF0YSBub2RlcyBmb3IgYnVsay1yZWFkLgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgZGF0YSBub2RlIHRvIHZhbGlkYXRlCisgKiBAemJyOiB6YnJhbmNoIG9mIGRhdGEgbm9kZSB0byB2YWxpZGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB2YWxpZGF0ZV9kYXRhX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHN0cnVjdCB1Ymlmc196YnJhbmNoICp6YnIpCit7CisJdW5pb24gdWJpZnNfa2V5IGtleTE7CisJc3RydWN0IHViaWZzX2NoICpjaCA9IGJ1ZjsKKwlpbnQgZXJyLCBsZW47CisKKwlpZiAoY2gtPm5vZGVfdHlwZSAhPSBVQklGU19EQVRBX05PREUpIHsKKwkJdWJpZnNfZXJyKCJiYWQgbm9kZSB0eXBlICglZCBidXQgZXhwZWN0ZWQgJWQpIiwKKwkJCSAgY2gtPm5vZGVfdHlwZSwgVUJJRlNfREFUQV9OT0RFKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCB6YnItPmxudW0sIHpici0+b2ZmcywgMCwgMCk7CisJaWYgKGVycikgeworCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIFVCSUZTX0RBVEFfTk9ERSk7CisJCWdvdG8gb3V0OworCX0KKworCWxlbiA9IGxlMzJfdG9fY3B1KGNoLT5sZW4pOworCWlmIChsZW4gIT0gemJyLT5sZW4pIHsKKwkJdWJpZnNfZXJyKCJiYWQgbm9kZSBsZW5ndGggJWQsIGV4cGVjdGVkICVkIiwgbGVuLCB6YnItPmxlbik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIGtleSBvZiB0aGUgcmVhZCBub2RlIGlzIGNvcnJlY3QgKi8KKwlrZXlfcmVhZChjLCBidWYgKyBVQklGU19LRVlfT0ZGU0VULCAma2V5MSk7CisJaWYgKCFrZXlzX2VxKGMsICZ6YnItPmtleSwgJmtleTEpKSB7CisJCXViaWZzX2VycigiYmFkIGtleSBpbiBub2RlIGF0IExFQiAlZDolZCIsCisJCQkgIHpici0+bG51bSwgemJyLT5vZmZzKTsKKwkJZGJnX3RuYygibG9va2VkIGZvciBrZXkgJXMgZm91bmQgbm9kZSdzIGtleSAlcyIsCisJCQlEQkdLRVkoJnpici0+a2V5KSwgREJHS0VZMSgma2V5MSkpOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJZXJyID0gLUVJTlZBTDsKK291dDoKKwl1Ymlmc19lcnIoImJhZCBub2RlIGF0IExFQiAlZDolZCIsIHpici0+bG51bSwgemJyLT5vZmZzKTsKKwlkYmdfZHVtcF9ub2RlKGMsIGJ1Zik7CisJZGJnX2R1bXBfc3RhY2soKTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHViaWZzX3RuY19idWxrX3JlYWQgLSByZWFkIGEgbnVtYmVyIG9mIGRhdGEgbm9kZXMgaW4gb25lIGdvLgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGJ1OiBidWxrLXJlYWQgcGFyYW1ldGVycyBhbmQgcmVzdWx0cworICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJlYWRzIGFuZCB2YWxpZGF0ZXMgdGhlIGRhdGEgbm9kZXMgdGhhdCB3ZXJlIGlkZW50aWZpZWQgYnkgdGhlCisgKiAndWJpZnNfdG5jX2dldF9idV9rZXlzKCknIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zICUwIG9uIHN1Y2Nlc3MsCisgKiAtRUFHQUlOIHRvIGluZGljYXRlIGEgcmFjZSB3aXRoIEdDLCBvciBhbm90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24KKyAqIGZhaWx1cmUuCisgKi8KK2ludCB1Ymlmc190bmNfYnVsa19yZWFkKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgYnVfaW5mbyAqYnUpCit7CisJaW50IGxudW0gPSBidS0+emJyYW5jaFswXS5sbnVtLCBvZmZzID0gYnUtPnpicmFuY2hbMF0ub2ZmcywgbGVuLCBlcnIsIGk7CisJc3RydWN0IHViaWZzX3didWYgKndidWY7CisJdm9pZCAqYnVmOworCisJbGVuID0gYnUtPnpicmFuY2hbYnUtPmNudCAtIDFdLm9mZnM7CisJbGVuICs9IGJ1LT56YnJhbmNoW2J1LT5jbnQgLSAxXS5sZW4gLSBvZmZzOworCWlmIChsZW4gPiBidS0+YnVmX2xlbikgeworCQl1Ymlmc19lcnIoImJ1ZmZlciB0b28gc21hbGwgJWQgdnMgJWQiLCBidS0+YnVmX2xlbiwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRG8gdGhlIHJlYWQgKi8KKwl3YnVmID0gdWJpZnNfZ2V0X3didWYoYywgbG51bSk7CisJaWYgKHdidWYpCisJCWVyciA9IHJlYWRfd2J1Zih3YnVmLCBidS0+YnVmLCBsZW4sIGxudW0sIG9mZnMpOworCWVsc2UKKwkJZXJyID0gdWJpX3JlYWQoYy0+dWJpLCBsbnVtLCBidS0+YnVmLCBvZmZzLCBsZW4pOworCisJLyogQ2hlY2sgZm9yIGEgcmFjZSB3aXRoIEdDICovCisJaWYgKG1heWJlX2xlYl9nY2VkKGMsIGxudW0sIGJ1LT5nY19zZXEpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmIChlcnIgJiYgZXJyICE9IC1FQkFETVNHKSB7CisJCXViaWZzX2VycigiZmFpbGVkIHRvIHJlYWQgZnJvbSBMRUIgJWQ6JWQsIGVycm9yICVkIiwKKwkJCSAgbG51bSwgb2ZmcywgZXJyKTsKKwkJZGJnX2R1bXBfc3RhY2soKTsKKwkJZGJnX3RuYygia2V5ICVzIiwgREJHS0VZKCZidS0+a2V5KSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIG5vZGVzIHJlYWQgKi8KKwlidWYgPSBidS0+YnVmOworCWZvciAoaSA9IDA7IGkgPCBidS0+Y250OyBpKyspIHsKKwkJZXJyID0gdmFsaWRhdGVfZGF0YV9ub2RlKGMsIGJ1ZiwgJmJ1LT56YnJhbmNoW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWJ1ZiA9IGJ1ZiArIEFMSUdOKGJ1LT56YnJhbmNoW2ldLmxlbiwgOCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogZG9fbG9va3VwX25tLSBsb29rIHVwIGEgImhhc2hlZCIgbm9kZS4KICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBrZXk6IG5vZGUga2V5IHRvIGxvb2t1cApAQCAtMTY3NSw3ICsxOTYyLDcgQEAKIHsKIAlzdHJ1Y3QgdWJpZnNfem5vZGUgKnpuLCAqemksICp6cDsKIAlpbnQgaSwga2VlcCwgbW92ZSwgYXBwZW5kaW5nID0gMDsKLQl1bmlvbiB1Ymlmc19rZXkgKmtleSA9ICZ6YnItPmtleTsKKwl1bmlvbiB1Ymlmc19rZXkgKmtleSA9ICZ6YnItPmtleSwgKmtleTE7CiAKIAl1Ymlmc19hc3NlcnQobiA+PSAwICYmIG4gPD0gYy0+ZmFub3V0KTsKIApAQCAtMTcxNiwyMCArMjAwMywzMyBAQAogCXpuLT5sZXZlbCA9IHpub2RlLT5sZXZlbDsKIAogCS8qIERlY2lkZSB3aGVyZSB0byBzcGxpdCAqLwotCWlmICh6bm9kZS0+bGV2ZWwgPT0gMCAmJiBuID09IGMtPmZhbm91dCAmJgotCSAgICBrZXlfdHlwZShjLCBrZXkpID09IFVCSUZTX0RBVEFfS0VZKSB7Ci0JCXVuaW9uIHViaWZzX2tleSAqa2V5MTsKLQotCQkvKgotCQkgKiBJZiB0aGlzIGlzIGFuIGlub2RlIHdoaWNoIGlzIGJlaW5nIGFwcGVuZGVkIC0gZG8gbm90IHNwbGl0Ci0JCSAqIGl0IGJlY2F1c2Ugbm8gb3RoZXIgemJyYW5jaGVzIGNhbiBiZSBpbnNlcnRlZCBiZXR3ZWVuCi0JCSAqIHpicmFuY2hlcyBvZiBjb25zZWN1dGl2ZSBkYXRhIG5vZGVzIGFueXdheS4KLQkJICovCi0JCWtleTEgPSAmem5vZGUtPnpicmFuY2hbbiAtIDFdLmtleTsKLQkJaWYgKGtleV9pbnVtKGMsIGtleTEpID09IGtleV9pbnVtKGMsIGtleSkgJiYKLQkJICAgIGtleV90eXBlKGMsIGtleTEpID09IFVCSUZTX0RBVEFfS0VZICYmCi0JCSAgICBrZXlfYmxvY2soYywga2V5MSkgPT0ga2V5X2Jsb2NrKGMsIGtleSkgLSAxKQotCQkJYXBwZW5kaW5nID0gMTsKKwlpZiAoem5vZGUtPmxldmVsID09IDAgJiYga2V5X3R5cGUoYywga2V5KSA9PSBVQklGU19EQVRBX0tFWSkgeworCQkvKiBUcnkgbm90IHRvIHNwbGl0IGNvbnNlY3V0aXZlIGRhdGEga2V5cyAqLworCQlpZiAobiA9PSBjLT5mYW5vdXQpIHsKKwkJCWtleTEgPSAmem5vZGUtPnpicmFuY2hbbiAtIDFdLmtleTsKKwkJCWlmIChrZXlfaW51bShjLCBrZXkxKSA9PSBrZXlfaW51bShjLCBrZXkpICYmCisJCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkpCisJCQkJYXBwZW5kaW5nID0gMTsKKwkJfSBlbHNlCisJCQlnb3RvIGNoZWNrX3NwbGl0OworCX0gZWxzZSBpZiAoYXBwZW5kaW5nICYmIG4gIT0gYy0+ZmFub3V0KSB7CisJCS8qIFRyeSBub3QgdG8gc3BsaXQgY29uc2VjdXRpdmUgZGF0YSBrZXlzICovCisJCWFwcGVuZGluZyA9IDA7CitjaGVja19zcGxpdDoKKwkJaWYgKG4gPj0gKGMtPmZhbm91dCArIDEpIC8gMikgeworCQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFswXS5rZXk7CisJCQlpZiAoa2V5X2ludW0oYywga2V5MSkgPT0ga2V5X2ludW0oYywga2V5KSAmJgorCQkJICAgIGtleV90eXBlKGMsIGtleTEpID09IFVCSUZTX0RBVEFfS0VZKSB7CisJCQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuXS5rZXk7CisJCQkJaWYgKGtleV9pbnVtKGMsIGtleTEpICE9IGtleV9pbnVtKGMsIGtleSkgfHwKKwkJCQkgICAga2V5X3R5cGUoYywga2V5MSkgIT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCQkJa2VlcCA9IG47CisJCQkJCW1vdmUgPSBjLT5mYW5vdXQgLSBrZWVwOworCQkJCQl6aSA9IHpub2RlOworCQkJCQlnb3RvIGRvX3NwbGl0OworCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCWlmIChhcHBlbmRpbmcpIHsKQEAgLTE3NTksNiArMjA1OSw4IEBACiAJCQl6YnItPnpub2RlLT5wYXJlbnQgPSB6bjsKIAl9CiAKK2RvX3NwbGl0OgorCiAJX19zZXRfYml0KERJUlRZX1pOT0RFLCAmem4tPmZsYWdzKTsKIAlhdG9taWNfbG9uZ19pbmMoJmMtPmRpcnR5X3puX2NudCk7CiAKQEAgLTE3ODUsMTQgKzIwODcsMTEgQEAKIAogCS8qIEluc2VydCBuZXcgem5vZGUgKHByb2R1Y2VkIGJ5IHNwaXR0aW5nKSBpbnRvIHRoZSBwYXJlbnQgKi8KIAlpZiAoenApIHsKLQkJaSA9IG47CisJCWlmIChuID09IDAgJiYgemkgPT0gem5vZGUgJiYgem5vZGUtPmlpcCA9PSAwKQorCQkJY29ycmVjdF9wYXJlbnRfa2V5cyhjLCB6bm9kZSk7CisKIAkJLyogTG9jYXRlIGluc2VydGlvbiBwb2ludCAqLwogCQluID0gem5vZGUtPmlpcCArIDE7Ci0JCWlmIChhcHBlbmRpbmcgJiYgbiAhPSBjLT5mYW5vdXQpCi0JCQlhcHBlbmRpbmcgPSAwOwotCi0JCWlmIChpID09IDAgJiYgemkgPT0gem5vZGUgJiYgem5vZGUtPmlpcCA9PSAwKQotCQkJY29ycmVjdF9wYXJlbnRfa2V5cyhjLCB6bm9kZSk7CiAKIAkJLyogVGFpbCByZWN1cnNpb24gKi8KIAkJemJyLT5rZXkgPSB6bi0+emJyYW5jaFswXS5rZXk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy90bmNfbWlzYy5jIGIvZnMvdWJpZnMvdG5jX21pc2MuYwppbmRleCBhMjVjMWNjLi5iNDhkYjk5IDEwMDY0NAotLS0gYS9mcy91Ymlmcy90bmNfbWlzYy5jCisrKyBiL2ZzL3ViaWZzL3RuY19taXNjLmMKQEAgLTQ4MCw4ICs0ODAsOCBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSB0aGUga2V5IG9mIHRoZSByZWFkIG5vZGUgaXMgY29ycmVjdCAqLwotCWtleV9yZWFkKGMsIGtleSwgJmtleTEpOwotCWlmIChtZW1jbXAobm9kZSArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxLCBjLT5rZXlfbGVuKSkgeworCWtleV9yZWFkKGMsIG5vZGUgKyBVQklGU19LRVlfT0ZGU0VULCAma2V5MSk7CisJaWYgKCFrZXlzX2VxKGMsIGtleSwgJmtleTEpKSB7CiAJCXViaWZzX2VycigiYmFkIGtleSBpbiBub2RlIGF0IExFQiAlZDolZCIsCiAJCQkgIHpici0+bG51bSwgemJyLT5vZmZzKTsKIAkJZGJnX3RuYygibG9va2VkIGZvciBrZXkgJXMgZm91bmQgbm9kZSdzIGtleSAlcyIsCmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaAppbmRleCBhOWVjYmQ5Li4wYjM3ODA0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKQEAgLTc1LDcgKzc1LDYgQEAKICAqLwogI2RlZmluZSBVQklGU19CTE9DS19TSVpFICA0MDk2CiAjZGVmaW5lIFVCSUZTX0JMT0NLX1NISUZUIDEyCi0jZGVmaW5lIFVCSUZTX0JMT0NLX01BU0sgIDB4MDAwMDBGRkYKIAogLyogVUJJRlMgcGFkZGluZyBieXRlIHBhdHRlcm4gKG11c3Qgbm90IGJlIGZpcnN0IG9yIGxhc3QgYnl0ZSBvZiBub2RlIG1hZ2ljKSAqLwogI2RlZmluZSBVQklGU19QQURESU5HX0JZVEUgMHhDRQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvdWJpZnMuaCBiL2ZzL3ViaWZzL3ViaWZzLmgKaW5kZXggMTdjNjIwYi4uYTdiZDMyZiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvdWJpZnMuaAorKysgYi9mcy91Ymlmcy91Ymlmcy5oCkBAIC0xNDIsNiArMTQyLDkgQEAKIC8qIE1heGltdW0gZXhwZWN0ZWQgdHJlZSBoZWlnaHQgZm9yIHVzZSBieSBib3R0b21fdXBfYnVmICovCiAjZGVmaW5lIEJPVFRPTV9VUF9IRUlHSFQgNjQKIAorLyogTWF4aW11bSBudW1iZXIgb2YgZGF0YSBub2RlcyB0byBidWxrLXJlYWQgKi8KKyNkZWZpbmUgVUJJRlNfTUFYX0JVTEtfUkVBRCAzMgorCiAvKgogICogTG9ja2RlcCBjbGFzc2VzIGZvciBVQklGUyBpbm9kZSBAdWlfbXV0ZXguCiAgKi8KQEAgLTMyOCw5ICszMzEsMTAgQEAKICAqICAgICAgICAgICAgICAgdGhpcyBpbm9kZQogICogQGRpcnR5OiBub24temVybyBpZiB0aGUgaW5vZGUgaXMgZGlydHkKICAqIEB4YXR0cjogbm9uLXplcm8gaWYgdGhpcyBpcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaW5vZGUKKyAqIEBidWxrX3JlYWQ6IG5vbi16ZXJvIGlmIGJ1bGstcmVhZCBzaG91bGQgYmUgdXNlZAogICogQHVpX211dGV4OiBzZXJpYWxpemVzIGlub2RlIHdyaXRlLWJhY2sgd2l0aCB0aGUgcmVzdCBvZiBWRlMgb3BlcmF0aW9ucywKLSAqICAgICAgICAgICAgc2VyaWFsaXplcyAiY2xlYW4gPC0+IGRpcnR5IiBzdGF0ZSBjaGFuZ2VzLCBwcm90ZWN0cyBAZGlydHksCi0gKiAgICAgICAgICAgIEB1aV9zaXplLCBhbmQgQHhhdHRyX3NpemUKKyAqICAgICAgICAgICAgc2VyaWFsaXplcyAiY2xlYW4gPC0+IGRpcnR5IiBzdGF0ZSBjaGFuZ2VzLCBzZXJpYWxpemVzIGJ1bGstcmVhZCwKKyAqICAgICAgICAgICAgcHJvdGVjdHMgQGRpcnR5LCBAYnVsa19yZWFkLCBAdWlfc2l6ZSwgYW5kIEB4YXR0cl9zaXplCiAgKiBAdWlfbG9jazogcHJvdGVjdHMgQHN5bmNlZF9pX3NpemUKICAqIEBzeW5jZWRfaV9zaXplOiBzeW5jaHJvbml6ZWQgc2l6ZSBvZiBpbm9kZSwgaS5lLiB0aGUgdmFsdWUgb2YgaW5vZGUgc2l6ZQogICogICAgICAgICAgICAgICAgIGN1cnJlbnRseSBzdG9yZWQgb24gdGhlIGZsYXNoOyB1c2VkIG9ubHkgZm9yIHJlZ3VsYXIgZmlsZQpAQCAtMzM4LDYgKzM0Miw4IEBACiAgKiBAdWlfc2l6ZTogaW5vZGUgc2l6ZSB1c2VkIGJ5IFVCSUZTIHdoZW4gd3JpdGluZyB0byBmbGFzaAogICogQGZsYWdzOiBpbm9kZSBmbGFncyAoQFVCSUZTX0NPTVBSX0ZMLCBldGMpCiAgKiBAY29tcHJfdHlwZTogZGVmYXVsdCBjb21wcmVzc2lvbiB0eXBlIHVzZWQgZm9yIHRoaXMgaW5vZGUKKyAqIEBsYXN0X3BhZ2VfcmVhZDogcGFnZSBudW1iZXIgb2YgbGFzdCBwYWdlIHJlYWQgKGZvciBidWxrIHJlYWQpCisgKiBAcmVhZF9pbl9hX3JvdzogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHBhZ2VzIHJlYWQgaW4gYSByb3cgKGZvciBidWxrIHJlYWQpCiAgKiBAZGF0YV9sZW46IGxlbmd0aCBvZiB0aGUgZGF0YSBhdHRhY2hlZCB0byB0aGUgaW5vZGUKICAqIEBkYXRhOiBpbm9kZSdzIGRhdGEKICAqCkBAIC0zNzksMTIgKzM4NSwxNSBAQAogCXVuc2lnbmVkIGludCB4YXR0cl9uYW1lczsKIAl1bnNpZ25lZCBpbnQgZGlydHk6MTsKIAl1bnNpZ25lZCBpbnQgeGF0dHI6MTsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjE7CiAJc3RydWN0IG11dGV4IHVpX211dGV4OwogCXNwaW5sb2NrX3QgdWlfbG9jazsKIAlsb2ZmX3Qgc3luY2VkX2lfc2l6ZTsKIAlsb2ZmX3QgdWlfc2l6ZTsKIAlpbnQgZmxhZ3M7CiAJaW50IGNvbXByX3R5cGU7CisJcGdvZmZfdCBsYXN0X3BhZ2VfcmVhZDsKKwlwZ29mZl90IHJlYWRfaW5fYV9yb3c7CiAJaW50IGRhdGFfbGVuOwogCXZvaWQgKmRhdGE7CiB9OwpAQCAtNjk4LDggKzcwNyw4IEBACiAgKiBzdHJ1Y3QgdWJpZnNfemJyYW5jaCAtIGtleS9jb29yZGluYXRlL2xlbmd0aCBicmFuY2ggc3RvcmVkIGluIHpub2Rlcy4KICAqIEBrZXk6IGtleQogICogQHpub2RlOiB6bm9kZSBhZGRyZXNzIGluIG1lbW9yeQotICogQGxudW06IExFQiBudW1iZXIgb2YgdGhlIGluZGV4aW5nIG5vZGUKLSAqIEBvZmZzOiBvZmZzZXQgb2YgdGhlIGluZGV4aW5nIG5vZGUgd2l0aGluIEBsbnVtCisgKiBAbG51bTogTEVCIG51bWJlciBvZiB0aGUgdGFyZ2V0IG5vZGUgKGluZGV4aW5nIG5vZGUgb3IgZGF0YSBub2RlKQorICogQG9mZnM6IHRhcmdldCBub2RlIG9mZnNldCB3aXRoaW4gQGxudW0KICAqIEBsZW46IHRhcmdldCBub2RlIGxlbmd0aAogICovCiBzdHJ1Y3QgdWJpZnNfemJyYW5jaCB7CkBAIC03NDQsNiArNzUzLDI4IEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBidV9pbmZvIC0gYnVsay1yZWFkIGluZm9ybWF0aW9uCisgKiBAa2V5OiBmaXJzdCBkYXRhIG5vZGUga2V5CisgKiBAemJyYW5jaDogemJyYW5jaGVzIG9mIGRhdGEgbm9kZXMgdG8gYnVsayByZWFkCisgKiBAYnVmOiBidWZmZXIgdG8gcmVhZCBpbnRvCisgKiBAYnVmX2xlbjogYnVmZmVyIGxlbmd0aAorICogQGdjX3NlcTogR0Mgc2VxdWVuY2UgbnVtYmVyIHRvIGRldGVjdCByYWNlcyB3aXRoIEdDCisgKiBAY250OiBudW1iZXIgb2YgZGF0YSBub2RlcyBmb3IgYnVsayByZWFkCisgKiBAYmxrX2NudDogbnVtYmVyIG9mIGRhdGEgYmxvY2tzIGluY2x1ZGluZyBob2xlcworICogQG9lZjogZW5kIG9mIGZpbGUgcmVhY2hlZAorICovCitzdHJ1Y3QgYnVfaW5mbyB7CisJdW5pb24gdWJpZnNfa2V5IGtleTsKKwlzdHJ1Y3QgdWJpZnNfemJyYW5jaCB6YnJhbmNoW1VCSUZTX01BWF9CVUxLX1JFQURdOworCXZvaWQgKmJ1ZjsKKwlpbnQgYnVmX2xlbjsKKwlpbnQgZ2Nfc2VxOworCWludCBjbnQ7CisJaW50IGJsa19jbnQ7CisJaW50IGVvZjsKK307CisKKy8qKgogICogc3RydWN0IHViaWZzX25vZGVfcmFuZ2UgLSBub2RlIGxlbmd0aCByYW5nZSBkZXNjcmlwdGlvbiBkYXRhIHN0cnVjdHVyZS4KICAqIEBsZW46IGZpeGVkIG5vZGUgbGVuZ3RoCiAgKiBAbWluX2xlbjogbWluaW11bSBwb3NzaWJsZSBub2RlIGxlbmd0aApAQCAtODYyLDkgKzg5MywxMyBAQAogLyoqCiAgKiBzdHJ1Y3QgdWJpZnNfbW91bnRfb3B0cyAtIFVCSUZTLXNwZWNpZmljIG1vdW50IG9wdGlvbnMgaW5mb3JtYXRpb24uCiAgKiBAdW5tb3VudF9tb2RlOiBzZWxlY3RlZCB1bm1vdW50IG1vZGUgKCUwIGRlZmF1bHQsICUxIG5vcm1hbCwgJTIgZmFzdCkKKyAqIEBidWxrX3JlYWQ6IGVuYWJsZSBidWxrLXJlYWRzCisgKiBAY2hrX2RhdGFfY3JjOiBjaGVjayBDUkNzIHdoZW4gcmVhZGluZyBkYXRhIG5vZGVzCiAgKi8KIHN0cnVjdCB1Ymlmc19tb3VudF9vcHRzIHsKIAl1bnNpZ25lZCBpbnQgdW5tb3VudF9tb2RlOjI7CisJdW5zaWduZWQgaW50IGJ1bGtfcmVhZDoyOworCXVuc2lnbmVkIGludCBjaGtfZGF0YV9jcmM6MjsKIH07CiAKIC8qKgpAQCAtOTA1LDEzICs5NDAsMTIgQEAKICAqIEBjbXRfc3RhdGU6IGNvbW1pdCBzdGF0ZQogICogQGNzX2xvY2s6IGNvbW1pdCBzdGF0ZSBsb2NrCiAgKiBAY210X3dxOiB3YWl0IHF1ZXVlIHRvIHNsZWVwIG9uIGlmIHRoZSBsb2cgaXMgZnVsbCBhbmQgYSBjb21taXQgaXMgcnVubmluZworICoKICAqIEBmYXN0X3VubW91bnQ6IGRvIG5vdCBydW4gam91cm5hbCBjb21taXQgYmVmb3JlIHVuLW1vdW50aW5nCiAgKiBAYmlnX2xwdDogZmxhZyB0aGF0IExQVCBpcyB0b28gYmlnIHRvIHdyaXRlIHdob2xlIGR1cmluZyBjb21taXQKLSAqIEBjaGVja19scHRfZnJlZTogZmxhZyB0aGF0IGluZGljYXRlcyBMUFQgR0MgbWF5IGJlIG5lZWRlZAotICogQG5vc3BhY2U6IG5vbi16ZXJvIGlmIHRoZSBmaWxlLXN5c3RlbSBkb2VzIG5vdCBoYXZlIGZsYXNoIHNwYWNlICh1c2VkIGFzCi0gKiAgICAgICAgICAgb3B0aW1pemF0aW9uKQotICogQG5vc3BhY2VfcnA6IHRoZSBzYW1lIGFzIEBub3NwYWNlLCBidXQgYWRkaXRpb25hbGx5IG1lYW5zIHRoYXQgZXZlbiByZXNlcnZlZAotICogICAgICAgICAgICAgIHBvb2wgaXMgZnVsbAorICogQG5vX2Noa19kYXRhX2NyYzogZG8gbm90IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMgKGV4Y2VwdCBkdXJpbmcKKyAqICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5KQorICogQGJ1bGtfcmVhZDogZW5hYmxlIGJ1bGstcmVhZHMKICAqCiAgKiBAdG5jX211dGV4OiBwcm90ZWN0cyB0aGUgVHJlZSBOb2RlIENhY2hlIChUTkMpLCBAenJvb3QsIEBjbmV4dCwgQGVuZXh0LCBhbmQKICAqICAgICAgICAgICAgIEBjYWxjX2lkeF9zegpAQCAtOTM1LDYgKzk2OSw3IEBACiAgKiBAbXN0X25vZGU6IG1hc3RlciBub2RlCiAgKiBAbXN0X29mZnM6IG9mZnNldCBvZiB2YWxpZCBtYXN0ZXIgbm9kZQogICogQG1zdF9tdXRleDogcHJvdGVjdHMgdGhlIG1hc3RlciBub2RlIGFyZWEsIEBtc3Rfbm9kZSwgYW5kIEBtc3Rfb2ZmcworICogQGJ1bGtfcmVhZF9idWZfc2l6ZTogYnVmZmVyIHNpemUgZm9yIGJ1bGstcmVhZHMKICAqCiAgKiBAbG9nX2xlYnM6IG51bWJlciBvZiBsb2dpY2FsIGVyYXNlYmxvY2tzIGluIHRoZSBsb2cKICAqIEBsb2dfYnl0ZXM6IGxvZyBzaXplIGluIGJ5dGVzCkBAIC05NzcsMTIgKzEwMTIsMTcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdoaWNoIHN0aWxsIGhhdmUgdG8gYmUgdGFrZW4gaW50byBhY2NvdW50IGJlY2F1c2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluZGV4IGhhcyBub3QgYmVlbiBjb21taXR0ZWQgc28gZmFyCiAgKiBAc3BhY2VfbG9jazogcHJvdGVjdHMgQGJ1ZGdfaWR4X2dyb3d0aCwgQGJ1ZGdfZGF0YV9ncm93dGgsIEBidWRnX2RkX2dyb3d0aCwKLSAqICAgICAgICAgICAgICBAYnVkZ191bmNvbW1pdGVkX2lkeCwgQG1pbl9pZHhfbGVicywgQG9sZF9pZHhfc3osIGFuZCBAbHN0OworICogICAgICAgICAgICAgIEBidWRnX3VuY29tbWl0ZWRfaWR4LCBAbWluX2lkeF9sZWJzLCBAb2xkX2lkeF9zeiwgQGxzdCwKKyAqICAgICAgICAgICAgICBAbm9zcGFjZSwgYW5kIEBub3NwYWNlX3JwOwogICogQG1pbl9pZHhfbGViczogbWluaW11bSBudW1iZXIgb2YgTEVCcyByZXF1aXJlZCBmb3IgdGhlIGluZGV4CiAgKiBAb2xkX2lkeF9zejogc2l6ZSBvZiBpbmRleCBvbiBmbGFzaAogICogQGNhbGNfaWR4X3N6OiB0ZW1wb3JhcnkgdmFyaWFibGUgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgbmV3IGluZGV4IHNpemUKICAqICAgICAgICAgICAgICAgKGNvbnRhaW5zIGFjY3VyYXRlIG5ldyBpbmRleCBzaXplIGF0IGVuZCBvZiBUTkMgY29tbWl0IHN0YXJ0KQogICogQGxzdDogbHByb3BzIHN0YXRpc3RpY3MKKyAqIEBub3NwYWNlOiBub24temVybyBpZiB0aGUgZmlsZS1zeXN0ZW0gZG9lcyBub3QgaGF2ZSBmbGFzaCBzcGFjZSAodXNlZCBhcworICogICAgICAgICAgIG9wdGltaXphdGlvbikKKyAqIEBub3NwYWNlX3JwOiB0aGUgc2FtZSBhcyBAbm9zcGFjZSwgYnV0IGFkZGl0aW9uYWxseSBtZWFucyB0aGF0IGV2ZW4gcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICBwb29sIGlzIGZ1bGwKICAqCiAgKiBAcGFnZV9idWRnZXQ6IGJ1ZGdldCBmb3IgYSBwYWdlCiAgKiBAaW5vZGVfYnVkZ2V0OiBidWRnZXQgZm9yIGFuIGlub2RlCkBAIC0xMDYxLDYgKzExMDEsNyBAQAogICogQGxwdF9kcnR5X2ZsZ3M6IGRpcnR5IGZsYWdzIGZvciBMUFQgc3BlY2lhbCBub2RlcyBlLmcuIGx0YWIKICAqIEBkaXJ0eV9ubl9jbnQ6IG51bWJlciBvZiBkaXJ0eSBubm9kZXMKICAqIEBkaXJ0eV9wbl9jbnQ6IG51bWJlciBvZiBkaXJ0eSBwbm9kZXMKKyAqIEBjaGVja19scHRfZnJlZTogZmxhZyB0aGF0IGluZGljYXRlcyBMUFQgR0MgbWF5IGJlIG5lZWRlZAogICogQGxwdF9zejogTFBUIHNpemUKICAqIEBscHRfbm9kX2J1ZjogYnVmZmVyIGZvciBhbiBvbi1mbGFzaCBubm9kZSBvciBwbm9kZQogICogQGxwdF9idWY6IGJ1ZmZlciBvZiBMRUIgc2l6ZSB1c2VkIGJ5IExQVApAQCAtMTEwMiw2ICsxMTQzLDcgQEAKICAqIEByY3ZyZF9tc3Rfbm9kZTogcmVjb3ZlcmVkIG1hc3RlciBub2RlIHRvIHdyaXRlIHdoZW4gbW91bnRpbmcgcm8gdG8gcncKICAqIEBzaXplX3RyZWU6IGlub2RlIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlY292ZXJ5CiAgKiBAcmVtb3VudGluZ19ydzogc2V0IHdoaWxlIHJlbW91bnRpbmcgZnJvbSBybyB0byBydyAoc2IgZmxhZ3MgaGF2ZSBNU19SRE9OTFkpCisgKiBAYWx3YXlzX2Noa19jcmM6IGFsd2F5cyBjaGVjayBDUkNzICh3aGlsZSBtb3VudGluZyBhbmQgcmVtb3VudGluZyBydykKICAqIEBtb3VudF9vcHRzOiBVQklGUy1zcGVjaWZpYyBtb3VudCBvcHRpb25zCiAgKgogICogQGRiZ19idWY6IGEgYnVmZmVyIG9mIExFQiBzaXplIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwpAQCAtMTE0NiwxMSArMTE4OCwxMSBAQAogCWludCBjbXRfc3RhdGU7CiAJc3BpbmxvY2tfdCBjc19sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IGNtdF93cTsKKwogCXVuc2lnbmVkIGludCBmYXN0X3VubW91bnQ6MTsKIAl1bnNpZ25lZCBpbnQgYmlnX2xwdDoxOwotCXVuc2lnbmVkIGludCBjaGVja19scHRfZnJlZToxOwotCXVuc2lnbmVkIGludCBub3NwYWNlOjE7Ci0JdW5zaWduZWQgaW50IG5vc3BhY2VfcnA6MTsKKwl1bnNpZ25lZCBpbnQgbm9fY2hrX2RhdGFfY3JjOjE7CisJdW5zaWduZWQgaW50IGJ1bGtfcmVhZDoxOwogCiAJc3RydWN0IG11dGV4IHRuY19tdXRleDsKIAlzdHJ1Y3QgdWJpZnNfemJyYW5jaCB6cm9vdDsKQEAgLTExNzUsNiArMTIxNyw3IEBACiAJc3RydWN0IHViaWZzX21zdF9ub2RlICptc3Rfbm9kZTsKIAlpbnQgbXN0X29mZnM7CiAJc3RydWN0IG11dGV4IG1zdF9tdXRleDsKKwlpbnQgYnVsa19yZWFkX2J1Zl9zaXplOwogCiAJaW50IGxvZ19sZWJzOwogCWxvbmcgbG9uZyBsb2dfYnl0ZXM7CkBAIC0xMjE4LDYgKzEyNjEsOCBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBvbGRfaWR4X3N6OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxjX2lkeF9zejsKIAlzdHJ1Y3QgdWJpZnNfbHBfc3RhdHMgbHN0OworCXVuc2lnbmVkIGludCBub3NwYWNlOjE7CisJdW5zaWduZWQgaW50IG5vc3BhY2VfcnA6MTsKIAogCWludCBwYWdlX2J1ZGdldDsKIAlpbnQgaW5vZGVfYnVkZ2V0OwpAQCAtMTI5NCw2ICsxMzM5LDcgQEAKIAlpbnQgbHB0X2RydHlfZmxnczsKIAlpbnQgZGlydHlfbm5fY250OwogCWludCBkaXJ0eV9wbl9jbnQ7CisJaW50IGNoZWNrX2xwdF9mcmVlOwogCWxvbmcgbG9uZyBscHRfc3o7CiAJdm9pZCAqbHB0X25vZF9idWY7CiAJdm9pZCAqbHB0X2J1ZjsKQEAgLTEzMzUsNiArMTM4MSw3IEBACiAJc3RydWN0IHViaWZzX21zdF9ub2RlICpyY3ZyZF9tc3Rfbm9kZTsKIAlzdHJ1Y3QgcmJfcm9vdCBzaXplX3RyZWU7CiAJaW50IHJlbW91bnRpbmdfcnc7CisJaW50IGFsd2F5c19jaGtfY3JjOwogCXN0cnVjdCB1Ymlmc19tb3VudF9vcHRzIG1vdW50X29wdHM7CiAKICNpZmRlZiBDT05GSUdfVUJJRlNfRlNfREVCVUcKQEAgLTEzNDcsNiArMTM5NCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmFpbF90aW1lb3V0OwogCXVuc2lnbmVkIGludCBmYWlsX2NudDsKIAl1bnNpZ25lZCBpbnQgZmFpbF9jbnRfbWF4OworCWxvbmcgbG9uZyBjaGtfbHB0X3N6OworCWxvbmcgbG9uZyBjaGtfbHB0X3N6MjsKKwlsb25nIGxvbmcgY2hrX2xwdF93YXN0YWdlOworCWludCBjaGtfbHB0X2xlYnM7CisJaW50IG5ld19uaGVhZF9sbnVtOworCWludCBuZXdfbmhlYWRfb2ZmczsKICNlbmRpZgogfTsKIApAQCAtMTM3Nyw3ICsxNDMwLDcgQEAKIGludCB1Ymlmc193cml0ZV9ub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB2b2lkICpub2RlLCBpbnQgbGVuLCBpbnQgbG51bSwKIAkJICAgICBpbnQgb2ZmcywgaW50IGR0eXBlKTsKIGludCB1Ymlmc19jaGVja19ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpidWYsIGludCBsbnVtLAotCQkgICAgIGludCBvZmZzLCBpbnQgcXVpZXQpOworCQkgICAgIGludCBvZmZzLCBpbnQgcXVpZXQsIGludCBjaGtfY3JjKTsKIHZvaWQgdWJpZnNfcHJlcGFyZV9ub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB2b2lkICpidWYsIGludCBsZW4sIGludCBwYWQpOwogdm9pZCB1Ymlmc19wcmVwX2dycF9ub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB2b2lkICpub2RlLCBpbnQgbGVuLCBpbnQgbGFzdCk7CiBpbnQgdWJpZnNfaW9faW5pdChzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CkBAIC0xNDkwLDYgKzE1NDMsOCBAQAogaW50IGlzX2lkeF9ub2RlX2luX3RuYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdW5pb24gdWJpZnNfa2V5ICprZXksIGludCBsZXZlbCwKIAkJICAgICAgIGludCBsbnVtLCBpbnQgb2Zmcyk7CiBpbnQgaW5zZXJ0X29sZF9pZHhfem5vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc196bm9kZSAqem5vZGUpOworaW50IHViaWZzX3RuY19nZXRfYnVfa2V5cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IGJ1X2luZm8gKmJ1KTsKK2ludCB1Ymlmc190bmNfYnVsa19yZWFkKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgYnVfaW5mbyAqYnUpOwogCiAvKiB0bmNfbWlzYy5jICovCiBzdHJ1Y3QgdWJpZnNfem5vZGUgKnViaWZzX3RuY19sZXZlbG9yZGVyX25leHQoc3RydWN0IHViaWZzX3pub2RlICp6ciwKQEAgLTE1ODYsMTIgKzE2NDEsMTAgQEAKIHZvaWQgdWJpZnNfbHB0X2ZyZWUoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCB3cl9vbmx5KTsKIAogLyogbHByb3BzLmMgKi8KLXZvaWQgdWJpZnNfZ2V0X2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiBjb25zdCBzdHJ1Y3QgdWJpZnNfbHByb3BzICp1Ymlmc19jaGFuZ2VfbHAoc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwLAogCQkJCQkgICBpbnQgZnJlZSwgaW50IGRpcnR5LCBpbnQgZmxhZ3MsCiAJCQkJCSAgIGludCBpZHhfZ2NfY250KTsKLXZvaWQgdWJpZnNfcmVsZWFzZV9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpOwogdm9pZCB1Ymlmc19nZXRfbHBfc3RhdHMoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc19scF9zdGF0cyAqc3RhdHMpOwogdm9pZCB1Ymlmc19hZGRfdG9fY2F0KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfbHByb3BzICpscHJvcHMsCiAJCSAgICAgIGludCBjYXQpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMveGF0dHIuYyBiL2ZzL3ViaWZzL3hhdHRyLmMKaW5kZXggNjQ5YmVjNy4uY2ZkMzFlMiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMveGF0dHIuYworKysgYi9mcy91Ymlmcy94YXR0ci5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAkJaW50IHR5cGU7CiAKIAkJeGVudCA9IHViaWZzX3RuY19uZXh0X2VudChjLCAma2V5LCAmbm0pOwotCQlpZiAodW5saWtlbHkoSVNfRVJSKHhlbnQpKSkgeworCQlpZiAoSVNfRVJSKHhlbnQpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHhlbnQpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaAppbmRleCA3ZWZlMTAwLi5jZWU5N2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oCkBAIC04OCw2ICs4OCw3IEBACiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJOQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNgkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxNworI2RlZmluZSBUSUZfRlJFRVpFCQkxOAkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCkBAIC05NSw2ICs5Niw3IEBACiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDBGRkZGCS8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaWRlLmggYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKaW5kZXggN2ViY2M1Ni4uMzYxMDc2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pZGUuaApAQCAtMTgsMTUgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIHNvbWUgYml0cyBuZWVkZWQgZm9yIHBhcnRzIG9mIHRoZSBJREUgc3Vic3lzdGVtIHRvIGNvbXBpbGUKLSAqLwotI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsIGFkZHIsIG4pCWluc3coKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgYWRkciwgbikKLSNkZWZpbmUgX19pZGVfbW1faW5zbChwb3J0LCBhZGRyLCBuKQlpbnNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0jZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pCW91dHN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0jZGVmaW5lIF9faWRlX21tX291dHNsKHBvcnQsIGFkZHIsIG4pCW91dHNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IDBmNmRhYmQuLjEyYzA3YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBfX1dBUk4oKSB3YXJuX29uX3Nsb3dwYXRoKF9fRklMRV9fLCBfX0xJTkVfXykKICNkZWZpbmUgX19XQVJOX3ByaW50ZihhcmcuLi4pIHdhcm5fc2xvd3BhdGgoX19GSUxFX18sIF9fTElORV9fLCBhcmcpCiAjZWxzZQotI2RlZmluZSBfX1dBUk5fcHJpbnRmKGFyZy4uLikgX19XQVJOKCkKKyNkZWZpbmUgX19XQVJOX3ByaW50ZihhcmcuLi4pIGRvIHsgcHJpbnRrKGFyZyk7IF9fV0FSTigpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZm5kZWYgV0FSTl9PTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKaW5kZXggNzFlZjNmMC4uODkwNjFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3J0Yy5oCkBAIC04NCwxMiArODQsMTIgQEAKIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKIAl7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1fc2VjKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9taW4pOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX2hvdXIpOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX21kYXkpOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX21vbik7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1feWVhcik7CisJCXRpbWUtPnRtX3NlYyA9IGJjZDJiaW4odGltZS0+dG1fc2VjKTsKKwkJdGltZS0+dG1fbWluID0gYmNkMmJpbih0aW1lLT50bV9taW4pOworCQl0aW1lLT50bV9ob3VyID0gYmNkMmJpbih0aW1lLT50bV9ob3VyKTsKKwkJdGltZS0+dG1fbWRheSA9IGJjZDJiaW4odGltZS0+dG1fbWRheSk7CisJCXRpbWUtPnRtX21vbiA9IGJjZDJiaW4odGltZS0+dG1fbW9uKTsKKwkJdGltZS0+dG1feWVhciA9IGJjZDJiaW4odGltZS0+dG1feWVhcik7CiAJfQogCiAjaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgpAQCAtMTU5LDEyICsxNTksMTIgQEAKIAogCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKQogCSAgICB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCUJJTl9UT19CQ0QobWluKTsKLQkJQklOX1RPX0JDRChocnMpOwotCQlCSU5fVE9fQkNEKGRheSk7Ci0JCUJJTl9UT19CQ0QobW9uKTsKLQkJQklOX1RPX0JDRCh5cnMpOworCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJaHJzID0gYmluMmJjZChocnMpOworCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJeXJzID0gYmluMmJjZCh5cnMpOwogCX0KIAogCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggNzRjNWZhZi4uODA3NDQ2MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTM3LDYgKzM3LDEzIEBACiAjZGVmaW5lIE1FTV9ESVNDQVJEKHNlYykgKigubWVtIyNzZWMpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAorI2RlZmluZSBNQ09VTlRfUkVDKCkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9tY291bnRfbG9jKSA9IC47IFwKKwkJCSooX19tY291bnRfbG9jKQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfbWNvdW50X2xvYykgPSAuOworI2Vsc2UKKyNkZWZpbmUgTUNPVU5UX1JFQygpCisjZW5kaWYKIAogLyogLmRhdGEgc2VjdGlvbiAqLwogI2RlZmluZSBEQVRBX0RBVEEJCQkJCQkJXApAQCAtNTIsNyArNTksMTAgQEAKIAkuID0gQUxJR04oOCk7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fbWFya2VycykgPSAuOwkJCQlcCiAJKihfX21hcmtlcnMpCQkJCQkJCVwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19tYXJrZXJzKSA9IC47CisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fbWFya2VycykgPSAuOwkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCSooX190cmFjZXBvaW50cykJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHMpID0gLjsKIAogI2RlZmluZSBST19EQVRBKGFsaWduKQkJCQkJCQlcCiAJLiA9IEFMSUdOKChhbGlnbikpOwkJCQkJCVwKQEAgLTYxLDYgKzcxLDcgQEAKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKIAkJKihfX3Zlcm1hZ2ljKQkJLyogS2VybmVsIHZlcnNpb24gbWFnaWMgKi8JXAogCQkqKF9fbWFya2Vyc19zdHJpbmdzKQkvKiBNYXJrZXJzOiBzdHJpbmdzICovCQlcCisJCSooX190cmFjZXBvaW50c19zdHJpbmdzKS8qIFRyYWNlcG9pbnRzOiBzdHJpbmdzICovCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLnJvZGF0YTEgICAgICAgICAgOiBBVChBRERSKC5yb2RhdGExKSAtIExPQURfT0ZGU0VUKSB7CQlcCkBAIC0xODgsNiArMTk5LDcgQEAKIAkvKiBfXyppbml0IHNlY3Rpb25zICovCQkJCQkJXAogCV9faW5pdF9yb2RhdGEgOiBBVChBRERSKF9faW5pdF9yb2RhdGEpIC0gTE9BRF9PRkZTRVQpIHsJCVwKIAkJKigucmVmLnJvZGF0YSkJCQkJCQlcCisJCU1DT1VOVF9SRUMoKQkJCQkJCVwKIAkJREVWX0tFRVAoaW5pdC5yb2RhdGEpCQkJCQlcCiAJCURFVl9LRUVQKGV4aXQucm9kYXRhKQkJCQkJXAogCQlDUFVfS0VFUChpbml0LnJvZGF0YSkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaWRlLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCmluZGV4IDFkYWY2Y2IuLmI5OTZhM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaApAQCAtOTIsMTUgKzkyLDYgQEAKICNkZWZpbmUgb3V0c3dfc3dhcHcocG9ydCwgYWRkciwgbikJcmF3X291dHN3X3N3YXB3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQogI2VuZGlmCiAKLQotLyogUTQwIGFuZCBBdGFyaSBoYXZlIGJ5dGVzd2FwcGVkIElERSBidXNzZXMgYW5kIHNpbmNlIG1hbnkgaW50ZXJlc3RpbmcKLSAqIHZhbHVlcyBpbiB0aGUgaWRlbnRpZmljYXRpb24gc3RyaW5nIGFyZSB0ZXh0LCBjaGFycyBhbmQgd29yZHMgdGhleQotICogaGFwcGVuZWQgdG8gYmUgYWxtb3N0IGNvcnJlY3Qgd2l0aG91dCBzd2FwcGluZy4uIEhvd2V2ZXIgKl9jYXBhY2l0eQotICogaXMgbmVlZGVkIGZvciBkcml2ZXMgb3ZlciA4IEdCLiBSWiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1E0MCkgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpCi0jZGVmaW5lIE02OEtfSURFX1NXQVBXICAoTUFDSF9JU19RNDAgfHwgTUFDSF9JU19BVEFSSSkKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERQogI2RlZmluZSBJREVfQVJDSF9MT0NLCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaAppbmRleCBhYmMwMDI3Li5hZjBmZGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCkBAIC01Miw1ICs1Miw2IEBACiAjZGVmaW5lIFRJRl9ERUxBWUVEX1RSQUNFCTE0CS8qIHNpbmdsZSBzdGVwIGEgc3lzY2FsbCAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkxNQkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxNgorI2RlZmluZSBUSUZfRlJFRVpFCQkxNwkvKiB0aHJlYWQgaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2VuZGlmCS8qIF9BU01fTTY4S19USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAppbmRleCBlMDdlNzI4Li42MjI3NGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKQEAgLTY5LDYgKzY5LDcgQEAKICNkZWZpbmUgVElGX01FTURJRQkgCTUKICNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNgogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTcKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCkBAIC03Nyw1ICs3OCw2IEBACiAjZGVmaW5lIF9USUZfTUVNRElFCQkoMSA8PCBUSUZfTUVNRElFKQogI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDEgPDwgVElGX1NZU0NBTExfQVVESVQpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvYXBpYy5oCmluZGV4IGQ3NmEwODMuLmVmMWQ3MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2FwaWMuaApAQCAtNDAsOCArNDAsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKIGV4dGVybiBpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKIAotZXh0ZXJuIGludCBpb2FwaWNfZm9yY2U7Ci0KIGV4dGVybiBpbnQgZGlzYWJsZV9hcGljOwogLyoKICAqIEJhc2ljIGZ1bmN0aW9ucyBhY2Nlc3NpbmcgQVBJQ3MuCkBAIC0xMDAsNiArOTgsMjAgQEAKIGV4dGVybiB2b2lkIGVuYWJsZV94MmFwaWModm9pZCk7CiBleHRlcm4gdm9pZCBlbmFibGVfSVJfeDJhcGljKHZvaWQpOwogZXh0ZXJuIHZvaWQgeDJhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpOworc3RhdGljIGlubGluZSBpbnQgeDJhcGljX2VuYWJsZWQodm9pZCkKK3sKKwlpbnQgbXNyLCBtc3IyOworCisJaWYgKCFjcHVfaGFzX3gyYXBpYykKKwkJcmV0dXJuIDA7CisKKwlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKKwlpZiAobXNyICYgWDJBUElDX0VOQUJMRSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB4MmFwaWNfZW5hYmxlZCgpCTAKICNlbmRpZgogCiBzdHJ1Y3QgYXBpY19vcHMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvYmlnc21wL2FwaWMuaAppbmRleCAwYTljZDdjLi4xZDk1NDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYmlnc21wL2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYmlnc21wL2FwaWMuaApAQCAtOSwyMiArOSwxNyBAQAogCXJldHVybiAoMSk7CiB9CiAKLS8qIFJvdW5kIHJvYmluIHRoZSBpcnFzIGFtb3VuZyB0aGUgb25saW5lIGNwdXMgKi8KIHN0YXRpYyBpbmxpbmUgY3B1bWFza190IHRhcmdldF9jcHVzKHZvaWQpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1ID0gTlJfQ1BVUzsKLQlkbyB7Ci0JCWlmIChjcHUgPj0gTlJfQ1BVUykKLQkJCWNwdSA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7Ci0JCWVsc2UKLQkJCWNwdSA9IG5leHRfY3B1KGNwdSwgY3B1X29ubGluZV9tYXApOwotCX0gd2hpbGUgKGNwdSA+PSBOUl9DUFVTKTsKLQlyZXR1cm4gY3B1bWFza19vZl9jcHUoY3B1KTsKKyNpZmRlZiBDT05GSUdfU01QCisgICAgICAgIHJldHVybiBjcHVfb25saW5lX21hcDsKKyNlbHNlCisgICAgICAgIHJldHVybiBjcHVtYXNrX29mX2NwdSgwKTsKKyNlbmRpZgogfQogCiAjdW5kZWYgQVBJQ19ERVNUX0xPR0lDQUwKICNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwJMAotI2RlZmluZSBUQVJHRVRfQ1BVUwkJKHRhcmdldF9jcHVzKCkpCiAjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfRkxBVCkKICNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUJKGRlc3RfRml4ZWQpCiAjZGVmaW5lIElOVF9ERVNUX01PREUJCSgwKSAgICAvKiBwaHlzIGRlbGl2ZXJ5IHRvIHRhcmdldCBwcm9jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZWZpLmggYi9pbmNsdWRlL2FzbS14ODYvZWZpLmgKaW5kZXggZWQyZGUyMi4uMzEzNDM4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2VmaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaApAQCAtOTQsNCArOTQsMTcgQEAKIGV4dGVybiB2b2lkIGVmaV9jYWxsX3BoeXNfcHJlbG9nKHZvaWQpOwogZXh0ZXJuIHZvaWQgZWZpX2NhbGxfcGh5c19lcGlsb2codm9pZCk7CiAKKyNpZm5kZWYgQ09ORklHX0VGSQorLyoKKyAqIElGIEVGSSBpcyBub3QgY29uZmlndXJlZCwgaGF2ZSB0aGUgRUZJIGNhbGxzIHJldHVybiAtRU5PU1lTLgorICovCisjZGVmaW5lIGVmaV9jYWxsMChfZikJCQkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDEoX2YsIF9hMSkJCQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsMihfZiwgX2ExLCBfYTIpCQkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDMoX2YsIF9hMSwgX2EyLCBfYTMpCQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsNChfZiwgX2ExLCBfYTIsIF9hMywgX2E0KQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsNShfZiwgX2ExLCBfYTIsIF9hMywgX2E0LCBfYTUpCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGw2KF9mLCBfYTEsIF9hMiwgX2EzLCBfYTQsIF9hNSwgX2E2KQkoLUVOT1NZUykKKyNlbmRpZiAvKiBDT05GSUdfRUZJICovCisKICNlbmRpZiAvKiBBU01fWDg2X19FRklfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VzNzAwMC9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAppbmRleCBhYWU1MGMyLi4zODBmMGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaApAQCAtMTcsNyArMTcsNiBAQAogCXJldHVybiBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmCiB9Ci0jZGVmaW5lIFRBUkdFVF9DUFVTCSh0YXJnZXRfY3B1cygpKQogCiAjaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCiAjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfQ0xVU1RFUikKQEAgLTgxLDcgKzgwLDcgQEAKIAlpbnQgYXBpYyA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzLCB0YXJnZXQgY3B1cyAlbHhcbiIsCiAJCShhcGljX3ZlcnNpb25bYXBpY10gPT0gMHgxNCkgPwotCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwgbnJfaW9hcGljcywgY3B1c19hZGRyKFRBUkdFVF9DUFVTKVswXSk7CisJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLCBucl9pb2FwaWNzLCBjcHVzX2FkZHIodGFyZ2V0X2NwdXMoKSlbMF0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaAppbmRleCBiZTBlMDA0Li4xYmI2ZjliYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9mdHJhY2UuaApAQCAtNyw2ICs3LDE2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdm9pZCBtY291bnQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKQoreworCS8qCisJICogY2FsbCBtY291bnQgaXMgImU4IDw0IGJ5dGUgb2Zmc2V0PiIKKwkgKiBUaGUgYWRkciBwb2ludHMgdG8gdGhlIDQgYnl0ZSBvZmZzZXQgYW5kIHRoZSBjYWxsZXIgb2YgdGhpcworCSAqIGZ1bmN0aW9uIHdhbnRzIHRoZSBwb2ludGVyIHRvIGU4LiBTaW1wbHkgc3VidHJhY3Qgb25lLgorCSAqLworCXJldHVybiBhZGRyIC0gMTsKK30KICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzMyLmgKaW5kZXggMzQyODBmMC4uNmZlNGY4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oCkBAIC01Nyw2ICs1Nyw3IEBACiAJdW5zaWduZWQgKCpnZXRfYXBpY19pZCkodW5zaWduZWQgbG9uZyB4KTsKIAl1bnNpZ25lZCBsb25nIGFwaWNfaWRfbWFzazsKIAl1bnNpZ25lZCBpbnQgKCpjcHVfbWFza190b19hcGljaWQpKGNwdW1hc2tfdCBjcHVtYXNrKTsKKwljcHVtYXNrX3QgKCp2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pKGludCBjcHUpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGlwaSAqLwpAQCAtMTA0LDYgKzEwNSw3IEBACiAJQVBJQ0ZVTkMoZ2V0X2FwaWNfaWQpCQkJCVwKIAkuYXBpY19pZF9tYXNrID0gQVBJQ19JRF9NQVNLLAkJCVwKIAlBUElDRlVOQyhjcHVfbWFza190b19hcGljaWQpCQkJXAorCUFQSUNGVU5DKHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikJCQlcCiAJQVBJQ0ZVTkMoYWNwaV9tYWR0X29lbV9jaGVjaykJCQlcCiAJSVBJRlVOQyhzZW5kX0lQSV9tYXNrKQkJCQlcCiAJSVBJRlVOQyhzZW5kX0lQSV9hbGxidXRzZWxmKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmggYi9pbmNsdWRlL2FzbS14ODYvaHBldC5oCmluZGV4IGNiYmJiNmQuLjU4YjI3M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2hwZXQuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgQVNNX1g4Nl9fSFBFVF9ICiAjZGVmaW5lIEFTTV9YODZfX0hQRVRfSAogCisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisKICNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgogCiAjZGVmaW5lIEhQRVRfTU1BUF9TSVpFCQkxMDI0CkBAIC0xMCw2ICsxMiwxMSBAQAogI2RlZmluZSBIUEVUX0NGRwkJMHgwMTAKICNkZWZpbmUgSFBFVF9TVEFUVVMJCTB4MDIwCiAjZGVmaW5lIEhQRVRfQ09VTlRFUgkJMHgwZjAKKworI2RlZmluZSBIUEVUX1RuX0NGRyhuKQkJKDB4MTAwICsgMHgyMCAqIG4pCisjZGVmaW5lIEhQRVRfVG5fQ01QKG4pCQkoMHgxMDggKyAweDIwICogbikKKyNkZWZpbmUgSFBFVF9Ubl9ST1VURShuKQkoMHgxMTAgKyAweDIwICogbikKKwogI2RlZmluZSBIUEVUX1QwX0NGRwkJMHgxMDAKICNkZWZpbmUgSFBFVF9UMF9DTVAJCTB4MTA4CiAjZGVmaW5lIEhQRVRfVDBfUk9VVEUJCTB4MTEwCkBAIC02NSw2ICs3MiwyMCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF9yZWFkbCh1bnNpZ25lZCBsb25nIGEpOwogZXh0ZXJuIHZvaWQgZm9yY2VfaHBldF9yZXN1bWUodm9pZCk7CiAKK2V4dGVybiB2b2lkIGhwZXRfbXNpX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGhwZXRfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBocGV0X21zaV93cml0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKK2V4dGVybiB2b2lkIGhwZXRfbXNpX3JlYWQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorZXh0ZXJuIGludCBhcmNoX3NldHVwX2hwZXRfbXNpKHVuc2lnbmVkIGludCBpcnEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2h3X2lycS5oIGIvaW5jbHVkZS9hc20teDg2L2h3X2lycS5oCmluZGV4IDUwZjZlMDMuLjc0OWQwNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaHdfaXJxLmgKQEAgLTk2LDEzICs5Niw4IEBACiAKIC8qIFNNUCAqLwogZXh0ZXJuIHZvaWQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiB2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotI2Vsc2UKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgc21wX3NwdXJpb3VzX2ludGVycnVwdCh2b2lkKTsKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdCh2b2lkKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfU01QCiBleHRlcm4gdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7CkBAIC0xMTUsMTMgKzExMCwxMyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi1leHRlcm4gdm9pZCAoKmNvbnN0IGludGVycnVwdFtOUl9JUlFTXSkodm9pZCk7Ci0jZWxzZQotdHlwZWRlZiBpbnQgdmVjdG9yX2lycV90W05SX1ZFQ1RPUlNdOwotREVDTEFSRV9QRVJfQ1BVKHZlY3Rvcl9pcnFfdCwgdmVjdG9yX2lycSk7CitleHRlcm4gdm9pZCAoKmNvbnN0IGludGVycnVwdFtOUl9WRUNUT1JTXSkodm9pZCk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKSAmJiBkZWZpbmVkKENPTkZJR19YODZfNjQpCit0eXBlZGVmIGludCB2ZWN0b3JfaXJxX3RbTlJfVkVDVE9SU107CitERUNMQVJFX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogZXh0ZXJuIHZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIHVubG9ja192ZWN0b3JfbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvaW9fYXBpYy5oCmluZGV4IDhlYzY4YTUuLmQzNWNiZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgogCiAvKgogICogSW50ZWwgSU8tQVBJQyBzdXBwb3J0IGZvciBTTVAgYW5kIFVQIHN5c3RlbXMuCkBAIC04NywyNCArODgsOCBAQAogCQltYXNrCQk6ICAxLAkvKiAwOiBlbmFibGVkLCAxOiBkaXNhYmxlZCAqLwogCQlfX3Jlc2VydmVkXzIJOiAxNTsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlfX3UzMglfX3Jlc2VydmVkXzEJOiAyNCwKLQkJCQlwaHlzaWNhbF9kZXN0CTogIDQsCi0JCQkJX19yZXNlcnZlZF8yCTogIDQ7Ci0JCX0gcGh5c2ljYWw7Ci0KLQkJc3RydWN0IHsKLQkJCV9fdTMyCV9fcmVzZXJ2ZWRfMQk6IDI0LAotCQkJCWxvZ2ljYWxfZGVzdAk6ICA4OwotCQl9IGxvZ2ljYWw7Ci0JfSBkZXN0OwotI2Vsc2UKIAlfX3UzMglfX3Jlc2VydmVkXzMJOiAyNCwKIAkJZGVzdAkJOiAgODsKLSNlbmRpZgotCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgewpAQCAtMjAzLDEwICsxODgsMTcgQEAKIGV4dGVybiB2b2lkIHJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoaW50KTsKICNlbmRpZgogCitleHRlcm4gaW50IHByb2JlX25yX2lycXModm9pZCk7CisKICNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCiAjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIDAKIHN0YXRpYyBjb25zdCBpbnQgdGltZXJfdGhyb3VnaF84MjU5ID0gMDsKIHN0YXRpYyBpbmxpbmUgdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKSB7IH0KKworc3RhdGljIGlubGluZSBpbnQgcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCXJldHVybiBOUl9JUlFTOworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBBU01fWDg2X19JT19BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFfdmVjdG9ycy5oIGIvaW5jbHVkZS9hc20teDg2L2lycV92ZWN0b3JzLmgKaW5kZXggYzVkMmQ3Ni4uYThkMDY1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lycV92ZWN0b3JzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lycV92ZWN0b3JzLmgKQEAgLTE5LDE5ICsxOSwxNCBAQAogCiAvKgogICogUmVzZXJ2ZSB0aGUgbG93ZXN0IHVzYWJsZSBwcmlvcml0eSBsZXZlbCAweDIwIC0gMHgyZiBmb3IgdHJpZ2dlcmluZwotICogY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uIG9uIDY0IGJpdC4KKyAqIGNsZWFudXAgYWZ0ZXIgaXJxIG1pZ3JhdGlvbi4KICAqLwogI2RlZmluZSBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUglGSVJTVF9FWFRFUk5BTF9WRUNUT1IKIAogLyoKLSAqIFZlY3RvcnMgMHgyMC0weDJmIGFyZSB1c2VkIGZvciBJU0EgaW50ZXJydXB0cyBvbiAzMiBiaXQuCi0gKiBWZWN0b3JzIDB4MzAtMHgzZiBhcmUgdXNlZCBmb3IgSVNBIGludGVycnVwdHMgb24gNjQgYml0LgorICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgogICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBJUlEwX1ZFQ1RPUgkJKEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUikKLSNlbHNlCiAjZGVmaW5lIElSUTBfVkVDVE9SCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgMHgxMCkKLSNlbmRpZgogI2RlZmluZSBJUlExX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMSkKICNkZWZpbmUgSVJRMl9WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDIpCiAjZGVmaW5lIElSUTNfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAzKQpAQCAtOTYsMTEgKzkxLDcgQEAKICAqIHN0YXJ0IGF0IDB4MzEoMHg0MSkgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuIHByaW9yaXR5CiAgKiBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKICAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIEZJUlNUX0RFVklDRV9WRUNUT1IJMHgzMQotI2Vsc2UKLSMgZGVmaW5lIEZJUlNUX0RFVklDRV9WRUNUT1IJKElSUTE1X1ZFQ1RPUiArIDIpCi0jZW5kaWYKKyNkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkoSVJRMTVfVkVDVE9SICsgMikKIAogI2RlZmluZSBOUl9WRUNUT1JTCQkyNTYKIApAQCAtMTE2LDcgKzEwNyw2IEBACiAjIGVsc2UKICMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICogTUFYX0lPX0FQSUNTKSkKICMgZW5kaWYKLSMgZGVmaW5lIE5SX0lSUV9WRUNUT1JTIE5SX0lSUVMKIAogI2VsaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9WT1lBR0VSKQogCkBAIC0xMjQsMjMgKzExNCwxNSBAQAogCiAjICBkZWZpbmUgTlJfSVJRUwkJMjI0CiAKLSMgIGlmICgyMjQgPj0gMzIgKiBOUl9DUFVTKQotIyAgIGRlZmluZSBOUl9JUlFfVkVDVE9SUwlOUl9JUlFTCi0jICBlbHNlCi0jICAgZGVmaW5lIE5SX0lSUV9WRUNUT1JTCSgzMiAqIE5SX0NQVVMpCi0jICBlbmRpZgotCiAjIGVsc2UgLyogSU9fQVBJQyB8fCBQQVJBVklSVCAqLwogCiAjICBkZWZpbmUgTlJfSVJRUwkJMTYKLSMgIGRlZmluZSBOUl9JUlFfVkVDVE9SUwlOUl9JUlFTCiAKICMgZW5kaWYKIAogI2Vsc2UgLyogIVZJU1dTICYmICFWT1lBR0VSICovCiAKICMgZGVmaW5lIE5SX0lSUVMJCTIyNAotIyBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJCU5SX0lSUVMKIAogI2VuZGlmIC8qIFZJU1dTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKaW5kZXggOTI4M2I2MC4uNmIxYWRkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKQEAgLTE0LDYgKzE0LDcgQEAKIEJVSUxEX0lOVEVSUlVQVChpbnZhbGlkYXRlX2ludGVycnVwdCxJTlZBTElEQVRFX1RMQl9WRUNUT1IpCiBCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9WRUNUT1IpCiBCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0LENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCxJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUikKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKaW5kZXggMmEzMzBhNC4uM2M2NmYyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCkBAIC04NSw2ICs4NSwyMCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworICAgICAgICAvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworICAgICAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorICAgICAgICAgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKyAgICAgICAgICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisgICAgICAgICAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisgICAgICAgICAqLworICAgICAgICBjcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKyAgICAgICAgcmV0dXJuIGRvbWFpbjsKK30KICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCkBAIC0xMzgsNiArMTUyLDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCiB7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KICNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9pcnFfdmVjdG9yc19saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4NzBlMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX0lSUV9WRUNUT1JTX0xJTUlUU19ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKLQotLyoKLSAqIEZvciBTdW1taXQgb3IgZ2VuZXJpYyAoaS5lLiBpbnN0YWxsZXIpIGtlcm5lbHMsIHdlIGhhdmUgbG90cyBvZiBJL08gQVBJQ3MsCi0gKiBldmVuIHdpdGggdW5pLXByb2Mga2VybmVscywgc28gdXNlIGEgYmlnIGFycmF5LgotICoKLSAqIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHRoZSBzYW1lIGluIGJvdGggdGhlIGdlbmVyaWMgYW5kIHN1bW1pdCBzdWJhcmNoZXMuCi0gKiBDaGFuZ2Ugb25lLCBjaGFuZ2UgJ2VtIGJvdGguCi0gKi8KLSNkZWZpbmUgTlJfSVJRUwkyMjQKLSNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJMTAyNAotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19JUlFfVkVDVE9SU19MSU1JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKaW5kZXggNWQwMTBjNi4uNTA4NWI1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCiAjZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKICNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCisjZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiAoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQogI2RlZmluZSBlbmFibGVfYXBpY19tb2RlIChnZW5hcGljLT5lbmFibGVfYXBpY19tb2RlKQogI2RlZmluZSBwaHlzX3BrZ19pZCAoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpYy5oCmluZGV4IGE4MzQ0YmEuLjBiZjJhMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L251bWFxL2FwaWMuaApAQCAtMTIsOCArMTIsNiBAQAogCXJldHVybiBDUFVfTUFTS19BTEw7CiB9CiAKLSNkZWZpbmUgVEFSR0VUX0NQVVMgKHRhcmdldF9jcHVzKCkpCi0KICNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDEpCiAjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3VtbWl0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCmluZGV4IDM5NGIwMGIuLjliMzA3MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCkBAIC0yMiw3ICsyMiw2IEBACiAJICovCiAJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOwogfQotI2RlZmluZSBUQVJHRVRfQ1BVUwkodGFyZ2V0X2NwdXMoKSkKIAogI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZGVzdF9Mb3dlc3RQcmlvKQogI2RlZmluZSBJTlRfREVTVF9NT0RFIDEgICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXJxX3ZlY3RvcnNfbGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MGNlM2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAotI2RlZmluZSBfQVNNX0lSUV9WRUNUT1JTX0xJTUlUU19ICi0KLS8qCi0gKiBGb3IgU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzLCB3ZSBoYXZlIGxvdHMgb2YgSS9PIEFQSUNzLAotICogZXZlbiB3aXRoIHVuaS1wcm9jIGtlcm5lbHMsIHNvIHVzZSBhIGJpZyBhcnJheS4KLSAqCi0gKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgc2FtZSBpbiBib3RoIHRoZSBnZW5lcmljIGFuZCBzdW1taXQgc3ViYXJjaGVzLgotICogQ2hhbmdlIG9uZSwgY2hhbmdlICdlbSBib3RoLgotICovCi0jZGVmaW5lIE5SX0lSUVMJMjI0Ci0jZGVmaW5lIE5SX0lSUV9WRUNUT1JTCTEwMjQKLQotI2VuZGlmIC8qIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvYmlvcy5oCmluZGV4IDdjZDZkN2UuLjIxNWYxOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3V2L2Jpb3MuaApAQCAtMiw5ICsyLDcgQEAKICNkZWZpbmUgQVNNX1g4Nl9fVVZfX0JJT1NfSAogCiAvKgotICogQklPUyBsYXllciBkZWZpbml0aW9ucy4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBVViBCSU9TIGxheWVyIGRlZmluaXRpb25zLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSwxMSArMTcsNDMgQEAKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAotI2RlZmluZSBCSU9TX0ZSRVFfQkFTRQkJCTB4MDEwMDAwMDEKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSBCSU9TIGNhbGxzLiAgSXQgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCAqIGFyZ3VtZW50IGluIHRoZQorICogQklPUyBjYWxsLiAgUGFzc2luZyBhbnkgb3RoZXIgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgcmVzdWx0CisgKiBpbiBhIEJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQgcmV0dXJuIHN0YXR1cy4KKyAqLworZW51bSB1dl9iaW9zX2NtZCB7CisJVVZfQklPU19DT01NT04sCisJVVZfQklPU19HRVRfU05fSU5GTywKKwlVVl9CSU9TX0ZSRVFfQkFTRQorfTsKKworLyoKKyAqIFN0YXR1cyB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBhIEJJT1MgY2FsbC4KKyAqLworZW51bSB7CisJQklPU19TVEFUVVNfU1VDQ0VTUwkJPSAgMCwKKwlCSU9TX1NUQVRVU19VTklNUExFTUVOVEVECT0gLUVOT1NZUywKKwlCSU9TX1NUQVRVU19FSU5WQUwJCT0gLUVJTlZBTCwKKwlCSU9TX1NUQVRVU19VTkFWQUlMCQk9IC1FQlVTWQorfTsKKworLyoKKyAqIFRoZSBVViBzeXN0ZW0gdGFibGUgZGVzY3JpYmVzIHNwZWNpZmljIGZpcm13YXJlCisgKiBjYXBhYmlsaXRpZXMgYXZhaWxhYmxlIHRvIHRoZSBMaW51eCBrZXJuZWwgYXQgcnVudGltZS4KKyAqLworc3RydWN0IHV2X3N5c3RhYiB7CisJY2hhciBzaWduYXR1cmVbNF07CS8qIG11c3QgYmUgIlVWU1QiICovCisJdTMyIHJldmlzaW9uOwkJLyogZGlzdGluZ3Vpc2ggZGlmZmVyZW50IGZpcm13YXJlIHJldnMgKi8KKwl1NjQgZnVuY3Rpb247CQkvKiBCSU9TIHJ1bnRpbWUgY2FsbGJhY2sgZnVuY3Rpb24gcHRyICovCit9OwogCiBlbnVtIHsKIAlCSU9TX0ZSRVFfQkFTRV9QTEFURk9STSA9IDAsCkBAIC0zMSwzOCArNjEsMzQgQEAKIAlCSU9TX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSyA9IDIKIH07CiAKLSMgZGVmaW5lIEJJT1NfQ0FMTChyZXN1bHQsIGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCS8qIFhYWCAtIHRoZSByZWFsIGNhbGwgZ29lcyBoZXJlICovCQkJXAotCQlyZXN1bHQuc3RhdHVzID0gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsJCVwKLQkJaXNydi52MCA9IDA7CQkJCQkJXAotCQlpc3J2LnYxID0gMDsJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSB7Ci0JQklPU19TVEFUVVNfU1VDQ0VTUwkJPSAgMCwKLQlCSU9TX1NUQVRVU19VTklNUExFTUVOVEVECT0gLTEsCi0JQklPU19TVEFUVVNfRUlOVkFMCQk9IC0yLAotCUJJT1NfU1RBVFVTX0VSUk9SCQk9IC0zCit1bmlvbiBwYXJ0aXRpb25faW5mb191IHsKKwl1NjQJdmFsOworCXN0cnVjdCB7CisJCXU2NAlodWJfdmVyc2lvbgk6ICA4LAorCQkJcGFydGl0aW9uX2lkCTogMTYsCisJCQljb2hlcmVuY2VfaWQJOiAxNiwKKwkJCXJlZ2lvbl9zaXplCTogMjQ7CisJfTsKIH07CiAKLXN0cnVjdCB1dl9iaW9zX3JldHZhbCB7Ci0JLyoKLQkgKiBBIHplcm8gc3RhdHVzIHZhbHVlIGluZGljYXRlcyBjYWxsIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yLgotCSAqIEEgbmVnYXRpdmUgc3RhdHVzIHZhbHVlIGluZGljYXRlcyByZWFzb24gb2YgY2FsbCBmYWlsdXJlLgotCSAqIEEgcG9zaXRpdmUgc3RhdHVzIHZhbHVlIGluZGljYXRlcyBzdWNjZXNzIGJ1dCBhbgotCSAqIGluZm9ybWF0aW9uYWwgdmFsdWUgc2hvdWxkIGJlIHByaW50ZWQgKGUuZy4sICJyZWJvb3QgZm9yCi0JICogY2hhbmdlIHRvIHRha2UgZWZmZWN0IikuCi0JICovCi0JczY0IHN0YXR1czsKLQl1NjQgdjA7Ci0JdTY0IHYxOwotCXU2NCB2MjsKLX07CisvKgorICogYmlvcyBjYWxscyBoYXZlIDYgcGFyYW1ldGVycworICovCitleHRlcm4gczY0IHV2X2Jpb3NfY2FsbChlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gczY0IHV2X2Jpb3NfY2FsbF9pcnFzYXZlKGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBzNjQgdXZfYmlvc19jYWxsX3JlZW50cmFudChlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CiAKLWV4dGVybiBsb25nCi14ODZfYmlvc19mcmVxX2Jhc2UodW5zaWduZWQgbG9uZyB3aGljaCwgdW5zaWduZWQgbG9uZyAqdGlja3NfcGVyX3NlY29uZCwKLQkJICAgdW5zaWduZWQgbG9uZyAqZHJpZnRfaW5mbyk7Ci1leHRlcm4gY29uc3QgY2hhciAqeDg2X2Jpb3Nfc3RyZXJyb3IobG9uZyBzdGF0dXMpOworZXh0ZXJuIHM2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICopOworZXh0ZXJuIHM2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQsIHU2NCAqKTsKKworZXh0ZXJuIHZvaWQgdXZfYmlvc19pbml0KHZvaWQpOworCitleHRlcm4gaW50IHV2X3R5cGU7CitleHRlcm4gbG9uZyBzbl9wYXJ0aXRpb25faWQ7CitleHRlcm4gbG9uZyB1dl9jb2hlcmVuY3lfaWQ7CitleHRlcm4gbG9uZyB1dl9yZWdpb25fc2l6ZTsKKyNkZWZpbmUgcGFydGl0aW9uX2NvaGVyZW5jZV9pZCgpCSh1dl9jb2hlcmVuY3lfaWQpCisKK2V4dGVybiBzdHJ1Y3Qga29iamVjdCAqc2dpX3V2X2tvYmo7CS8qIC9zeXMvZmlybXdhcmUvc2dpX3V2ICovCiAKICNlbmRpZiAvKiBBU01fWDg2X19VVl9fQklPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdXYvdXZfaXJxLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvdXZfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmNWYzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni91di91dl9pcnEuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIElSUSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBBU01fWDg2X19VVl9fVVZfSVJRX0gKKyNkZWZpbmUgQVNNX1g4Nl9fVVZfX1VWX0lSUV9ICisKKy8qIElmIGEgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0dXJlIGdldHMgZGVmaW5lZCwgZWxpbWluYXRlIHRoaXMgb25lLiAqLworc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgeworCV9fdTY0CXZlY3RvcgkJOiAgOCwKKwkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQlkZXN0X21vZGUJOiAgMSwKKwkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCXBvbGFyaXR5CTogIDEsCisJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQl0cmlnZ2VyCQk6ICAxLAorCQltYXNrCQk6ICAxLAorCQlfX3Jlc2VydmVkXzIJOiAxNSwKKwkJZGVzdAkJOiAzMjsKK307CisKK2V4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgdXZfaXJxX2NoaXA7CisKK2V4dGVybiBpbnQgYXJjaF9lbmFibGVfdXZfaXJxKGNoYXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgdXZfdGVhcmRvd25faXJxKHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKKworI2VuZGlmIC8qIEFTTV9YODZfX1VWX19VVl9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaAppbmRleCA3ZTQxMzFkLi4wZjRmZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaApAQCAtMTM0LDYgKzEzNCw3IEBACiAjZGVmaW5lIFRJRl9NRU1ESUUJCTUKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTE3CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCkBAIC0xNDIsNiArMTQzLDcgQEAKICNkZWZpbmUgX1RJRl9JUkVUCQkoMTw8VElGX0lSRVQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggMzhkM2M2Yi4uZjQ2YmE0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjZW5kaWYKICNpbmNsdWRlIDxhc20vaW9jdGwuaD4JCS8qIEZvciBfSU8qIG1hY3JvcyAqLwpAQCAtNDYsMjIgKzQ1LDYgQEAKICNkZWZpbmUgRFJNX0lPQ19XUklURQkJX0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DX1JFQURXUklURQlfSU9DX1JFQUR8X0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoSU5fTU9EVUxFKQotLyogUHJldmVudCBuYW1lIGNvbGxpc2lvbiB3aGVuIGluY2x1ZGluZyBzeXMvaW9jY29tLmggKi8KLSN1bmRlZiBpb2N0bAotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNkZWZpbmUgaW9jdGwoYSxiLGMpCQl4Zjg2aW9jdGwoYSxiLGMpCi0jZWxzZQotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNlbmRpZgkJCQkvKiBfX0ZyZWVCU0RfXyAmJiB4Zjg2aW9jdGwgKi8KLSNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQkoKG4pICYgMHhmZikKLSNkZWZpbmUgRFJNX0lPQ19WT0lECQlJT0NfVk9JRAotI2RlZmluZSBEUk1fSU9DX1JFQUQJCUlPQ19PVVQKLSNkZWZpbmUgRFJNX0lPQ19XUklURQkJSU9DX0lOCi0jZGVmaW5lIERSTV9JT0NfUkVBRFdSSVRFCUlPQ19JTk9VVAotI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VuZGlmCiAKICNkZWZpbmUgRFJNX01BSk9SICAgICAgIDIyNgogI2RlZmluZSBEUk1fTUFYX01JTk9SICAgMTUKQEAgLTQ3MSw2ICs0NTQsNyBAQAogZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHsKIAlfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwJLyoqPCBXYWl0IGZvciBzcGVjaWZpYyB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyICovCiAJX0RSTV9WQkxBTktfUkVMQVRJVkUgPSAweDEsCS8qKjwgV2FpdCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIHZibGFua3MgKi8KKwlfRFJNX1ZCTEFOS19GTElQID0gMHg4MDAwMDAwLCAgIC8qKjwgU2NoZWR1bGVkIGJ1ZmZlciBzd2FwIHNob3VsZCBmbGlwICovCiAJX0RSTV9WQkxBTktfTkVYVE9OTUlTUyA9IDB4MTAwMDAwMDAsCS8qKjwgSWYgbWlzc2VkLCB3YWl0IGZvciBuZXh0IHZibGFuayAqLwogCV9EUk1fVkJMQU5LX1NFQ09OREFSWSA9IDB4MjAwMDAwMDAsCS8qKjwgU2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAqLwogCV9EUk1fVkJMQU5LX1NJR05BTCA9IDB4NDAwMDAwMDAJLyoqPCBTZW5kIHNpZ25hbCBpbnN0ZWFkIG9mIGJsb2NraW5nICovCkBAIC01MDMsNiArNDg3LDE5IEBACiAJc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSByZXBseTsKIH07CiAKKyNkZWZpbmUgX0RSTV9QUkVfTU9ERVNFVCAxCisjZGVmaW5lIF9EUk1fUE9TVF9NT0RFU0VUIDIKKworLyoqCisgKiBEUk1fSU9DVExfTU9ERVNFVF9DVEwgaW9jdGwgYXJndW1lbnQgdHlwZQorICoKKyAqIFxzYSBkcm1Nb2Rlc2V0Q3RsKCkuCisgKi8KK3N0cnVjdCBkcm1fbW9kZXNldF9jdGwgeworCXVpbnQzMl90IGNydGM7CisJdWludDMyX3QgY21kOworfTsKKwogLyoqCiAgKiBEUk1fSU9DVExfQUdQX0VOQUJMRSBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKQEAgLTU3Myw2ICs1NzAsMzQgQEAKIAlpbnQgZHJtX2RkX21pbm9yOwogfTsKIAorLyoqIERSTV9JT0NUTF9HRU1fQ0xPU0UgaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fY2xvc2UgeworCS8qKiBIYW5kbGUgb2YgdGhlIG9iamVjdCB0byBiZSBjbG9zZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KK3N0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIGdsb2JhbCBuYW1lICovCisJdWludDMyX3QgbmFtZTsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fb3BlbiB7CisJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLworCXVpbnQzMl90IG5hbWU7CisKKwkvKiogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLworCXVpbnQ2NF90IHNpemU7Cit9OworCiAjZGVmaW5lIERSTV9JT0NUTF9CQVNFCQkJJ2QnCiAjZGVmaW5lIERSTV9JTyhucikJCQlfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCiAjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkJCV9JT1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKQEAgLTU4Nyw2ICs2MTIsMTAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DTElFTlQgICAgICAgICAgICBEUk1fSU9XUigweDA1LCBzdHJ1Y3QgZHJtX2NsaWVudCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TVEFUUyAgICAgICAgICAgICBEUk1fSU9SKCAweDA2LCBzdHJ1Y3QgZHJtX3N0YXRzKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX1ZFUlNJT04JCURSTV9JT1dSKDB4MDcsIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24pCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFU0VUX0NUTCAgICAgICAgICAgRFJNX0lPVygweDA4LCBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsKQorI2RlZmluZSBEUk1fSU9DVExfR0VNX0NMT1NFCQlEUk1fSU9XICgweDA5LCBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9GTElOSwkJRFJNX0lPV1IoMHgwYSwgc3RydWN0IGRybV9nZW1fZmxpbmspCisjZGVmaW5lIERSTV9JT0NUTF9HRU1fT1BFTgkJRFJNX0lPV1IoMHgwYiwgc3RydWN0IGRybV9nZW1fb3BlbikKIAogI2RlZmluZSBEUk1fSU9DVExfU0VUX1VOSVFVRQkJRFJNX0lPVyggMHgxMCwgc3RydWN0IGRybV91bmlxdWUpCiAjZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDCQlEUk1fSU9XKCAweDExLCBzdHJ1Y3QgZHJtX2F1dGgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMWMxYjEzZS4uNTljNzk2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAjZGVmaW5lIERSSVZFUl9ETUFfUVVFVUUgICAweDIwMAogI2RlZmluZSBEUklWRVJfRkJfRE1BICAgICAgMHg0MDAKICNkZWZpbmUgRFJJVkVSX0lSUV9WQkwyICAgIDB4ODAwCisjZGVmaW5lIERSSVZFUl9HRU0gICAgICAgICAweDEwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFxuYW1lIEJlZ2luIHRoZSBEUk0uLi4gKi8KQEAgLTM4Nyw2ICszODgsMTAgQEAKIAlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKIAlpbnQgcmVtb3ZlX2F1dGhfb25fY2xvc2U7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2NvdW50OworCS8qKiBNYXBwaW5nIG9mIG1tIG9iamVjdCBoYW5kbGVzIHRvIG9iamVjdCBwb2ludGVycy4gKi8KKwlzdHJ1Y3QgaWRyIG9iamVjdF9pZHI7CisJLyoqIExvY2sgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBhY2Nlc3MgdG8gb2JqZWN0X2lkci4gKi8KKwlzcGlubG9ja190IHRhYmxlX2xvY2s7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJdm9pZCAqZHJpdmVyX3ByaXY7CiB9OwpAQCAtNTU4LDYgKzU2Myw1NiBAQAogfTsKIAogLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBkcm1fbW0gbWVtb3J5IG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZQorICogRFJNIGZvciBpdHMgYnVmZmVyIG9iamVjdHMuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCB7CisJLyoqIFJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIG9iamVjdCAqLworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCisJLyoqIEhhbmRsZSBjb3VudCBvZiB0aGlzIG9iamVjdC4gRWFjaCBoYW5kbGUgYWxzbyBob2xkcyBhIHJlZmVyZW5jZSAqLworCXN0cnVjdCBrcmVmIGhhbmRsZWNvdW50OworCisJLyoqIFJlbGF0ZWQgZHJtIGRldmljZSAqLworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwkvKiogRmlsZSByZXByZXNlbnRpbmcgdGhlIHNobWVtIHN0b3JhZ2UgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKworCS8qKgorCSAqIFNpemUgb2YgdGhlIG9iamVjdCwgaW4gYnl0ZXMuICBJbW11dGFibGUgb3ZlciB0aGUgb2JqZWN0J3MKKwkgKiBsaWZldGltZS4KKwkgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qKgorCSAqIEdsb2JhbCBuYW1lIGZvciB0aGlzIG9iamVjdCwgc3RhcnRzIGF0IDEuIDAgbWVhbnMgdW5uYW1lZC4KKwkgKiBBY2Nlc3MgaXMgY292ZXJlZCBieSB0aGUgb2JqZWN0X25hbWVfbG9jayBpbiB0aGUgcmVsYXRlZCBkcm1fZGV2aWNlCisJICovCisJaW50IG5hbWU7CisKKwkvKioKKwkgKiBNZW1vcnkgZG9tYWlucy4gVGhlc2UgbW9uaXRvciB3aGljaCBjYWNoZXMgY29udGFpbiByZWFkL3dyaXRlIGRhdGEKKwkgKiByZWxhdGVkIHRvIHRoZSBvYmplY3QuIFdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSBzZXQgb2YgZG9tYWlucworCSAqIHRvIGFub3RoZXIsIHRoZSBkcml2ZXIgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGNhY2hlcyBhcmUgc3VpdGFibHkKKwkgKiBmbHVzaGVkIGFuZCBpbnZhbGlkYXRlZAorCSAqLworCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwl1aW50MzJfdCB3cml0ZV9kb21haW47CisKKwkvKioKKwkgKiBXaGlsZSB2YWxpZGF0aW5nIGFuIGV4ZWMgb3BlcmF0aW9uLCB0aGUKKwkgKiBuZXcgcmVhZC93cml0ZSBkb21haW4gdmFsdWVzIGFyZSBjb21wdXRlZCBoZXJlLgorCSAqIFRoZXkgd2lsbCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgYWJvdmUgdmFsdWVzCisJICogYXQgdGhlIHBvaW50IHRoYXQgYW55IGNhY2hlIGZsdXNoaW5nIG9jY3VycworCSAqLworCXVpbnQzMl90IHBlbmRpbmdfcmVhZF9kb21haW5zOworCXVpbnQzMl90IHBlbmRpbmdfd3JpdGVfZG9tYWluOworCisJdm9pZCAqZHJpdmVyX3ByaXZhdGU7Cit9OworCisvKioKICAqIERSTSBkcml2ZXIgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnQgdGhlIGNvbW1vbiBjb2RlIGZvcgogICogYSBmYW1pbHkgb2YgY2FyZHMuIFRoZXJlIHdpbGwgb25lIGRybV9kZXZpY2UgZm9yIGVhY2ggY2FyZCBwcmVzZW50CiAgKiBpbiB0aGlzIGZhbWlseQpAQCAtNTgwLDExICs2MzUsNTQgQEAKIAlpbnQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2gpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb2xkLAogCQkJCSAgICAgIGludCBuZXcpOwogCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0JaW50ICgqdmJsYW5rX3dhaXQpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLQlpbnQgKCp2Ymxhbmtfd2FpdDIpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIAlpbnQgKCpkcmlfbGlicmFyeV9uYW1lKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY2hhciAqYnVmKTsKIAogCS8qKgorCSAqIGdldF92YmxhbmtfY291bnRlciAtIGdldCByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IGNvdW50ZXIgdG8gZmV0Y2gKKwkgKgorCSAqIERyaXZlciBjYWxsYmFjayBmb3IgZmV0Y2hpbmcgYSByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBmb3IgQGNydGMuICBJZiBhIGRldmljZSBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBjb3VudGVyLCB0aGUKKwkgKiBkcml2ZXIgY2FuIHNpbXBseSByZXR1cm4gdGhlIHZhbHVlIG9mIGRybV92YmxhbmtfY291bnQgYW5kCisJICogbWFrZSB0aGUgZW5hYmxlX3ZibGFuaygpIGFuZCBkaXNhYmxlX3ZibGFuaygpIGhvb2tzIGludG8gbm8tb3BzLAorCSAqIGxlYXZpbmcgaW50ZXJydXB0cyBlbmFibGVkIGF0IGFsbCB0aW1lcy4KKwkgKgorCSAqIFdyYXBhcm91bmQgaGFuZGxpbmcgYW5kIGxvc3Mgb2YgZXZlbnRzIGR1ZSB0byBtb2Rlc2V0dGluZyBpcyBkZWFsdAorCSAqIHdpdGggaW4gdGhlIERSTSBjb3JlIGNvZGUuCisJICoKKwkgKiBSRVRVUk5TCisJICogUmF3IHZibGFuayBjb3VudGVyIHZhbHVlLgorCSAqLworCXUzMiAoKmdldF92YmxhbmtfY291bnRlcikgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKworCS8qKgorCSAqIGVuYWJsZV92YmxhbmsgLSBlbmFibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIEVuYWJsZSB2YmxhbmsgaW50ZXJydXB0cyBmb3IgQGNydGMuICBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZQorCSAqIGEgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIsIHRoaXMgcm91dGluZSBzaG91bGQgYmUgYSBuby1vcCwgc2luY2UKKwkgKiBpbnRlcnJ1cHRzIHdpbGwgaGF2ZSB0byBzdGF5IG9uIHRvIGtlZXAgdGhlIGNvdW50IGFjY3VyYXRlLgorCSAqCisJICogUkVUVVJOUworCSAqIFplcm8gb24gc3VjY2VzcywgYXBwcm9wcmlhdGUgZXJybm8gaWYgdGhlIGdpdmVuIEBjcnRjJ3MgdmJsYW5rCisJICogaW50ZXJydXB0IGNhbm5vdCBiZSBlbmFibGVkLgorCSAqLworCWludCAoKmVuYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKKwkgKiBkaXNhYmxlX3ZibGFuayAtIGRpc2FibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIERpc2FibGUgdmJsYW5rIGludGVycnVwdHMgZm9yIEBjcnRjLiAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUKKwkgKiBhIGhhcmR3YXJlIHZibGFuayBjb3VudGVyLCB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGEgbm8tb3AsIHNpbmNlCisJICogaW50ZXJydXB0cyB3aWxsIGhhdmUgdG8gc3RheSBvbiB0byBrZWVwIHRoZSBjb3VudCBhY2N1cmF0ZS4KKwkgKi8KKwl2b2lkICgqZGlzYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKIAkgKiBDYWxsZWQgYnkgXGMgZHJtX2RldmljZV9pc19hZ3AuICBUeXBpY2FsbHkgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQogCSAqIGNhcmQgaXMgcmVhbGx5IGF0dGFjaGVkIHRvIEFHUCBvciBub3QuCiAJICoKQEAgLTYwMSw3ICs2OTksNyBAQAogCiAJaXJxcmV0dXJuX3QoKmlycV9oYW5kbGVyKSAoRFJNX0lSUV9BUkdTKTsKIAl2b2lkICgqaXJxX3ByZWluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisJaW50ICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmlycV91bmluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAl2b2lkICgqcmVjbGFpbV9idWZmZXJzKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICogZmlsZV9wcml2KTsKQEAgLTYxNCw2ICs3MTIsMTggQEAKIAl2b2lkICgqc2V0X3ZlcnNpb24pIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uICpzdik7CiAKKwlpbnQgKCpwcm9jX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwl2b2lkICgqcHJvY19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKKwkvKioKKwkgKiBEcml2ZXItc3BlY2lmaWMgY29uc3RydWN0b3IgZm9yIGRybV9nZW1fb2JqZWN0cywgdG8gc2V0IHVwCisJICogb2JqLT5kcml2ZXJfcHJpdmF0ZS4KKwkgKgorCSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorCSAqLworCWludCAoKmdlbV9pbml0X29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwl2b2lkICgqZ2VtX2ZyZWVfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCiAJaW50IG1ham9yOwogCWludCBtaW5vcjsKIAlpbnQgcGF0Y2hsZXZlbDsKQEAgLTcxNCw3ICs4MjQsNiBAQAogCiAJLyoqIFxuYW1lIENvbnRleHQgc3VwcG9ydCAqLwogCS8qQHsgKi8KLQlpbnQgaXJxOwkJCS8qKjwgSW50ZXJydXB0IHVzZWQgYnkgYm9hcmQgKi8KIAlpbnQgaXJxX2VuYWJsZWQ7CQkvKio8IFRydWUgaWYgaXJxIGhhbmRsZXIgaXMgZW5hYmxlZCAqLwogCV9fdm9sYXRpbGVfXyBsb25nIGNvbnRleHRfZmxhZzsJLyoqPCBDb250ZXh0IHN3YXBwaW5nIGZsYWcgKi8KIAlfX3ZvbGF0aWxlX18gbG9uZyBpbnRlcnJ1cHRfZmxhZzsgLyoqPCBJbnRlcnJ1cHRpb24gaGFuZGxlciBmbGFnICovCkBAIC03MzAsMTMgKzgzOSwyOCBAQAogCS8qKiBcbmFtZSBWQkxBTksgSVJRIHN1cHBvcnQgKi8KIAkvKkB7ICovCiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB2YmxfcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KLQlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgdmJsX3JlY2VpdmVkMjsJCS8qKjwgbnVtYmVyIG9mIHNlY29uZGFyeSBWQkxBTksgaW50ZXJydXB0cyAqLworCS8qCisJICogQXQgbG9hZCB0aW1lLCBkaXNhYmxpbmcgdGhlIHZibGFuayBpbnRlcnJ1cHQgd29uJ3QgYmUgYWxsb3dlZCBzaW5jZQorCSAqIG9sZCBjbGllbnRzIG1heSBub3QgY2FsbCB0aGUgbW9kZXNldCBpb2N0bCBhbmQgdGhlcmVmb3JlIG1pc2JlaGF2ZS4KKwkgKiBPbmNlIHRoZSBtb2Rlc2V0IGlvY3RsICpoYXMqIGJlZW4gY2FsbGVkIHRob3VnaCwgd2UgY2FuIHNhZmVseQorCSAqIGRpc2FibGUgdGhlbSB3aGVuIHVudXNlZC4KKwkgKi8KKwlpbnQgdmJsYW5rX2Rpc2FibGVfYWxsb3dlZDsKKworCXdhaXRfcXVldWVfaGVhZF90ICp2YmxfcXVldWU7ICAgLyoqPCBWQkxBTksgd2FpdCBxdWV1ZSAqLworCWF0b21pY190ICpfdmJsYW5rX2NvdW50OyAgICAgICAgLyoqPCBudW1iZXIgb2YgVkJMQU5LIGludGVycnVwdHMgKGRyaXZlciBtdXN0IGFsbG9jIHRoZSByaWdodCBudW1iZXIgb2YgY291bnRlcnMpICovCiAJc3BpbmxvY2tfdCB2YmxfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHZibF9zaWdzOwkJLyoqPCBzaWduYWwgbGlzdCB0byBzZW5kIG9uIFZCTEFOSyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdmJsX3NpZ3MyOwkvKio8IHNpZ25hbHMgdG8gc2VuZCBvbiBzZWNvbmRhcnkgVkJMQU5LICovCi0JdW5zaWduZWQgaW50IHZibF9wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOwkvKio8IHNpZ25hbCBsaXN0IHRvIHNlbmQgb24gVkJMQU5LICovCisJYXRvbWljX3QgdmJsX3NpZ25hbF9wZW5kaW5nOyAgICAvKiBudW1iZXIgb2Ygc2lnbmFscyBwZW5kaW5nIG9uIGFsbCBjcnRjcyovCisJYXRvbWljX3QgKnZibGFua19yZWZjb3VudDsgICAgICAvKiBudW1iZXIgb2YgdXNlcnMgb2YgdmJsYW5rIGludGVycnVwdHNwZXIgY3J0YyAqLworCXUzMiAqbGFzdF92Ymxhbms7ICAgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGRldi0+dmJsX2xvY2ssIHVzZWQgKi8KKwkJCQkJLyogZm9yIHdyYXBhcm91bmQgaGFuZGxpbmcgKi8KKwlpbnQgKnZibGFua19lbmFibGVkOyAgICAgICAgICAgIC8qIHNvIHdlIGRvbid0IGNhbGwgZW5hYmxlIG1vcmUgdGhhbgorCQkJCQkgICBvbmNlIHBlciBkaXNhYmxlICovCisJaW50ICp2YmxhbmtfaW5tb2Rlc2V0OyAgICAgICAgICAvKiBEaXNwbGF5IGRyaXZlciBpcyBzZXR0aW5nIG1vZGUgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB2YmxhbmtfZGlzYWJsZV90aW1lcjsKKworCXUzMiBtYXhfdmJsYW5rX2NvdW50OyAgICAgICAgICAgLyoqPCBzaXplIG9mIHZibGFuayBjb3VudGVyIHJlZ2lzdGVyICovCiAJc3BpbmxvY2tfdCB0YXNrbGV0X2xvY2s7CS8qKjwgRm9yIGRybV9sb2NrZWRfdGFza2xldCAqLwogCXZvaWQgKCpsb2NrZWRfdGFza2xldF9mdW5jKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtNzU3LDYgKzg4MSw3IEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogI2VuZGlmCiAJc3RydWN0IGRybV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLworCWludCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KIAl2b2lkICpkZXZfcHJpdmF0ZTsJCS8qKjwgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCXN0cnVjdCBkcm1fc2lnZGF0YSBzaWdkYXRhOwkgICAvKio8IEZvciBibG9ja19hbGxfc2lnbmFscyAqLwogCXNpZ3NldF90IHNpZ21hc2s7CkBAIC03NzEsOCArODk2LDI5IEBACiAJc3BpbmxvY2tfdCBkcndfbG9jazsKIAlzdHJ1Y3QgaWRyIGRyd19pZHI7CiAJLypAfSAqLworCisJLyoqIFxuYW1lIEdFTSBpbmZvcm1hdGlvbiAqLworCS8qQHsgKi8KKwlzcGlubG9ja190IG9iamVjdF9uYW1lX2xvY2s7CisJc3RydWN0IGlkciBvYmplY3RfbmFtZV9pZHI7CisJYXRvbWljX3Qgb2JqZWN0X2NvdW50OworCWF0b21pY190IG9iamVjdF9tZW1vcnk7CisJYXRvbWljX3QgcGluX2NvdW50OworCWF0b21pY190IHBpbl9tZW1vcnk7CisJYXRvbWljX3QgZ3R0X2NvdW50OworCWF0b21pY190IGd0dF9tZW1vcnk7CisJdWludDMyX3QgZ3R0X3RvdGFsOworCXVpbnQzMl90IGludmFsaWRhdGVfZG9tYWluczsgICAgLyogZG9tYWlucyBwZW5kaW5nIGludmFsaWRhdGlvbiAqLworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7ICAgICAgICAgLyogZG9tYWlucyBwZW5kaW5nIGZsdXNoICovCisJLypAfSAqLworCiB9OwogCitzdGF0aWMgaW5saW5lIGludCBkcm1fZGV2X3RvX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBkZXYtPmlycTsKK30KKwogc3RhdGljIF9faW5saW5lX18gaW50IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgICBpbnQgZmVhdHVyZSkKIHsKQEAgLTg2Nyw2ICsxMDEzLDExIEBACiBleHRlcm4gRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSk7CiBleHRlcm4gaW50IGRybV9mcmVlX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSwgaW50IHBhZ2VzKTsKIGV4dGVybiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpOworZXh0ZXJuIERSTV9BR1BfTUVNICpkcm1fYWdwX2JpbmRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCisJCQkJICAgICAgIHVpbnQzMl90IGd0dF9vZmZzZXQsCisJCQkJICAgICAgIHVpbnQzMl90IHR5cGUpOwogZXh0ZXJuIGludCBkcm1fdW5iaW5kX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiAKIAkJCQkvKiBNaXNjLiBJT0NUTCBzdXBwb3J0IChkcm1faW9jdGwuaCkgKi8KQEAgLTkyOSw2ICsxMDgwLDkgQEAKIGV4dGVybiBpbnQgZHJtX2F1dGhtYWdpYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAorLyogQ2FjaGUgbWFuYWdlbWVudCAoZHJtX2NhY2hlLmMpICovCit2b2lkIGRybV9jbGZsdXNoX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyk7CisKIAkJCQkvKiBMb2NraW5nIElPQ1RMIHN1cHBvcnQgKGRybV9sb2NrLmgpICovCiBleHRlcm4gaW50IGRybV9sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CkBAIC05ODUsMTUgKzExMzksMjUgQEAKIGV4dGVybiBpbnQgZHJtX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpcnFyZXR1cm5fdCBkcm1faXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiBpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBkcm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAorZXh0ZXJuIGludCBkcm1fdmJsYW5rX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9jcnRjcyk7CiBleHRlcm4gaW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxwKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqdmJsX3NlcSk7Ci1leHRlcm4gdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9sb2NrZWRfdGFza2xldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHZvaWQoKmZ1bmMpKHN0cnVjdCBkcm1fZGV2aWNlICopKTsKK2V4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKy8qIE1vZGVzZXR0aW5nIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBkcm1fbG9ja2VkX3Rhc2tsZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCgqZnVuYykoc3RydWN0IGRybV9kZXZpY2UqKSk7CiAKIAkJCQkvKiBBR1AvR0FSVCBzdXBwb3J0IChkcm1fYWdwc3VwcG9ydC5oKSAqLwpAQCAtMTAyNiw2ICsxMTkwLDcgQEAKIGV4dGVybiBpbnQgZHJtX2FncF9mcmVlX21lbW9yeShEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiBleHRlcm4gaW50IGRybV9hZ3BfYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIG9mZl90IHN0YXJ0KTsKIGV4dGVybiBpbnQgZHJtX2FncF91bmJpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlKTsKK2V4dGVybiB2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIFN0dWIgc3VwcG9ydCAoZHJtX3N0dWIuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCkBAIC0xMDg4LDYgKzEyNTMsNjYgQEAKIGV4dGVybiBpbnQgZHJtX21tX3JlbW92ZV9zcGFjZV9mcm9tX3RhaWwoc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gaW50IGRybV9tbV9hZGRfc3BhY2VfdG9fdGFpbChzdHJ1Y3QgZHJtX21tICptbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAorLyogR3JhcGhpY3MgRXhlY3V0aW9uIE1hbmFnZXIgbGlicmFyeSBmdW5jdGlvbnMgKGRybV9nZW0uYykgKi8KK2ludCBkcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGRybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgc2l6ZV90IHNpemUpOwordm9pZCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWtyZWZfZ2V0KCZvYmotPnJlZmNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybjsKKworCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlKTsKK30KKworaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIGludCAqaGFuZGxlcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwlrcmVmX2dldCgmb2JqLT5oYW5kbGVjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBNdXN0IGJ1bXAgaGFuZGxlIGNvdW50IGZpcnN0IGFzIHRoaXMgbWF5IGJlIHRoZSBsYXN0CisJICogcmVmLCBpbiB3aGljaCBjYXNlIHRoZSBvYmplY3Qgd291bGQgZGlzYXBwZWFyIGJlZm9yZSB3ZQorCSAqIGNoZWNrZWQgZm9yIGEgbmFtZQorCSAqLworCWtyZWZfcHV0KCZvYmotPmhhbmRsZWNvdW50LCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkJCSAgICAgaW50IGhhbmRsZSk7CitpbnQgZHJtX2dlbV9jbG9zZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGRybV9nZW1fZmxpbmtfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKK3ZvaWQgZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKKwogZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCAxMzViZDE5Li5kYTA0MTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC04NCwxOCArODQsMTggQEAKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NjU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTY0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1NjRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDU2NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMTEzLDggKzExMywxMCBAQAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQ4MHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKLQl7MHgxMDAyLCAweDVhNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0ODB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDViNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1YjYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTEyMiwxNiArMTI0LDE2IEBACiAJezB4MTAwMiwgMHg1YjY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1YzYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVlNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTRhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTIzNyw2ICsyMzksMTAgQEAKIAl7MHgxMDAyLCAweDc4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3OTFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezAsIDAsIDB9CiAKICNkZWZpbmUgcjEyOF9QQ0lfSURTIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDA1YzY2Y2YuLmViNGIzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMTQzLDYgKzE0MywyMiBAQAogI2RlZmluZSBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUJMHgwZQogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfU1dBUAkweDBmCiAjZGVmaW5lIERSTV9JOTE1X0hXU19BRERSCTB4MTEKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0lOSVQJMHgxMworI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUgkweDE0CisjZGVmaW5lIERSTV9JOTE1X0dFTV9QSU4JMHgxNQorI2RlZmluZSBEUk1fSTkxNV9HRU1fVU5QSU4JMHgxNgorI2RlZmluZSBEUk1fSTkxNV9HRU1fQlVTWQkweDE3CisjZGVmaW5lIERSTV9JOTE1X0dFTV9USFJPVFRMRQkweDE4CisjZGVmaW5lIERSTV9JOTE1X0dFTV9FTlRFUlZUCTB4MTkKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0xFQVZFVlQJMHgxYQorI2RlZmluZSBEUk1fSTkxNV9HRU1fQ1JFQVRFCTB4MWIKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BSRUFECTB4MWMKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BXUklURQkweDFkCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQCTB4MWUKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4JMHgxZgorI2RlZmluZSBEUk1fSTkxNV9HRU1fU1dfRklOSVNICTB4MjAKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcJMHgyMQorI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX1RJTElORwkweDIyCiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTE2MCw2ICsxNzYsMjAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUX1ZCTEFOS19QSVBFCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9TRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9WQkxBTktfUElQRQlEUk1fSU9SKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9WQkxBTktfU1dBUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGRybV9pOTE1X3ZibGFua19zd2FwX3QpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QSU4JCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUElOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VOUElOCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VTlBJTiwgc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1kJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQlVTWSwgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVEhST1RUTEUJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9USFJPVFRMRSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VOVEVSVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRU5URVJWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0xFQVZFVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTEVBVkVWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFURQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QUkVBRAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BSRUFELCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUFdSSVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX0RPTUFJTglEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NXX0ZJTklTSAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NXX0ZJTklTSCwgc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2gpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfVElMSU5HCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZykKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcJRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fR0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nKQogCiAvKiBBbGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdhcmUsIHJlbHlpbmcKICAqIG9uIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IGhhcmR3YXJlLgpAQCAtMjAwLDYgKzIzMCw4IEBACiAjZGVmaW5lIEk5MTVfUEFSQU1fSVJRX0FDVElWRSAgICAgICAgICAgIDEKICNkZWZpbmUgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUiAgICAgMgogI2RlZmluZSBJOTE1X1BBUkFNX0xBU1RfRElTUEFUQ0ggICAgICAgICAzCisjZGVmaW5lIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRCAgICAgICAgICAgIDQKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfR0VNICAgICAgICAgICAgICAgNQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSB7CiAJaW50IHBhcmFtOwpAQCAtMjY3LDQgKzI5OSwzMDUgQEAKIAl1aW50NjRfdCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgeworCS8qKgorCSAqIEJlZ2lubmluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CisJICogbWFuYWdlci4KKwkgKi8KKwl1aW50NjRfdCBndHRfc3RhcnQ7CisJLyoqCisJICogRW5kaW5nIG9mZnNldCBpbiB0aGUgR1RUIHRvIGJlIG1hbmFnZWQgYnkgdGhlIERSTSBtZW1vcnkKKwkgKiBtYW5hZ2VyLgorCSAqLworCXVpbnQ2NF90IGd0dF9lbmQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CisJLyoqCisJICogUmVxdWVzdGVkIHNpemUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2NhdGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KKwkgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KKwkgKgorCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKwkvKiogT2Zmc2V0IGludG8gdGhlIG9iamVjdCB0byByZWFkIGZyb20gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFBvaW50ZXIgdG8gd3JpdGUgdGhlIGRhdGEgaW50by4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyB3cml0dGVuIHRvLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gd3JpdGUgdG8gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHdyaXRlICovCisJdWludDY0X3Qgc2l6ZTsKKwkvKioKKwkgKiBQb2ludGVyIHRvIHJlYWQgdGhlIGRhdGEgZnJvbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqCisJICogTGVuZ3RoIG9mIGRhdGEgdG8gbWFwLgorCSAqCisJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGlnbmVkLgorCSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqCisJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgorCSAqCisJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwl1aW50NjRfdCBhZGRyX3B0cjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOZXcgcmVhZCBkb21haW5zICovCisJdWludDMyX3QgcmVhZF9kb21haW5zOworCisJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KKwl1aW50MzJfdCB3cml0ZV9kb21haW47Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSB7CisJLyoqCisJICogSGFuZGxlIG9mIHRoZSBidWZmZXIgYmVpbmcgcG9pbnRlZCB0byBieSB0aGlzIHJlbG9jYXRpb24gZW50cnkuCisJICoKKwkgKiBJdCdzIGFwcGVhbGluZyB0byBtYWtlIHRoaXMgYmUgYW4gaW5kZXggaW50byB0aGUgbW1fdmFsaWRhdGVfZW50cnkKKwkgKiBsaXN0IHRvIHJlZmVyIHRvIHRoZSBidWZmZXIsIGJ1dCB0aGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGNyZWF0ZQorCSAqIGEgcmVsb2NhdGlvbiBsaXN0IGZvciBzdGF0ZSBidWZmZXJzIGFuZCBub3QgcmUtd3JpdGUgaXQgcGVyCisJICogZXhlYyB1c2luZyB0aGUgYnVmZmVyLgorCSAqLworCXVpbnQzMl90IHRhcmdldF9oYW5kbGU7CisKKwkvKioKKwkgKiBWYWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRvIG1ha2UgdXAKKwkgKiB0aGUgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKi8KKwl1aW50MzJfdCBkZWx0YTsKKworCS8qKiBPZmZzZXQgaW4gdGhlIGJ1ZmZlciB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gaW50byAqLworCXVpbnQ2NF90IG9mZnNldDsKKworCS8qKgorCSAqIE9mZnNldCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0aGF0IHRoZSByZWxvY2F0aW9uIGVudHJ5IHdhcyBsYXN0CisJICogd3JpdHRlbiBhcy4KKwkgKgorCSAqIElmIHRoZSBidWZmZXIgaGFzIHRoZSBzYW1lIG9mZnNldCBhcyBsYXN0IHRpbWUsIHdlIGNhbiBza2lwIHN5bmNpbmcKKwkgKiBhbmQgd3JpdGluZyB0aGUgcmVsb2NhdGlvbi4gIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG91dCBieQorCSAqIHRoZSBleGVjYnVmZmVyIGlvY3RsIHdoZW4gdGhlIHJlbG9jYXRpb24gaXMgd3JpdHRlbi4KKwkgKi8KKwl1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQ7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgcmVhZCBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKi8KKwl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKgorCSAqIE5vdGUgdGhhdCBvbmx5IG9uZSBkb21haW4gbWF5IGJlIHdyaXR0ZW4gYnkgdGhlIHdob2xlCisJICogZXhlY2J1ZmZlciBvcGVyYXRpb24sIHNvIHRoYXQgd2hlcmUgdGhlcmUgYXJlIGNvbmZsaWN0cywKKwkgKiB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgLUVJTlZBTCBiYWNrLgorCSAqLworCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKK307CisKKy8qKiBAeworICogSW50ZWwgbWVtb3J5IGRvbWFpbnMKKyAqCisgKiBNb3N0IG9mIHRoZXNlIGp1c3QgYWxpZ24gd2l0aCB0aGUgdmFyaW91cyBjYWNoZXMgaW4KKyAqIHRoZSBzeXN0ZW0gYW5kIGFyZSB1c2VkIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIGFzCisgKiBvYmplY3RzIGVuZCB1cCBjYWNoZWQgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisgKi8KKy8qKiBDUFUgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NQVQkJMHgwMDAwMDAwMQorLyoqIFJlbmRlciBjYWNoZSwgdXNlZCBieSAyRCBhbmQgM0QgZHJhd2luZyAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSCQkweDAwMDAwMDAyCisvKiogU2FtcGxlciBjYWNoZSwgdXNlZCBieSB0ZXh0dXJlIGVuZ2luZSAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgkJMHgwMDAwMDAwNAorLyoqIENvbW1hbmQgcXVldWUsIHVzZWQgdG8gbG9hZCBiYXRjaCBidWZmZXJzICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECQkweDAwMDAwMDA4CisvKiogSW5zdHJ1Y3Rpb24gY2FjaGUsIHVzZWQgYnkgc2hhZGVyIHByb2dyYW1zICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTgkweDAwMDAwMDEwCisvKiogVmVydGV4IGFkZHJlc3MgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWAkJMHgwMDAwMDAyMAorLyoqIEdUVCBkb21haW4gLSBhcGVydHVyZSBhbmQgc2Nhbm91dCAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fR1RUCQkweDAwMDAwMDQwCisvKiogQH0gKi8KKworc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCB7CisJLyoqCisJICogVXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgR1RUIGZvciB0aGlzCisJICogb3BlcmF0aW9uLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOdW1iZXIgb2YgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoaXMgYnVmZmVyICovCisJdWludDMyX3QgcmVsb2NhdGlvbl9jb3VudDsKKwkvKioKKwkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBjb250YWluaW5nCisJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGlzIGJ1ZmZlci4KKwkgKi8KKwl1aW50NjRfdCByZWxvY3NfcHRyOworCisJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLworCXVpbnQ2NF90IGFsaWdubWVudDsKKworCS8qKgorCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0aGUgb2JqZWN0LCBmb3IgZnV0dXJlCisJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KKwkgKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgeworCS8qKgorCSAqIExpc3Qgb2YgYnVmZmVycyB0byBiZSB2YWxpZGF0ZWQgd2l0aCB0aGVpciByZWxvY2F0aW9ucyB0byBiZQorCSAqIHBlcmZvcm1lbmQgb24gdGhlbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fdmFsaWRhdGVfZW50cnkuCisJICoKKwkgKiBUaGVzZSBidWZmZXJzIG11c3QgYmUgbGlzdGVkIGluIGFuIG9yZGVyIHN1Y2ggdGhhdCBhbGwgcmVsb2NhdGlvbnMKKwkgKiBhIGJ1ZmZlciBpcyBwZXJmb3JtaW5nIHJlZmVyIHRvIGJ1ZmZlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXBwZWFyZWQKKwkgKiBpbiB0aGUgdmFsaWRhdGUgbGlzdC4KKwkgKi8KKwl1aW50NjRfdCBidWZmZXJzX3B0cjsKKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CisKKwkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KKwl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KKwl1aW50MzJfdCBiYXRjaF9sZW47CisJdWludDMyX3QgRFIxOworCXVpbnQzMl90IERSNDsKKwl1aW50MzJfdCBudW1fY2xpcHJlY3RzOworCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLworCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCisJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCisJdWludDY0X3QgYWxpZ25tZW50OworCisJLyoqIFJldHVybmVkIEdUVCBvZmZzZXQgb2YgdGhlIGJ1ZmZlci4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoZWNrIGZvciBidXN5ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCisJdWludDMyX3QgYnVzeTsKK307CisKKyNkZWZpbmUgSTkxNV9USUxJTkdfTk9ORQkwCisjZGVmaW5lIEk5MTVfVElMSU5HX1gJCTEKKyNkZWZpbmUgSTkxNV9USUxJTkdfWQkJMgorCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9OT05FCQkwCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85CQkxCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwCQkyCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzExCQkzCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExCTQKKy8qIE5vdCBzZWVuIGJ5IHVzZXJsYW5kICovCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOCTUKKworc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBpdHMgdGlsaW5nIHN0YXRlIHVwZGF0ZWQgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKKwkgKiBJOTE1X1RJTElOR19ZKS4KKwkgKgorCSAqIFRoaXMgdmFsdWUgaXMgdG8gYmUgc2V0IG9uIHJlcXVlc3QsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlCisJICoga2VybmVsIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIHdpdGggdGhlIGFjdHVhbCBjaG9zZW4gdGlsaW5nIGxheW91dC4KKwkgKgorCSAqIFRoZSB0aWxpbmcgbW9kZSBtYXkgYmUgZGVtb3RlZCB0byBJOTE1X1RJTElOR19OT05FIHdoZW4gdGhlIHN5c3RlbQorCSAqIGhhcyBiaXQgNiBzd2l6emxpbmcgdGhhdCBjYW4ndCBiZSBtYW5hZ2VkIGNvcnJlY3RseSBieSBHRU0uCisJICoKKwkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgorCSAqIEk5MTVfVElMSU5HX1kuCisJICovCisJdWludDMyX3Qgc3RyaWRlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgeworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBnZXQgdGlsaW5nIHN0YXRlIGZvci4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAorCSAqIEk5MTVfVElMSU5HX1kpLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IGJmOWFjYTUuLmU1MzE3ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xODMsNiArMTgzLDcgQEAKIHVuaWZkZWYteSArPSBhdXh2ZWMuaAogdW5pZmRlZi15ICs9IGJpbmZtdHMuaAogdW5pZmRlZi15ICs9IGJsa3RyYWNlX2FwaS5oCit1bmlmZGVmLXkgKz0gYnl0ZW9yZGVyLmgKIHVuaWZkZWYteSArPSBjYXBhYmlsaXR5LmgKIHVuaWZkZWYteSArPSBjYXBpLmgKIHVuaWZkZWYteSArPSBjY2lzc19pb2N0bC5oCkBAIC0zNDAsNiArMzQxLDcgQEAKIHVuaWZkZWYteSArPSBzdGF0LmgKIHVuaWZkZWYteSArPSBzdGRkZWYuaAogdW5pZmRlZi15ICs9IHN0cmluZy5oCit1bmlmZGVmLXkgKz0gc3dhYi5oCiB1bmlmZGVmLXkgKz0gc3luY2xpbmsuaAogdW5pZmRlZi15ICs9IHN5c2N0bC5oCiB1bmlmZGVmLXkgKz0gdGNwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWVyLmggYi9pbmNsdWRlL2xpbnV4L2Flci5oCmluZGV4IGYyNTE4MTQuLmY3ZGYxZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9hZXIuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BDSUVBRVIpCiAvKiBwY2ktZSBwb3J0IGRyaXZlciBuZWVkcyB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBhZXIgKi8KIGV4dGVybiBpbnQgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLWV4dGVybiBpbnQgcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gaW50IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNlbHNlCkBAIC0xOCwxMCArMTcsNiBAQAogewogCXJldHVybiAtRUlOVkFMOwogfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKaW5kZXggMGEyNGQ1NS4uYmVlNTJhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaApAQCAtMTc1LDYgKzE3NSw4IEBACiAgKiBCRElfQ0FQX1JFQURfTUFQOiAgICAgICBDYW4gYmUgbWFwcGVkIGZvciByZWFkaW5nCiAgKiBCRElfQ0FQX1dSSVRFX01BUDogICAgICBDYW4gYmUgbWFwcGVkIGZvciB3cml0aW5nCiAgKiBCRElfQ0FQX0VYRUNfTUFQOiAgICAgICBDYW4gYmUgbWFwcGVkIGZvciBleGVjdXRpb24KKyAqCisgKiBCRElfQ0FQX1NXQVBfQkFDS0VEOiAgICBDb3VudCBzaG1lbS90bXBmcyBvYmplY3RzIGFzIHN3YXAtYmFja2VkLgogICovCiAjZGVmaW5lIEJESV9DQVBfTk9fQUNDVF9ESVJUWQkweDAwMDAwMDAxCiAjZGVmaW5lIEJESV9DQVBfTk9fV1JJVEVCQUNLCTB4MDAwMDAwMDIKQEAgLTE4NCw2ICsxODYsNyBAQAogI2RlZmluZSBCRElfQ0FQX1dSSVRFX01BUAkweDAwMDAwMDIwCiAjZGVmaW5lIEJESV9DQVBfRVhFQ19NQVAJMHgwMDAwMDA0MAogI2RlZmluZSBCRElfQ0FQX05PX0FDQ1RfV0IJMHgwMDAwMDA4MAorI2RlZmluZSBCRElfQ0FQX1NXQVBfQkFDS0VECTB4MDAwMDAxMDAKIAogI2RlZmluZSBCRElfQ0FQX1ZNRkxBR1MgXAogCShCRElfQ0FQX1JFQURfTUFQIHwgQkRJX0NBUF9XUklURV9NQVAgfCBCRElfQ0FQX0VYRUNfTUFQKQpAQCAtMjQ4LDYgKzI1MSwxMSBAQAogCQkJCSAgICAgIEJESV9DQVBfTk9fV1JJVEVCQUNLKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZGlfY2FwX3N3YXBfYmFja2VkKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJcmV0dXJuIGJkaS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9TV0FQX0JBQ0tFRDsKK30KKwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfY2FwX3dyaXRlYmFja19kaXJ0eShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gYmRpX2NhcF93cml0ZWJhY2tfZGlydHkobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CkBAIC0yNTgsNCArMjY2LDkgQEAKIAlyZXR1cm4gYmRpX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8pOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19jYXBfc3dhcF9iYWNrZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIGJkaV9jYXBfc3dhcF9iYWNrZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7Cit9CisKICNlbmRpZgkJLyogX0xJTlVYX0JBQ0tJTkdfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmNkLmggYi9pbmNsdWRlL2xpbnV4L2JjZC5oCmluZGV4IDdhYzUxOGUuLjIyZWE1NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9iY2QuaApAQCAtMSwxMiArMSwzIEBACi0vKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMgY29kZQotICogaW4gdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiBvciBsYXRlciwKLSAqIGF0IHlvdXIgb3B0aW9uLgotICovCi0KLS8qIG1hY3JvcyB0byB0cmFuc2xhdGUgdG8vZnJvbSBiaW5hcnkgYW5kIGJpbmFyeS1jb2RlZCBkZWNpbWFsIChmcmVxdWVudGx5Ci0gKiBmb3VuZCBpbiBSVEMgY2hpcHMpLgotICovCi0KICNpZm5kZWYgX0JDRF9ICiAjZGVmaW5lIF9CQ0RfSAogCkBAIC0xNSwxMSArNiw0IEBACiB1bnNpZ25lZCBiY2QyYmluKHVuc2lnbmVkIGNoYXIgdmFsKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwogdW5zaWduZWQgY2hhciBiaW4yYmNkKHVuc2lnbmVkIHZhbCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKIAotI2RlZmluZSBCQ0QyQklOKHZhbCkJYmNkMmJpbih2YWwpCi0jZGVmaW5lIEJJTjJCQ0QodmFsKQliaW4yYmNkKHZhbCkKLQotLyogYmFja3dhcmRzIGNvbXBhdCAqLwotI2RlZmluZSBCQ0RfVE9fQklOKHZhbCkgKCh2YWwpPUJDRDJCSU4odmFsKSkKLSNkZWZpbmUgQklOX1RPX0JDRCh2YWwpICgodmFsKT1CSU4yQkNEKHZhbCkpCi0KICNlbmRpZiAvKiBfQkNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IGZmNWI0Y2YuLjFjOTFhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtNzksNiArNzksMTMgQEAKIAogCXVuc2lnbmVkIGludAkJYmlfc2l6ZTsJLyogcmVzaWR1YWwgSS9PIGNvdW50ICovCiAKKwkvKgorCSAqIFRvIGtlZXAgdHJhY2sgb2YgdGhlIG1heCBzZWdtZW50IHNpemUsIHdlIGFjY291bnQgZm9yIHRoZQorCSAqIHNpemVzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBtZXJnZWFibGUgc2VnbWVudHMgaW4gdGhpcyBiaW8uCisJICovCisJdW5zaWduZWQgaW50CQliaV9zZWdfZnJvbnRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWJpX3NlZ19iYWNrX3NpemU7CisKIAl1bnNpZ25lZCBpbnQJCWJpX21heF92ZWNzOwkvKiBtYXggYnZsX3ZlY3Mgd2UgY2FuIGhvbGQgKi8KIAogCXVuc2lnbmVkIGludAkJYmlfY29tcF9jcHU7CS8qIGNvbXBsZXRpb24gQ1BVICovCkBAIC0xMjksMjUgKzEzNiwzMCBAQAogICogYml0IDIgLS0gYmFycmllcgogICoJSW5zZXJ0IGEgc2VyaWFsaXphdGlvbiBwb2ludCBpbiB0aGUgSU8gcXVldWUsIGZvcmNpbmcgcHJldmlvdXNseQogICoJc3VibWl0dGVkIElPIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhpcyBvZW4gaXMgaXNzdWVkLgotICogYml0IDMgLS0gZmFpbCBmYXN0LCBkb24ndCB3YW50IGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcwotICogYml0IDQgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQorICogYml0IDMgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQogICoJTm90ZSB0aGF0IHRoaXMgZG9lcyBOT1QgaW5kaWNhdGUgdGhhdCB0aGUgSU8gaXRzZWxmIGlzIHN5bmMsIGp1c3QKICAqCXRoYXQgdGhlIGJsb2NrIGxheWVyIHdpbGwgbm90IHBvc3Rwb25lIGlzc3VlIG9mIHRoaXMgSU8gYnkgcGx1Z2dpbmcuCi0gKiBiaXQgNSAtLSBtZXRhZGF0YSByZXF1ZXN0CisgKiBiaXQgNCAtLSBtZXRhZGF0YSByZXF1ZXN0CiAgKglVc2VkIGZvciB0cmFjaW5nIHRvIGRpZmZlcmVudGlhdGUgbWV0YWRhdGEgYW5kIGRhdGEgSU8uIE1heSBhbHNvCiAgKglnZXQgc29tZSBwcmVmZXJlbnRpYWwgdHJlYXRtZW50IGluIHRoZSBJTyBzY2hlZHVsZXIKLSAqIGJpdCA2IC0tIGRpc2NhcmQgc2VjdG9ycworICogYml0IDUgLS0gZGlzY2FyZCBzZWN0b3JzCiAgKglJbmZvcm1zIHRoZSBsb3dlciBsZXZlbCBkZXZpY2UgdGhhdCB0aGlzIHJhbmdlIG9mIHNlY3RvcnMgaXMgbm8gbG9uZ2VyCiAgKgl1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbSBhbmQgbWF5IHRodXMgYmUgZnJlZWQgYnkgdGhlIGRldmljZS4gVXNlZAogICoJZm9yIGZsYXNoIGJhc2VkIHN0b3JhZ2UuCisgKiBiaXQgNiAtLSBmYWlsIGZhc3QgZGV2aWNlIGVycm9ycworICogYml0IDcgLS0gZmFpbCBmYXN0IHRyYW5zcG9ydCBlcnJvcnMKKyAqIGJpdCA4IC0tIGZhaWwgZmFzdCBkcml2ZXIgZXJyb3JzCisgKglEb24ndCB3YW50IGRyaXZlciByZXRyaWVzIGZvciBhbnkgZmFzdCBmYWlsIHdoYXRldmVyIHRoZSByZWFzb24uCiAgKi8KICNkZWZpbmUgQklPX1JXCQkwCS8qIE11c3QgbWF0Y2ggUlcgaW4gcmVxIGZsYWdzIChibGtkZXYuaCkgKi8KICNkZWZpbmUgQklPX1JXX0FIRUFECTEJLyogTXVzdCBtYXRjaCBGQUlMRkFTVCBpbiByZXEgZmxhZ3MgKi8KICNkZWZpbmUgQklPX1JXX0JBUlJJRVIJMgotI2RlZmluZSBCSU9fUldfRkFJTEZBU1QJMwotI2RlZmluZSBCSU9fUldfU1lOQwk0Ci0jZGVmaW5lIEJJT19SV19NRVRBCTUKLSNkZWZpbmUgQklPX1JXX0RJU0NBUkQJNgorI2RlZmluZSBCSU9fUldfU1lOQwkzCisjZGVmaW5lIEJJT19SV19NRVRBCTQKKyNkZWZpbmUgQklPX1JXX0RJU0NBUkQJNQorI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfREVWCQk2CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQJNworI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfRFJJVkVSCQk4CiAKIC8qCiAgKiB1cHBlciAxNiBiaXRzIG9mIGJpX3J3IGRlZmluZSB0aGUgaW8gcHJpb3JpdHkgb2YgdGhpcyBiaW8KQEAgLTE3NCw3ICsxODYsMTAgQEAKICNkZWZpbmUgYmlvX3NlY3RvcnMoYmlvKQkoKGJpbyktPmJpX3NpemUgPj4gOSkKICNkZWZpbmUgYmlvX2JhcnJpZXIoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQogI2RlZmluZSBiaW9fc3luYyhiaW8pCQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX1NZTkMpKQotI2RlZmluZSBiaW9fZmFpbGZhc3QoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X2RldihiaW8pCSgoYmlvKS0+YmlfcncgJgkoMSA8PCBCSU9fUldfRkFJTEZBU1RfREVWKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X3RyYW5zcG9ydChiaW8pCVwKKwkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCkpCisjZGVmaW5lIGJpb19mYWlsZmFzdF9kcml2ZXIoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUX0RSSVZFUikpCiAjZGVmaW5lIGJpb19yd19haGVhZChiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQUhFQUQpKQogI2RlZmluZSBiaW9fcndfbWV0YShiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfTUVUQSkpCiAjZGVmaW5lIGJpb19kaXNjYXJkKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19ESVNDQVJEKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDg5NzgxZmQuLjFhYmZlNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtMTEwLDcgKzExMCw2IEBACiAKIGV4dGVybiBpbnQgYml0bWFwX3NjbnByaW50ZihjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sCiAJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cyk7Ci1leHRlcm4gaW50IGJpdG1hcF9zY25wcmludGZfbGVuKHVuc2lnbmVkIGludCBucl9iaXRzKTsKIGV4dGVybiBpbnQgX19iaXRtYXBfcGFyc2UoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgaXNfdXNlciwKIAkJCXVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IG5iaXRzKTsKIGV4dGVybiBpbnQgYml0bWFwX3BhcnNlX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHVuc2lnbmVkIGludCB1bGVuLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggYTkyZDllNC4uYjRmZTY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04Nyw3ICs4Nyw5IEBACiAgKi8KIGVudW0gcnFfZmxhZ19iaXRzIHsKIAlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KLQlfX1JFUV9GQUlMRkFTVCwJCS8qIG5vIGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcyAqLworCV9fUkVRX0ZBSUxGQVNUX0RFViwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZGV2aWNlIGVycm9ycyAqLworCV9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCwgLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgdHJhbnNwb3J0IGVycm9ycyAqLworCV9fUkVRX0ZBSUxGQVNUX0RSSVZFUiwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZHJpdmVyIGVycm9ycyAqLwogCV9fUkVRX0RJU0NBUkQsCQkvKiByZXF1ZXN0IHRvIGRpc2NhcmQgc2VjdG9ycyAqLwogCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLwogCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLwpAQCAtMTExLDggKzExMywxMCBAQAogfTsKIAogI2RlZmluZSBSRVFfUlcJCSgxIDw8IF9fUkVRX1JXKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfREVWCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RFVikKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVAkoMSA8PCBfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9EUklWRVIJKDEgPDwgX19SRVFfRkFJTEZBU1RfRFJJVkVSKQogI2RlZmluZSBSRVFfRElTQ0FSRAkoMSA8PCBfX1JFUV9ESVNDQVJEKQotI2RlZmluZSBSRVFfRkFJTEZBU1QJKDEgPDwgX19SRVFfRkFJTEZBU1QpCiAjZGVmaW5lIFJFUV9TT1JURUQJKDEgPDwgX19SRVFfU09SVEVEKQogI2RlZmluZSBSRVFfU09GVEJBUlJJRVIJKDEgPDwgX19SRVFfU09GVEJBUlJJRVIpCiAjZGVmaW5lIFJFUV9IQVJEQkFSUklFUgkoMSA8PCBfX1JFUV9IQVJEQkFSUklFUikKQEAgLTU2MCw3ICs1NjQsMTIgQEAKICNkZWZpbmUgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwpCiAjZGVmaW5lIGJsa19zZW5zZV9yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU0VOU0UpCiAKLSNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKyNkZWZpbmUgYmxrX2ZhaWxmYXN0X2RldihycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9ERVYpCisjZGVmaW5lIGJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpICgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUKQorI2RlZmluZSBibGtfZmFpbGZhc3RfZHJpdmVyKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX0RSSVZFUikKKyNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKGJsa19mYWlsZmFzdF9kZXYocnEpIHx8CVwKKwkJCQkgYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChycSkgfHwJXAorCQkJCSBibGtfZmFpbGZhc3RfZHJpdmVyKHJxKSkKICNkZWZpbmUgYmxrX3JxX3N0YXJ0ZWQocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfU1RBUlRFRCkKIAogI2RlZmluZSBibGtfYWNjb3VudF9ycShycSkJKGJsa19ycV9zdGFydGVkKHJxKSAmJiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IGJsa19kaXNjYXJkX3JxKHJxKSkpIApAQCAtODU2LDcgKzg2NSw2IEBACiBleHRlcm4gaW50IGJsa19ycV9tYXBfc2coc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICopOwogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfcnFfZmxhZ3Moc3RydWN0IHJlcXVlc3QgKiwgY2hhciAqKTsKIGV4dGVybiB2b2lkIGdlbmVyaWNfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLWV4dGVybiB2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogZXh0ZXJuIGxvbmcgbnJfYmxvY2tkZXZfcGFnZXModm9pZCk7CiAKIGludCBibGtfZ2V0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggM2EzMWViNS4uYmRmNTA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0yNCw2ICsyNCw3IEBACiAJQkxLX1RDX0FIRUFECT0gMSA8PCAxMSwJLyogcmVhZGFoZWFkICovCiAJQkxLX1RDX01FVEEJPSAxIDw8IDEyLAkvKiBtZXRhZGF0YSAqLwogCUJMS19UQ19ESVNDQVJECT0gMSA8PCAxMywJLyogZGlzY2FyZCByZXF1ZXN0cyAqLworCUJMS19UQ19EUlZfREFUQQk9IDEgPDwgMTQsCS8qIGJpbmFyeSBwZXItZHJpdmVyIGRhdGEgKi8KIAogCUJMS19UQ19FTkQJPSAxIDw8IDE1LAkvKiBvbmx5IDE2LWJpdHMsIHJlbWluZGVyICovCiB9OwpAQCAtNTEsNiArNTIsNyBAQAogCV9fQkxLX1RBX0JPVU5DRSwJCS8qIGJpbyB3YXMgYm91bmNlZCAqLwogCV9fQkxLX1RBX1JFTUFQLAkJCS8qIGJpbyB3YXMgcmVtYXBwZWQgKi8KIAlfX0JMS19UQV9BQk9SVCwJCQkvKiByZXF1ZXN0IGFib3J0ZWQgKi8KKwlfX0JMS19UQV9EUlZfREFUQSwJCS8qIGRyaXZlci1zcGVjaWZpYyBiaW5hcnkgZGF0YSAqLwogfTsKIAogLyoKQEAgLTgyLDYgKzg0LDcgQEAKICNkZWZpbmUgQkxLX1RBX0JPVU5DRQkJKF9fQkxLX1RBX0JPVU5DRSkKICNkZWZpbmUgQkxLX1RBX1JFTUFQCQkoX19CTEtfVEFfUkVNQVAgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCiAjZGVmaW5lIEJMS19UQV9BQk9SVAkJKF9fQkxLX1RBX0FCT1JUIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfRFJWX0RBVEEJKF9fQkxLX1RBX0RSVl9EQVRBIHwgQkxLX1RDX0FDVChCTEtfVENfRFJWX0RBVEEpKQogCiAjZGVmaW5lIEJMS19UTl9QUk9DRVNTCQkoX19CTEtfVE5fUFJPQ0VTUyB8IEJMS19UQ19BQ1QoQkxLX1RDX05PVElGWSkpCiAjZGVmaW5lIEJMS19UTl9USU1FU1RBTVAJKF9fQkxLX1ROX1RJTUVTVEFNUCB8IEJMS19UQ19BQ1QoQkxLX1RDX05PVElGWSkpCkBAIC0zMTcsNiArMzIwLDM0IEBACiAJX19ibGtfYWRkX3RyYWNlKGJ0LCBmcm9tLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIEJMS19UQV9SRU1BUCwgIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHIpLCAmcik7CiB9CiAKKy8qKgorICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCWlvIHJlcXVlc3QKKyAqIEBkYXRhOglkcml2ZXItc3BlY2lmaWMgZGF0YQorICogQGxlbjoJbGVuZ3RoIG9mIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgU29tZSBkcml2ZXJzIG1pZ2h0IHdhbnQgdG8gd3JpdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgcGVyIHJlcXVlc3QuCisgKgorICoqLworc3RhdGljIGlubGluZSB2b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCBycS0+ZGF0YV9sZW4sIDAsIEJMS19UQV9EUlZfREFUQSwKKwkJCQlycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOworCWVsc2UKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCBycS0+aGFyZF9zZWN0b3IsIHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSwKKwkJCQkwLCBCTEtfVEFfRFJWX0RBVEEsIHJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7Cit9CisKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCiAJCQkgICBjaGFyIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKQEAgLTMzMCw2ICszNjEsNyBAQAogI2RlZmluZSBibGtfYWRkX3RyYWNlX2dlbmVyaWMocSwgcnEsIHJ3LCB3aGF0KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfcGR1X2ludChxLCB3aGF0LCBiaW8sIHBkdSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBibGtfYWRkX3RyYWNlX3JlbWFwKHEsIGJpbywgZGV2LCBmLCB0KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX2FkZF9kcml2ZXJfZGF0YShxLCBycSwgZGF0YSwgbGVuKQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgYnV0cykJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zZXR1cChxLCBuYW1lLCBkZXYsIGFyZykJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpCQkoLUVOT1RUWSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCBlYWRhYWI0Li4zY2U2NGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlyZXR1cm4gbGlrZWx5KCF0ZXN0X2FuZF9zZXRfYml0KEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSkpOworCXJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhCSF9Mb2NrLCAmYmgtPmJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2tfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQKaW5kZXggMTEzM2Q1Zi4uZmJhYTdmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZApAQCAtMSwzICsxLDQgQEAKIHVuaWZkZWYteSArPSBiaWdfZW5kaWFuLmgKIHVuaWZkZWYteSArPSBsaXR0bGVfZW5kaWFuLmgKIHVuaWZkZWYteSArPSBzd2FiLmgKK3VuaWZkZWYteSArPSBzd2FiYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmggYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKaW5kZXggNDRmOTViOS4uMWNiYTNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaApAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAppbmRleCA0Y2MxNzBhLi5jZWRjMWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAKICNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19mb3JjZSBfX2JlMzIpKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggMzA5MzRlNC4uOGIwMGY2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC05LDEyICs5LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3Vwc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcmlvX2hlYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogCiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIApAQCAtMTM3LDYgKzEzNywxNSBAQAogCSAqIHJlbGVhc2VfbGlzdF9sb2NrCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCByZWxlYXNlX2xpc3Q7CisKKwkvKiBwaWRzX211dGV4IHByb3RlY3RzIHRoZSBmaWVsZHMgYmVsb3cgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHBpZHNfbXV0ZXg7CisJLyogQXJyYXkgb2YgcHJvY2VzcyBpZHMgaW4gdGhlIGNncm91cCAqLworCXBpZF90ICp0YXNrc19waWRzOworCS8qIEhvdyBtYW55IGZpbGVzIGFyZSB1c2luZyB0aGUgY3VycmVudCB0YXNrc19waWRzIGFycmF5ICovCisJaW50IHBpZHNfdXNlX2NvdW50OworCS8qIExlbmd0aCBvZiB0aGUgY3VycmVudCB0YXNrc19waWRzIGFycmF5ICovCisJaW50IHBpZHNfbGVuZ3RoOwogfTsKIAogLyogQSBjc3Nfc2V0IGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgcG9pbnRlcnMgdG8gYSBzZXQgb2YKQEAgLTE0OSw3ICsxNTgsNyBAQAogc3RydWN0IGNzc19zZXQgewogCiAJLyogUmVmZXJlbmNlIGNvdW50ICovCi0Jc3RydWN0IGtyZWYgcmVmOworCWF0b21pY190IHJlZmNvdW50OwogCiAJLyoKIAkgKiBMaXN0IHJ1bm5pbmcgdGhyb3VnaCBhbGwgY2dyb3VwIGdyb3VwcyBpbiB0aGUgc2FtZSBoYXNoCkBAIC0zOTQsNiArNDAzLDkgQEAKIGludCBjZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pOwogaW50IGNncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAordm9pZCBjZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLAorCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KTsKKwogI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBTICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpIHsgcmV0dXJuIDA7IH0KQEAgLTQxMiwxNSArNDI0LDkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsCisJCQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpIHt9CisKICNlbmRpZiAvKiAhQ09ORklHX0NHUk9VUFMgKi8KIAotI2lmZGVmIENPTkZJR19NTV9PV05FUgotZXh0ZXJuIHZvaWQKLWNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KTsKLSNlbHNlIC8qICFDT05GSUdfTU1fT1dORVIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCiAjZW5kaWYgLyogX0xJTlVYX0NHUk9VUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCmluZGV4IGUyODc3NDUuLjljMjIzOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCkBAIC00OCwzICs0OCw5IEBACiAjZW5kaWYKIAogLyogKi8KKworI2lmZGVmIENPTkZJR19DR1JPVVBfRlJFRVpFUgorU1VCU1lTKGZyZWV6ZXIpCisjZW5kaWYKKworLyogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCA1NWU0MzRmLi5mODhkMzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC00NSw3ICs0NSw4IEBACiAgKiBAcmVhZDoJCXJldHVybnMgYSBjeWNsZSB2YWx1ZQogICogQG1hc2s6CQliaXRtYXNrIGZvciB0d28ncyBjb21wbGVtZW50CiAgKgkJCXN1YnRyYWN0aW9uIG9mIG5vbiA2NCBiaXQgY291bnRlcnMKLSAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllciAoYWRqdXN0ZWQgYnkgTlRQKQorICogQG11bHRfb3JpZzoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllciAodW5hZGp1c3RlZCBieSBOVFApCiAgKiBAc2hpZnQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKICAqIEBmbGFnczoJCWZsYWdzIGRlc2NyaWJpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzCiAgKiBAdnJlYWQ6CQl2c3lzY2FsbCBiYXNlZCByZWFkCkBAIC02Myw2ICs2NCw3IEBACiAJY3ljbGVfdCAoKnJlYWQpKHZvaWQpOwogCWN5Y2xlX3QgbWFzazsKIAl1MzIgbXVsdDsKKwl1MzIgbXVsdF9vcmlnOwogCXUzMiBzaGlmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7CkBAIC03Nyw2ICs3OSw3IEBACiAJLyogdGltZWtlZXBpbmcgc3BlY2lmaWMgZGF0YSwgaWdub3JlICovCiAJY3ljbGVfdCBjeWNsZV9pbnRlcnZhbDsKIAl1NjQJeHRpbWVfaW50ZXJ2YWw7CisJdTMyCXJhd19pbnRlcnZhbDsKIAkvKgogCSAqIFNlY29uZCBwYXJ0IGlzIHdyaXR0ZW4gYXQgZWFjaCB0aW1lciBpbnRlcnJ1cHQKIAkgKiBLZWVwIGl0IGluIGEgZGlmZmVyZW50IGNhY2hlIGxpbmUgdG8gZGlydHkgbm8KQEAgLTg1LDYgKzg4LDcgQEAKIAljeWNsZV90IGN5Y2xlX2xhc3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAl1NjQgeHRpbWVfbnNlYzsKIAlzNjQgZXJyb3I7CisJc3RydWN0IHRpbWVzcGVjIHJhd190aW1lOwogCiAjaWZkZWYgQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HCiAJLyogV2F0Y2hkb2cgcmVsYXRlZCBkYXRhLCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgKi8KQEAgLTIwMSwxNyArMjA1LDE5IEBACiB7CiAJdTY0IHRtcDsKIAotCS8qIFhYWCAtIEFsbCBvZiB0aGlzIGNvdWxkIHVzZSBhIHdob2xlIGxvdCBvZiBvcHRpbWl6YXRpb24gKi8KKwkvKiBEbyB0aGUgbnMgLT4gY3ljbGUgY29udmVyc2lvbiBmaXJzdCwgdXNpbmcgb3JpZ2luYWwgbXVsdCAqLwogCXRtcCA9IGxlbmd0aF9uc2VjOwogCXRtcCA8PD0gYy0+c2hpZnQ7Ci0JdG1wICs9IGMtPm11bHQvMjsKLQlkb19kaXYodG1wLCBjLT5tdWx0KTsKKwl0bXAgKz0gYy0+bXVsdF9vcmlnLzI7CisJZG9fZGl2KHRtcCwgYy0+bXVsdF9vcmlnKTsKIAogCWMtPmN5Y2xlX2ludGVydmFsID0gKGN5Y2xlX3QpdG1wOwogCWlmIChjLT5jeWNsZV9pbnRlcnZhbCA9PSAwKQogCQljLT5jeWNsZV9pbnRlcnZhbCA9IDE7CiAKKwkvKiBHbyBiYWNrIGZyb20gY3ljbGVzIC0+IHNoaWZ0ZWQgbnMsIHRoaXMgdGltZSB1c2UgbnRwIGFkanVzZWQgbXVsdCAqLwogCWMtPnh0aW1lX2ludGVydmFsID0gKHU2NCljLT5jeWNsZV9pbnRlcnZhbCAqIGMtPm11bHQ7CisJYy0+cmF3X2ludGVydmFsID0gKCh1NjQpYy0+Y3ljbGVfaW50ZXJ2YWwgKiBjLT5tdWx0X29yaWcpID4+IGMtPnNoaWZ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCA4MzIyMTQxLi45ODExNWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC00NCw2ICs0NCw4IEBACiAjIGVycm9yIFNvcnJ5LCB5b3VyIGNvbXBpbGVyIGlzIHRvbyBvbGQvbm90IHJlY29nbml6ZWQuCiAjZW5kaWYKIAorI2RlZmluZSBub3RyYWNlIF9fYXR0cmlidXRlX18oKG5vX2luc3RydW1lbnRfZnVuY3Rpb24pKQorCiAvKiBJbnRlbCBjb21waWxlciBkZWZpbmVzIF9fR05VQ19fLiBTbyB3ZSB3aWxsIG92ZXJ3cml0ZSBpbXBsZW1lbnRhdGlvbnMKICAqIGNvbWluZyBmcm9tIGFib3ZlIGhlYWRlciBmaWxlcyBoZXJlCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oIGIvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgKaW5kZXggMDI1ZTRmNS4uMGFjZjNiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgKQEAgLTgsMTIgKzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2RlZmluZSBFTEZDT1JFX0FERFJfTUFYCSgtMVVMTCkKKyNkZWZpbmUgRUxGQ09SRV9BRERSX0VSUgkoLTJVTEwpCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyOwotI2Vsc2UKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKLSNlbmRpZgogCiBleHRlcm4gc3NpemVfdCBjb3B5X29sZG1lbV9wYWdlKHVuc2lnbmVkIGxvbmcsIGNoYXIgKiwgc2l6ZV90LAogCQkJCQkJdW5zaWduZWQgbG9uZywgaW50KTsKQEAgLTI4LDEwICsyNSw0MyBAQAogCiAjZGVmaW5lIHZtY29yZV9lbGZfY2hlY2tfYXJjaCh4KSAoZWxmX2NoZWNrX2FyY2goeCkgfHwgdm1jb3JlX2VsZl9jaGVja19hcmNoX2Nyb3NzKHgpKQogCisvKgorICogaXNfa2R1bXBfa2VybmVsKCkgY2hlY2tzIHdoZXRoZXIgdGhpcyBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIG9mCisgKiBwcmV2aW91cyBrZXJuZWwgb3Igbm90LiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgcHJldmlvdXMga2VybmVsCisgKiBoYXMgcGFzc2VkIHRoZSBlbGYgY29yZSBoZWFkZXIgYWRkcmVzcyBvbiBjb21tYW5kIGxpbmUuCisgKgorICogVGhpcyBpcyBub3QganVzdCBhIHRlc3QgaWYgQ09ORklHX0NSQVNIX0RVTVAgaXMgZW5hYmxlZCBvciBub3QuIEl0IHdpbGwKKyAqIHJldHVybiAxIGlmIENPTkZJR19DUkFTSF9EVU1QPXkgYW5kIGlmIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2YKKyAqIHByZXZpb3VzIGtlcm5lbC4KKyAqLworCiBzdGF0aWMgaW5saW5lIGludCBpc19rZHVtcF9rZXJuZWwodm9pZCkKIHsKIAlyZXR1cm4gKGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYKSA/IDEgOiAwOwogfQorCisvKiBpc192bWNvcmVfdXNhYmxlKCkgY2hlY2tzIGlmIHRoZSBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIGFuZAorICogdGhlIHZtY29yZSByZWdpb24gaXMgdXNhYmxlLgorICoKKyAqIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSBmYWN0IHRoYXQgZHVlIHRvIGFsaWdubWVudCAtMlVMTCBpcyBub3QKKyAqIGEgdmFsaWQgcG9pbnRlciwgbXVjaCBpbiB0aGUgdmFpbiBvZiBJU19FUlIoKSwgZXhjZXB0CisgKiBkZWFsaW5nIGRpcmVjdGx5IHdpdGggYW4gdW5zaWduZWQgbG9uZyBsb25nIHJhdGhlciB0aGFuIGEgcG9pbnRlci4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpCit7CisJcmV0dXJuIGlzX2tkdW1wX2tlcm5lbCgpICYmIGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfRVJSID8gMSA6IDA7Cit9CisKKy8qIHZtY29yZV91bnVzYWJsZSgpIG1hcmtzIHRoZSB2bWNvcmUgYXMgdW51c2FibGUsCisgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGxvZ2ljIG9mIGlzX2tkdW1wX2tlcm5lbCgpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHZtY29yZV91bnVzYWJsZSh2b2lkKQoreworCWlmIChpc19rZHVtcF9rZXJuZWwoKSkKKwkJZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX0VSUjsKK30KICNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfa2R1bXBfa2VybmVsKHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFyLmggYi9pbmNsdWRlL2xpbnV4L2RtYXIuaAppbmRleCBjMzYwYzU1Li5mMTk4NGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYXIuaApAQCAtNDUsNyArNDUsNiBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJoZCwgJmRtYXJfZHJoZF91bml0cywgbGlzdCkKIAogZXh0ZXJuIGludCBkbWFyX3RhYmxlX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IGVhcmx5X2RtYXJfZGV0ZWN0KHZvaWQpOwogZXh0ZXJuIGludCBkbWFyX2Rldl9zY29wZV9pbml0KHZvaWQpOwogCiAvKiBJbnRlbCBJT01NVSBkZXRlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCmluZGV4IDZlNGFjZTIuLjc5YThlZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaApAQCAtMTY2LDYgKzE2Niw3IEBACiAJVlNCXzE2LAogCVBTS184LAogCUFQU0tfMTYsCisJQVBTS18zMiwKIAlEUVBTSywKIH0gZmVfbW9kdWxhdGlvbl90OwogCkBAIC0yOTUsNiArMjk2LDcgQEAKIAlTWVNfRFZCQ19BTk5FWF9BQywKIAlTWVNfRFZCQ19BTk5FWF9CLAogCVNZU19EVkJULAorCVNZU19EU1MsCiAJU1lTX0RWQlMsCiAJU1lTX0RWQlMyLAogCVNZU19EVkJILApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggODA3MzczZC4uYmI2NmZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMDgsNiArMjA4LDkgQEAKICNkZWZpbmUgRUZJX0dMT0JBTF9WQVJJQUJMRV9HVUlEIFwKICAgICBFRklfR1VJRCggIDB4OGJlNGRmNjEsIDB4OTNjYSwgMHgxMWQyLCAweGFhLCAweDBkLCAweDAwLCAweGUwLCAweDk4LCAweDAzLCAweDJiLCAweDhjICkKIAorI2RlZmluZSBVVl9TWVNURU1fVEFCTEVfR1VJRCBcCisgICAgRUZJX0dVSUQoICAweDNiMTNhN2Q0LCAweDYzM2UsIDB4MTFkZCwgMHg5MywgMHhlYywgMHhkYSwgMHgyNSwgMHg1NiwgMHhkOCwgMHg5NSwgMHg5MyApCisKIHR5cGVkZWYgc3RydWN0IHsKIAllZmlfZ3VpZF90IGd1aWQ7CiAJdW5zaWduZWQgbG9uZyB0YWJsZTsKQEAgLTI1NSw2ICsyNTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgYm9vdF9pbmZvOwkvKiBib290IGluZm8gdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nIGhjZHA7CQkvKiBIQ0RQIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyB1Z2E7CQkvKiBVR0EgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nIHV2X3N5c3RhYjsJLyogVVYgc3lzdGVtIHRhYmxlICovCiAJZWZpX2dldF90aW1lX3QgKmdldF90aW1lOwogCWVmaV9zZXRfdGltZV90ICpzZXRfdGltZTsKIAllZmlfZ2V0X3dha2V1cF90aW1lX3QgKmdldF93YWtldXBfdGltZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggMTU5ZDliNC4uZDE0ZjAyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTM4MCw2ICszODAsOCBAQAogI2RlZmluZSBFWFQzX01PVU5UX1FVT1RBCQkweDgwMDAwIC8qIFNvbWUgcXVvdGEgb3B0aW9uIHNldCAqLwogI2RlZmluZSBFWFQzX01PVU5UX1VTUlFVT1RBCQkweDEwMDAwMCAvKiAib2xkIiB1c2VyIHF1b3RhICovCiAjZGVmaW5lIEVYVDNfTU9VTlRfR1JQUVVPVEEJCTB4MjAwMDAwIC8qICJvbGQiIGdyb3VwIHF1b3RhICovCisjZGVmaW5lIEVYVDNfTU9VTlRfREFUQV9FUlJfQUJPUlQJMHg0MDAwMDAgLyogQWJvcnQgb24gZmlsZSBkYXRhIHdyaXRlCisJCQkJCQkgICogZXJyb3IgaW4gb3JkZXJlZCBtb2RlICovCiAKIC8qIENvbXBhdGliaWxpdHksIGZvciBoYXZpbmcgYm90aCBleHQyX2ZzLmggYW5kIGV4dDNfZnMuaCBpbmNsdWRlZCBhdCBvbmNlICovCiAjaWZuZGVmIF9MSU5VWF9FWFQyX0ZTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCA1MzFjY2Q1Li43NWE4MWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC04MDgsNiArODA4LDcgQEAKIHN0cnVjdCBmYl9pbmZvIHsKIAlpbnQgbm9kZTsKIAlpbnQgZmxhZ3M7CisJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBMb2NrIGZvciBvcGVuL3JlbGVhc2UvaW9jdGwgZnVuY3MgKi8KIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwkvKiBDdXJyZW50IHZhciAqLwogCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBmaXg7CS8qIEN1cnJlbnQgZml4ICovCiAJc3RydWN0IGZiX21vbnNwZWNzIG1vbnNwZWNzOwkvKiBDdXJyZW50IE1vbml0b3Igc3BlY3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGVkZGVlZC4uOGYyMjUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNpZmRlZiBDT05GSUdfRlJFRVpFUgogLyoKICAqIENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgYmVlbiBmcm96ZW4KICAqLwpAQCAtMzksMjggKzM5LDE4IEBACiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9GUkVFWkUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOworfQorCiAvKgogICogV2FrZSB1cCBhIGZyb3plbiBwcm9jZXNzCi0gKgotICogdGFza19sb2NrKCkgaXMgdGFrZW4gdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQotICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKLSAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KLSAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQotICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl0YXNrX2xvY2socCk7Ci0JaWYgKGZyb3plbihwKSkgewotCQlwLT5mbGFncyAmPSB+UEZfRlJPWkVOOwotCQl0YXNrX3VubG9jayhwKTsKLQkJd2FrZV91cF9wcm9jZXNzKHApOwotCQlyZXR1cm4gMTsKLQl9Ci0JY2xlYXJfZnJlZXplX2ZsYWcocCk7Ci0JdGFza191bmxvY2socCk7Ci0JcmV0dXJuIDA7Ci19CitleHRlcm4gaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFRha2VzIGFuZCByZWxlYXNlcyB0YXNrIGFsbG9jIGxvY2sgdXNpbmcgdGFza19sb2NrKCkgKi8KK2V4dGVybiBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIGV4dGVybiB2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKTsKIGV4dGVybiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKTsKQEAgLTc1LDYgKzY1LDE1IEBACiAJCXJldHVybiAwOwogfQogCitleHRlcm4gYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpOworZXh0ZXJuIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK2V4dGVybiBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBfRlJFRVpFUiAqLworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvKiAhQ09ORklHX0NHUk9VUF9GUkVFWkVSICovCisKIC8qCiAgKiBUaGUgUEZfRlJFRVpFUl9TS0lQIGZsYWcgc2hvdWxkIGJlIHNldCBieSBhIHZmb3JrIHBhcmVudCByaWdodCBiZWZvcmUgaXQKICAqIGNhbGxzIHdhaXRfZm9yX2NvbXBsZXRpb24oJnZmb3JrKSBhbmQgcmVzZXQgcmlnaHQgYWZ0ZXIgaXQgcmV0dXJucyBmcm9tIHRoaXMKQEAgLTE2Niw3ICsxNjUsNyBAQAogCX0gd2hpbGUgKHRyeV90b19mcmVlemUoKSk7CQkJCQlcCiAJX19yZXR2YWw7CQkJCQkJCVwKIH0pCi0jZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZWxzZSAvKiAhQ09ORklHX0ZSRUVaRVIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlemVfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9CkBAIC0xOTEsNiArMTkwLDYgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT05GSUdfRlJFRVpFUiAqLwogCiAjZW5kaWYJLyogRlJFRVpFUl9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBiYjM4NDA2Li5hM2Q0NjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEsMTAgKzEsMTQgQEAKICNpZm5kZWYgX0xJTlVYX0ZUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSAogCi0jaWZkZWYgQ09ORklHX0ZUUkFDRQotCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCisjaWZkZWYgQ09ORklHX0ZUUkFDRQogCiBleHRlcm4gaW50IGZ0cmFjZV9lbmFibGVkOwogZXh0ZXJuIGludApAQCAtMzYsNiArNDAsNyBAQAogIyBkZWZpbmUgcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcykgZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24ob3BzKSBkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBjbGVhcl9mdHJhY2VfZnVuY3Rpb24ob3BzKSBkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2tpbGxfYXRvbWljKHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQpAQCAtNzYsOCArODEsMTAgQEAKIAogZXh0ZXJuIGludCBza2lwX3RyYWNlKHVuc2lnbmVkIGxvbmcgaXApOwogCi12b2lkIGZ0cmFjZV9kaXNhYmxlX2RhZW1vbih2b2lkKTsKLXZvaWQgZnRyYWNlX2VuYWJsZV9kYWVtb24odm9pZCk7CitleHRlcm4gdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworZXh0ZXJuIHZvaWQgZnRyYWNlX2Rpc2FibGVfZGFlbW9uKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2VuYWJsZV9kYWVtb24odm9pZCk7CiAKICNlbHNlCiAjIGRlZmluZSBza2lwX3RyYWNlKGlwKQkJCQkoeyAwOyB9KQpAQCAtODUsNiArOTIsNyBAQAogIyBkZWZpbmUgZnRyYWNlX3NldF9maWx0ZXIoYnVmLCBsZW4sIHJlc2V0KQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2VfZGlzYWJsZV9kYWVtb24oKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2VuYWJsZV9kYWVtb24oKQkJCWRvIHsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKSB7IH0KICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAogLyogdG90YWxseSBkaXNhYmxlIGZ0cmFjZSAtIGNhbiBub3QgcmUtZW5hYmxlIGFmdGVyIHRoaXMgKi8KQEAgLTk4LDkgKzEwNiwxMSBAQAogI2VuZGlmCiB9CiAKLS8qIEZ0cmFjZSBkaXNhYmxlL3Jlc3RvcmUgd2l0aG91dCBsb2NrLiBTb21lIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20KKy8qCisgKiBGdHJhY2UgZGlzYWJsZS9yZXN0b3JlIHdpdGhvdXQgbG9jay4gU29tZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtCiAgKiBtdXN0IGJlIHVzZWQgdG8gcHJldmVudCBmdHJhY2VfZW5hYmxlZCB0byBiZSBjaGFuZ2VkIGJldHdlZW4KLSAqIGRpc2FibGUvcmVzdG9yZS4gKi8KKyAqIGRpc2FibGUvcmVzdG9yZS4KKyAqLwogc3RhdGljIGlubGluZSBpbnQgX19mdHJhY2VfZW5hYmxlZF9zYXZlKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0ZUUkFDRQpAQCAtMTU3LDkgKzE2Nyw3MSBAQAogI2lmZGVmIENPTkZJR19UUkFDSU5HCiBleHRlcm4gdm9pZAogZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMyk7CisKKy8qKgorICogZnRyYWNlX3ByaW50ayAtIHByaW50ZiBmb3JtYXR0aW5nIGluIHRoZSBmdHJhY2UgYnVmZmVyCisgKiBAZm10OiB0aGUgcHJpbnRmIGZvcm1hdCBmb3IgcHJpbnRpbmcKKyAqCisgKiBOb3RlOiBfX2Z0cmFjZV9wcmludGsgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGZ0cmFjZV9wcmludGsgYW5kCisgKiAgICAgICB0aGUgQGlwIGlzIHBhc3NlZCBpbiB2aWEgdGhlIGZ0cmFjZV9wcmludGsgbWFjcm8uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBrZXJuZWwgZGV2ZWxvcGVyIHRvIGRlYnVnIGZhc3QgcGF0aCBzZWN0aW9ucworICogdGhhdCBwcmludGsgaXMgbm90IGFwcHJvcHJpYXRlIGZvci4gQnkgc2NhdHRlcmluZyBpbiB2YXJpb3VzCisgKiBwcmludGsgbGlrZSB0cmFjaW5nIGluIHRoZSBjb2RlLCBhIGRldmVsb3BlciBjYW4gcXVpY2tseSBzZWUKKyAqIHdoZXJlIHByb2JsZW1zIGFyZSBvY2N1cnJpbmcuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCBhcyBhIGRlYnVnZ2luZyB0b29sIGZvciB0aGUgZGV2ZWxvcGVyIG9ubHkuCisgKiBQbGVhc2UgcmVmcmFpbiBmcm9tIGxlYXZpbmcgZnRyYWNlX3ByaW50a3Mgc2NhdHRlcmVkIGFyb3VuZCBpbgorICogeW91ciBjb2RlLgorICovCisjIGRlZmluZSBmdHJhY2VfcHJpbnRrKGZtdC4uLikgX19mdHJhY2VfcHJpbnRrKF9USElTX0lQXywgZm10KQorZXh0ZXJuIGludAorX19mdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZAogZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykgeyB9CitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpOworCitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZHVtcCh2b2lkKSB7IH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECitleHRlcm4gdm9pZCBmdHJhY2VfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9pbml0X21vZHVsZSh1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK2Z0cmFjZV9pbml0X21vZHVsZSh1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKSB7IH0KKyNlbmRpZgorCisKK3N0cnVjdCBib290X3RyYWNlIHsKKwlwaWRfdAkJCWNhbGxlcjsKKwljaGFyCQkJZnVuY1tLU1lNX05BTUVfTEVOXTsKKwlpbnQJCQlyZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBsb25nCWR1cmF0aW9uOwkJLyogdXNlY3MgKi8KKwlrdGltZV90CQkJY2FsbHRpbWU7CisJa3RpbWVfdAkJCXJldHRpbWU7Cit9OworCisjaWZkZWYgQ09ORklHX0JPT1RfVFJBQ0VSCitleHRlcm4gdm9pZCB0cmFjZV9ib290KHN0cnVjdCBib290X3RyYWNlICppdCwgaW5pdGNhbGxfdCBmbik7CitleHRlcm4gdm9pZCBzdGFydF9ib290X3RyYWNlKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcF9ib290X3RyYWNlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9ib290KHN0cnVjdCBib290X3RyYWNlICppdCwgaW5pdGNhbGxfdCBmbikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfYm9vdF90cmFjZSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2Jvb3RfdHJhY2Uodm9pZCkgeyB9CisjZW5kaWYKKworCisKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnVzZS5oIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKaW5kZXggMjY1NjM1ZC4uMzUwZmU5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKQEAgLTE3LDggKzE3LDE0IEBACiAgKiAgLSBhZGQgbG9ja19vd25lciBmaWVsZCB0byBmdXNlX3NldGF0dHJfaW4sIGZ1c2VfcmVhZF9pbiBhbmQgZnVzZV93cml0ZV9pbgogICogIC0gYWRkIGJsa3NpemUgZmllbGQgdG8gZnVzZV9hdHRyCiAgKiAgLSBhZGQgZmlsZSBmbGFncyBmaWVsZCB0byBmdXNlX3JlYWRfaW4gYW5kIGZ1c2Vfd3JpdGVfaW4KKyAqCisgKiA3LjEwCisgKiAgLSBhZGQgbm9uc2Vla2FibGUgb3BlbiBmbGFnCiAgKi8KIAorI2lmbmRlZiBfTElOVVhfRlVTRV9ICisjZGVmaW5lIF9MSU5VWF9GVVNFX0gKKwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAKQEAgLTI2LDcgKzMyLDcgQEAKICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3CiAKIC8qKiBNaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGludGVyZmFjZSAqLwotI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDkKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAxMAogCiAvKiogVGhlIG5vZGUgSUQgb2YgdGhlIHJvb3QgaW5vZGUgKi8KICNkZWZpbmUgRlVTRV9ST09UX0lEIDEKQEAgLTk4LDkgKzEwNCwxMSBAQAogICoKICAqIEZPUEVOX0RJUkVDVF9JTzogYnlwYXNzIHBhZ2UgY2FjaGUgZm9yIHRoaXMgb3BlbiBmaWxlCiAgKiBGT1BFTl9LRUVQX0NBQ0hFOiBkb24ndCBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIG9uIG9wZW4KKyAqIEZPUEVOX05PTlNFRUtBQkxFOiB0aGUgZmlsZSBpcyBub3Qgc2Vla2FibGUKICAqLwogI2RlZmluZSBGT1BFTl9ESVJFQ1RfSU8JCSgxIDw8IDApCiAjZGVmaW5lIEZPUEVOX0tFRVBfQ0FDSEUJKDEgPDwgMSkKKyNkZWZpbmUgRk9QRU5fTk9OU0VFS0FCTEUJKDEgPDwgMikKIAogLyoqCiAgKiBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3MKQEAgLTQwOSwzICs0MTcsNSBAQAogI2RlZmluZSBGVVNFX0RJUkVOVF9BTElHTih4KSAoKCh4KSArIHNpemVvZihfX3U2NCkgLSAxKSAmIH4oc2l6ZW9mKF9fdTY0KSAtIDEpKQogI2RlZmluZSBGVVNFX0RJUkVOVF9TSVpFKGQpIFwKIAlGVVNFX0RJUkVOVF9BTElHTihGVVNFX05BTUVfT0ZGU0VUICsgKGQpLT5uYW1lbGVuKQorCisjZW5kaWYgLyogX0xJTlVYX0ZVU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCA1OGJjYThlLi4yYjM2NDViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtMTMzLDEyICsxMzMsMTIgQEAKIAllbnVtIGhydGltZXJfcmVzdGFydAkJKCpmdW5jdGlvbikoc3RydWN0IGhydGltZXIgKik7CiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZQkqYmFzZTsKIAl1bnNpZ25lZCBsb25nCQkJc3RhdGU7Ci0JZW51bSBocnRpbWVyX2NiX21vZGUJCWNiX21vZGU7CiAJc3RydWN0IGxpc3RfaGVhZAkJY2JfZW50cnk7CisJZW51bSBocnRpbWVyX2NiX21vZGUJCWNiX21vZGU7CiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCisJaW50CQkJCXN0YXJ0X3BpZDsKIAl2b2lkCQkJCSpzdGFydF9zaXRlOwogCWNoYXIJCQkJc3RhcnRfY29tbVsxNl07Ci0JaW50CQkJCXN0YXJ0X3BpZDsKICNlbmRpZgogfTsKIApAQCAtMTYzLDEwICsxNjMsOCBAQAogICogQGZpcnN0OgkJcG9pbnRlciB0byB0aGUgdGltZXIgbm9kZSB3aGljaCBleHBpcmVzIGZpcnN0CiAgKiBAcmVzb2x1dGlvbjoJCXRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jaywgaW4gbmFub3NlY29uZHMKICAqIEBnZXRfdGltZToJCWZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIGNsb2NrCi0gKiBAZ2V0X3NvZnRpcnFfdGltZToJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBzb2Z0aXJxCiAgKiBAc29mdGlycV90aW1lOgl0aGUgdGltZSB3aGVuIHJ1bm5pbmcgdGhlIGhydGltZXIgcXVldWUgaW4gdGhlIHNvZnRpcnEKICAqIEBvZmZzZXQ6CQlvZmZzZXQgb2YgdGhpcyBjbG9jayB0byB0aGUgbW9ub3RvbmljIGJhc2UKLSAqIEByZXByb2dyYW06CQlmdW5jdGlvbiB0byByZXByb2dyYW0gdGhlIHRpbWVyIGV2ZW50CiAgKi8KIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgewogCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlCSpjcHVfYmFzZTsKQEAgLTE3NSwxMyArMTczLDkgQEAKIAlzdHJ1Y3QgcmJfbm9kZQkJKmZpcnN0OwogCWt0aW1lX3QJCQlyZXNvbHV0aW9uOwogCWt0aW1lX3QJCQkoKmdldF90aW1lKSh2b2lkKTsKLQlrdGltZV90CQkJKCpnZXRfc29mdGlycV90aW1lKSh2b2lkKTsKIAlrdGltZV90CQkJc29mdGlycV90aW1lOwogI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKIAlrdGltZV90CQkJb2Zmc2V0OwotCWludAkJCSgqcmVwcm9ncmFtKShzdHJ1Y3QgaHJ0aW1lciAqdCwKLQkJCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiLAotCQkJCQkgICAgIGt0aW1lX3Qgbik7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWlkLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCmluZGV4IDQ5MzQzNWIuLjAxZDY3YmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfV004Nzc1CTY5CS8qIHdtODc3NSBhdWRpbyBwcm9jZXNzb3IJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0NTNTNMMzJBCTcwCS8qIGNzNTNsMzJhIGF1ZGlvIHByb2Nlc3NvcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQ1gyNTg0MAk3MQkvKiBjeDI1ODR4IHZpZGVvIGVuY29kZXIJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMjcJNzIJLyogc2FhNzEyNCB2aWRlbyBlbmNvZGVyCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTI3CTcyCS8qIHNhYTcxMjcgdmlkZW8gZW5jb2RlcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzExWAk3MwkvKiBzYWE3MTF4IHZpZGVvIGVuY29kZXJzCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9BS0lUQUlPRVhQCTc0CS8qIElPIEV4cGFuZGVyIG9uIFNoYXJwIFNMLUMxMDAwICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9JTkZSQVJFRAk3NQkvKiBJMkMgSW5mcmFSZWQgb24gVmlkZW8gYm9hcmRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiNDUzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaApAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIHR3bDQwMzAuaCAtIGhlYWRlciBmb3IgVFdMNDAzMCBQTSBhbmQgYXVkaW8gQ09ERUMgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBCYXNlZCBvbiB0bHYzMjBhaWMyMy5jOgorICogQ29weXJpZ2h0IChjKSBieSBLYWkgU3ZhaG4gPGthaS5zdmFobkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19UV0w0MDMwX0hfCisjZGVmaW5lIF9fVFdMNDAzMF9IXworCisvKgorICogVXNpbmcgdGhlIHR3bDQwMzAgY29yZSB3ZSBhZGRyZXNzIHJlZ2lzdGVycyB1c2luZyBhIHBhaXIKKyAqCXsgbW9kdWxlIGlkLCByZWxhdGl2ZSByZWdpc3RlciBvZmZzZXQgfQorICogd2hpY2ggdGhhdCBjb3JlIHRoZW4gbWFwcyB0byB0aGUgcmVsZXZhbnQKKyAqCXsgaTJjIHNsYXZlLCBhYnNvbHV0ZSByZWdpc3RlciBhZGRyZXNzIH0KKyAqCisgKiBUaGUgbW9kdWxlIElEcyBhcmUgbWVhbmluZ2Z1bCBvbmx5IHRvIHRoZSB0d2w0MDMwIGNvcmUgY29kZSwKKyAqIHdoaWNoIHVzZXMgdGhlbSBhcyBhcnJheSBpbmRpY2VzIHRvIGxvb2sgdXAgdGhlIGZpcnN0IHJlZ2lzdGVyCisgKiBhZGRyZXNzIGVhY2ggbW9kdWxlIHVzZXMgd2l0aGluIGEgZ2l2ZW4gaTJjIHNsYXZlLgorICovCisKKy8qIFNsYXZlIDAgKGkyYyBhZGRyZXNzIDB4NDgpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1VTQgkJMHgwMAorCisvKiBTbGF2ZSAxIChpMmMgYWRkcmVzcyAweDQ5KSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRQkweDAxCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0dQSU8JCTB4MDIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfSU5UQlIJCTB4MDMKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUElICQkweDA0CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1RFU1QJCTB4MDUKKworLyogU2xhdmUgMiAoaTJjIGFkZHJlc3MgMHg0YSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfS0VZUEFECQkweDA2CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX01BREMJCTB4MDcKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUwkweDA4CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0xFRAkJMHgwOQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9NQUlOX0NIQVJHRQkweDBBCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BSRUNIQVJHRQkweDBCCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTTAJCTB4MEMKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNMQkJMHgwRAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV01BCQkweDBFCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTUIJCTB4MEYKKworLyogU2xhdmUgMyAoaTJjIGFkZHJlc3MgMHg0YikgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfQkFDS1VQCQkweDEwCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVAkJMHgxMQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIJMHgxMgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUgkweDEzCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1JUQwkJMHgxNAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9TRUNVUkVEX1JFRwkweDE1CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSBzaW5nbGUgOC1iaXQgcmVnaXN0ZXJzCisgKi8KK2ludCB0d2w0MDMwX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbCwgdTggcmVnKTsKK2ludCB0d2w0MDMwX2kyY19yZWFkX3U4KHU4IG1vZF9ubywgdTggKnZhbCwgdTggcmVnKTsKKworLyoKKyAqIFJlYWQgYW5kIHdyaXRlIHNldmVyYWwgOC1iaXQgcmVnaXN0ZXJzIGF0IG9uY2UuCisgKgorICogSU1QT1JUQU5UOiAgRm9yIHR3bDQwMzBfaTJjX3dyaXRlKCksIGFsbG9jYXRlIG51bV9ieXRlcyArIDEKKyAqIGZvciB0aGUgdmFsdWUsIGFuZCBwb3B1bGF0ZSB5b3VyIGRhdGEgc3RhcnRpbmcgYXQgb2Zmc2V0IDEuCisgKi8KK2ludCB0d2w0MDMwX2kyY193cml0ZSh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1OCBudW1fYnl0ZXMpOworaW50IHR3bDQwMzBfaTJjX3JlYWQodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE5PVEU6ICBhdCB1cCB0byAxMDI0IHJlZ2lzdGVycywgdGhpcyBpcyBhIGJpZyBjaGlwLgorICoKKyAqIEF2b2lkIHB1dHRpbmcgcmVnaXN0ZXIgZGVjbGFyYXRpb25zIGluIHRoaXMgZmlsZSwgaW5zdGVhZCBvZiBpbnRvCisgKiBhIGRyaXZlci1wcml2YXRlIGZpbGUsIHVubGVzcyBzb21lIG9mIHRoZSByZWdpc3RlcnMgaW4gYSBibG9jaworICogbmVlZCB0byBiZSBzaGFyZWQgd2l0aCBvdGhlciBkcml2ZXJzLiAgT25lIGV4YW1wbGUgaXMgYmxvY2tzIHRoYXQKKyAqIGhhdmUgU2Vjb25kYXJ5IElSUSBIYW5kbGVyIChTSUgpIHJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIFRXTDQwMzBfU0lIX0NUUkxfRVhDTEVOX01BU0sJQklUKDApCisjZGVmaW5lIFRXTDQwMzBfU0lIX0NUUkxfUEVORERJU19NQVNLCUJJVCgxKQorI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLCUJJVCgyKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogR1BJTyBCbG9jayBSZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfR1BJTykKKyAqLworCisjZGVmaW5lIFJFR19HUElPREFUQUlOMQkJCTB4MAorI2RlZmluZSBSRUdfR1BJT0RBVEFJTjIJCQkweDEKKyNkZWZpbmUgUkVHX0dQSU9EQVRBSU4zCQkJMHgyCisjZGVmaW5lIFJFR19HUElPREFUQURJUjEJCTB4MworI2RlZmluZSBSRUdfR1BJT0RBVEFESVIyCQkweDQKKyNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMwkJMHg1CisjZGVmaW5lIFJFR19HUElPREFUQU9VVDEJCTB4NgorI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQyCQkweDcKKyNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMwkJMHg4CisjZGVmaW5lIFJFR19DTEVBUkdQSU9EQVRBT1VUMQkJMHg5CisjZGVmaW5lIFJFR19DTEVBUkdQSU9EQVRBT1VUMgkJMHhBCisjZGVmaW5lIFJFR19DTEVBUkdQSU9EQVRBT1VUMwkJMHhCCisjZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDEJCTB4QworI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQyCQkweEQKKyNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMwkJMHhFCisjZGVmaW5lIFJFR19HUElPX0RFQkVOMQkJCTB4RgorI2RlZmluZSBSRUdfR1BJT19ERUJFTjIJCQkweDEwCisjZGVmaW5lIFJFR19HUElPX0RFQkVOMwkJCTB4MTEKKyNkZWZpbmUgUkVHX0dQSU9fQ1RSTAkJCTB4MTIKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMQkJMHgxMworI2RlZmluZSBSRUdfR1BJT1BVUERDVFIyCQkweDE0CisjZGVmaW5lIFJFR19HUElPUFVQRENUUjMJCTB4MTUKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSNAkJMHgxNgorI2RlZmluZSBSRUdfR1BJT1BVUERDVFI1CQkweDE3CisjZGVmaW5lIFJFR19HUElPX0lTUjFBCQkJMHgxOQorI2RlZmluZSBSRUdfR1BJT19JU1IyQQkJCTB4MUEKKyNkZWZpbmUgUkVHX0dQSU9fSVNSM0EJCQkweDFCCisjZGVmaW5lIFJFR19HUElPX0lNUjFBCQkJMHgxQworI2RlZmluZSBSRUdfR1BJT19JTVIyQQkJCTB4MUQKKyNkZWZpbmUgUkVHX0dQSU9fSU1SM0EJCQkweDFFCisjZGVmaW5lIFJFR19HUElPX0lTUjFCCQkJMHgxRgorI2RlZmluZSBSRUdfR1BJT19JU1IyQgkJCTB4MjAKKyNkZWZpbmUgUkVHX0dQSU9fSVNSM0IJCQkweDIxCisjZGVmaW5lIFJFR19HUElPX0lNUjFCCQkJMHgyMgorI2RlZmluZSBSRUdfR1BJT19JTVIyQgkJCTB4MjMKKyNkZWZpbmUgUkVHX0dQSU9fSU1SM0IJCQkweDI0CisjZGVmaW5lIFJFR19HUElPX0VEUjEJCQkweDI4CisjZGVmaW5lIFJFR19HUElPX0VEUjIJCQkweDI5CisjZGVmaW5lIFJFR19HUElPX0VEUjMJCQkweDJBCisjZGVmaW5lIFJFR19HUElPX0VEUjQJCQkweDJCCisjZGVmaW5lIFJFR19HUElPX0VEUjUJCQkweDJDCisjZGVmaW5lIFJFR19HUElPX1NJSF9DVFJMCQkweDJECisKKy8qIFVwIHRvIDE4IHNpZ25hbHMgYXJlIGF2YWlsYWJsZSBhcyBHUElPcywgd2hlbiB0aGVpcgorICogcGlucyBhcmUgbm90IGFzc2lnbmVkIHRvIGFub3RoZXIgdXNlIChzdWNoIGFzIFVMUEkvVVNCKS4KKyAqLworI2RlZmluZSBUV0w0MDMwX0dQSU9fTUFYCQkxOAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogS2V5cGFkIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9LRVlQQUQpCisgKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5CisgKi8KKworI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lTUjEJMHgxMQorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lNUjEJMHgxMgorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lTUjIJMHgxMworI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lNUjIJMHgxNAorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJUgkJMHgxNQkvKiB0ZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfRURSCQkweDE2CisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfU0lIX0NUUkwJMHgxNworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogTXVsdGljaGFubmVsIEFEQyByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfTUFEQykKKyAqIC4uLiBTSUgvaW50ZXJydXB0IG9ubHkKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfTUFEQ19JU1IxCQkweDYxCisjZGVmaW5lIFRXTDQwMzBfTUFEQ19JTVIxCQkweDYyCisjZGVmaW5lIFRXTDQwMzBfTUFEQ19JU1IyCQkweDYzCisjZGVmaW5lIFRXTDQwMzBfTUFEQ19JTVIyCQkweDY0CisjZGVmaW5lIFRXTDQwMzBfTUFEQ19TSVIJCTB4NjUJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX01BRENfRURSCQkweDY2CisjZGVmaW5lIFRXTDQwMzBfTUFEQ19TSUhfQ1RSTAkJMHg2NworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQmF0dGVyeSBjaGFyZ2VyIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTKQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFBCTB4MAorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkEJMHgxCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQQkweDIKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJBCTB4MworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUIJMHg0CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQgkweDUKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFCCTB4NgorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMkIJMHg3CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSVIxCTB4OAkvKiB0ZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSVIyCTB4OQkvKiB0ZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIxCTB4YQorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMgkweGIKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjMJMHhjCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSUhDVFJMCTB4ZAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogUG93ZXIgSW50ZXJydXB0IGJsb2NrIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9JTlQpCisgKi8KKworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSVNSMQkJMHgwCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JTVIxCQkweDEKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lTUjIJCTB4MgorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSU1SMgkJMHgzCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9TSVIJCTB4NAkvKiB0ZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIxCQkweDUKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0VEUjIJCTB4NgorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfU0lIX0NUUkwJMHg3CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCB0d2w0MDMwX2JjaV9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgKmJhdHRlcnlfdG1wX3RibDsKKwl1bnNpZ25lZCBpbnQgdGJsc2l6ZTsKK307CisKKy8qIFRXTDQwMzBfR1BJT19NQVggKDE4KSBHUElPcywgd2l0aCBpbnRlcnJ1cHRzICovCitzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgeworCWludAkJZ3Bpb19iYXNlOworCXVuc2lnbmVkCWlycV9iYXNlLCBpcnFfZW5kOworCisJLyogRm9yIGdwaW8tTiwgYml0ICgxIDw8IE4pIGluICJwdWxsdXBzIiBpcyBzZXQgaWYgdGhhdCBwdWxsdXAKKwkgKiBzaG91bGQgYmUgZW5hYmxlZC4gIEVsc2UsIGlmIHRoYXQgYml0IGlzIHNldCBpbiAicHVsbGRvd25zIiwKKwkgKiB0aGF0IHB1bGxkb3duIGlzIGVuYWJsZWQuICBEb24ndCB3YXN0ZSBwb3dlciBieSBsZXR0aW5nIGFueQorCSAqIGRpZ2l0YWwgaW5wdXRzIGZsb2F0Li4uCisJICovCisJdTMyCQlwdWxsdXBzOworCXUzMgkJcHVsbGRvd25zOworCisJaW50CQkoKnNldHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pOworCWludAkJKCp0ZWFyZG93bikoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKTsKK307CisKK3N0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YSB7CisJaW50CQlpcnFfbGluZTsKK307CisKK3N0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHsKKwlpbnQgcm93czsKKwlpbnQgY29sczsKKwlpbnQgKmtleW1hcDsKKwlpbnQgaXJxOworCXVuc2lnbmVkIGludCBrZXltYXBzaXplOworCXVuc2lnbmVkIGludCByZXA6MTsKK307CisKK2VudW0gdHdsNDAzMF91c2JfbW9kZSB7CisJVDJfVVNCX01PREVfVUxQSSA9IDEsCisJVDJfVVNCX01PREVfQ0VBMjAxMV8zUElOID0gMiwKK307CisKK3N0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIHsKKwllbnVtIHR3bDQwMzBfdXNiX21vZGUJdXNiX21vZGU7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZAkJCQlpcnFfYmFzZSwgaXJxX2VuZDsKKwlzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YQkqYmNpOworCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YQkqZ3BpbzsKKwlzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEJKm1hZGM7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEJCSprZXlwYWQ7CisJc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEJCQkqdXNiOworCisJLyogUkVWSVNJVCBtb3JlIHRvIGNvbWUgLi4uIF9ub3RoaW5nXyBzaG91bGQgYmUgaGFyZC13aXJlZCAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEZJWE1FIGNvbXBsZXRlbHkgc3RvcCB1c2luZyBUV0w0MDMwX0lSUV9CQVNFIC4uLiBpbnN0ZWFkLCBwYXNzIHRoZQorICogSVJRIGRhdGEgdG8gc3Vic2lkaWFyeSBkZXZpY2VzIHVzaW5nIHBsYXRmb3JtIGRldmljZSByZXNvdXJjZXMuCisgKi8KKworLyogSVJRIGluZm9ybWF0aW9uLW5lZWQgYmFzZSAqLworI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorLyogVFdMNDAzMCBpbnRlcnJ1cHRzICovCisKKy8qICNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfR1BJTwkJKFRXTDQwMzBfSVJRX0JBU0UgKyAwKSAqLworI2RlZmluZSBUV0w0MDMwX01PRElSUV9LRVlQQUQJCShUV0w0MDMwX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfQkNJCQkoVFdMNDAzMF9JUlFfQkFTRSArIDIpCisjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX01BREMJCShUV0w0MDMwX0lSUV9CQVNFICsgMykKKy8qICNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfVVNCCQkoVFdMNDAzMF9JUlFfQkFTRSArIDQpICovCisjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX1BXUgkJKFRXTDQwMzBfSVJRX0JBU0UgKyA1KQorCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX1BXUkJUTgkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMCkKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfQ0hHX1BSRVMJCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDEpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX1VTQl9QUkVTCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9SVEMJCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDMpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX0hPVF9ESUUJCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDQpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX1BXUk9LX1RJTUVPVVQJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNSkKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfTUJDSEcJCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDYpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX1NDX0RFVEVDVAkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA3KQorCisvKiBSZXN0IGFyZSB1bnN1ZWQgY3VycmVudGx5Ki8KKworLyogT2Zmc2V0cyB0byBQb3dlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFdMNDAzMF9WREFDX0RFVl9HUlAJCTB4M0IKKyNkZWZpbmUgVFdMNDAzMF9WREFDX0RFRElDQVRFRAkJMHgzRQorI2RlZmluZSBUV0w0MDMwX1ZBVVgxX0RFVl9HUlAJCTB4MTcKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMV9ERURJQ0FURUQJCTB4MUEKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMl9ERVZfR1JQCQkweDFCCisjZGVmaW5lIFRXTDQwMzBfVkFVWDJfREVESUNBVEVECQkweDFFCisjZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVWX0dSUAkJMHgxRgorI2RlZmluZSBUV0w0MDMwX1ZBVVgzX0RFRElDQVRFRAkJMHgyMgorCisvKiBUV0w0MDMwIEdQSU8gaW50ZXJydXB0IGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgVFdMNDAzMF9HUElPX0lSUV9OTyhuKQkJKFRXTDQwMzBfR1BJT19JUlFfQkFTRSArIChuKSkKKyNkZWZpbmUgVFdMNDAzMF9HUElPX0lTX0VOQUJMRQkJMQorCisvKgorICogRXhwb3J0ZWQgVFdMNDAzMCBHUElPIEFQSXMKKyAqCisgKiBXQVJOSU5HIC0tIHVzZSBzdGFuZGFyZCBHUElPIGFuZCBJUlEgY2FsbHMgaW5zdGVhZDsgdGhlc2Ugd2lsbCB2YW5pc2guCisgKi8KK2ludCB0d2w0MDMwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3Bpbyk7CitpbnQgdHdsNDAzMF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pOworaW50IHR3bDQwMzBfc2V0X2dwaW9fZGVib3VuY2UoaW50IGdwaW8sIGludCBlbmFibGUpOworaW50IHR3bDQwMzBfZnJlZV9ncGlvKGludCBncGlvKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUlkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZX01PRFVMRSkKKwlleHRlcm4gaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKTsKKyNlbHNlCisJc3RhdGljIGlubGluZSBpbnQgdHdsNDAzMGNoYXJnZXJfdXNiX2VuKGludCBlbmFibGUpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjZW5kaWYgLyogRW5kIG9mIF9fVFdMNDAzMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCBjNDdlMzcxLi44OWU1M2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTQ2MSwxMiArNDYxLDI2IEBACiBzdHJ1Y3QgaWRlX2FjcGlfaHdpZl9saW5rOwogI2VuZGlmCiAKK3N0cnVjdCBpZGVfZHJpdmVfczsKKworc3RydWN0IGlkZV9kaXNrX29wcyB7CisJaW50CQkoKmNoZWNrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgY29uc3QgY2hhciAqKTsKKwlpbnQJCSgqZ2V0X2NhcGFjaXR5KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkJKCpzZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCXZvaWQJCSgqZmx1c2gpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwlpbnQJCSgqaW5pdF9tZWRpYSkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBnZW5kaXNrICopOworCWludAkJKCpzZXRfZG9vcmxvY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgZ2VuZGlzayAqLAorCQkJCQlpbnQpOworCWlkZV9zdGFydHN0b3BfdAkoKmRvX3JlcXVlc3QpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorCQkJCSAgICAgIHNlY3Rvcl90KTsKKwlpbnQJCSgqZW5kX3JlcXVlc3QpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQsIGludCk7CisJaW50CQkoKmlvY3RsKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlub2RlICosCisJCQkJIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Cit9OworCiAvKiBBVEFQSSBkZXZpY2UgZmxhZ3MgKi8KIGVudW0gewogCUlERV9BRkxBR19EUlFfSU5URVJSVVBUCQk9ICgxIDw8IDApLAotCUlERV9BRkxBR19NRURJQV9DSEFOR0VECQk9ICgxIDw8IDEpLAotCS8qIERyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLiAqLwotCUlERV9BRkxBR19OT19ET09STE9DSwkJPSAoMSA8PCAyKSwKIAogCS8qIGlkZS1jZCAqLwogCS8qIERyaXZlIGNhbm5vdCBlamVjdCB0aGUgZGlzYy4gKi8KQEAgLTQ5OCwxNCArNTEyLDEwIEBACiAJSURFX0FGTEFHX0xFX1NQRUVEX0ZJRUxEUwk9ICgxIDw8IDE3KSwKIAogCS8qIGlkZS1mbG9wcHkgKi8KLQkvKiBGb3JtYXQgaW4gcHJvZ3Jlc3MgKi8KLQlJREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTCT0gKDEgPDwgMTgpLAogCS8qIEF2b2lkIGNvbW1hbmRzIG5vdCBzdXBwb3J0ZWQgaW4gQ2xpayBkcml2ZSAqLwogCUlERV9BRkxBR19DTElLX0RSSVZFCQk9ICgxIDw8IDE5KSwKIAkvKiBSZXF1aXJlcyBCSCBhbGdvcml0aG0gZm9yIHBhY2tldHMgKi8KIAlJREVfQUZMQUdfWklQX0RSSVZFCQk9ICgxIDw8IDIwKSwKLQkvKiBXcml0ZSBwcm90ZWN0ICovCi0JSURFX0FGTEFHX1dQCQkJPSAoMSA8PCAyMSksCiAJLyogU3VwcG9ydHMgZm9ybWF0IHByb2dyZXNzIHJlcG9ydCAqLwogCUlERV9BRkxBR19TUkZQCQkJPSAoMSA8PCAyMiksCiAKQEAgLTU3OCw3ICs1ODgsMTEgQEAKIAkvKiBkb24ndCB1bmxvYWQgaGVhZHMgKi8KIAlJREVfREZMQUdfTk9fVU5MT0FECQk9ICgxIDw8IDI3KSwKIAkvKiBoZWFkcyB1bmxvYWRlZCwgcGxlYXNlIGRvbid0IHJlc2V0IHBvcnQgKi8KLQlJREVfREZMQUdfUEFSS0VECQk9ICgxIDw8IDI4KQorCUlERV9ERkxBR19QQVJLRUQJCT0gKDEgPDwgMjgpLAorCUlERV9ERkxBR19NRURJQV9DSEFOR0VECQk9ICgxIDw8IDI5KSwKKwkvKiB3cml0ZSBwcm90ZWN0ICovCisJSURFX0RGTEFHX1dQCQkJPSAoMSA8PCAzMCksCisJSURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUwk9ICgxIDw8IDMxKSwKIH07CiAKIHN0cnVjdCBpZGVfZHJpdmVfcyB7CkBAIC01OTcsNiArNjExLDggQEAKICNlbmRpZgogCXN0cnVjdCBod2lmX3MJCSpod2lmOwkvKiBhY3R1YWxseSAoaWRlX2h3aWZfdCAqKSAqLwogCisJY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyAqZGlza19vcHM7CisKIAl1bnNpZ25lZCBsb25nIGRldl9mbGFnczsKIAogCXVuc2lnbmVkIGxvbmcgc2xlZXA7CQkvKiBzbGVlcCB1bnRpbCB0aGlzIHRpbWUgKi8KQEAgLTExMjMsOCArMTEzOSw4IEBACiAJdm9pZAkJKCpyZXN1bWUpKGlkZV9kcml2ZV90ICopOwogCXZvaWQJCSgqc2h1dGRvd24pKGlkZV9kcml2ZV90ICopOwogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCWlkZV9wcm9jX2VudHJ5X3QJCSpwcm9jOwotCWNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQJKnNldHRpbmdzOworCWlkZV9wcm9jX2VudHJ5X3QgKgkJKCpwcm9jX2VudHJpZXMpKGlkZV9kcml2ZV90ICopOworCWNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKgkoKnByb2NfZGV2c2V0cykoaWRlX2RyaXZlX3QgKik7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggYWQ2MzgyNC4uMGMxMjY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogLyogVGhlc2UgYXJlIGZvciBldmVyeWJvZHkgKGFsdGhvdWdoIG5vdCBhbGwgYXJjaHMgd2lsbCBhY3R1YWxseQogICAgZGlzY2FyZCBpdCBpbiBtb2R1bGVzKSAqLwotI2RlZmluZSBfX2luaXQJCV9fc2VjdGlvbiguaW5pdC50ZXh0KSBfX2NvbGQKKyNkZWZpbmUgX19pbml0CQlfX3NlY3Rpb24oLmluaXQudGV4dCkgX19jb2xkIG5vdHJhY2UKICNkZWZpbmUgX19pbml0ZGF0YQlfX3NlY3Rpb24oLmluaXQuZGF0YSkKICNkZWZpbmUgX19pbml0Y29uc3QJX19zZWN0aW9uKC5pbml0LnJvZGF0YSkKICNkZWZpbmUgX19leGl0ZGF0YQlfX3NlY3Rpb24oLmV4aXQuZGF0YSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDU0YjM2MjMuLmY1OGEwY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtOCw5ICs4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yNzMsNiArMjc2LDI1IEBACiBleHRlcm4gdm9pZCByYWlzZV9zb2Z0aXJxX2lycW9mZih1bnNpZ25lZCBpbnQgbnIpOwogZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycSh1bnNpZ25lZCBpbnQgbnIpOwogCisvKiBUaGlzIGlzIHRoZSB3b3JrbGlzdCB0aGF0IHF1ZXVlcyB1cCBwZXItY3B1IHNvZnRpcnEgd29yay4KKyAqCisgKiBzZW5kX3JlbW90ZV9zZW5kaXJxKCkgYWRkcyB3b3JrIHRvIHRoZXNlIGxpc3RzLCBhbmQKKyAqIHRoZSBzb2Z0aXJxIGhhbmRsZXIgaXRzZWxmIGRlcXVldWVzIGZyb20gdGhlbS4gIFRoZSBxdWV1ZXMKKyAqIGFyZSBwcm90ZWN0ZWQgYnkgZGlzYWJsaW5nIGxvY2FsIGNwdSBpbnRlcnJ1cHRzIGFuZCB0aGV5IG11c3QKKyAqIG9ubHkgYmUgYWNjZXNzZWQgYnkgdGhlIGxvY2FsIGNwdSB0aGF0IHRoZXkgYXJlIGZvci4KKyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQgW05SX1NPRlRJUlFTXSwgc29mdGlycV93b3JrX2xpc3QpOworCisvKiBUcnkgdG8gc2VuZCBhIHNvZnRpcnEgdG8gYSByZW1vdGUgY3B1LiAgSWYgdGhpcyBjYW5ub3QgYmUgZG9uZSwgdGhlCisgKiB3b3JrIHdpbGwgYmUgcXVldWVkIHRvIHRoZSBsb2NhbCBjcHUuCisgKi8KK2V4dGVybiB2b2lkIHNlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSk7CisKKy8qIExpa2Ugc2VuZF9yZW1vdGVfc29mdGlycSgpLCBidXQgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgbG9jYWwgY3B1IGludGVycnVwdHMKKyAqIGFuZCBjb21wdXRlIHRoZSBjdXJyZW50IGNwdSwgcGFzc2VkIGluIGFzICd0aGlzX2NwdScuCisgKi8KK2V4dGVybiB2b2lkIF9fc2VuZF9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsCisJCQkJICBpbnQgdGhpc19jcHUsIGludCBzb2Z0aXJxKTsKIAogLyogVGFza2xldHMgLS0tIG11bHRpdGhyZWFkZWQgYW5hbG9ndWUgb2YgQkhzLgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA4ZDk0MTFiLi5kMDU4YzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xNTIsNiArMTUzLDcgQEAKICAqIEBuYW1lOgkJZmxvdyBoYW5kbGVyIG5hbWUgZm9yIC9wcm9jL2ludGVycnVwdHMgb3V0cHV0CiAgKi8KIHN0cnVjdCBpcnFfZGVzYyB7CisJdW5zaWduZWQgaW50CQlpcnE7CiAJaXJxX2Zsb3dfaGFuZGxlcl90CWhhbmRsZV9pcnE7CiAJc3RydWN0IGlycV9jaGlwCQkqY2hpcDsKIAlzdHJ1Y3QgbXNpX2Rlc2MJCSptc2lfZGVzYzsKQEAgLTE3MCw3ICsxNzIsNyBAQAogCWNwdW1hc2tfdAkJYWZmaW5pdHk7CiAJdW5zaWduZWQgaW50CQljcHU7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkKENPTkZJR19JUlFCQUxBTkNFKQorI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAJY3B1bWFza190CQlwZW5kaW5nX21hc2s7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMTc5LDggKzE4MSwxNCBAQAogCWNvbnN0IGNoYXIJCSpuYW1lOwogfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCisKIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU107CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzYyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAoaXJxIDwgbnJfaXJxcykgPyBpcnFfZGVzYyArIGlycSA6IE5VTEw7Cit9CisKIC8qCiAgKiBNaWdyYXRpb24gaGVscGVycyBmb3Igb2Jzb2xldGUgbmFtZXMsIHRoZXkgd2lsbCBnbyBhd2F5OgogICovCkBAIC0xOTgsMTkgKzIwNiwxNSBAQAogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIAotI2lmbmRlZiBoYW5kbGVfZHluYW1pY190aWNrCi0jIGRlZmluZSBoYW5kbGVfZHluYW1pY190aWNrKGEpCQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIAotI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEpIHx8IGRlZmluZWQoQ09ORklHX0lSUUJBTEFOQ0UpCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKIAogdm9pZCBzZXRfcGVuZGluZ19pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spOwogdm9pZCBtb3ZlX25hdGl2ZV9pcnEoaW50IGlycSk7CiB2b2lkIG1vdmVfbWFza2VkX2lycShpbnQgaXJxKTsKIAotI2Vsc2UgLyogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEgfHwgQ09ORklHX0lSUUJBTEFOQ0UgKi8KKyNlbHNlIC8qIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2lycShpbnQgaXJxKQogewpAQCAtMjM3LDE5ICsyNDEsMTQgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmZGVmIENPTkZJR19JUlFCQUxBTkNFCi1leHRlcm4gdm9pZCBzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci19Ci0jZW5kaWYKLQogZXh0ZXJuIGludCBub19pcnFfYWZmaW5pdHk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV9iYWxhbmNpbmdfZGlzYWJsZWQodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTk9fQkFMQU5DSU5HX01BU0s7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJcmV0dXJuIGRlc2MtPnN0YXR1cyAmIElSUV9OT19CQUxBTkNJTkdfTUFTSzsKIH0KIAogLyogSGFuZGxlIGlycSBhY3Rpb24gY2hhaW5zOiAqLwpAQCAtMjc5LDEwICsyNzgsOCBAQAogICogaXJxY2hpcC1zdHlsZSBjb250cm9sbGVyIHRoZW4gd2UgY2FsbCB0aGUgLT5oYW5kbGVfaXJxKCkgaGFuZGxlciwKICAqIGFuZCBpdCBjYWxscyBfX2RvX0lSUSgpIGlmIGl0J3MgYXR0YWNoZWQgdG8gYW4gaXJxdHlwZS1zdHlsZSBjb250cm9sbGVyLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKICNlbHNlCkBAIC0yOTMsNiArMjkwLDExIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7Cit9CisKIC8qIEhhbmRsaW5nIG9mIHVuaGFuZGxlZCBhbmQgc3B1cmlvdXMgaW50ZXJydXB0czogKi8KIGV4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCSAgIGludCBhY3Rpb25fcmV0KTsKQEAgLTMyNSw3ICszMjcsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpbnQgaXJxLAogCQkJCQkgICAgICBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlcikKIHsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZV9pcnEgPSBoYW5kbGVyOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVyOwogfQogCiAvKgpAQCAtMzUzLDEzICszNTgsMTQgQEAKIGV4dGVybiB2b2lkIHNldF9pcnFfcHJvYmUodW5zaWduZWQgaW50IGlycSk7CiAKIC8qIEhhbmRsZSBkeW5hbWljIGlycSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQpOwogZXh0ZXJuIGludCBjcmVhdGVfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKIC8qIFRlc3QgdG8gc2VlIGlmIGEgZHJpdmVyIGhhcyBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIGFuIGlycSAqLwogc3RhdGljIGlubGluZSBpbnQgaXJxX2hhc19hY3Rpb24odW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXJldHVybiBkZXNjLT5hY3Rpb24gIT0gTlVMTDsKIH0KIApAQCAtMzc0LDEwICszODAsMTAgQEAKIGV4dGVybiBpbnQgc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKTsKIGV4dGVybiBpbnQgc2V0X2lycV9tc2kodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9kZXNjICplbnRyeSk7CiAKLSNkZWZpbmUgZ2V0X2lycV9jaGlwKGlycSkJKGlycV9kZXNjW2lycV0uY2hpcCkKLSNkZWZpbmUgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKQkoaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGEpCi0jZGVmaW5lIGdldF9pcnFfZGF0YShpcnEpCShpcnFfZGVzY1tpcnFdLmhhbmRsZXJfZGF0YSkKLSNkZWZpbmUgZ2V0X2lycV9tc2koaXJxKQkoaXJxX2Rlc2NbaXJxXS5tc2lfZGVzYykKKyNkZWZpbmUgZ2V0X2lycV9jaGlwKGlycSkJKGlycV90b19kZXNjKGlycSktPmNoaXApCisjZGVmaW5lIGdldF9pcnFfY2hpcF9kYXRhKGlycSkJKGlycV90b19kZXNjKGlycSktPmNoaXBfZGF0YSkKKyNkZWZpbmUgZ2V0X2lycV9kYXRhKGlycSkJKGlycV90b19kZXNjKGlycSktPmhhbmRsZXJfZGF0YSkKKyNkZWZpbmUgZ2V0X2lycV9tc2koaXJxKQkoaXJxX3RvX2Rlc2MoaXJxKS0+bXNpX2Rlc2MpCiAKICNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19IQVJESVJRUyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycW5yLmggYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3MWRkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXJxbnIuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9MSU5VWF9JUlFOUl9ICisjZGVmaW5lIF9MSU5VWF9JUlFOUl9ICisKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjIGRlZmluZSBucl9pcnFzCQlOUl9JUlFTCisKKyMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykJCVwKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2lycXM7IGlycSsrKQorI2Vsc2UKK2V4dGVybiBpbnQgbnJfaXJxczsKKworIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQkJXAorCWZvciAoaXJxID0gMCwgZGVzYyA9IGlycV9kZXNjOyBpcnEgPCBucl9pcnFzOyBpcnErKywgZGVzYysrKQorCisjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGlycSwgZGVzYykJCQlcCisJZm9yIChpcnEgPSBucl9pcnFzIC0xLCBkZXNjID0gaXJxX2Rlc2MgKyAobnJfaXJxcyAtMSApOwlcCisJICAgICBpcnEgPiAwOyBpcnEtLSwgZGVzYy0tKQorI2VuZGlmCisKKyNkZWZpbmUgZm9yX2VhY2hfaXJxX25yKGlycSkJCQlcCisJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCA3ZWJiY2IxLi4zNWQ0ZjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTgxNiw2ICs4MTYsOSBAQAogI2RlZmluZSBKRlNfRkxVU0hFRAkweDAwOAkvKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrIGhhcyBiZWVuIGZsdXNoZWQgKi8KICNkZWZpbmUgSkZTX0xPQURFRAkweDAxMAkvKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrIGhhcyBiZWVuIGxvYWRlZCAqLwogI2RlZmluZSBKRlNfQkFSUklFUgkweDAyMAkvKiBVc2UgSURFIGJhcnJpZXJzICovCisjZGVmaW5lIEpGU19BQk9SVF9PTl9TWU5DREFUQV9FUlIJMHgwNDAgIC8qIEFib3J0IHRoZSBqb3VybmFsIG9uIGZpbGUKKwkJCQkJCSogZGF0YSB3cml0ZSBlcnJvciBpbiBvcmRlcmVkCisJCQkJCQkqIG1vZGUgKi8KIAogLyoKICAqIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGpvdXJuYWxpbmcgdHJhbnNhY3Rpb24gYW5kIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCA0NjNkNmYxLi5jN2QxMDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtNjQxLDYgKzY0MSwxMSBAQAogCSAqLwogCWludCB0X2hhbmRsZV9jb3VudDsKIAorCS8qCisJICogRm9yIHVzZSBieSB0aGUgZmlsZXN5c3RlbSB0byBzdG9yZSBmcy1zcGVjaWZpYyBkYXRhCisJICogc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYW5zYWN0aW9uCisJICovCisJc3RydWN0IGxpc3RfaGVhZAl0X3ByaXZhdGVfbGlzdDsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyB7CkBAIC05MzUsNiArOTQwLDEwIEBACiAKIAlwaWRfdAkJCWpfbGFzdF9zeW5jX3dyaXRlcjsKIAorCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQgKi8KKwl2b2lkCQkJKCpqX2NvbW1pdF9jYWxsYmFjaykoam91cm5hbF90ICosCisJCQkJCQkgICAgIHRyYW5zYWN0aW9uX3QgKik7CisKIAkvKgogCSAqIEpvdXJuYWwgc3RhdGlzdGljcwogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggNjgwMzMxOC4uOTRkMTdmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0yNjUsNiArMjY1LDcgQEAKICNkZWZpbmUgVEFJTlRfRElFCQkJNwogI2RlZmluZSBUQUlOVF9PVkVSUklEREVOX0FDUElfVEFCTEUJOAogI2RlZmluZSBUQUlOVF9XQVJOCQkJOQorI2RlZmluZSBUQUlOVF9DUkFQCQkJMTAKIAogZXh0ZXJuIHZvaWQgZHVtcF9zdGFjayh2b2lkKSBfX2NvbGQ7CiAKQEAgLTQ5NSw0ICs0OTYsOSBAQAogI2RlZmluZSBOVU1BX0JVSUxEIDAKICNlbmRpZgogCisvKiBSZWJ1aWxkIGV2ZXJ5dGhpbmcgb24gQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JEICovCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECisjIGRlZmluZSBSRUJVSUxEX0RVRV9UT19GVFJBQ0VfTUNPVU5UX1JFQ09SRAorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IGNmOWY0MGEuLjRhMTQ1Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTM5LDE5ICszOSwzNCBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5yX2NvbnRleHRfc3dpdGNoZXModm9pZCk7CiAKK3N0cnVjdCBpcnFfZGVzYzsKKworc3RhdGljIGlubGluZSB2b2lkIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQoreworICAgICAgIHJldHVybiBrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV07Cit9CisKIC8qCiAgKiBOdW1iZXIgb2YgaW50ZXJydXB0cyBwZXIgc3BlY2lmaWMgSVJRIHNvdXJjZSwgc2luY2UgYm9vdHVwCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGtzdGF0X2lycXMoaW50IGlycSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXModW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgY3B1LCBzdW0gPSAwOworCXVuc2lnbmVkIGludCBzdW0gPSAwOworCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlzdW0gKz0ga3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdOworCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaXJxLCBjcHUpOwogCiAJcmV0dXJuIHN1bTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB0YXNrX2RlbHRhX2V4ZWMoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgYWNjb3VudF91c2VyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGNwdXRpbWVfdCk7CiBleHRlcm4gdm9pZCBhY2NvdW50X3VzZXJfdGltZV9zY2FsZWQoc3RydWN0IHRhc2tfc3RydWN0ICosIGNwdXRpbWVfdCk7CiBleHRlcm4gdm9pZCBhY2NvdW50X3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQsIGNwdXRpbWVfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaCBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCmluZGV4IDBiZTc3OTUuLjQ5N2IxZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCkBAIC0yOSw2ICsyOSw3IEBACiAgKgkJPGprZW5pc3RvQHVzLmlibS5jb20+ICBhbmQgUHJhc2FubmEgUyBQYW5jaGFtdWtoaQogICoJCTxwcmFzYW5uYUBpbi5pYm0uY29tPiBhZGRlZCBmdW5jdGlvbi1yZXR1cm4gcHJvYmVzLgogICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtNDcsNyArNDgsNyBAQAogI2RlZmluZSBLUFJPQkVfSElUX1NTRE9ORQkweDAwMDAwMDA4CiAKIC8qIEF0dGFjaCB0byBpbnNlcnQgcHJvYmVzIG9uIGFueSBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQqLwotI2RlZmluZSBfX2twcm9iZXMJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5rcHJvYmVzLnRleHQiKSkpCisjZGVmaW5lIF9fa3Byb2JlcwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmtwcm9iZXMudGV4dCIpKSkgbm90cmFjZQogCiBzdHJ1Y3Qga3Byb2JlOwogc3RydWN0IHB0X3JlZ3M7CkBAIC0yNTYsNyArMjU3LDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX0tQUk9CRVMgKi8KIAotI2RlZmluZSBfX2twcm9iZXMJLyoqLworI2RlZmluZSBfX2twcm9iZXMJbm90cmFjZQogc3RydWN0IGpwcm9iZTsKIHN0cnVjdCBrcmV0cHJvYmU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKaW5kZXggNTZiYTM3My4uOWZkMWY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTQsOCArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgogCi0jZGVmaW5lIG5vdHJhY2UgX19hdHRyaWJ1dGVfXygobm9faW5zdHJ1bWVudF9mdW5jdGlvbikpCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogI2RlZmluZSBDUFBfQVNNTElOS0FHRSBleHRlcm4gIkMiCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXJrZXIuaCBiL2luY2x1ZGUvbGludXgvbWFya2VyLmgKaW5kZXggMTI5MDY1My4uODg5MTk2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXJrZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hcmtlci5oCkBAIC0xNjAsNCArMTYwLDExIEBACiBleHRlcm4gdm9pZCAqbWFya2VyX2dldF9wcml2YXRlX2RhdGEoY29uc3QgY2hhciAqbmFtZSwgbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLAogCWludCBudW0pOwogCisvKgorICogbWFya2VyX3N5bmNocm9uaXplX3VucmVnaXN0ZXIgbXVzdCBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbGFzdCBtYXJrZXIgcHJvYmUKKyAqIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZW5kIG9mIG1vZHVsZSBleGl0IHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyBjYWxsZXIKKyAqIGV4ZWN1dGluZyBhIHByb2JlIHdoZW4gaXQgaXMgZnJlZWQuCisgKi8KKyNkZWZpbmUgbWFya2VyX3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKSBzeW5jaHJvbml6ZV9zY2hlZCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBmZGYzOTY3Li4xZmJlMTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMjcsMTYgKzI3LDEzIEBACiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogCi0jZGVmaW5lIHBhZ2VfcmVzZXRfYmFkX2Nncm91cChwYWdlKQkoKHBhZ2UpLT5wYWdlX2Nncm91cCA9IDApCi0KLWV4dGVybiBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCWdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiBpbnQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQlnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gdm9pZCBtZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbHJ1KTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGFjdGl2ZSk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfc2hyaW5rX3VzYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnBfbWFzayk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfaXNvbGF0ZV9wYWdlcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCkBAIC00NCw3ICs0MSw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwKIAkJCQkJaW50IG1vZGUsIHN0cnVjdCB6b25lICp6LAogCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCi0JCQkJCWludCBhY3RpdmUpOworCQkJCQlpbnQgYWN0aXZlLCBpbnQgZmlsZSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgZ2ZwX3QgZ2ZwX21hc2spOwogaW50IHRhc2tfaW5fbWVtX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogCkBAIC02OSwyMSArNjYsMTEgQEAKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfcmVjb3JkX3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCQlpbnQgcHJpb3JpdHkpOwogCi1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5KTsKLWV4dGVybiBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSk7CitleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJCQkJaW50IHByaW9yaXR5LCBlbnVtIGxydV9saXN0IGxydSk7CisKIAogI2Vsc2UgLyogQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTE1OSwxNCArMTQ2LDkgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1faW5hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5LAorCQkJCQllbnVtIGxydV9saXN0IGxydSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oIGIvaW5jbHVkZS9saW51eC9tZmQvZGE5MDN4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkMzE0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZuZGVmIF9fTElOVVhfUE1JQ19EQTkwM1hfSAorI2RlZmluZSBfX0xJTlVYX1BNSUNfREE5MDNYX0gKKworLyogVW5pZmllZCBzdWIgZGV2aWNlIElEcyBmb3IgREE5MDMwL0RBOTAzNCAqLworZW51bSB7CisJREE5MDMwX0lEX0xFRF8xLAorCURBOTAzMF9JRF9MRURfMiwKKwlEQTkwMzBfSURfTEVEXzMsCisJREE5MDMwX0lEX0xFRF80LAorCURBOTAzMF9JRF9MRURfUEMsCisJREE5MDMwX0lEX1ZJQlJBLAorCURBOTAzMF9JRF9XTEVELAorCURBOTAzMF9JRF9CVUNLMSwKKwlEQTkwMzBfSURfQlVDSzIsCisJREE5MDMwX0lEX0xETzEsCisJREE5MDMwX0lEX0xETzIsCisJREE5MDMwX0lEX0xETzMsCisJREE5MDMwX0lEX0xETzQsCisJREE5MDMwX0lEX0xETzUsCisJREE5MDMwX0lEX0xETzYsCisJREE5MDMwX0lEX0xETzcsCisJREE5MDMwX0lEX0xETzgsCisJREE5MDMwX0lEX0xETzksCisJREE5MDMwX0lEX0xETzEwLAorCURBOTAzMF9JRF9MRE8xMSwKKwlEQTkwMzBfSURfTERPMTIsCisJREE5MDMwX0lEX0xETzEzLAorCURBOTAzMF9JRF9MRE8xNCwKKwlEQTkwMzBfSURfTERPMTUsCisJREE5MDMwX0lEX0xETzE2LAorCURBOTAzMF9JRF9MRE8xNywKKwlEQTkwMzBfSURfTERPMTgsCisJREE5MDMwX0lEX0xETzE5LAorCURBOTAzMF9JRF9MRE9fSU5ULAkvKiBMRE8gSW50ZXJuYWwgKi8KKworCURBOTAzNF9JRF9MRURfMSwKKwlEQTkwMzRfSURfTEVEXzIsCisJREE5MDM0X0lEX1ZJQlJBLAorCURBOTAzNF9JRF9XTEVELAorCURBOTAzNF9JRF9UT1VDSCwKKworCURBOTAzNF9JRF9CVUNLMSwKKwlEQTkwMzRfSURfQlVDSzIsCisJREE5MDM0X0lEX0xETzEsCisJREE5MDM0X0lEX0xETzIsCisJREE5MDM0X0lEX0xETzMsCisJREE5MDM0X0lEX0xETzQsCisJREE5MDM0X0lEX0xETzUsCisJREE5MDM0X0lEX0xETzYsCisJREE5MDM0X0lEX0xETzcsCisJREE5MDM0X0lEX0xETzgsCisJREE5MDM0X0lEX0xETzksCisJREE5MDM0X0lEX0xETzEwLAorCURBOTAzNF9JRF9MRE8xMSwKKwlEQTkwMzRfSURfTERPMTIsCisJREE5MDM0X0lEX0xETzEzLAorCURBOTAzNF9JRF9MRE8xNCwKKwlEQTkwMzRfSURfTERPMTUsCit9OworCisvKgorICogREE5MDMwL0RBOTAzNCBMRURzIHN1Yi1kZXZpY2VzIHVzZXMgZ2VuZXJpYyAic3RydWN0IGxlZF9pbmZvIgorICogYXMgdGhlIHBsYXRmb3JtX2RhdGEKKyAqLworCisvKiBEQTkwMzAgZmxhZ3MgZm9yICJzdHJ1Y3QgbGVkX2luZm8iCisgKi8KKyNkZWZpbmUgREE5MDMwX0xFRF9SQVRFX09OCSgwIDw8IDUpCisjZGVmaW5lIERBOTAzMF9MRURfUkFURV8wNTJTCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzE2CSgwIDw8IDMpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzgJKDEgPDwgMykKKyNkZWZpbmUgREE5MDMwX0xFRF9EVVRZXzFfNAkoMiA8PCAzKQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV8yCSgzIDw8IDMpCisKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX01PREVfMVAzVgkoMCA8PCAxKQorI2RlZmluZSBEQTkwMzBfVklCUkFfTU9ERV8yUDdWCSgxIDw8IDEpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzFIWgkoMCA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV8ySFoJKDEgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0ZSRVFfNEhaCSgyIDw8IDIpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzhIWgkoMyA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV9PTgkoMCA8PCA0KQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV83NVAJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfNTBQCSgyIDw8IDQpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9EVVRZXzI1UAkoMyA8PCA0KQorCisvKiBEQTkwMzQgZmxhZ3MgZm9yICJzdHJ1Y3QgbGVkX2luZm8iICovCisjZGVmaW5lIERBOTAzNF9MRURfUkFNUAkJKDEgPDwgNykKKworLyogREE5MDM0IHRvdWNoIHNjcmVlbiBwbGF0Zm9ybSBkYXRhICovCitzdHJ1Y3QgZGE5MDM0X3RvdWNoX3BkYXRhIHsKKwlpbnQJaW50ZXJ2YWxfbXM7CS8qIHNhbXBsaW5nIGludGVydmFsIHdoaWxlIHBlbiBkb3duICovCisJaW50CXhfaW52ZXJ0ZWQ7CisJaW50CXlfaW52ZXJ0ZWQ7Cit9OworCitzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvIHsKKwlpbnQJCWlkOworCWNvbnN0IGNoYXIJKm5hbWU7CisJdm9pZAkJKnBsYXRmb3JtX2RhdGE7Cit9OworCitzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgeworCWludCBudW1fc3ViZGV2czsKKwlzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvICpzdWJkZXZzOworfTsKKworLyogYml0IGRlZmluaXRpb25zIGZvciBEQTkwMzAgZXZlbnRzICovCisjZGVmaW5lIERBOTAzMF9FVkVOVF9PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1BXUkVOCQkoMSA8PCAxKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfRVhUT04JCSgxIDw8IDIpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1RCQVQJCSgxIDw8IDQpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9WQkFUTU9OCQkoMSA8PCA1KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJBVE1PTl9UWE9OCSgxIDw8IDYpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DSElPVkVSCQkoMSA8PCA3KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVENUTwkJKDEgPDwgOCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0NDVE8JCSgxIDw8IDkpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9BRENfUkVBRFkJCSgxIDw8IDEwKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJVU180UDQJCSgxIDw8IDExKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJVU180UDAJCSgxIDw8IDEyKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfU0VTU19WQUxJRAkJKDEgPDwgMTMpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9TUlBfREVURUNUCQkoMSA8PCAxNCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1dBVENIRE9HCQkoMSA8PCAxNSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE1CQkoMSA8PCAxNikKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE2CQkoMSA8PCAxNykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE3CQkoMSA8PCAxOCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE4CQkoMSA8PCAxOSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE5CQkoMSA8PCAyMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0JVQ0syCQkoMSA8PCAyMSkKKworLyogYml0IGRlZmluaXRpb25zIGZvciBEQTkwMzQgZXZlbnRzICovCisjZGVmaW5lIERBOTAzNF9FVkVOVF9PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1JFVl9JT1ZFUgkJKDEgPDwgNikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX0lPVkVSCQkoMSA8PCA3KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQ0hfVENUTwkJKDEgPDwgOCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX0NDVE8JCSgxIDw8IDkpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VU0JfREVWCQkoMSA8PCAxMCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX09UR0NQX0lPVkVSCSgxIDw8IDExKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVkJVU180UDU1CQkoMSA8PCAxMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCVVNfM1A4CQkoMSA8PCAxMykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1NFU1NfMVA4CQkoMSA8PCAxNCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1NSUF9SRUFEWQkJKDEgPDwgMTUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfTUFOCQkoMSA8PCAxNikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0FEQ19BVVRPNAkJKDEgPDwgMTcpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfQVVUTzUJCSgxIDw8IDE4KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX0FVVE82CQkoMSA8PCAxOSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1BFTl9ET1dOCQkoMSA8PCAyMCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1RTSV9SRUFEWQkJKDEgPDwgMjEpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VQVJUX1RYCQkoMSA8PCAyMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1VBUlRfUlgJCSgxIDw8IDIzKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfSEVBRFNFVAkJKDEgPDwgMjUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9IT09LU1dJVENICQkoMSA8PCAyNikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1dBVENIRE9HCQkoMSA8PCAyNykKKworZXh0ZXJuIGludCBkYTkwM3hfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKK2V4dGVybiBpbnQgZGE5MDN4X3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKworLyogU3RhdHVzIFF1ZXJ5IEludGVyZmFjZSAqLworI2RlZmluZSBEQTkwMzBfU1RBVFVTX09OS0VZCQkoMSA8PCAwKQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1BXUkVOMQkJKDEgPDwgMSkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfVkJBVE1PTl9UWE9OCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfTUNMS0RFVAkJKDEgPDwgNykKKworI2RlZmluZSBEQTkwMzRfU1RBVFVTX09OS0VZCQkoMSA8PCAwKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0NIREVUCQkoMSA8PCAzKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1RCQVQJCSgxIDw8IDQpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19QRU5fRE9XTgkJKDEgPDwgNikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19NQ0xLREVUCQkoMSA8PCA3KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1VTQl9ERVYJCSgxIDw8IDgpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfSEVBRFNFVAkJKDEgPDwgOSkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19IT09LU1dJVENICSgxIDw8IDEwKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1JFTUNPTgkJKDEgPDwgMTEpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfVkJVU19WQUxJRF80UDU1CSgxIDw8IDEyKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCVVNfVkFMSURfM1A4CSgxIDw8IDEzKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1NFU1NfVkFMSURfMVA4CSgxIDw8IDE0KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1NSUF9SRUFEWQkJKDEgPDwgMTUpCisKK2V4dGVybiBpbnQgZGE5MDN4X3F1ZXJ5X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpOworCisKKy8qIE5PVEU6IHRoZSB0d28gZnVuY3Rpb25zIGJlbG93IGFyZSBub3QgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlCisgKiBvZiB0aGUgREE5MDM0IHN1Yi1kZXZpY2UgZHJpdmVycworICovCitleHRlcm4gaW50IGRhOTAzeF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsKTsKK2V4dGVybiBpbnQgZGE5MDN4X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90ICp2YWwpOworZXh0ZXJuIGludCBkYTkwM3hfdXBkYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCB2YWwsIHVpbnQ4X3QgbWFzayk7CitleHRlcm4gaW50IGRhOTAzeF9zZXRfYml0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgYml0X21hc2spOworZXh0ZXJuIGludCBkYTkwM3hfY2xyX2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKTsKKyNlbmRpZiAvKiBfX0xJTlVYX1BNSUNfREE5MDNYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaCBiL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaAppbmRleCBlODNjN2YyLi5iNDYyOTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdDdsNjZ4Yi5oCkBAIC0xNSw4ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KIAogc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSB7Ci0JaW50ICgqZW5hYmxlX2NsazMyaykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqZGlzYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oCmluZGV4IGZhMDZlMDYuLmI0ODg4MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2Mzg3eGIuaApAQCAtMTEsOSArMTEsNiBAQAogI2RlZmluZSBNRkRfVEM2Mzg3WEJfSAogCiBzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSB7Ci0JaW50ICgqZW5hYmxlX2NsazMyaykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqZGlzYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0KIAlpbnQgKCplbmFibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqZGlzYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaCBiL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmgKaW5kZXggZmVjN2IzZi4uNjI2ZTQ0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oCkBAIC0xNywxMiArMTcsMTIgQEAKICNpZm5kZWYgTUZEX1RDNjM5M1hCX0gKICNkZWZpbmUgTUZEX1RDNjM5M1hCX0gKIAorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKIC8qIEFsc28gb25lIHNob3VsZCBwcm92aWRlIHRoZSBDSzNQNk1JIGNsb2NrICovCiBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB7CiAJdTE2CXNjcl9wbGwyY3I7CS8qIFBMTDIgQ29udHJvbCAqLwogCXUxNglzY3JfZ3BlcjsJLyogR1AgRW5hYmxlICovCi0JdTMyCXNjcl9ncG9fZG9lY3I7CS8qIEdQTyBEYXRhIE9FIENvbnRyb2wgKi8KLQl1MzIJc2NyX2dwb19kc3I7CS8qIEdQTyBEYXRhIFNldCAqLwogCiAJaW50CSgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludAkoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CkBAIC0zMSwxNSArMzEsMjggQEAKIAogCWludAlpcnFfYmFzZTsJLyogYmFzZSBmb3Igc3ViZGV2aWNlIGlycXMgKi8KIAlpbnQJZ3Bpb19iYXNlOworCWludAkoKnNldHVwKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCXZvaWQJKCp0ZWFyZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAogCXN0cnVjdCB0bWlvX25hbmRfZGF0YQkqbmFuZF9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEJKmZiX2RhdGE7CisKKwl1bnNpZ25lZCByZXN1bWVfcmVzdG9yZSA6IDE7IC8qIG1ha2Ugc3BlY2lhbCBhY3Rpb25zCisJCQkJCXRvIHByZXNlcnZlIHRoZSBzdGF0ZQorCQkJCQlvbiBzdXNwZW5kL3Jlc3VtZSAqLwogfTsKIAorZXh0ZXJuIGludCB0YzYzOTN4Yl9sY2RfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSk7CitleHRlcm4gaW50IHRjNjM5M3hiX2xjZF9zZXRfcG93ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsIGJvb2wgb24pOworCiAvKgogICogUmVsYXRpdmUgdG8gaXJxX2Jhc2UKICAqLwogI2RlZmluZQlJUlFfVEM2MzkzX05BTkQJCTAKICNkZWZpbmUJSVJRX1RDNjM5M19NTUMJCTEKKyNkZWZpbmUJSVJRX1RDNjM5M19PSENJCQkyCisjZGVmaW5lCUlSUV9UQzYzOTNfRkIJCTQKIAogI2RlZmluZQlUQzYzOTNYQl9OUl9JUlFTCTgKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAppbmRleCAwM2FlYTYxLi4zZjM0MDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtNyw3ICs3LDYgQEAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKm5ld19wYWdlX3Qoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBpbnQgKiopOwogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgotZXh0ZXJuIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCk7CiBleHRlcm4gaW50IHB1dGJhY2tfbHJ1X3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogZXh0ZXJuIGludCBtaWdyYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKIAkJCXN0cnVjdCBwYWdlICosIHN0cnVjdCBwYWdlICopOwpAQCAtMjEsOCArMjAsNiBAQAogCQljb25zdCBub2RlbWFza190ICpmcm9tLCBjb25zdCBub2RlbWFza190ICp0bywKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLQkJCQkJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfcGFnZV90IHgsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkgeyByZXR1cm4gLUVOT1NZUzsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGM2MWJhMTAuLmZmZWUyZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEzMiw2ICsxMzIsMTEgQEAKICNkZWZpbmUgVk1fUmFuZG9tUmVhZEhpbnQodikJCSgodiktPnZtX2ZsYWdzICYgVk1fUkFORF9SRUFEKQogCiAvKgorICogc3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlCisgKi8KKyNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCisKKy8qCiAgKiBtYXBwaW5nIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgdm1fZmxhZ3MgcHJvdGVjdGlvbiBiaXRzICh0aGUKICAqIGxvdyBmb3VyIGJpdHMpIHRvIGEgcGFnZSBwcm90ZWN0aW9uIG1hc2suLgogICovCkBAIC03MDAsMTAgKzcwNSwxMCBAQAogZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NITUVNCi1pbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7CitleHRlcm4gaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLAotCQkJICAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCisJCQkgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggODk1YmM0ZS4uYzk0ODM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC0xLDQwICsxLDEwMCBAQAotc3RhdGljIGlubGluZSB2b2lkCi1hZGRfcGFnZV90b19hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCisjaWZuZGVmIExJTlVYX01NX0lOTElORV9ICisjZGVmaW5lIExJTlVYX01NX0lOTElORV9ICisKKy8qKgorICogcGFnZV9pc19maWxlX2NhY2hlIC0gc2hvdWxkIHRoZSBwYWdlIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICoKKyAqIFJldHVybnMgTFJVX0ZJTEUgaWYgQHBhZ2UgaXMgcGFnZSBjYWNoZSBwYWdlIGJhY2tlZCBieSBhIHJlZ3VsYXIgZmlsZXN5c3RlbSwKKyAqIG9yIDAgaWYgQHBhZ2UgaXMgYW5vbnltb3VzLCB0bXBmcyBvciBvdGhlcndpc2UgcmFtIG9yIHN3YXAgYmFja2VkLgorICogVXNlZCBieSBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBMUlUgbGlzdHMsIHRvIHNvcnQgYSBwYWdlCisgKiBvbnRvIHRoZSByaWdodCBMUlUgbGlzdC4KKyAqCisgKiBXZSB3b3VsZCBsaWtlIHRvIGdldCB0aGlzIGluZm8gd2l0aG91dCBhIHBhZ2UgZmxhZywgYnV0IHRoZSBzdGF0ZQorICogbmVlZHMgdG8gc3Vydml2ZSB1bnRpbCB0aGUgcGFnZSBpcyBsYXN0IGRlbGV0ZWQgZnJvbSB0aGUgTFJVLCB3aGljaAorICogY291bGQgYmUgYXMgZmFyIGRvd24gYXMgX19wYWdlX2NhY2hlX3JlbGVhc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfaXNfZmlsZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+YWN0aXZlX2xpc3QpOwotCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCXJldHVybiAwOworCisJLyogVGhlIHBhZ2UgaXMgcGFnZSBjYWNoZSBiYWNrZWQgYnkgYSBub3JtYWwgZmlsZXN5c3RlbS4gKi8KKwlyZXR1cm4gTFJVX0ZJTEU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCithZGRfcGFnZV90b19scnVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbCkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7Ci0JX19pbmNfem9uZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtsXS5saXN0KTsKKwlfX2luY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVsX3BhZ2VfZnJvbV9hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitkZWxfcGFnZV9mcm9tX2xydV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBsKQogewogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkZWxfcGFnZV9mcm9tX2xydShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJZW51bSBscnVfbGlzdCBsID0gTFJVX0JBU0U7CisKIAlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewotCQlfX0NsZWFyUGFnZUFjdGl2ZShwYWdlKTsKLQkJX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJX19DbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwkJbCA9IExSVV9VTkVWSUNUQUJMRTsKIAl9IGVsc2UgewotCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJCV9fQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCQkJbCArPSBMUlVfQUNUSVZFOworCQl9CisJCWwgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCX0KKwlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKKy8qKgorICogcGFnZV9scnUgLSB3aGljaCBMUlUgbGlzdCBzaG91bGQgYSBwYWdlIGJlIG9uPworICogQHBhZ2U6IHRoZSBwYWdlIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBMUlUgbGlzdCBhIHBhZ2Ugc2hvdWxkIGJlIG9uLCBhcyBhbiBpbmRleAorICogaW50byB0aGUgYXJyYXkgb2YgTFJVIGxpc3RzLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZW51bSBscnVfbGlzdCBscnUgPSBMUlVfQkFTRTsKKworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwllbHNlIHsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJCQlscnUgKz0gTFJVX0FDVElWRTsKKwkJbHJ1ICs9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gbHJ1OworfQorCisvKioKKyAqIGluYWN0aXZlX2Fub25faXNfbG93IC0gY2hlY2sgaWYgYW5vbnltb3VzIHBhZ2VzIG5lZWQgdG8gYmUgZGVhY3RpdmF0ZWQKKyAqIEB6b25lOiB6b25lIHRvIGNoZWNrCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB6b25lIGRvZXMgbm90IGhhdmUgZW5vdWdoIGluYWN0aXZlIGFub24gcGFnZXMsCisgKiBtZWFuaW5nIHNvbWUgYWN0aXZlIGFub24gcGFnZXMgbmVlZCB0byBiZSBkZWFjdGl2YXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IHpvbmUgKnpvbmUpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUsIGluYWN0aXZlOworCisJYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKTsKKwlpbmFjdGl2ZSA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKTsKKworCWlmIChpbmFjdGl2ZSAqIHpvbmUtPmluYWN0aXZlX3JhdGlvIDwgYWN0aXZlKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOWQ0OWZhMy4uZmU4MjU0NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTk0LDkgKzk0LDYgQEAKIAl2b2lkICp2aXJ0dWFsOwkJCS8qIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKE5VTEwgaWYKIAkJCQkJICAgbm90IGttYXBwZWQsIGllLiBoaWdobWVtKSAqLwogI2VuZGlmIC8qIFdBTlRfUEFHRV9WSVJUVUFMICovCi0jaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKLQl1bnNpZ25lZCBsb25nIHBhZ2VfY2dyb3VwOwotI2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvbW1pb3RyYWNlLmgKaW5kZXggNjFkMTllMS4uMTM5ZDdjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWlvdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21taW90cmFjZS5oCkBAIC0zNCwxMSArMzQsMTUgQEAKIC8qIENhbGxlZCBmcm9tIHBhZ2UgZmF1bHQgaGFuZGxlci4gKi8KIGV4dGVybiBpbnQga21taW9faGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotLyogQ2FsbGVkIGZyb20gaW9yZW1hcC5jICovCiAjaWZkZWYgQ09ORklHX01NSU9UUkFDRQorLyogQ2FsbGVkIGZyb20gaW9yZW1hcC5jICovCiBleHRlcm4gdm9pZCBtbWlvdHJhY2VfaW9yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCQkJdm9pZCBfX2lvbWVtICphZGRyKTsKIGV4dGVybiB2b2lkIG1taW90cmFjZV9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKKy8qIEZvciBhbnlvbmUgdG8gaW5zZXJ0IG1hcmtlcnMuIFJlbWVtYmVyIHRyYWlsaW5nIG5ld2xpbmUuICovCitleHRlcm4gaW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWlvdHJhY2VfaW9yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgX19pb21lbSAqYWRkcikKQEAgLTQ4LDE1ICs1MiwyMiBAQAogc3RhdGljIGlubGluZSB2b2lkIG1taW90cmFjZV9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfTU1JT1RSQUNFX0hPT0tTICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG1taW90cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJCQkJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpOworCitzdGF0aWMgaW5saW5lIGludCBtbWlvdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19NTUlPVFJBQ0UgKi8KIAogZW51bSBtbV9pb19vcGNvZGUgewogCU1NSU9fUkVBRCA9IDB4MSwgICAgIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KIAlNTUlPX1dSSVRFID0gMHgyLCAgICAvKiBzdHJ1Y3QgbW1pb3RyYWNlX3J3ICovCiAJTU1JT19QUk9CRSA9IDB4MywgICAgLyogc3RydWN0IG1taW90cmFjZV9tYXAgKi8KIAlNTUlPX1VOUFJPQkUgPSAweDQsICAvKiBzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqLwotCU1NSU9fTUFSS0VSID0gMHg1LCAgIC8qIHJhdyBjaGFyIGRhdGEgKi8KLQlNTUlPX1VOS05PV05fT1AgPSAweDYsIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KKwlNTUlPX1VOS05PV05fT1AgPSAweDUsIC8qIHN0cnVjdCBtbWlvdHJhY2VfcncgKi8KIH07CiAKIHN0cnVjdCBtbWlvdHJhY2VfcncgewpAQCAtODEsNSArOTIsNiBAQAogZXh0ZXJuIHZvaWQgZGlzYWJsZV9tbWlvdHJhY2Uodm9pZCk7CiBleHRlcm4gdm9pZCBtbWlvX3RyYWNlX3J3KHN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KTsKIGV4dGVybiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKTsKK2V4dGVybiBpbnQgbW1pb190cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogCiAjZW5kaWYgLyogTU1JT1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDQyODMyOGEuLjM1YTdiNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtODEsMjEgKzgxLDMxIEBACiBlbnVtIHpvbmVfc3RhdF9pdGVtIHsKIAkvKiBGaXJzdCAxMjggYnl0ZSBjYWNoZWxpbmUgKGFzc3VtaW5nIDY0IGJpdCB3b3JkcykgKi8KIAlOUl9GUkVFX1BBR0VTLAotCU5SX0lOQUNUSVZFLAotCU5SX0FDVElWRSwKKwlOUl9MUlVfQkFTRSwKKwlOUl9JTkFDVElWRV9BTk9OID0gTlJfTFJVX0JBU0UsIC8qIG11c3QgbWF0Y2ggb3JkZXIgb2YgTFJVX1tJTl1BQ1RJVkUgKi8KKwlOUl9BQ1RJVkVfQU5PTiwJCS8qICAiICAgICAiICAgICAiICAgIiAgICAgICAiICAgICAgICAgKi8KKwlOUl9JTkFDVElWRV9GSUxFLAkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisJTlJfQUNUSVZFX0ZJTEUsCQkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCU5SX1VORVZJQ1RBQkxFLAkJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworCU5SX01MT0NLLAkJLyogbWxvY2soKWVkIHBhZ2VzIGZvdW5kIGFuZCBtb3ZlZCBvZmYgTFJVICovCisjZWxzZQorCU5SX1VORVZJQ1RBQkxFID0gTlJfQUNUSVZFX0ZJTEUsIC8qIGF2b2lkIGNvbXBpbGVyIGVycm9ycyBpbiBkZWFkIGNvZGUgKi8KKwlOUl9NTE9DSyA9IE5SX0FDVElWRV9GSUxFLAorI2VuZGlmCiAJTlJfQU5PTl9QQUdFUywJLyogTWFwcGVkIGFub255bW91cyBwYWdlcyAqLwogCU5SX0ZJTEVfTUFQUEVELAkvKiBwYWdlY2FjaGUgcGFnZXMgbWFwcGVkIGludG8gcGFnZXRhYmxlcy4KIAkJCSAgIG9ubHkgbW9kaWZpZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi8KIAlOUl9GSUxFX1BBR0VTLAogCU5SX0ZJTEVfRElSVFksCiAJTlJfV1JJVEVCQUNLLAotCS8qIFNlY29uZCAxMjggYnl0ZSBjYWNoZWxpbmUgKi8KIAlOUl9TTEFCX1JFQ0xBSU1BQkxFLAogCU5SX1NMQUJfVU5SRUNMQUlNQUJMRSwKIAlOUl9QQUdFVEFCTEUsCQkvKiB1c2VkIGZvciBwYWdldGFibGVzICovCiAJTlJfVU5TVEFCTEVfTkZTLAkvKiBORlMgdW5zdGFibGUgcGFnZXMgKi8KIAlOUl9CT1VOQ0UsCiAJTlJfVk1TQ0FOX1dSSVRFLAorCS8qIFNlY29uZCAxMjggYnl0ZSBjYWNoZWxpbmUgKi8KIAlOUl9XUklURUJBQ0tfVEVNUCwJLyogV3JpdGViYWNrIHVzaW5nIHRlbXBvcmFyeSBidWZmZXJzICovCiAjaWZkZWYgQ09ORklHX05VTUEKIAlOVU1BX0hJVCwJCS8qIGFsbG9jYXRlZCBpbiBpbnRlbmRlZCBub2RlICovCkBAIC0xMDcsNiArMTE3LDU1IEBACiAjZW5kaWYKIAlOUl9WTV9aT05FX1NUQVRfSVRFTVMgfTsKIAorLyoKKyAqIFdlIGRvIGFyaXRobWV0aWMgb24gdGhlIExSVSBsaXN0cyBpbiB2YXJpb3VzIHBsYWNlcyBpbiB0aGUgY29kZSwKKyAqIHNvIGl0IGlzIGltcG9ydGFudCB0byBrZWVwIHRoZSBhY3RpdmUgbGlzdHMgTFJVX0FDVElWRSBoaWdoZXIgaW4KKyAqIHRoZSBhcnJheSB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGluYWN0aXZlIGxpc3RzLCBhbmQgdG8ga2VlcAorICogdGhlICpfRklMRSBsaXN0cyBMUlVfRklMRSBoaWdoZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBfQU5PTiBsaXN0cy4KKyAqCisgKiBUaGlzIGhhcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgc3RhdGlzdGljcyBpbiB6b25lX3N0YXRfaXRlbQorICogYWJvdmUgYW5kIHRoZSBkZXNjcmlwdGlvbnMgaW4gdm1zdGF0X3RleHQgaW4gbW0vdm1zdGF0LmMKKyAqLworI2RlZmluZSBMUlVfQkFTRSAwCisjZGVmaW5lIExSVV9BQ1RJVkUgMQorI2RlZmluZSBMUlVfRklMRSAyCisKK2VudW0gbHJ1X2xpc3QgeworCUxSVV9JTkFDVElWRV9BTk9OID0gTFJVX0JBU0UsCisJTFJVX0FDVElWRV9BTk9OID0gTFJVX0JBU0UgKyBMUlVfQUNUSVZFLAorCUxSVV9JTkFDVElWRV9GSUxFID0gTFJVX0JBU0UgKyBMUlVfRklMRSwKKwlMUlVfQUNUSVZFX0ZJTEUgPSBMUlVfQkFTRSArIExSVV9GSUxFICsgTFJVX0FDVElWRSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJTFJVX1VORVZJQ1RBQkxFLAorI2Vsc2UKKwlMUlVfVU5FVklDVEFCTEUgPSBMUlVfQUNUSVZFX0ZJTEUsIC8qIGF2b2lkIGNvbXBpbGVyIGVycm9ycyBpbiBkZWFkIGNvZGUgKi8KKyNlbmRpZgorCU5SX0xSVV9MSVNUUworfTsKKworI2RlZmluZSBmb3JfZWFjaF9scnUobCkgZm9yIChsID0gMDsgbCA8IE5SX0xSVV9MSVNUUzsgbCsrKQorCisjZGVmaW5lIGZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgZm9yIChsID0gMDsgbCA8PSBMUlVfQUNUSVZFX0ZJTEU7IGwrKykKKworc3RhdGljIGlubGluZSBpbnQgaXNfZmlsZV9scnUoZW51bSBscnVfbGlzdCBsKQoreworCXJldHVybiAobCA9PSBMUlVfSU5BQ1RJVkVfRklMRSB8fCBsID09IExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2FjdGl2ZV9scnUoZW51bSBscnVfbGlzdCBsKQoreworCXJldHVybiAobCA9PSBMUlVfQUNUSVZFX0FOT04gfHwgbCA9PSBMUlVfQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc191bmV2aWN0YWJsZV9scnUoZW51bSBscnVfbGlzdCBsKQoreworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlyZXR1cm4gKGwgPT0gTFJVX1VORVZJQ1RBQkxFKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogc3RydWN0IHBlcl9jcHVfcGFnZXMgewogCWludCBjb3VudDsJCS8qIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgbGlzdCAqLwogCWludCBoaWdoOwkJLyogaGlnaCB3YXRlcm1hcmssIGVtcHR5aW5nIG5lZWRlZCAqLwpAQCAtMjUxLDEwICszMTAsMjIgQEAKIAogCS8qIEZpZWxkcyBjb21tb25seSBhY2Nlc3NlZCBieSB0aGUgcGFnZSByZWNsYWltIHNjYW5uZXIgKi8KIAlzcGlubG9ja190CQlscnVfbG9jazsJCi0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWluYWN0aXZlX2xpc3Q7Ci0JdW5zaWduZWQgbG9uZwkJbnJfc2Nhbl9hY3RpdmU7Ci0JdW5zaWduZWQgbG9uZwkJbnJfc2Nhbl9pbmFjdGl2ZTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCXVuc2lnbmVkIGxvbmcgbnJfc2NhbjsKKwl9IGxydVtOUl9MUlVfTElTVFNdOworCisJLyoKKwkgKiBUaGUgcGFnZW91dCBjb2RlIGluIHZtc2Nhbi5jIGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IG9mIHRoZQorCSAqIG1lbS9zd2FwIGJhY2tlZCBhbmQgZmlsZSBiYWNrZWQgcGFnZXMgYXJlIHJlZmVmZXJlbmNlZC4KKwkgKiBUaGUgaGlnaGVyIHRoZSByb3RhdGVkL3NjYW5uZWQgcmF0aW8sIHRoZSBtb3JlIHZhbHVhYmxlCisJICogdGhhdCBjYWNoZSBpcy4KKwkgKgorCSAqIFRoZSBhbm9uIExSVSBzdGF0cyBsaXZlIGluIFswXSwgZmlsZSBMUlUgc3RhdHMgaW4gWzFdCisJICovCisJdW5zaWduZWQgbG9uZwkJcmVjZW50X3JvdGF0ZWRbMl07CisJdW5zaWduZWQgbG9uZwkJcmVjZW50X3NjYW5uZWRbMl07CisKIAl1bnNpZ25lZCBsb25nCQlwYWdlc19zY2FubmVkOwkgICAvKiBzaW5jZSBsYXN0IHJlY2xhaW0gKi8KIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCSAgIC8qIHpvbmUgZmxhZ3MsIHNlZSBiZWxvdyAqLwogCkBAIC0yNzYsNiArMzQ3LDEyIEBACiAJICovCiAJaW50IHByZXZfcHJpb3JpdHk7CiAKKwkvKgorCSAqIFRoZSB0YXJnZXQgcmF0aW8gb2YgQUNUSVZFX0FOT04gdG8gSU5BQ1RJVkVfQU5PTiBwYWdlcyBvbgorCSAqIHRoaXMgem9uZSdzIExSVS4gIE1haW50YWluZWQgYnkgdGhlIHBhZ2VvdXQgY29kZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgaW5hY3RpdmVfcmF0aW87CisKIAogCVpPTkVfUEFERElORyhfcGFkMl8pCiAJLyogUmFyZWx5IHVzZWQgb3IgcmVhZC1tb3N0bHkgZmllbGRzICovCkBAIC01MjQsOCArNjAxLDExIEBACiAJc3RydWN0IHpvbmUgbm9kZV96b25lc1tNQVhfTlJfWk9ORVNdOwogCXN0cnVjdCB6b25lbGlzdCBub2RlX3pvbmVsaXN0c1tNQVhfWk9ORUxJU1RTXTsKIAlpbnQgbnJfem9uZXM7Ci0jaWZkZWYgQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQCisjaWZkZWYgQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQCS8qIG1lYW5zICFTUEFSU0VNRU0gKi8KIAlzdHJ1Y3QgcGFnZSAqbm9kZV9tZW1fbWFwOworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCisJc3RydWN0IHBhZ2VfY2dyb3VwICpub2RlX3BhZ2VfY2dyb3VwOworI2VuZGlmCiAjZW5kaWYKIAlzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YTsKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKQEAgLTg1NCw2ICs5MzQsNyBAQAogI2VuZGlmCiAKIHN0cnVjdCBwYWdlOworc3RydWN0IHBhZ2VfY2dyb3VwOwogc3RydWN0IG1lbV9zZWN0aW9uIHsKIAkvKgogCSAqIFRoaXMgaXMsIGxvZ2ljYWxseSwgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdApAQCAtODcxLDYgKzk1MiwxNCBAQAogCiAJLyogU2VlIGRlY2xhcmF0aW9uIG9mIHNpbWlsYXIgZmllbGQgaW4gc3RydWN0IHpvbmUgKi8KIAl1bnNpZ25lZCBsb25nICpwYWdlYmxvY2tfZmxhZ3M7CisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKwkvKgorCSAqIElmICFTUEFSU0VNRU0sIHBnZGF0IGRvZXNuJ3QgaGF2ZSBwYWdlX2Nncm91cCBwb2ludGVyLiBXZSB1c2UKKwkgKiBzZWN0aW9uLiAoc2VlIG1lbWNvbnRyb2wuaC9wYWdlX2Nncm91cC5oIGFib3V0IHRoaXMuKQorCSAqLworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9jZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBwYWQ7CisjZW5kaWYKIH07CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGE0MTU1NWMuLjVkMjk3MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vbG9jYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9tb2R1bGUuaD4KQEAgLTMzMSw2ICszMzIsMTAgQEAKIAlzdHJ1Y3QgbWFya2VyICptYXJrZXJzOwogCXVuc2lnbmVkIGludCBudW1fbWFya2VyczsKICNlbmRpZgorI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50czsKKwl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCS8qIFdoYXQgbW9kdWxlcyBkZXBlbmQgb24gbWU/ICovCkBAIC00NTMsNiArNDU4LDkgQEAKIAogZXh0ZXJuIHZvaWQgbW9kdWxlX3VwZGF0ZV9tYXJrZXJzKHZvaWQpOwogCitleHRlcm4gdm9pZCBtb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKHZvaWQpOworZXh0ZXJuIGludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CisKICNlbHNlIC8qICFDT05GSUdfTU9EVUxFUy4uLiAqLwogI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkKICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUEwoc3ltKQpAQCAtNTU3LDYgKzU2NSwxNSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX3VwZGF0ZV90cmFjZXBvaW50cyh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBtb2R1bGVfZ2V0X2l0ZXJfdHJhY2Vwb2ludHMoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIHN0cnVjdCBkZXZpY2VfZHJpdmVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmggYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAppbmRleCBkNmZiMTE1Li5lZTUxMjRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvZmxhc2hjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9jZmlfZW5kaWFuLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3hpcC5oPgogCiAjaWZkZWYgQ09ORklHX01URF9DRklfSTEKICNkZWZpbmUgY2ZpX2ludGVybGVhdmUoY2ZpKSAxCkBAIC00MzAsNyArNDMxLDYgQEAKIHsKIAltYXBfd29yZCB2YWw7CiAJdWludDMyX3QgYWRkciA9IGJhc2UgKyBjZmlfYnVpbGRfY21kX2FkZHIoY21kX2FkZHIsIGNmaV9pbnRlcmxlYXZlKGNmaSksIHR5cGUpOwotCiAJdmFsID0gY2ZpX2J1aWxkX2NtZChjbWQsIG1hcCwgY2ZpKTsKIAogCWlmIChwcmV2X3ZhbCkKQEAgLTQ4Myw2ICs0ODMsMTMgQEAKIAl9CiB9CiAKK2ludCBfX3hpcHJhbSBjZmlfcXJ5X3ByZXNlbnQoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGJhc2UsCisJCQkgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKTsKK2ludCBfX3hpcHJhbSBjZmlfcXJ5X21vZGVfb24odWludDMyX3QgYmFzZSwgc3RydWN0IG1hcF9pbmZvICptYXAsCisJCQkgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKTsKK3ZvaWQgX194aXByYW0gY2ZpX3FyeV9tb2RlX29mZih1aW50MzJfdCBiYXNlLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKKwkJCSAgICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSk7CisKIHN0cnVjdCBjZmlfZXh0cXVlcnkgKmNmaV9yZWFkX3ByaShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdWludDE2X3QgYWRyLCB1aW50MTZfdCBzaXplLAogCQkJICAgICBjb25zdCBjaGFyKiBuYW1lKTsKIHN0cnVjdCBjZmlfZml4dXAgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaAppbmRleCAwOGRkMTMxLi5kNGYzOGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaApAQCAtNzMsNiArNzMsMTAgQEAKIAlpbnQgYnVmZmVyX3dyaXRlX3RpbWU7CiAJaW50IGVyYXNlX3RpbWU7CiAKKwlpbnQgd29yZF93cml0ZV90aW1lX21heDsKKwlpbnQgYnVmZmVyX3dyaXRlX3RpbWVfbWF4OworCWludCBlcmFzZV90aW1lX21heDsKKwogCXZvaWQgKnByaXY7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCmluZGV4IDkyMjYzNjUuLmVhZTI2YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCkBAIC0yNSw4ICsyNSwxMCBAQAogI2RlZmluZSBNVERfRVJBU0VfRE9ORSAgICAgICAgICAweDA4CiAjZGVmaW5lIE1URF9FUkFTRV9GQUlMRUQgICAgICAgIDB4MTAKIAorI2RlZmluZSBNVERfRkFJTF9BRERSX1VOS05PV04gMHhmZmZmZmZmZgorCiAvKiBJZiB0aGUgZXJhc2UgZmFpbHMsIGZhaWxfYWRkciBtaWdodCBpbmRpY2F0ZSBleGFjdGx5IHdoaWNoIGJsb2NrIGZhaWxlZC4gIElmCi0gICBmYWlsX2FkZHIgPSAweGZmZmZmZmZmLCB0aGUgZmFpbHVyZSB3YXMgbm90IGF0IHRoZSBkZXZpY2UgbGV2ZWwgb3Igd2FzIG5vdAorICAgZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktOT1dOLCB0aGUgZmFpbHVyZSB3YXMgbm90IGF0IHRoZSBkZXZpY2UgbGV2ZWwgb3Igd2FzIG5vdAogICAgc3BlY2lmaWMgdG8gYW55IHBhcnRpY3VsYXIgYmxvY2suICovCiBzdHJ1Y3QgZXJhc2VfaW5mbyB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLWdwaW8uaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTM0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLWdwaW8uaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fTElOVVhfTVREX05BTkRfR1BJT19ICisjZGVmaW5lIF9fTElOVVhfTVREX05BTkRfR1BJT19ICisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorCitzdHJ1Y3QgZ3Bpb19uYW5kX3BsYXRkYXRhIHsKKwlpbnQJZ3Bpb19uY2U7CisJaW50CWdwaW9fbndwOworCWludAlncGlvX2NsZTsKKwlpbnQJZ3Bpb19hbGU7CisJaW50CWdwaW9fcmR5OworCXZvaWQJKCphZGp1c3RfcGFydHMpKHN0cnVjdCBncGlvX25hbmRfcGxhdGRhdGEgKiwgc2l6ZV90KTsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJdW5zaWduZWQgaW50IG51bV9wYXJ0czsKKwl1bnNpZ25lZCBpbnQgb3B0aW9uczsKKwlpbnQJY2hpcF9kZWxheTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IDgxNzc0ZTUuLjczM2QzZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTI0OCw2ICsyNDgsNyBAQAogICogQHJlYWRfcGFnZV9yYXc6CWZ1bmN0aW9uIHRvIHJlYWQgYSByYXcgcGFnZSB3aXRob3V0IEVDQwogICogQHdyaXRlX3BhZ2VfcmF3OglmdW5jdGlvbiB0byB3cml0ZSBhIHJhdyBwYWdlIHdpdGhvdXQgRUNDCiAgKiBAcmVhZF9wYWdlOglmdW5jdGlvbiB0byByZWFkIGEgcGFnZSBhY2NvcmRpbmcgdG8gdGhlIGVjYyBnZW5lcmF0b3IgcmVxdWlyZW1lbnRzCisgKiBAcmVhZF9zdWJwYWdlOglmdW5jdGlvbiB0byByZWFkIHBhcnRzIG9mIHRoZSBwYWdlIGNvdmVyZWQgYnkgRUNDLgogICogQHdyaXRlX3BhZ2U6CWZ1bmN0aW9uIHRvIHdyaXRlIGEgcGFnZSBhY2NvcmRpbmcgdG8gdGhlIGVjYyBnZW5lcmF0b3IgcmVxdWlyZW1lbnRzCiAgKiBAcmVhZF9vb2I6CWZ1bmN0aW9uIHRvIHJlYWQgY2hpcCBPT0IgZGF0YQogICogQHdyaXRlX29vYjoJZnVuY3Rpb24gdG8gd3JpdGUgY2hpcCBPT0IgZGF0YQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAppbmRleCBkMWIzMTBjLi4wYzZiYmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaApAQCAtMTUyLDYgKzE1Miw4IEBACiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfSU5UCQkoMSA8PCA2KQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0lPQkUJCSgxIDw8IDUpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfUkRZX0NPTkYJKDEgPDwgNCkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9IRgkJKDEgPDwgMikKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9TWU5DX1dSSVRFCSgxIDw8IDEpCiAKIC8qCiAgKiBDb250cm9sbGVyIFN0YXR1cyBSZWdpc3RlciBGMjQwaCAoUikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaCBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAppbmRleCA1MDE0ZjdhLi5jOTJiNGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCkBAIC03Myw3ICs3Myw2IEBACiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiAKIGludCBfX2RldmluaXQgb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoc3RydWN0IGRldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3N2MxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogU3VwZXJIIEZMQ1RMIG5hbmQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX1NIX0ZMQ1RMX0hfXworI2RlZmluZSBfX1NIX0ZMQ1RMX0hfXworCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworLyogRkxDVEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIEZMQ01OQ1IoZikJCShmLT5yZWcgKyAweDApCisjZGVmaW5lIEZMQ01EQ1IoZikJCShmLT5yZWcgKyAweDQpCisjZGVmaW5lIEZMQ01DRFIoZikJCShmLT5yZWcgKyAweDgpCisjZGVmaW5lIEZMQURSKGYpCQkoZi0+cmVnICsgMHhDKQorI2RlZmluZSBGTEFEUjIoZikJCShmLT5yZWcgKyAweDNDKQorI2RlZmluZSBGTERBVEFSKGYpCQkoZi0+cmVnICsgMHgxMCkKKyNkZWZpbmUgRkxEVENOVFIoZikJCShmLT5yZWcgKyAweDE0KQorI2RlZmluZSBGTElOVERNQUNSKGYpCQkoZi0+cmVnICsgMHgxOCkKKyNkZWZpbmUgRkxCU1lUTVIoZikJCShmLT5yZWcgKyAweDFDKQorI2RlZmluZSBGTEJTWUNOVChmKQkJKGYtPnJlZyArIDB4MjApCisjZGVmaW5lIEZMRFRGSUZPKGYpCQkoZi0+cmVnICsgMHgyNCkKKyNkZWZpbmUgRkxFQ0ZJRk8oZikJCShmLT5yZWcgKyAweDI4KQorI2RlZmluZSBGTFRSQ1IoZikJCShmLT5yZWcgKyAweDJDKQorI2RlZmluZQlGTDRFQ0NSRVNVTFQwKGYpCShmLT5yZWcgKyAweDgwKQorI2RlZmluZQlGTDRFQ0NSRVNVTFQxKGYpCShmLT5yZWcgKyAweDg0KQorI2RlZmluZQlGTDRFQ0NSRVNVTFQyKGYpCShmLT5yZWcgKyAweDg4KQorI2RlZmluZQlGTDRFQ0NSRVNVTFQzKGYpCShmLT5yZWcgKyAweDhDKQorI2RlZmluZQlGTDRFQ0NDUihmKQkJKGYtPnJlZyArIDB4OTApCisjZGVmaW5lCUZMNEVDQ0NOVChmKQkJKGYtPnJlZyArIDB4OTQpCisjZGVmaW5lCUZMRVJSQURSKGYpCQkoZi0+cmVnICsgMHg5OCkKKworLyogRkxDTU5DUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgRUNDUE9TMgkJKDB4MSA8PCAyNSkKKyNkZWZpbmUgXzRFQ0NDTlRFTgkoMHgxIDw8IDI0KQorI2RlZmluZSBfNEVDQ0VOCQkoMHgxIDw8IDIzKQorI2RlZmluZSBfNEVDQ0NPUlJFQ1QJKDB4MSA8PCAyMikKKyNkZWZpbmUgU05BTkRfRQkJKDB4MSA8PCAxOCkJLyogU05BTkQgKDA9NTEyIDE9MjA0OCkqLworI2RlZmluZSBRVFNFTF9FCQkoMHgxIDw8IDE3KQorI2RlZmluZSBFTkRJQU4JCSgweDEgPDwgMTYpCS8qIDEgPSBsaXR0bGUgZW5kaWFuICovCisjZGVmaW5lIEZDS1NFTF9FCSgweDEgPDwgMTUpCisjZGVmaW5lIEVDQ1BPU18wMAkoMHgwMCA8PCAxMikKKyNkZWZpbmUgRUNDUE9TXzAxCSgweDAxIDw8IDEyKQorI2RlZmluZSBFQ0NQT1NfMDIJKDB4MDIgPDwgMTIpCisjZGVmaW5lIEFDTV9TQUNDRVNfTU9ERQkoMHgwMSA8PCAxMCkKKyNkZWZpbmUgTkFOV0ZfRQkJKDB4MSA8PCA5KQorI2RlZmluZSBTRV9ECQkoMHgxIDw8IDgpCS8qIFNwYXJlIGFyZWEgZGlzYWJsZSAqLworI2RlZmluZQlDRTFfRU5BQkxFCSgweDEgPDwgNCkJLyogQ2hpcCBFbmFibGUgMSAqLworI2RlZmluZQlDRTBfRU5BQkxFCSgweDEgPDwgMykJLyogQ2hpcCBFbmFibGUgMCAqLworI2RlZmluZQlUWVBFU0VMX1NFVAkoMHgxIDw8IDApCisKKy8qIEZMQ01EQ1IgY29udHJvbCBiaXRzICovCisjZGVmaW5lIEFEUkNOVDJfRQkoMHgxIDw8IDMxKQkvKiA1Ynl0ZSBhZGRyZXNzIGVuYWJsZSAqLworI2RlZmluZSBBRFJNRF9FCQkoMHgxIDw8IDI2KQkvKiBTZWN0b3IgYWRkcmVzcyBhY2Nlc3MgKi8KKyNkZWZpbmUgQ0RTUkNfRQkJKDB4MSA8PCAyNSkJLyogRGF0YSBidWZmZXIgc2VsZWN0aW9uICovCisjZGVmaW5lIERPU1JfRQkJKDB4MSA8PCAyNCkJLyogU3RhdHVzIHJlYWQgY2hlY2sgKi8KKyNkZWZpbmUgU0VMUlcJCSgweDEgPDwgMjEpCS8qICAwOnJlYWQgMTp3cml0ZSAqLworI2RlZmluZSBET0FEUl9FCQkoMHgxIDw8IDIwKQkvKiBBZGRyZXNzIHN0YWdlIGV4ZWN1dGUgKi8KKyNkZWZpbmUgQURSQ05UXzEJKDB4MDAgPDwgMTgpCS8qIEFkZHJlc3MgZGF0YSBieXRlczogMWJ5dGUgKi8KKyNkZWZpbmUgQURSQ05UXzIJKDB4MDEgPDwgMTgpCS8qIEFkZHJlc3MgZGF0YSBieXRlczogMmJ5dGUgKi8KKyNkZWZpbmUgQURSQ05UXzMJKDB4MDIgPDwgMTgpCS8qIEFkZHJlc3MgZGF0YSBieXRlczogM2J5dGUgKi8KKyNkZWZpbmUgQURSQ05UXzQJKDB4MDMgPDwgMTgpCS8qIEFkZHJlc3MgZGF0YSBieXRlczogNGJ5dGUgKi8KKyNkZWZpbmUgRE9DTUQyX0UJKDB4MSA8PCAxNykJLyogMm5kIGNtZCBzdGFnZSBleGVjdXRlICovCisjZGVmaW5lIERPQ01EMV9FCSgweDEgPDwgMTYpCS8qIDFzdCBjbWQgc3RhZ2UgZXhlY3V0ZSAqLworCisvKiBGTFRSQ1IgY29udHJvbCBiaXRzICovCisjZGVmaW5lIFRSU1RSVAkJKDB4MSA8PCAwKQkvKiB0cmFuc2xhdGlvbiBzdGFydCAqLworI2RlZmluZSBUUkVORAkJKDB4MSA8PCAxKQkvKiB0cmFuc2xhdGlvbiBlbmQgKi8KKworLyogRkw0RUNDQ1IgY29udHJvbCBiaXRzICovCisjZGVmaW5lCV80RUNDRkEJCSgweDEgPDwgMikJLyogNCBzeW1ib2xzIGNvcnJlY3QgZmF1bHQgKi8KKyNkZWZpbmUJXzRFQ0NFTkQJKDB4MSA8PCAxKQkvKiA0IHN5bWJvbHMgZW5kICovCisjZGVmaW5lCV80RUNDRVhTVAkoMHgxIDw8IDApCS8qIDQgc3ltYm9scyBleGlzdCAqLworCisjZGVmaW5lIElOSVRfRkw0RUNDUkVTVUxUX1ZBTAkweDAzRkYwM0ZGCisjZGVmaW5lIExPT1BfVElNRU9VVF9NQVgJMHgwMDAxMDAwMAorCisjZGVmaW5lIG10ZF90b19mbGN0bChtdGQpCWNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBzaF9mbGN0bCwgbXRkKQorCitzdHJ1Y3Qgc2hfZmxjdGwgeworCXN0cnVjdCBtdGRfaW5mbwkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJY2hpcDsKKwl2b2lkIF9faW9tZW0JCSpyZWc7CisKKwl1aW50OF90CWRvbmVfYnVmZlsyMDQ4ICsgNjRdOwkvKiBtYXggc2l6ZSAyMDQ4ICsgNjQgKi8KKwlpbnQJcmVhZF9ieXRlczsKKwlpbnQJaW5kZXg7CisJaW50CXNlcWluX2NvbHVtbjsJCS8qIGNvbHVtbiBpbiBTRVFJTiBjbWQgKi8KKwlpbnQJc2VxaW5fcGFnZV9hZGRyOwkvKiBwYWdlX2FkZHIgaW4gU0VRSU4gY21kICovCisJdWludDMyX3Qgc2VxaW5fcmVhZF9jbWQ7CQkvKiByZWFkIGNtZCBpbiBTRVFJTiBjbWQgKi8KKwlpbnQJZXJhc2UxX3BhZ2VfYWRkcjsJLyogcGFnZV9hZGRyIGluIEVSQVNFMSBjbWQgKi8KKwl1aW50MzJfdCBlcmFzZV9BRFJDTlQ7CQkvKiBiaXRzIG9mIEZMQ01EQ1IgaW4gRVJBU0UxIGNtZCAqLworCXVpbnQzMl90IHJ3X0FEUkNOVDsJLyogYml0cyBvZiBGTENNRENSIGluIFJFQUQgV1JJVEUgY21kICovCisKKwlpbnQJaHdlY2NfY2FudF9jb3JyZWN0WzRdOworCisJdW5zaWduZWQgcGFnZV9zaXplOjE7CS8qIE5BTkQgcGFnZSBzaXplICgwID0gNTEyLCAxID0gMjA0OCkgKi8KKwl1bnNpZ25lZCBod2VjYzoxOwkvKiBIYXJkd2FyZSBFQ0MgKDAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWQpICovCit9OworCitzdHJ1Y3Qgc2hfZmxjdGxfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOworCWludAkJCW5yX3BhcnRzOworCXVuc2lnbmVkIGxvbmcJCWZsY21uY3JfdmFsOworCisJdW5zaWduZWQgaGFzX2h3ZWNjOjE7Cit9OworCisjZW5kaWYJLyogX19TSF9GTENUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IGFjOGQwMjMuLjRlYWE4MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMzY3LDggKzM2NywxMiBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycGNfY3JlZCAqbmZzX2ZpbGVfY3JlZChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZiAoZmlsZSAhPSBOVUxMKQotCQlyZXR1cm4gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpLT5jcmVkOworCWlmIChmaWxlICE9IE5VTEwpIHsKKwkJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCA9CisJCQluZnNfZmlsZV9vcGVuX2NvbnRleHQoZmlsZSk7CisJCWlmIChjdHgpCisJCQlyZXR1cm4gY3R4LT5jcmVkOworCX0KIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCBjNzRkM2U4Li5iMTJmOTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtOTMsNiArOTMsMTEgQEAKIAlQR19tYXBwZWR0b2Rpc2ssCS8qIEhhcyBibG9ja3MgYWxsb2NhdGVkIG9uLWRpc2sgKi8KIAlQR19yZWNsYWltLAkJLyogVG8gYmUgcmVjbGFpbWVkIGFzYXAgKi8KIAlQR19idWRkeSwJCS8qIFBhZ2UgaXMgZnJlZSwgb24gYnVkZHkgbGlzdHMgKi8KKwlQR19zd2FwYmFja2VkLAkJLyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJUEdfdW5ldmljdGFibGUsCQkvKiBQYWdlIGlzICJ1bmV2aWN0YWJsZSIgICovCisJUEdfbWxvY2tlZCwJCS8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi8KKyNlbmRpZgogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogCVBHX3VuY2FjaGVkLAkJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KICNlbmRpZgpAQCAtMTYxLDYgKzE2NiwxOCBAQAogI2RlZmluZSBURVNUU0NGTEFHKHVuYW1lLCBsbmFtZSkJCQkJCVwKIAlURVNUU0VURkxBRyh1bmFtZSwgbG5hbWUpIFRFU1RDTEVBUkZMQUcodW5hbWUsIGxuYW1lKQogCisjZGVmaW5lIFNFVFBBR0VGTEFHX05PT1AodW5hbWUpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7ICB9CisKKyNkZWZpbmUgQ0xFQVJQQUdFRkxBR19OT09QKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBfX0NMRUFSUEFHRUZMQUdfTk9PUCh1bmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0NsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBURVNUQ0xFQVJGTEFHX0ZBTFNFKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDA7IH0KKwogc3RydWN0IHBhZ2U7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KIAogVEVTVFBBR0VGTEFHKExvY2tlZCwgbG9ja2VkKQpAQCAtMTY5LDYgKzE4Niw3IEBACiBQQUdFRkxBRyhEaXJ0eSwgZGlydHkpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5KSBfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5KQogUEFHRUZMQUcoTFJVLCBscnUpIF9fQ0xFQVJQQUdFRkxBRyhMUlUsIGxydSkKIFBBR0VGTEFHKEFjdGl2ZSwgYWN0aXZlKSBfX0NMRUFSUEFHRUZMQUcoQWN0aXZlLCBhY3RpdmUpCisJVEVTVENMRUFSRkxBRyhBY3RpdmUsIGFjdGl2ZSkKIF9fUEFHRUZMQUcoU2xhYiwgc2xhYikKIFBBR0VGTEFHKENoZWNrZWQsIGNoZWNrZWQpCQkvKiBVc2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgKi8KIFBBR0VGTEFHKFBpbm5lZCwgcGlubmVkKSBURVNUU0NGTEFHKFBpbm5lZCwgcGlubmVkKQkvKiBYZW4gKi8KQEAgLTE3Niw2ICsxOTQsNyBAQAogUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkKSBfX0NMRUFSUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkKQogUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkgX19DTEVBUlBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCiAJX19TRVRQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKQorUEFHRUZMQUcoU3dhcEJhY2tlZCwgc3dhcGJhY2tlZCkgX19DTEVBUlBBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpCiAKIF9fUEFHRUZMQUcoU2xvYlBhZ2UsIHNsb2JfcGFnZSkKIF9fUEFHRUZMQUcoU2xvYkZyZWUsIHNsb2JfZnJlZSkKQEAgLTIxMSw2ICsyMzAsMjUgQEAKIFBBR0VGTEFHX0ZBTFNFKFN3YXBDYWNoZSkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKSBfX0NMRUFSUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQorCVRFU1RDTEVBUkZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQorCisjZGVmaW5lIE1MT0NLX1BBR0VTIDEKK1BBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpIF9fQ0xFQVJQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQorCVRFU1RTQ0ZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKKworI2Vsc2UKKworI2RlZmluZSBNTE9DS19QQUdFUyAwCitQQUdFRkxBR19GQUxTRShNbG9ja2VkKQorCVNFVFBBR0VGTEFHX05PT1AoTWxvY2tlZCkgVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKQorCitQQUdFRkxBR19GQUxTRShVbmV2aWN0YWJsZSkgVEVTVENMRUFSRkxBR19GQUxTRShVbmV2aWN0YWJsZSkKKwlTRVRQQUdFRkxBR19OT09QKFVuZXZpY3RhYmxlKSBDTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCisJX19DTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogUEFHRUZMQUcoVW5jYWNoZWQsIHVuY2FjaGVkKQogI2Vsc2UKQEAgLTMyNiwxNSArMzY0LDI1IEBACiAKICNlbmRpZiAvKiAhUEFHRUZMQUdTX0VYVEVOREVEICovCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJKDEgPDwgUEdfdW5ldmljdGFibGUpCisjZGVmaW5lIF9fUEdfTUxPQ0tFRAkJKDEgPDwgUEdfbWxvY2tlZCkKKyNlbHNlCisjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJMAorI2RlZmluZSBfX1BHX01MT0NLRUQJCTAKKyNlbmRpZgorCiAjZGVmaW5lIFBBR0VfRkxBR1MJKDEgPDwgUEdfbHJ1ICAgfCAxIDw8IFBHX3ByaXZhdGUgICB8IDEgPDwgUEdfbG9ja2VkIHwgXAogCQkJIDEgPDwgUEdfYnVkZHkgfCAxIDw8IFBHX3dyaXRlYmFjayB8IFwKLQkJCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSkKKwkJCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSB8IFwKKwkJCSBfX1BHX1VORVZJQ1RBQkxFIHwgX19QR19NTE9DS0VEKQogCiAvKgogICogRmxhZ3MgY2hlY2tlZCBpbiBiYWRfcGFnZSgpLiAgUGFnZXMgb24gdGhlIGZyZWUgbGlzdCBzaG91bGQgbm90IGhhdmUKICAqIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZSBpcyBhIHByb2JsZW0uCiAgKi8KLSNkZWZpbmUgUEFHRV9GTEFHU19DTEVBUl9XSEVOX0JBRCAoUEFHRV9GTEFHUyB8IDEgPDwgUEdfcmVjbGFpbSB8IDEgPDwgUEdfZGlydHkpCisjZGVmaW5lIFBBR0VfRkxBR1NfQ0xFQVJfV0hFTl9CQUQgKFBBR0VfRkxBR1MgfCBcCisJCTEgPDwgUEdfcmVjbGFpbSB8IDEgPDwgUEdfZGlydHkgfCAxIDw8IFBHX3N3YXBiYWNrZWQpCiAKIC8qCiAgKiBGbGFncyBjaGVja2VkIHdoZW4gYSBwYWdlIGlzIGZyZWVkLiAgUGFnZXMgYmVpbmcgZnJlZWQgc2hvdWxkIG5vdCBoYXZlCkBAIC0zNDcsNyArMzk1LDggQEAKICAqIFBhZ2VzIGJlaW5nIHByZXBwZWQgc2hvdWxkIG5vdCBoYXZlIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZQogICogaXMgYSBwcm9ibGVtLgogICovCi0jZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCAoUEFHRV9GTEFHUyB8IDEgPDwgUEdfcmVzZXJ2ZWQgfCAxIDw8IFBHX2RpcnR5KQorI2RlZmluZSBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgKFBBR0VfRkxBR1MgfCBcCisJCTEgPDwgUEdfcmVzZXJ2ZWQgfCAxIDw8IFBHX2RpcnR5IHwgMSA8PCBQR19zd2FwYmFja2VkKQogCiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqLwogI2VuZGlmCS8qIFBBR0VfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDM5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX19MSU5VWF9QQUdFX0NHUk9VUF9ICisjZGVmaW5lIF9fTElOVVhfUEFHRV9DR1JPVVBfSAorCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KKy8qCisgKiBQYWdlIENncm91cCBjYW4gYmUgY29uc2lkZXJlZCBhcyBhbiBleHRlbmRlZCBtZW1fbWFwLgorICogQSBwYWdlX2Nncm91cCBwYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBldmVyeSBwYWdlIGRlc2NyaXB0b3IuIFRoZQorICogcGFnZV9jZ3JvdXAgaGVscHMgdXMgaWRlbnRpZnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNncm91cAorICogQWxsIHBhZ2UgY2dyb3VwcyBhcmUgYWxsb2NhdGVkIGF0IGJvb3Qgb3IgbWVtb3J5IGhvdHBsdWcgZXZlbnQsCisgKiB0aGVuIHRoZSBwYWdlIGNncm91cCBmb3IgcGZuIGFsd2F5cyBleGlzdHMuCisgKi8KK3N0cnVjdCBwYWdlX2Nncm91cCB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIHBlciBjZ3JvdXAgTFJVIGxpc3QgKi8KK307CisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7Cit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpOworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworCitlbnVtIHsKKwkvKiBmbGFncyBmb3IgbWVtX2Nncm91cCAqLworCVBDR19MT0NLLCAgLyogcGFnZSBjZ3JvdXAgaXMgbG9ja2VkICovCisJUENHX0NBQ0hFLCAvKiBjaGFyZ2VkIGFzIGNhY2hlICovCisJUENHX1VTRUQsIC8qIHRoaXMgb2JqZWN0IGlzIGluIHVzZS4gKi8KKwkvKiBmbGFncyBmb3IgTFJVIHBsYWNlbWVudCAqLworCVBDR19BQ1RJVkUsIC8qIHBhZ2UgaXMgYWN0aXZlIGluIHRoaXMgY2dyb3VwICovCisJUENHX0ZJTEUsIC8qIHBhZ2UgaXMgZmlsZSBzeXN0ZW0gYmFja2VkICovCisJUENHX1VORVZJQ1RBQkxFLCAvKiBwYWdlIGlzIHVuZXZpY3RhYmxlYWJsZSAqLworfTsKKworI2RlZmluZSBURVNUUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSBpbnQgUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXAorCXsgcmV0dXJuIHRlc3RfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgfQorCisjZGVmaW5lIFNFVFBDR0ZMQUcodW5hbWUsIGxuYW1lKQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRQYWdlQ2dyb3VwIyN1bmFtZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKVwKKwl7IHNldF9iaXQoUENHXyMjbG5hbWUsICZwYy0+ZmxhZ3MpOyAgfQorCisjZGVmaW5lIENMRUFSUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIENsZWFyUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXAorCXsgY2xlYXJfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgIH0KKworLyogQ2FjaGUgZmxhZyBpcyBzZXQgb25seSBvbmNlIChhdCBhbGxvY2F0aW9uKSAqLworVEVTVFBDR0ZMQUcoQ2FjaGUsIENBQ0hFKQorCitURVNUUENHRkxBRyhVc2VkLCBVU0VEKQorQ0xFQVJQQ0dGTEFHKFVzZWQsIFVTRUQpCisKKy8qIExSVSBtYW5hZ2VtZW50IGZsYWdzIChmcm9tIGdsb2JhbC1scnUgZGVmaW5pdGlvbikgKi8KK1RFU1RQQ0dGTEFHKEZpbGUsIEZJTEUpCitTRVRQQ0dGTEFHKEZpbGUsIEZJTEUpCitDTEVBUlBDR0ZMQUcoRmlsZSwgRklMRSkKKworVEVTVFBDR0ZMQUcoQWN0aXZlLCBBQ1RJVkUpCitTRVRQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorQ0xFQVJQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorCitURVNUUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCitTRVRQQ0dGTEFHKFVuZXZpY3RhYmxlLCBVTkVWSUNUQUJMRSkKK0NMRUFSUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfY2dyb3VwX25pZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCXJldHVybiBwYWdlX3RvX25pZChwYy0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV9jZ3JvdXBfemlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJcmV0dXJuIHBhZ2Vfem9uZW51bShwYy0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJYml0X3NwaW5fbG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRyeWxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwlyZXR1cm4gYml0X3NwaW5fdHJ5bG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwliaXRfc3Bpbl91bmxvY2soUENHX0xPQ0ssICZwYy0+ZmxhZ3MpOworfQorCisjZWxzZSAvKiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiAqLworc3RydWN0IHBhZ2VfY2dyb3VwOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQoreworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggNWRhMzFjMS4uNzA5NzQyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTMyLDYgKzMyLDM0IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorI2RlZmluZSBBU19VTkVWSUNUQUJMRQkoX19HRlBfQklUU19TSElGVCArIDIpCS8qIGUuZy4sIHJhbWRpc2ssIFNITV9MT0NLICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzZXRfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwljbGVhcl9iaXQoQVNfVU5FVklDVEFCTEUsICZtYXBwaW5nLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJaWYgKGxpa2VseShtYXBwaW5nKSkKKwkJcmV0dXJuIHRlc3RfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworCXJldHVybiAhIW1hcHBpbmc7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZykKIHsKIAlyZXR1cm4gKF9fZm9yY2UgZ2ZwX3QpbWFwcGluZy0+ZmxhZ3MgJiBfX0dGUF9CSVRTX01BU0s7CkBAIC0yNzEsMTkgKzI5OSwxOSBAQAogZXh0ZXJuIHZvaWQgX19sb2NrX3BhZ2Vfbm9zeW5jKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzZXRfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKKwlfX3NldF9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQljbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCV9fY2xlYXJfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CisJcmV0dXJuIChsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncykpKTsKIH0KIAogLyoKQEAgLTQxMCwxNyArNDM4LDE3IEBACiAKIC8qCiAgKiBMaWtlIGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZCwgYnV0IHVzZWQgdG8gYWRkIG5ld2x5IGFsbG9jYXRlZCBwYWdlczoKLSAqIHRoZSBwYWdlIGlzIG5ldywgc28gd2UgY2FuIGp1c3QgcnVuIHNldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCisgKiB0aGUgcGFnZSBpcyBuZXcsIHNvIHdlIGNhbiBqdXN0IHJ1biBfX3NldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFkZF90b19wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBvZmZzZXQsIGdmcF90IGdmcF9tYXNrKQogewogCWludCBlcnJvcjsKIAotCXNldF9wYWdlX2xvY2tlZChwYWdlKTsKKwlfX3NldF9wYWdlX2xvY2tlZChwYWdlKTsKIAllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQotCQljbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXZlYy5oIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKaW5kZXggOGViN2ZhNy4uZTkwYTJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKQEAgLTIzLDkgKzIzLDkgQEAKIHZvaWQgX19wYWdldmVjX3JlbGVhc2Uoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfcmVsZWFzZV9ub25scnUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Ci12b2lkIF9fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKLXZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgX19fX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgZW51bSBscnVfbGlzdCBscnUpOwogdm9pZCBwYWdldmVjX3N0cmlwKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdW5zaWduZWQgcGFnZXZlY19sb29rdXAoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlwZ29mZl90IHN0YXJ0LCB1bnNpZ25lZCBucl9wYWdlcyk7CiB1bnNpZ25lZCBwYWdldmVjX2xvb2t1cF90YWcoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsCkBAIC04MSwxMCArODEsMzYgQEAKIAkJX19wYWdldmVjX2ZyZWUocHZlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9JTkFDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZV9hbm9uKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2ZpbGUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBMUlVfSU5BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKIHsKIAlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUocHZlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJX19wYWdldmVjX2xydV9hZGRfYW5vbihwdmVjKTsKIH0KIAogI2VuZGlmIC8qIF9MSU5VWF9QQUdFVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDk4ZGM2MjQuLjA4NTE4N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjE0LDYgKzIxNCw3IEBACiAJdW5zaWduZWQgaW50CWJyb2tlbl9wYXJpdHlfc3RhdHVzOjE7CS8qIERldmljZSBnZW5lcmF0ZXMgZmFsc2UgcG9zaXRpdmUgcGFyaXR5ICovCiAJdW5zaWduZWQgaW50IAltc2lfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGludAltc2l4X2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYXJpX2VuYWJsZWQ6MTsJLyogQVJJIGZvcndhcmRpbmcgKi8KIAl1bnNpZ25lZCBpbnQJaXNfbWFuYWdlZDoxOwogCXVuc2lnbmVkIGludAlpc19wY2llOjE7CiAJcGNpX2Rldl9mbGFnc190IGRldl9mbGFnczsKQEAgLTM0Nyw3ICszNDgsNiBAQAogc3RydWN0IHBjaV9keW5pZHMgewogCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAvKiBwcm90ZWN0cyBsaXN0LCBpbmRleCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgICAgICAvKiBmb3IgSURzIGFkZGVkIGF0IHJ1bnRpbWUgKi8KLQl1bnNpZ25lZCBpbnQgdXNlX2RyaXZlcl9kYXRhOjE7IC8qIHBjaV9kZXZpY2VfaWQtPmRyaXZlcl9kYXRhIGlzIHVzZWQgKi8KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ1Niw4ICs0NTYsOCBAQAogCiAvKioKICAqIFBDSV9WREVWSUNFIC0gbWFjcm8gdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljIHBjaSBkZXZpY2UgaW4gc2hvcnQgZm9ybQotICogQHZlbmQ6IHRoZSB2ZW5kb3IgbmFtZQotICogQGRldjogdGhlIDE2IGJpdCBQQ0kgRGV2aWNlIElECisgKiBAdmVuZG9yOiB0aGUgdmVuZG9yIG5hbWUKKyAqIEBkZXZpY2U6IHRoZSAxNiBiaXQgUENJIERldmljZSBJRAogICoKICAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjcmVhdGUgYSBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0aGF0IG1hdGNoZXMgYQogICogc3BlY2lmaWMgUENJIGRldmljZS4gIFRoZSBzdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgZmllbGRzIHdpbGwgYmUgc2V0CkBAIC02MzEsNiArNjMxLDggQEAKIGludCBwY2lfc2VsZWN0X2JhcnMoc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKIC8qIFJPTSBjb250cm9sIHJlbGF0ZWQgcm91dGluZXMgKi8KK2ludCBwY2lfZW5hYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit2b2lkIHBjaV9kaXNhYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB2b2lkIF9faW9tZW0gX19tdXN0X2NoZWNrICpwY2lfbWFwX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90ICpzaXplKTsKIHZvaWQgcGNpX3VubWFwX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCBfX2lvbWVtICpyb20pOwogc2l6ZV90IHBjaV9nZXRfcm9tX3NpemUodm9pZCBfX2lvbWVtICpyb20sIHNpemVfdCBzaXplKTsKQEAgLTY0Myw2ICs2NDUsNyBAQAogYm9vbCBwY2lfcG1lX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogdm9pZCBwY2lfcG1lX2FjdGl2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CiBpbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBpbnQgZW5hYmxlKTsKK2ludCBwY2lfd2FrZV9mcm9tX2QzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIHBjaV9wb3dlcl90IHBjaV90YXJnZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3ByZXBhcmVfdG9fc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2JhY2tfZnJvbV9zbGVlcChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKQEAgLTcyMyw3ICs3MjYsNyBAQAogfTsKIAogc3RydWN0IG1zaXhfZW50cnkgewotCXUxNiAJdmVjdG9yOwkvKiBrZXJuZWwgdXNlcyB0byB3cml0ZSBhbGxvY2F0ZWQgdmVjdG9yICovCisJdTMyCXZlY3RvcjsJLyoga2VybmVsIHVzZXMgdG8gd3JpdGUgYWxsb2NhdGVkIHZlY3RvciAqLwogCXUxNgllbnRyeTsJLyogZHJpdmVyIHVzZXMgdG8gc3BlY2lmeSBlbnRyeSwgT1Mgd3JpdGVzICovCiB9OwogCkBAIC0xMTE2LDUgKzExMTksMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbW1jZmdfbGF0ZV9pbml0KHZvaWQpIHsgfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFTX0lPTUVNCitzdGF0aWMgaW5saW5lIHZvaWQgKiBwY2lfaW9yZW1hcF9iYXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpCit7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIEJBUiBpcyBhY3R1YWxseSBhIG1lbW9yeSByZXNvdXJjZSwgbm90IGFuIElPIHJlc291cmNlCisJICovCisJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJiBJT1JFU09VUkNFX01FTSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhciksCisJCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogTElOVVhfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggOGVkZGRjMi4uZTVkMzQ0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTI0NTQsOSArMjQ1NCw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMwkweDNhMWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF80CTB4M2EzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzUJMHgzYTYwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIXzAJMHgzYjEwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIXzEJMHgzYjExCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIXzIJMHgzYjMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIX0xQQ19NSU4JMHgzYjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIX0xQQ19NQVgJMHgzYjFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIX1NNQlVTCTB4M2IzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CCTB4NDAyZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzUxMDBfMTYJMHg2NWYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNTEwMF8yMQkweDY1ZjUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAppbmRleCA0NTA2ODRmLi5lYjY2ODZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCkBAIC00MTksNiArNDE5LDEwIEBACiAjZGVmaW5lICBQQ0lfRVhQX1JUQ1RMX0NSU1NWRQkweDEwCS8qIENSUyBTb2Z0d2FyZSBWaXNpYmlsaXR5IEVuYWJsZSAqLwogI2RlZmluZSBQQ0lfRVhQX1JUQ0FQCQkzMAkvKiBSb290IENhcGFiaWxpdGllcyAqLwogI2RlZmluZSBQQ0lfRVhQX1JUU1RBCQkzMgkvKiBSb290IFN0YXR1cyAqLworI2RlZmluZSBQQ0lfRVhQX0RFVkNBUDIJCTM2CS8qIERldmljZSBDYXBhYmlsaXRpZXMgMiAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX0FSSQkweDIwCS8qIEFsdGVybmF0aXZlIFJvdXRpbmctSUQgKi8KKyNkZWZpbmUgUENJX0VYUF9ERVZDVEwyCQk0MAkvKiBEZXZpY2UgQ29udHJvbCAyICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTDJfQVJJCTB4MjAJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCAqLwogCiAvKiBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgKFBDSS1YIDIuMCBhbmQgRXhwcmVzcykgKi8KICNkZWZpbmUgUENJX0VYVF9DQVBfSUQoaGVhZGVyKQkJKGhlYWRlciAmIDB4MDAwMGZmZmYpCkBAIC00MjksNiArNDMzLDcgQEAKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfVkMJMgogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9EU04JMwogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9QV1IJNAorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9BUkkJMTQKIAogLyogQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nICovCiAjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU1RBVFVTCTQJLyogVW5jb3JyZWN0YWJsZSBFcnJvciBTdGF0dXMgKi8KQEAgLTUzNiw1ICs1NDEsMTQgQEAKICNkZWZpbmUgSFRfQ0FQVFlQRV9HRU4zCQkweEQwCS8qIEdlbmVyYXRpb24gMyBoeXBlcnRyYW5zcG9ydCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEhUX0NBUFRZUEVfUE0JCTB4RTAJLyogSHlwZXJ0cmFuc3BvcnQgcG93ZXJtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gKi8KIAorLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCBJbnRlcnByZXRhdGlvbiAqLworI2RlZmluZSBQQ0lfQVJJX0NBUAkJMHgwNAkvKiBBUkkgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FSSV9DQVBfTUZWQwkweDAwMDEJLyogTUZWQyBGdW5jdGlvbiBHcm91cHMgQ2FwYWJpbGl0eSAqLworI2RlZmluZSAgUENJX0FSSV9DQVBfQUNTCTB4MDAwMgkvKiBBQ1MgRnVuY3Rpb24gR3JvdXBzIENhcGFiaWxpdHkgKi8KKyNkZWZpbmUgIFBDSV9BUklfQ0FQX05GTih4KQkoKCh4KSA+PiA4KSAmIDB4ZmYpIC8qIE5leHQgRnVuY3Rpb24gTnVtYmVyICovCisjZGVmaW5lIFBDSV9BUklfQ1RSTAkJMHgwNgkvKiBBUkkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgUENJX0FSSV9DVFJMX01GVkMJMHgwMDAxCS8qIE1GVkMgRnVuY3Rpb24gR3JvdXBzIEVuYWJsZSAqLworI2RlZmluZSAgUENJX0FSSV9DVFJMX0FDUwkweDAwMDIJLyogQUNTIEZ1bmN0aW9uIEdyb3VwcyBFbmFibGUgKi8KKyNkZWZpbmUgIFBDSV9BUklfQ1RSTF9GRyh4KQkoKCh4KSA+PiA0KSAmIDcpIC8qIEZ1bmN0aW9uIEdyb3VwICovCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfUkVHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oIGIvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAppbmRleCBhN2RkMzhmLi5hN2M3MjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKQEAgLTQ1LDggKzQ1LDYgQEAKIAlpbnQgaXRfcmVxdWV1ZV9wZW5kaW5nOwkJLyogd2FpdGluZyB0byByZXF1ZXVlIHRoaXMgdGltZXIgKi8KICNkZWZpbmUgUkVRVUVVRV9QRU5ESU5HIDEKIAlpbnQgaXRfc2lnZXZfbm90aWZ5OwkJLyogbm90aWZ5IHdvcmQgb2Ygc2lnZXZlbnQgc3RydWN0ICovCi0JaW50IGl0X3NpZ2V2X3NpZ25vOwkJLyogc2lnbm8gd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KLQlzaWd2YWxfdCBpdF9zaWdldl92YWx1ZTsJLyogdmFsdWUgd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKml0X3Byb2Nlc3M7CS8qIHByb2Nlc3MgdG8gc2VuZCBzaWduYWwgdG8gKi8KIAlzdHJ1Y3Qgc2lncXVldWUgKnNpZ3E7CQkvKiBzaWduYWwgcXVldWUgZW50cnkuICovCiAJdW5pb24gewpAQCAtMTE1LDQgKzExMyw2IEBACiAKIGxvbmcgY2xvY2tfbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2spOwogCit2b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHVuc2lnbmVkIGxvbmcgcmxpbV9uZXcpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmggYi9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCmluZGV4IGVhOTZlYWQuLmY5MzQ4Y2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaApAQCAtMTY1LDYgKzE2NSwxMiBAQAogZXh0ZXJuIHZvaWQgcG93ZXJfc3VwcGx5X2NoYW5nZWQoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKIGV4dGVybiBpbnQgcG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1BPV0VSX1NVUFBMWSkgfHwgZGVmaW5lZChDT05GSUdfUE9XRVJfU1VQUExZX01PRFVMRSkKK2V4dGVybiBpbnQgcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KKyNlbmRpZgorCiBleHRlcm4gaW50IHBvd2VyX3N1cHBseV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCQkJIHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CiBleHRlcm4gdm9pZCBwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcihzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKaW5kZXggZWE3NDE2Yy4uMjI2NDFkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCkBAIC05NCw3ICs5NCw2IEBACiBleHRlcm4gdm9pZCBfX3B0cmFjZV9saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3X3BhcmVudCk7CiBleHRlcm4gdm9pZCBfX3B0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7Ci1leHRlcm4gdm9pZCBwdHJhY2VfdW50cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKICNkZWZpbmUgUFRSQUNFX01PREVfUkVBRCAgIDEKICNkZWZpbmUgUFRSQUNFX01PREVfQVRUQUNIIDIKIC8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZGVuaWFsLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmIwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKQEAgLTAsMCArMSwxMjcgQEAKKyNpZm5kZWYgX0xJTlVYX1JJTkdfQlVGRkVSX0gKKyNkZWZpbmUgX0xJTlVYX1JJTkdfQlVGRkVSX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RydWN0IHJpbmdfYnVmZmVyOworc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXI7CisKKy8qCisgKiBEb24ndCByZWZlcmVuY2UgdGhpcyBzdHJ1Y3QgZGlyZWN0bHksIHVzZSBmdW5jdGlvbnMgYmVsb3cuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCB7CisJdTMyCQl0eXBlOjIsIGxlbjozLCB0aW1lX2RlbHRhOjI3OworCXUzMgkJYXJyYXlbXTsKK307CisKKy8qKgorICogZW51bSByaW5nX2J1ZmZlcl90eXBlIC0gaW50ZXJuYWwgcmluZyBidWZmZXIgdHlwZXMKKyAqCisgKiBAUklOR0JVRl9UWVBFX1BBRERJTkc6CUxlZnQgb3ZlciBwYWdlIHBhZGRpbmcKKyAqCQkJCSBhcnJheSBpcyBpZ25vcmVkCisgKgkJCQkgc2l6ZSBpcyB2YXJpYWJsZSBkZXBlbmRpbmcgb24gaG93IG11Y2gKKyAqCQkJCSAgcGFkZGluZyBpcyBuZWVkZWQKKyAqCisgKiBAUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOglFeHRlbmQgdGhlIHRpbWUgZGVsdGEKKyAqCQkJCSBhcnJheVswXSA9IHRpbWUgZGVsdGEgKDI4IC4uIDU5KQorICoJCQkJIHNpemUgPSA4IGJ5dGVzCisgKgorICogQFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOglTeW5jIHRpbWUgc3RhbXAgd2l0aCBleHRlcm5hbCBjbG9jaworICoJCQkJIGFycmF5WzBdID0gdHZfbnNlYworICoJCQkJIGFycmF5WzFdID0gdHZfc2VjCisgKgkJCQkgc2l6ZSA9IDE2IGJ5dGVzCisgKgorICogQFJJTkdCVUZfVFlQRV9EQVRBOgkJRGF0YSByZWNvcmQKKyAqCQkJCSBJZiBsZW4gaXMgemVybzoKKyAqCQkJCSAgYXJyYXlbMF0gaG9sZHMgdGhlIGFjdHVhbCBsZW5ndGgKKyAqCQkJCSAgYXJyYXlbMS4uKGxlbmd0aCszKS80LTFdIGhvbGRzIGRhdGEKKyAqCQkJCSBlbHNlCisgKgkJCQkgIGxlbmd0aCA9IGxlbiA8PCAyCisgKgkJCQkgIGFycmF5WzAuLihsZW5ndGgrMykvNF0gaG9sZHMgZGF0YQorICovCitlbnVtIHJpbmdfYnVmZmVyX3R5cGUgeworCVJJTkdCVUZfVFlQRV9QQURESU5HLAorCVJJTkdCVUZfVFlQRV9USU1FX0VYVEVORCwKKwkvKiBGSVhNRTogUklOR0JVRl9UWVBFX1RJTUVfU1RBTVAgbm90IGltcGxlbWVudGVkICovCisJUklOR0JVRl9UWVBFX1RJTUVfU1RBTVAsCisJUklOR0JVRl9UWVBFX0RBVEEsCit9OworCit1bnNpZ25lZCByaW5nX2J1ZmZlcl9ldmVudF9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCk7Cit2b2lkICpyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpOworCisvKioKKyAqIHJpbmdfYnVmZmVyX2V2ZW50X3RpbWVfZGVsdGEgLSByZXR1cm4gdGhlIGRlbHRhIHRpbWVzdGFtcCBvZiB0aGUgZXZlbnQKKyAqIEBldmVudDogdGhlIGV2ZW50IHRvIGdldCB0aGUgZGVsdGEgdGltZXN0YW1wIG9mCisgKgorICogVGhlIGRlbHRhIHRpbWVzdGFtcCBpcyB0aGUgMjcgYml0IHRpbWVzdGFtcCBzaW5jZSB0aGUgbGFzdCBldmVudC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZAorcmluZ19idWZmZXJfZXZlbnRfdGltZV9kZWx0YShzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+dGltZV9kZWx0YTsKK30KKworLyoKKyAqIHNpemUgaXMgaW4gYnl0ZXMgZm9yIGVhY2ggcGVyIENQVSBidWZmZXIuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlciAqCityaW5nX2J1ZmZlcl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQgcmluZ19idWZmZXJfZnJlZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7CisKK2ludCByaW5nX2J1ZmZlcl9yZXNpemUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgsCisJCQkgdW5zaWduZWQgbG9uZyAqZmxhZ3MpOworaW50IHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgcmluZ19idWZmZXJfd3JpdGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB2b2lkICpkYXRhKTsKKworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX3BlZWsoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpOworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX2NvbnN1bWUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpOworCitzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqCityaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKK3ZvaWQgcmluZ19idWZmZXJfcmVhZF9maW5pc2goc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpOworCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgorcmluZ19idWZmZXJfaXRlcl9wZWVrKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKTsKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9yZWFkKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKTsKK3ZvaWQgcmluZ19idWZmZXJfaXRlcl9yZXNldChzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcik7CitpbnQgcmluZ19idWZmZXJfaXRlcl9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcik7CisKK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfc2l6ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7CisKK3ZvaWQgcmluZ19idWZmZXJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKK3ZvaWQgcmluZ19idWZmZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpOworCitpbnQgcmluZ19idWZmZXJfc3dhcF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXJfYSwKKwkJCSBzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcl9iLCBpbnQgY3B1KTsKKworaW50IHJpbmdfYnVmZmVyX2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKK2ludCByaW5nX2J1ZmZlcl9lbXB0eV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOworCit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9kaXNhYmxlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKK3ZvaWQgcmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7Cit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9kaXNhYmxlX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7Cit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKKwordW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpOworCit1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChpbnQgY3B1KTsKK3ZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoaW50IGNwdSwgdTY0ICp0cyk7CisKK2VudW0gcmluZ19idWZmZXJfZmxhZ3MgeworCVJCX0ZMX09WRVJXUklURQkJPSAxIDw8IDAsCit9OworCisjZW5kaWYgLyogX0xJTlVYX1JJTkdfQlVGRkVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggZmVkNmY1ZS4uODlmMDU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTM5LDE4ICszOSw2IEBACiAKICNpZmRlZiBDT05GSUdfTU1VCiAKLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWFfYWxsb2Modm9pZCkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhhbm9uX3ZtYV9jYWNoZXAsIEdGUF9LRVJORUwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQotewotCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CkBAIC03NSw2ICs2Myw5IEBACiB2b2lkIGFub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBfX2Fub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCitleHRlcm4gc3RydWN0IGFub25fdm1hICpwYWdlX2xvY2tfYW5vbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSk7CisKIC8qCiAgKiBybWFwIGludGVyZmFjZXMgY2FsbGVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHB0ZSBvZiBwYWdlCiAgKi8KQEAgLTExNyw2ICsxMDgsMTkgQEAKICAqLwogaW50IHBhZ2VfbWtjbGVhbihzdHJ1Y3QgcGFnZSAqKTsKIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiBjYWxsZWQgaW4gbXVubG9jaygpL211bm1hcCgpIHBhdGggdG8gY2hlY2sgZm9yIG90aGVyIHZtYXMgaG9sZGluZworICogdGhlIHBhZ2UgbWxvY2tlZC4KKyAqLworaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOwkvKiBhLmsuYS4gU1dBUF9TVUNDRVNTICovCit9CisjZW5kaWYKKwogI2Vsc2UJLyogIUNPTkZJR19NTVUgKi8KIAogI2RlZmluZSBhbm9uX3ZtYV9pbml0KCkJCWRvIHt9IHdoaWxlICgwKQpAQCAtMTQwLDUgKzE0NCw2IEBACiAjZGVmaW5lIFNXQVBfU1VDQ0VTUwkwCiAjZGVmaW5lIFNXQVBfQUdBSU4JMQogI2RlZmluZSBTV0FQX0ZBSUwJMgorI2RlZmluZSBTV0FQX01MT0NLCTMKIAogI2VuZGlmCS8qIF9MSU5VWF9STUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBkZTUzYzEwLi45ZWUzYmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC00MDMsMTIgKzQwMywyMSBAQAogI2RlZmluZSBNTUZfRFVNUF9NQVBQRURfUFJJVkFURQk0CiAjZGVmaW5lIE1NRl9EVU1QX01BUFBFRF9TSEFSRUQJNQogI2RlZmluZSBNTUZfRFVNUF9FTEZfSEVBREVSUwk2CisjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSA3CisjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4CiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwotI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk1CisjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTcKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX01BU0sgXAogCSgoKDEgPDwgTU1GX0RVTVBfRklMVEVSX0JJVFMpIC0gMSkgPDwgTU1GX0RVTVBfRklMVEVSX1NISUZUKQogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfREVGQVVMVCBcCi0JKCgxIDw8IE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfAkoMSA8PCBNTUZfRFVNUF9BTk9OX1NIQVJFRCkpCisJKCgxIDw8IE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfAkoMSA8PCBNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfFwKKwkgKDEgPDwgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYpCisKKyNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMKKyMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYJKDEgPDwgTU1GX0RVTVBfRUxGX0hFQURFUlMpCisjZWxzZQorIyBkZWZpbmUgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRgkwCisjZW5kaWYKIAogc3RydWN0IHNpZ2hhbmRfc3RydWN0IHsKIAlhdG9taWNfdAkJY291bnQ7CkBAIC00MjUsNiArNDM0LDM5IEBACiAJdW5zaWduZWQgbG9uZwkJYWNfbWluZmx0LCBhY19tYWpmbHQ7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0YXNrX2NwdXRpbWUgLSBjb2xsZWN0ZWQgQ1BVIHRpbWUgY291bnRzCisgKiBAdXRpbWU6CQl0aW1lIHNwZW50IGluIHVzZXIgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cworICogQHN0aW1lOgkJdGltZSBzcGVudCBpbiBrZXJuZWwgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cworICogQHN1bV9leGVjX3J1bnRpbWU6CXRvdGFsIHRpbWUgc3BlbnQgb24gdGhlIENQVSwgaW4gbmFub3NlY29uZHMKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBncm91cHMgdG9nZXRoZXIgdGhyZWUga2luZHMgb2YgQ1BVIHRpbWUgdGhhdCBhcmUKKyAqIHRyYWNrZWQgZm9yIHRocmVhZHMgYW5kIHRocmVhZCBncm91cHMuICBNb3N0IHRoaW5ncyBjb25zaWRlcmluZworICogQ1BVIHRpbWUgd2FudCB0byBncm91cCB0aGVzZSBjb3VudHMgdG9nZXRoZXIgYW5kIHRyZWF0IGFsbCB0aHJlZQorICogb2YgdGhlbSBpbiBwYXJhbGxlbC4KKyAqLworc3RydWN0IHRhc2tfY3B1dGltZSB7CisJY3B1dGltZV90IHV0aW1lOworCWNwdXRpbWVfdCBzdGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX2V4ZWNfcnVudGltZTsKK307CisvKiBBbHRlcm5hdGUgZmllbGQgbmFtZXMgd2hlbiB1c2VkIHRvIGNhY2hlIGV4cGlyYXRpb25zLiAqLworI2RlZmluZSBwcm9mX2V4cAlzdGltZQorI2RlZmluZSB2aXJ0X2V4cAl1dGltZQorI2RlZmluZSBzY2hlZF9leHAJc3VtX2V4ZWNfcnVudGltZQorCisvKioKKyAqIHN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSAtIHRocmVhZCBncm91cCBpbnRlcnZhbCB0aW1lciBjb3VudHMKKyAqIEB0b3RhbHM6CQl0aHJlYWQgZ3JvdXAgaW50ZXJ2YWwgdGltZXJzOyBzdWJzdHJ1Y3R1cmUgZm9yCisgKgkJCXVuaXByb2Nlc3NvciBrZXJuZWwsIHBlci1jcHUgZm9yIFNNUCBrZXJuZWwuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHZlcnNpb24gb2YgdGFza19jcHV0aW1lLCBhYm92ZSwgdGhhdCBpcworICogdXNlZCBmb3IgdGhyZWFkIGdyb3VwIENQVSBjbG9jayBjYWxjdWxhdGlvbnMuCisgKi8KK3N0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSB7CisJc3RydWN0IHRhc2tfY3B1dGltZSAqdG90YWxzOworfTsKKwogLyoKICAqIE5PVEUhICJzaWduYWxfc3RydWN0IiBkb2VzIG5vdCBoYXZlIGl0J3Mgb3duCiAgKiBsb2NraW5nLCBiZWNhdXNlIGEgc2hhcmVkIHNpZ25hbF9zdHJ1Y3QgYWx3YXlzCkBAIC00NzAsNiArNTEyLDE3IEBACiAJY3B1dGltZV90IGl0X3Byb2ZfZXhwaXJlcywgaXRfdmlydF9leHBpcmVzOwogCWNwdXRpbWVfdCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsKIAorCS8qCisJICogVGhyZWFkIGdyb3VwIHRvdGFscyBmb3IgcHJvY2VzcyBDUFUgY2xvY2tzLgorCSAqIFNlZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSgpLCBldCBhbCwgZm9yIGRldGFpbHMuCisJICovCisJc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lIGNwdXRpbWU7CisKKwkvKiBFYXJsaWVzdC1leHBpcmF0aW9uIGNhY2hlLiAqLworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZV9leHBpcmVzOworCisJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOworCiAJLyogam9iIGNvbnRyb2wgSURzICovCiAKIAkvKgpAQCAtNTAwLDcgKzU1Myw3IEBACiAJICogTGl2ZSB0aHJlYWRzIG1haW50YWluIHRoZWlyIG93biBjb3VudGVycyBhbmQgYWRkIHRvIHRoZXNlCiAJICogaW4gX19leGl0X3NpZ25hbCwgZXhjZXB0IGZvciB0aGUgZ3JvdXAgbGVhZGVyLgogCSAqLwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lOworCWNwdXRpbWVfdCBjdXRpbWUsIGNzdGltZTsKIAljcHV0aW1lX3QgZ3RpbWU7CiAJY3B1dGltZV90IGNndGltZTsKIAl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3csIGNudmNzdywgY25pdmNzdzsKQEAgLTUwOSwxNCArNTYyLDYgQEAKIAlzdHJ1Y3QgdGFza19pb19hY2NvdW50aW5nIGlvYWM7CiAKIAkvKgotCSAqIEN1bXVsYXRpdmUgbnMgb2Ygc2NoZWR1bGVkIENQVSB0aW1lIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlCi0JICogZ3JvdXAsIG5vdCBpbmNsdWRpbmcgYSB6b21iaWUgZ3JvdXAgbGVhZGVyLiAgKFRoaXMgb25seSBkaWZmZXJzCi0JICogZnJvbSBqaWZmaWVzX3RvX25zKHV0aW1lICsgc3RpbWUpIGlmIHNjaGVkX2Nsb2NrIHVzZXMgc29tZXRoaW5nCi0JICogb3RoZXIgdGhhbiBqaWZmaWVzLikKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX3NjaGVkX3J1bnRpbWU7Ci0KLQkvKgogCSAqIFdlIGRvbid0IGJvdGhlciB0byBzeW5jaHJvbml6ZSBtb3N0IHJlYWRlcnMgb2YgdGhpcyBhdCBhbGwsCiAJICogYmVjYXVzZSB0aGVyZSBpcyBubyByZWFkZXIgY2hlY2tpbmcgYSBsaW1pdCB0aGF0IGFjdHVhbGx5IG5lZWRzCiAJICogdG8gZ2V0IGJvdGggcmxpbV9jdXIgYW5kIHJsaW1fbWF4IGF0b21pY2FsbHksIGFuZCBlaXRoZXIgb25lCkBAIC01MjcsOCArNTcyLDYgQEAKIAkgKi8KIAlzdHJ1Y3QgcmxpbWl0IHJsaW1bUkxJTV9OTElNSVRTXTsKIAotCXN0cnVjdCBsaXN0X2hlYWQgY3B1X3RpbWVyc1szXTsKLQogCS8qIGtlZXAgdGhlIHByb2Nlc3Mtc2hhcmVkIGtleXJpbmdzIGhlcmUgc28gdGhhdCB0aGV5IGRvIHRoZSByaWdodAogCSAqIHRoaW5nIGluIHRocmVhZHMgY3JlYXRlZCB3aXRoIENMT05FX1RIUkVBRCAqLwogI2lmZGVmIENPTkZJR19LRVlTCkBAIC0xMTM3LDggKzExODAsNyBAQAogLyogbW0gZmF1bHQgYW5kIHN3YXAgaW5mbzogdGhpcyBjYW4gYXJndWFibHkgYmUgc2VlbiBhcyBlaXRoZXIgbW0tc3BlY2lmaWMgb3IgdGhyZWFkLXNwZWNpZmljICovCiAJdW5zaWduZWQgbG9uZyBtaW5fZmx0LCBtYWpfZmx0OwogCi0gIAljcHV0aW1lX3QgaXRfcHJvZl9leHBpcmVzLCBpdF92aXJ0X2V4cGlyZXM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGl0X3NjaGVkX2V4cGlyZXM7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lX2V4cGlyZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOwogCiAvKiBwcm9jZXNzIGNyZWRlbnRpYWxzICovCkBAIC0xNTk0LDYgKzE2MzYsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nCiB0YXNrX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgdGhyZWFkX2dyb3VwX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAogLyogc2NoZWRfZXhlYyBpcyBjYWxsZWQgYnkgcHJvY2Vzc2VzIHBlcmZvcm1pbmcgYW4gZXhlYyAqLwogI2lmZGVmIENPTkZJR19TTVAKQEAgLTIwOTEsNiArMjEzNCwzMCBAQAogfQogCiAvKgorICogVGhyZWFkIGdyb3VwIENQVSB0aW1lIGFjY291bnRpbmcuCisgKi8KKworZXh0ZXJuIGludCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9hbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB0aHJlYWRfZ3JvdXBfY3B1dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHRhc2tfY3B1dGltZSAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lX2luaXQoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3sKKwlzaWctPmNwdXRpbWUudG90YWxzID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfY2xvbmVfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3sKKwlpZiAoY3Vyci0+c2lnbmFsLT5jcHV0aW1lLnRvdGFscykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRocmVhZF9ncm91cF9jcHV0aW1lX2FsbG9jKGN1cnIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfZnJlZShzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCWZyZWVfcGVyY3B1KHNpZy0+Y3B1dGltZS50b3RhbHMpOworfQorCisvKgogICogUmVldmFsdWF0ZSB3aGV0aGVyIHRoZSB0YXNrIGhhcyBzaWduYWxzIHBlbmRpbmcgZGVsaXZlcnkuCiAgKiBXYWtlIHRoZSB0YXNrIGlmIHNvLgogICogVGhpcyBpcyByZXF1aXJlZCBldmVyeSB0aW1lIHRoZSBibG9ja2VkIHNpZ3NldF90IGNoYW5nZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggYTE3ODNiMi4uZGM1MGJjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtNjAsNiArNjAsMTkgQEAKIAlyZXR1cm4gc2VxX2JpdG1hcChtLCBtYXNrLT5iaXRzLCBNQVhfTlVNTk9ERVMpOwogfQogCitpbnQgc2VxX2JpdG1hcF9saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyAqYml0cywKKwkJdW5zaWduZWQgaW50IG5yX2JpdHMpOworCitzdGF0aWMgaW5saW5lIGludCBzZXFfY3B1bWFza19saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgY3B1bWFza190ICptYXNrKQoreworCXJldHVybiBzZXFfYml0bWFwX2xpc3QobSwgbWFzay0+Yml0cywgTlJfQ1BVUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlcV9ub2RlbWFza19saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbm9kZW1hc2tfdCAqbWFzaykKK3sKKwlyZXR1cm4gc2VxX2JpdG1hcF9saXN0KG0sIG1hc2stPmJpdHMsIE1BWF9OVU1OT0RFUyk7Cit9CisKIGludCBzaW5nbGVfb3BlbihzdHJ1Y3QgZmlsZSAqLCBpbnQgKCopKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopLCB2b2lkICopOwogaW50IHNpbmdsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHZvaWQgKl9fc2VxX29wZW5fcHJpdmF0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oIGIvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMjEyZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCkBAIC0wLDAgKzEsOTEgQEAKKyNpZm5kZWYgX19TSF9JTlRDX0gKKyNkZWZpbmUgX19TSF9JTlRDX0gKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGludGNfZW51bTsKKworc3RydWN0IGludGNfdmVjdCB7CisJaW50Y19lbnVtIGVudW1faWQ7CisJdW5zaWduZWQgc2hvcnQgdmVjdDsKK307CisKKyNkZWZpbmUgSU5UQ19WRUNUKGVudW1faWQsIHZlY3QpIHsgZW51bV9pZCwgdmVjdCB9CisjZGVmaW5lIElOVENfSVJRKGVudW1faWQsIGlycSkgSU5UQ19WRUNUKGVudW1faWQsIGlycTJldnQoaXJxKSkKKworc3RydWN0IGludGNfZ3JvdXAgeworCWludGNfZW51bSBlbnVtX2lkOworCWludGNfZW51bSBlbnVtX2lkc1szMl07Cit9OworCisjZGVmaW5lIElOVENfR1JPVVAoZW51bV9pZCwgaWRzLi4uKSB7IGVudW1faWQsIHsgaWRzIH0gfQorCitzdHJ1Y3QgaW50Y19tYXNrX3JlZyB7CisJdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGg7CisJaW50Y19lbnVtIGVudW1faWRzWzMyXTsKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyBzbXA7CisjZW5kaWYKK307CisKK3N0cnVjdCBpbnRjX3ByaW9fcmVnIHsKKwl1bnNpZ25lZCBsb25nIHNldF9yZWcsIGNscl9yZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7CisJaW50Y19lbnVtIGVudW1faWRzWzE2XTsKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyBzbXA7CisjZW5kaWYKK307CisKK3N0cnVjdCBpbnRjX3NlbnNlX3JlZyB7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7CisJaW50Y19lbnVtIGVudW1faWRzWzE2XTsKK307CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIElOVENfU01QKHN0cmlkZSwgbnIpIC5zbXAgPSAoc3RyaWRlKSB8ICgobnIpIDw8IDgpCisjZWxzZQorI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKQorI2VuZGlmCisKK3N0cnVjdCBpbnRjX2Rlc2MgeworCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3RvcnM7CisJdW5zaWduZWQgaW50IG5yX3ZlY3RvcnM7CisJc3RydWN0IGludGNfZ3JvdXAgKmdyb3VwczsKKwl1bnNpZ25lZCBpbnQgbnJfZ3JvdXBzOworCXN0cnVjdCBpbnRjX21hc2tfcmVnICptYXNrX3JlZ3M7CisJdW5zaWduZWQgaW50IG5yX21hc2tfcmVnczsKKwlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHJpb19yZWdzOworCXVuc2lnbmVkIGludCBucl9wcmlvX3JlZ3M7CisJc3RydWN0IGludGNfc2Vuc2VfcmVnICpzZW5zZV9yZWdzOworCXVuc2lnbmVkIGludCBucl9zZW5zZV9yZWdzOworCWNoYXIgKm5hbWU7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJc3RydWN0IGludGNfbWFza19yZWcgKmFja19yZWdzOworCXVuc2lnbmVkIGludCBucl9hY2tfcmVnczsKKyNlbmRpZgorfTsKKworI2RlZmluZSBfSU5UQ19BUlJBWShhKSBhLCBzaXplb2YoYSkvc2l6ZW9mKCphKQorI2RlZmluZSBERUNMQVJFX0lOVENfREVTQyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCQlcCisJbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MpCQkJCVwKK3N0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCisJX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAorCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAorCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAorCWNoaXBuYW1lLAkJCQkJCQlcCit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKyNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0NfQUNLKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJXAorCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncykJCQlcCitzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAorCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKKwlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKKwlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKKwljaGlwbmFtZSwJCQkJCQkJXAorCV9JTlRDX0FSUkFZKGFja19yZWdzKSwJCQkJCQlcCit9CisjZW5kaWYKKwordm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpOworaW50IGludGNfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmlvKTsKKworI2VuZGlmIC8qIF9fU0hfSU5UQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCA2NjQ4NGQ0Li4yZTRkNThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTcsNiArNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCkBAIC0xNiw3ICsxNyw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyk7CiAJdm9pZCAqaW5mbzsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdTE2IGZsYWdzOworCXUxNiBwcml2OwogfTsKIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhYi5oIGIvaW5jbHVkZS9saW51eC9zd2FiLmgKaW5kZXggMjcwZDVjMjAuLmJiZWQyNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhYi5oCkBAIC00Nyw4ICs0Nyw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWIxNgogCXJldHVybiBfX2FyY2hfc3dhYjE2KHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FiMTZwKQotCXJldHVybiBfX2FyY2hfc3dhYjE2cCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhYjE2KHZhbCk7CiAjZW5kaWYKQEAgLTU4LDggKzU2LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhYjMyCiAJcmV0dXJuIF9fYXJjaF9zd2FiMzIodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWIzMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FiMzJwKCZ2YWwpOwogI2Vsc2UKIAlyZXR1cm4gX19jb25zdF9zd2FiMzIodmFsKTsKICNlbmRpZgpAQCAtNjksOCArNjUsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FiNjQKIAlyZXR1cm4gX19hcmNoX3N3YWI2NCh2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhYjY0cCkKLQlyZXR1cm4gX19hcmNoX3N3YWI2NHAoJnZhbCk7CiAjZWxpZiBkZWZpbmVkKF9fU1dBQl82NF9USFJVXzMyX18pCiAJX191MzIgaCA9IHZhbCA+PiAzMjsKIAlfX3UzMiBsID0gdmFsICYgKCgxVUxMIDw8IDMyKSAtIDEpOwpAQCAtODQsOCArNzgsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FodzMyCiAJcmV0dXJuIF9fYXJjaF9zd2FodzMyKHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FodzMycCkKLQlyZXR1cm4gX19hcmNoX3N3YWh3MzJwKCZ2YWwpOwogI2Vsc2UKIAlyZXR1cm4gX19jb25zdF9zd2FodzMyKHZhbCk7CiAjZW5kaWYKQEAgLTk1LDggKzg3LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhaGIzMgogCXJldHVybiBfX2FyY2hfc3dhaGIzMih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhaGIzMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FoYjMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhaGIzMih2YWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGRlNDBmMTY5YS4uYTNhZjk1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGUuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTcxLDggKzE3MiwxMCBAQAogCiAKIC8qIGxpbnV4L21tL3N3YXAuYyAqLwotZXh0ZXJuIHZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqKTsKLWV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgX19scnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICosIGVudW0gbHJ1X2xpc3QgbHJ1KTsKK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfbHJ1KHN0cnVjdCBwYWdlICosIGVudW0gbHJ1X2xpc3QgbHJ1KTsKK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHN0cnVjdCBwYWdlICosCisJCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpOwpAQCAtMTgwLDEyICsxODMsMzggQEAKIGV4dGVybiB2b2lkIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7CiAKK2V4dGVybiB2b2lkIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKioKKyAqIGxydV9jYWNoZV9hZGQ6IGFkZCBhIHBhZ2UgdG8gdGhlIHBhZ2UgbGlzdHMKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBhZGQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0lOQUNUSVZFX0FOT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2FkZF9hY3RpdmVfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0lOQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0FDVElWRV9GSUxFKTsKK30KKwogLyogbGludXgvbW0vdm1zY2FuLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJCWdmcF90IGdmcF9tYXNrKTsKLWV4dGVybiBpbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUsIGludCBmaWxlKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogZXh0ZXJuIGludCByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpOwpAQCAtMjA0LDYgKzIzMywzNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCitleHRlcm4gaW50IHBhZ2VfZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gdm9pZCBzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNjYW5fdW5ldmljdGFibGVfcGFnZXM7CitleHRlcm4gaW50IHNjYW5fdW5ldmljdGFibGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKK2V4dGVybiB2b2lkIHNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwYWdlX2V2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBzY2FuX3VuZXZpY3RhYmxlX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkgeyB9CisjZW5kaWYKKwogZXh0ZXJuIGludCBrc3dhcGRfcnVuKGludCBuaWQpOwogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMjUxLDYgKzMwOCw3IEBACiBleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2luZm9fc3RydWN0KHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihzdHJ1Y3QgcGFnZSAqKTsKIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvOwogCiAvKiBsaW51eC9tbS90aHJhc2guYyAqLwpAQCAtMzM5LDYgKzM5NywxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKQogewogCXN3cF9lbnRyeV90IGVudHJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IGIzMzBlMjguLjlkNjhmZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTIxLDggKzIxLDkgQEAKIHN0cnVjdCBtb2R1bGU7CiAKIC8qIEZJWE1FCi0gKiBUaGUgKm93bmVyIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkLCBidXQgbGVhdmUgYXJvdW5kCi0gKiB1bnRpbCB0aGUgdHJlZSBnZXRzIGNsZWFuZWQgdXAgZnVsbHkuCisgKiBUaGUgKm93bmVyIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkLgorICogeDg2IHRyZWUgaGFzIGJlZW4gY2xlYW5lZCB1cC4gVGhlIG93bmVyCisgKiBhdHRyaWJ1dGUgaXMgc3RpbGwgbGVmdCBmb3Igb3RoZXIgYXJjaGVzLgogICovCiBzdHJ1Y3QgYXR0cmlidXRlIHsKIAljb25zdCBjaGFyCQkqbmFtZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGljay5oIGIvaW5jbHVkZS9saW51eC90aWNrLmgKaW5kZXggOTg5MjFhMy4uYjZlYzgxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC90aWNrLmgKQEAgLTk2LDkgKzk2LDExIEBACiBleHRlcm4gdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKTsKIGV4dGVybiBpbnQgdGlja19jaGVja19vbmVzaG90X2NoYW5nZShpbnQgYWxsb3dfbm9oeik7CiBleHRlcm4gc3RydWN0IHRpY2tfc2NoZWQgKnRpY2tfZ2V0X3RpY2tfc2NoZWQoaW50IGNwdSk7CitleHRlcm4gdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSk7CiAjIGVsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkgeyB9CiAjIGVuZGlmCiAKICNlbHNlIC8qIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCkBAIC0xMDYsMjYgKzEwOCwyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2xvY2tfbm90aWZ5KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSBpbnQgdGlja19jaGVja19vbmVzaG90X2NoYW5nZShpbnQgYWxsb3dfbm9oeikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2hlY2tfaWRsZShpbnQgY3B1KSB7IH0KICNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgKi8KIAogIyBpZmRlZiBDT05GSUdfTk9fSFoKIGV4dGVybiB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soaW50IGluaWRsZSk7CiBleHRlcm4gdm9pZCB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKHZvaWQpOwogZXh0ZXJuIGt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCk7Ci1leHRlcm4gdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpOwogZXh0ZXJuIHU2NCBnZXRfY3B1X2lkbGVfdGltZV91cyhpbnQgY3B1LCB1NjQgKmxhc3RfdXBkYXRlX3RpbWUpOwogIyBlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljayhpbnQgaW5pZGxlKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel91cGRhdGVfamlmZmllcyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUga3RpbWVfdCB0aWNrX25vaHpfZ2V0X3NsZWVwX2xlbmd0aCh2b2lkKQogewogCWt0aW1lX3QgbGVuID0geyAudHY2NCA9IE5TRUNfUEVSX1NFQy9IWiB9OwogCiAJcmV0dXJuIGxlbjsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSB1NjQgZ2V0X2NwdV9pZGxlX3RpbWVfdXMoaW50IGNwdSwgdTY0ICp1bnVzZWQpIHsgcmV0dXJuIC0xOyB9CiAjIGVuZGlmIC8qICFOT19IWiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IGM5MTFlZjYuLmNlMzIxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0xMjMsNiArMTIzLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm1fc2V0aXRpbWVyKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKIGV4dGVybiBpbnQgZG9fZ2V0aXRpbWVyKGludCB3aGljaCwgc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUpOwogZXh0ZXJuIHZvaWQgZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dik7CitleHRlcm4gdm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cyk7CiBleHRlcm4gdm9pZCBnZXRib290dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIGV4dGVybiB2b2lkIG1vbm90b25pY190b19ib290YmFzZWQoc3RydWN0IHRpbWVzcGVjICp0cyk7CiAKQEAgLTEzMSw2ICsxMzIsOSBAQAogZXh0ZXJuIHZvaWQgdXBkYXRlX3dhbGxfdGltZSh2b2lkKTsKIGV4dGVybiB2b2lkIHVwZGF0ZV94dGltZV9jYWNoZSh1NjQgbnNlYyk7CiAKK3N0cnVjdCB0bXM7CitleHRlcm4gdm9pZCBkb19zeXNfdGltZXMoc3RydWN0IHRtcyAqKTsKKwogLyoqCiAgKiB0aW1lc3BlY190b19ucyAtIENvbnZlcnQgdGltZXNwZWMgdG8gbmFub3NlY29uZHMKICAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHZhcmlhYmxlIHRvIGJlIGNvbnZlcnRlZApAQCAtMjIwLDYgKzIyNCw3IEBACiAjZGVmaW5lIENMT0NLX01PTk9UT05JQwkJCTEKICNkZWZpbmUgQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lECTIKICNkZWZpbmUgQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQJCTMKKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX1JBVwkJNAogCiAvKgogICogVGhlIElEcyBvZiB2YXJpb3VzIGhhcmR3YXJlIGNsb2NrczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCBmYzYwMzVkLi45MDA3MzEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC04Miw3ICs4Miw3IEBACiAgKi8KICNkZWZpbmUgU0hJRlRfVVNFQyAxNgkJLyogZnJlcXVlbmN5IG9mZnNldCBzY2FsZSAoc2hpZnQpICovCiAjZGVmaW5lIFBQTV9TQ0FMRSAoTlNFQ19QRVJfVVNFQyA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfVVNFQykpCi0jZGVmaW5lIFBQTV9TQ0FMRV9JTlZfU0hJRlQgMjAKKyNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAxOQogI2RlZmluZSBQUE1fU0NBTEVfSU5WICgoMWxsIDw8IChQUE1fU0NBTEVfSU5WX1NISUZUICsgTlRQX1NDQUxFX1NISUZUKSkgLyBcCiAJCSAgICAgICBQUE1fU0NBTEUgKyAxKQogCkBAIC0xNDEsOCArMTQxLDE1IEBACiAjZGVmaW5lIEFESl9NSUNSTwkJMHgxMDAwCS8qIHNlbGVjdCBtaWNyb3NlY29uZCByZXNvbHV0aW9uICovCiAjZGVmaW5lIEFESl9OQU5PCQkweDIwMDAJLyogc2VsZWN0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbiAqLwogI2RlZmluZSBBREpfVElDSwkJMHg0MDAwCS8qIHRpY2sgdmFsdWUgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgQURKX0FESlRJTUUJCTB4ODAwMAkvKiBzd2l0Y2ggYmV0d2VlbiBhZGp0aW1lL2FkanRpbWV4IG1vZGVzICovCisjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVAkweDAwMDEJLyogb2xkLWZhc2hpb25lZCBhZGp0aW1lICovCisjZGVmaW5lIEFESl9PRkZTRVRfUkVBRE9OTFkJMHgyMDAwCS8qIHJlYWQtb25seSBhZGp0aW1lICovCisjZWxzZQogI2RlZmluZSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QJMHg4MDAxCS8qIG9sZC1mYXNoaW9uZWQgYWRqdGltZSAqLwotI2RlZmluZSBBREpfT0ZGU0VUX1NTX1JFQUQJMHhhMDAxICAvKiByZWFkLW9ubHkgYWRqdGltZSAqLworI2RlZmluZSBBREpfT0ZGU0VUX1NTX1JFQUQJMHhhMDAxCS8qIHJlYWQtb25seSBhZGp0aW1lICovCisjZW5kaWYKIAogLyogeG50cCAzLjQgY29tcGF0aWJpbGl0eSBuYW1lcyAqLwogI2RlZmluZSBNT0RfT0ZGU0VUCUFESl9PRkZTRVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViYjM5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0wLDAgKzEsMTM3IEBACisjaWZuZGVmIF9MSU5VWF9UUkFDRVBPSU5UX0gKKyNkZWZpbmUgX0xJTlVYX1RSQUNFUE9JTlRfSAorCisvKgorICogS2VybmVsIFRyYWNlcG9pbnQgQVBJLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlcG9pbnQudHh0LgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOCBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYT4KKyAqCisgKiBIZWF2aWx5IGluc3BpcmVkIGZyb20gdGhlIExpbnV4IEtlcm5lbCBNYXJrZXJzLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKK3N0cnVjdCBtb2R1bGU7CitzdHJ1Y3QgdHJhY2Vwb2ludDsKKworc3RydWN0IHRyYWNlcG9pbnQgeworCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBUcmFjZXBvaW50IG5hbWUgKi8KKwlpbnQgc3RhdGU7CQkJLyogU3RhdGUuICovCisJdm9pZCAqKmZ1bmNzOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisKKworI2RlZmluZSBUUFBST1RPKGFyZ3MuLi4pCWFyZ3MKKyNkZWZpbmUgVFBBUkdTKGFyZ3MuLi4pCQlhcmdzCisKKyNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKKworLyoKKyAqIGl0X2Z1bmNbMF0gaXMgbmV2ZXIgTlVMTCBiZWNhdXNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBhcnJheQorICogd2hlbiB0aGUgYXJyYXkgaXRzZWxmIGlzIG5vbiBOVUxMLgorICovCisjZGVmaW5lIF9fRE9fVFJBQ0UodHAsIHByb3RvLCBhcmdzKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJdm9pZCAqKml0X2Z1bmM7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlyY3VfcmVhZF9sb2NrX3NjaGVkKCk7CQkJCQlcCisJCWl0X2Z1bmMgPSByY3VfZGVyZWZlcmVuY2UoKHRwKS0+ZnVuY3MpOwkJCVwKKwkJaWYgKGl0X2Z1bmMpIHsJCQkJCQlcCisJCQlkbyB7CQkJCQkJXAorCQkJCSgodm9pZCgqKShwcm90bykpKCppdF9mdW5jKSkoYXJncyk7CVwKKwkJCX0gd2hpbGUgKCooKytpdF9mdW5jKSk7CQkJCVwKKwkJfQkJCQkJCQlcCisJCXJjdV9yZWFkX3VubG9ja19zY2hlZCgpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdHJ1Y3R1cmUgaW4gdGhlIF9fdHJhY2Vwb2ludHMgc2VjdGlvbiB3aWxsCisgKiBub3QgYWRkIHVud2FudGVkIHBhZGRpbmcgYmV0d2VlbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWN0aW9uIGFuZCB0aGUKKyAqIHN0cnVjdHVyZS4gRm9yY2UgYWxpZ25tZW50IHRvIHRoZSBzYW1lIGFsaWdubWVudCBhcyB0aGUgc2VjdGlvbiBzdGFydC4KKyAqLworI2RlZmluZSBERUZJTkVfVFJBQ0UobmFtZSwgcHJvdG8sIGFyZ3MpCQkJCQlcCisJc3RhdGljIGlubGluZSB2b2lkIHRyYWNlXyMjbmFtZShwcm90bykJCQkJXAorCXsJCQkJCQkJCVwKKwkJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCVwKKwkJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKQlcCisJCT0gI25hbWUgIjoiICNwcm90bzsJCQkJCVwKKwkJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50IF9fdHJhY2Vwb2ludF8jI25hbWUJCVwKKwkJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpLCBhbGlnbmVkKDgpKSkgPQlcCisJCXsgX190cHN0cnRhYl8jI25hbWUsIDAsIE5VTEwgfTsJCQkJXAorCQlpZiAodW5saWtlbHkoX190cmFjZXBvaW50XyMjbmFtZS5zdGF0ZSkpCQlcCisJCQlfX0RPX1RSQUNFKCZfX3RyYWNlcG9pbnRfIyNuYW1lLAkJXAorCQkJCVRQUFJPVE8ocHJvdG8pLCBUUEFSR1MoYXJncykpOwkJXAorCX0JCQkJCQkJCVwKKwlzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl90cmFjZV8jI25hbWUodm9pZCAoKnByb2JlKShwcm90bykpCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiB0cmFjZXBvaW50X3Byb2JlX3JlZ2lzdGVyKCNuYW1lICI6IiAjcHJvdG8sCVwKKwkJCSh2b2lkICopcHJvYmUpOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl90cmFjZV8jI25hbWUodm9pZCAoKnByb2JlKShwcm90bykpXAorCXsJCQkJCQkJCVwKKwkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKCNuYW1lICI6IiAjcHJvdG8sCQlcCisJCQkodm9pZCAqKXByb2JlKTsJCQkJCVwKKwl9CisKK2V4dGVybiB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKKworI2Vsc2UgLyogIUNPTkZJR19UUkFDRVBPSU5UUyAqLworI2RlZmluZSBERUZJTkVfVFJBQ0UobmFtZSwgcHJvdG8sIGFyZ3MpCQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCBfZG9fdHJhY2VfIyNuYW1lKHN0cnVjdCB0cmFjZXBvaW50ICp0cCwgcHJvdG8pIFwKKwl7IH0JCQkJCQkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfIyNuYW1lKHByb3RvKQkJCQlcCisJeyB9CQkJCQkJCQlcCisJc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfdHJhY2VfIyNuYW1lKHZvaWQgKCpwcm9iZSkocHJvdG8pKQlcCisJewkJCQkJCQkJXAorCQlyZXR1cm4gLUVOT1NZUzsJCQkJCQlcCisJfQkJCQkJCQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX3RyYWNlXyMjbmFtZSh2b2lkICgqcHJvYmUpKHByb3RvKSlcCisJeyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3sgfQorI2VuZGlmIC8qIENPTkZJR19UUkFDRVBPSU5UUyAqLworCisvKgorICogQ29ubmVjdCBhIHByb2JlIHRvIGEgdHJhY2Vwb2ludC4KKyAqIEludGVybmFsIEFQSSwgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LgorICovCitleHRlcm4gaW50IHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcHJvYmUpOworCisvKgorICogRGlzY29ubmVjdCBhIHByb2JlIGZyb20gYSB0cmFjZXBvaW50LgorICogSW50ZXJuYWwgQVBJLCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuCisgKi8KK2V4dGVybiBpbnQgdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnByb2JlKTsKKworc3RydWN0IHRyYWNlcG9pbnRfaXRlciB7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50OworfTsKKworZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3N0YXJ0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOworZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX25leHQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CitleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RvcChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKK2V4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9yZXNldChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKK2V4dGVybiBpbnQgdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqKnRyYWNlcG9pbnQsCisJc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKKworLyoKKyAqIHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlciBtdXN0IGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBsYXN0IHRyYWNlcG9pbnQKKyAqIHByb2JlIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZW5kIG9mIG1vZHVsZSBleGl0IHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubworICogY2FsbGVyIGV4ZWN1dGluZyBhIHByb2JlIHdoZW4gaXQgaXMgZnJlZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IDk0YWM3NGEuLjhmYTk3M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMTEzNSw2ICsxMTM1LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludCBwb2lzb25lZDoxOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfdXNiX2FuY2hvcihzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKQpAQCAtMTQ1OSwxMiArMTQ2MCwxOCBAQAogZXh0ZXJuIGludCB1c2Jfc3VibWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncyk7CiBleHRlcm4gaW50IHVzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gdm9pZCB1c2Jfa2lsbF91cmIoc3RydWN0IHVyYiAqdXJiKTsKK2V4dGVybiB2b2lkIHVzYl9wb2lzb25fdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gdm9pZCB1c2JfdW5wb2lzb25fdXJiKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gdm9pZCB1c2Jfa2lsbF9hbmNob3JlZF91cmJzKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpOworZXh0ZXJuIHZvaWQgdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpOwogZXh0ZXJuIHZvaWQgdXNiX3VubGlua19hbmNob3JlZF91cmJzKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpOwogZXh0ZXJuIHZvaWQgdXNiX2FuY2hvcl91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl91bmFuY2hvcl91cmIoc3RydWN0IHVyYiAqdXJiKTsKIGV4dGVybiBpbnQgdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvciwKIAkJCQkJIHVuc2lnbmVkIGludCB0aW1lb3V0KTsKK2V4dGVybiBzdHJ1Y3QgdXJiICp1c2JfZ2V0X2Zyb21fYW5jaG9yKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpOworZXh0ZXJuIHZvaWQgdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiBpbnQgdXNiX2FuY2hvcl9lbXB0eShzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIAogLyoqCiAgKiB1c2JfdXJiX2Rpcl9pbiAtIGNoZWNrIGlmIGFuIFVSQiBkZXNjcmliZXMgYW4gSU4gdHJhbnNmZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZCBiL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZAppbmRleCA0MmU4NGZjLi41NGM0NDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCkBAIC00LDQgKzQsNSBAQAogaGVhZGVyLXkgKz0gZ2FkZ2V0ZnMuaAogaGVhZGVyLXkgKz0gbWlkaS5oCiBoZWFkZXIteSArPSBnX3ByaW50ZXIuaAotCitoZWFkZXIteSArPSB0bWMuaAoraGVhZGVyLXkgKz0gdnN0dXNiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKaW5kZXggY2EyMjhiYi4uMThhNzI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKQEAgLTE2MCw2ICsxNjAsMTUgQEAKIAlfX3U4CWJEZXRhaWxEYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qICJPQkVYIENvbnRyb2wgTW9kZWwgRnVuY3Rpb25hbCBEZXNjcmlwdG9yIiAqLworc3RydWN0IHVzYl9jZGNfb2JleF9kZXNjIHsKKwlfX3U4CWJMZW5ndGg7CisJX191OAliRGVzY3JpcHRvclR5cGU7CisJX191OAliRGVzY3JpcHRvclN1YlR5cGU7CisKKwlfX2xlMTYJYmNkVmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaAppbmRleCBjOTMyMzkwLi45MzVjMzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaApAQCAtMTMwLDYgKzEzMCw5IEBACiAKIGludCB1c2JfYWRkX2Z1bmN0aW9uKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOwogCitpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKK2ludCB1c2JfZnVuY3Rpb25fYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKKwogaW50IHVzYl9pbnRlcmZhY2VfaWQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICosIHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CiAKIC8qKgpAQCAtMzE2LDkgKzMxOSwxMyBAQAogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlcgkqZHJpdmVyOwogCXU4CQkJCW5leHRfc3RyaW5nX2lkOwogCi0Jc3BpbmxvY2tfdAkJCWxvY2s7CisJLyogdGhlIGdhZGdldCBkcml2ZXIgd29uJ3QgZW5hYmxlIHRoZSBkYXRhIHB1bGx1cAorCSAqIHdoaWxlIHRoZSBkZWFjdGl2YXRpb24gY291bnQgaXMgbm9uemVyby4KKwkgKi8KKwl1bnNpZ25lZAkJCWRlYWN0aXZhdGlvbnM7CiAKLQkvKiBSRVZJU0lUIHVzZSBhbmQgZXhpc3RlbmNlIG9mIGxvY2sgLi4uICovCisJLyogcHJvdGVjdHMgYXQgbGVhc3QgZGVhY3RpdmF0aW9uIGNvdW50ICovCisJc3BpbmxvY2tfdAkJCWxvY2s7CiB9OwogCiBleHRlcm4gaW50IHVzYl9zdHJpbmdfaWQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggNjU1MzQxZC4uMGI4NjE3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTE5Miw3ICsxOTIsNyBAQAogICogVGhlIGRyaXZlci5vd25lciBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBtb2R1bGUgb3duZXIgb2YgdGhpcyBkcml2ZXIuCiAgKiBUaGUgZHJpdmVyLm5hbWUgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbmFtZSBvZiB0aGlzIGRyaXZlciAocmVtZW1iZXIKICAqIGl0IHdpbGwgc2hvdyB1cCBpbiBzeXNmcywgc28gaXQgbmVlZHMgdG8gYmUgc2hvcnQgYW5kIHRvIHRoZSBwb2ludC4KLSAqIFVzZWluZyB0aGUgbW9kdWxlIG5hbWUgaXMgYSBnb29kIGlkZWEuKQorICogVXNpbmcgdGhlIG1vZHVsZSBuYW1lIGlzIGEgZ29vZCBpZGVhLikKICAqLwogc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHsKIAljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oIGIvaW5jbHVkZS9saW51eC91c2IvdG1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0NWFlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RlZmFuIEtvcHAsIEdlY2hpbmdlbiwgR2VybWFueQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5vdmVsbCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKgorICogVGhpcyBmaWxlIGhvbGRzIFVTQiBjb25zdGFudHMgZGVmaW5lZCBieSB0aGUgVVNCIERldmljZSBDbGFzcworICogRGVmaW5pdGlvbiBmb3IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgZGV2aWNlcyBwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KKyAqCisgKiBJdCBhbHNvIGhhcyB0aGUgaW9jdGwgZGVmaW5pdGlvbnMgZm9yIHRoZSB1c2J0bWMga2VybmVsIGRyaXZlciB0aGF0CisgKiB1c2Vyc3BhY2UgbmVlZHMgdG8ga25vdyBhYm91dC4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1RNQ19ICisjZGVmaW5lIF9fTElOVVhfVVNCX1RNQ19ICisKKy8qIFVTQiBUTUMgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MJCQkJMHgwMQorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1BFTkRJTkcJCQkJMHgwMgorI2RlZmluZSBVU0JUTUNfU1RBVFVTX0ZBSUxFRAkJCQkweDgwCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfVFJBTlNGRVJfTk9UX0lOX1BST0dSRVNTCQkweDgxCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfU1BMSVRfTk9UX0lOX1BST0dSRVNTCQkweDgyCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfU1BMSVRfSU5fUFJPR1JFU1MJCQkweDgzCisKKy8qIFVTQiBUTUMgcmVxdWVzdHMgdmFsdWVzICovCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfT1VUCQkxCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfT1VUX1NUQVRVUwkyCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfSU4JCTMKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQUJPUlRfQlVMS19JTl9TVEFUVVMJNAorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9DTEVBUgkJCTUKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQ0xFQVJfU1RBVFVTCQk2CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0dFVF9DQVBBQklMSVRJRVMJCQk3CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lORElDQVRPUl9QVUxTRQkJCTY0CisKKy8qIFJlcXVlc3QgdmFsdWVzIGZvciBVU0JUTUMgZHJpdmVyJ3MgaW9jdGwgZW50cnkgcG9pbnQgKi8KKyNkZWZpbmUgVVNCVE1DX0lPQ19OUgkJCTkxCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9JTkRJQ0FUT1JfUFVMU0UJX0lPKFVTQlRNQ19JT0NfTlIsIDEpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUgkJX0lPKFVTQlRNQ19JT0NfTlIsIDIpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX09VVAlfSU8oVVNCVE1DX0lPQ19OUiwgMykKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0FCT1JUX0JVTEtfSU4JX0lPKFVTQlRNQ19JT0NfTlIsIDQpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUl9PVVRfSEFMVAlfSU8oVVNCVE1DX0lPQ19OUiwgNikKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0NMRUFSX0lOX0hBTFQJX0lPKFVTQlRNQ19JT0NfTlIsIDcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi92c3R1c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZhYzY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKQEAgLTAsMCArMSw3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRmlsZTogZHJpdmVycy91c2IvbWlzYy92c3R1c2IuaAorICoKKyAqICBQdXJwb3NlOiBTdXBwb3J0IGZvciB0aGUgYnVsayBVU0IgVmVybmllciBTcGVjdHJvcGhvdG9tZXRlcnMKKyAqCisgKiAgQXV0aG9yOiAgICAgRVF3YXJlIEVuZ2luZWVyaW5nLCBJbmMuCisgKiAgICAgICAgICAgICAgT3JlZ29uIENpdHksIE9SLCBVU0EgOTcwNDUKKyAqCisgKiAgQ29weXJpZ2h0OiAgMjAwNywgMjAwOAorICogICAgICAgICAgICAgIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5CisgKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1CisgKgorICogIFdlYjogICAgICAgIHd3dy52ZXJuaWVyLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIFRoZSB2c3R1c2IgbW9kdWxlIGlzIGEgc3RhbmRhcmQgdXNiICdjbGllbnQnIGRyaXZlciBydW5uaW5nIG9uIHRvcCBvZiB0aGUKKyAqICBzdGFuZGFyZCB1c2IgaG9zdCBjb250cm9sbGVyIHN0YWNrLgorICoKKyAqICBJbiBnZW5lcmFsLCB2c3R1c2Igc3VwcG9ydHMgc3RhbmRhcmQgYnVsayB1c2IgcGlwZXMuICBJdCBzdXBwb3J0cyBtdWx0aXBsZQorICogIGRldmljZXMgYW5kIG11bHRpcGxlIHBpcGVzIHBlciBkZXZpY2UuCisgKgorICogIFRoZSB2c3R1c2IgZHJpdmVyIHN1cHBvcnRzIHR3byBpbnRlcmZhY2VzOgorICogIDEgLSBpb2N0bCBTRU5EX1BJUEUvUkVDVl9QSVBFIC0gYSBnZW5lcmFsIGJ1bGsgd3JpdGUvcmVhZCBtc2cKKyAqICAJaW50ZXJmYWNlIHRvIGFueSBwaXBlIHdpdGggdGltZW91dCBzdXBwb3J0OworICogIDIgLSBzdGFuZGFyZCByZWFkL3dyaXRlIHdpdGggaW9jdGwgY29uZmlnIC0gb2ZmZXJzIHN0YW5kYXJkIHJlYWQvd3JpdGUKKyAqICAJaW50ZXJmYWNlIHdpdGggaW9jdGwgY29uZmlndXJlZCBwaXBlcyBhbmQgdGltZW91dHMuCisgKgorICogIEJvdGggaW50ZXJmYWNlcyBjYW4gYmUgc2lnbmFsIGZyb20gb3RoZXIgcHJvY2VzcyBhbmQgd2lsbCBhYm9ydCBpdHMgaS9vCisgKiAgb3BlcmF0aW9uLgorICoKKyAqICBBIHRpbWVvdXQgb2YgMCBtZWFucyBOTyB0aW1lb3V0LiAgVGhlIHVzZXIgY2FuIHN0aWxsIHRlcm1pbmF0ZSB0aGUgcmVhZCB2aWEKKyAqICBzaWduYWwuCisgKgorICogIElmIHVzaW5nIG11bHRpcGxlIHRocmVhZHMgd2l0aCB0aGlzIGRyaXZlciwgdGhlIHVzZXIgc2hvdWxkIGVuc3VyZSB0aGF0CisgKiAgYW55IHJlYWRzLCB3cml0ZXMsIG9yIGlvY3RscyBhcmUgY29tcGxldGUgYmVmb3JlIGNsb3NpbmcgdGhlIGRldmljZS4KKyAqICBDaGFuZ2luZyByZWFkL3dyaXRlIHRpbWVvdXRzIG9yIHBpcGVzIHRha2VzIGVmZmVjdCBvbiBuZXh0IHJlYWQvd3JpdGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgdnN0dXNiX2FyZ3MgeworCXVuaW9uIHsKKwkJLyogdGhpcyBzdHJ1Y3QgaXMgdXNlZCBmb3IgSU9DVExfVlNUVVNCX1NFTkRfUElQRSwJKgorCQkgKiBJT0NUTF9WU1RVU0JfUkVDVl9QSVBFLCBhbmQgcmVhZCgpL3dyaXRlKCkgZm9wcwkqLworCQlzdHJ1Y3QgeworCQkJdm9pZCBfX3VzZXIJKmJ1ZmZlcjsKKwkJCXNpemVfdCAgICAgICAgICBjb3VudDsKKwkJCXVuc2lnbmVkIGludCAgICB0aW1lb3V0X21zOworCQkJaW50ICAgICAgICAgICAgIHBpcGU7CisJCX07CisKKwkJLyogdGhpcyBvbmUgaXMgdXNlZCBmb3IgSU9DVExfVlNUVVNCX0NPTkZJR19SVyAgCSovCisJCXN0cnVjdCB7CisJCQlpbnQgcmRfcGlwZTsKKwkJCWludCByZF90aW1lb3V0X21zOworCQkJaW50IHdyX3BpcGU7CisJCQlpbnQgd3JfdGltZW91dF9tczsKKwkJfTsKKwl9OworfTsKKworI2RlZmluZSBWU1RfSU9DX01BR0lDICdMJworI2RlZmluZSBWU1RfSU9DX0ZJUlNUIDB4MjAKKyNkZWZpbmUgSU9DVExfVlNUVVNCX1NFTkRfUElQRQlfSU8oVlNUX0lPQ19NQUdJQywgVlNUX0lPQ19GSVJTVCkKKyNkZWZpbmUgSU9DVExfVlNUVVNCX1JFQ1ZfUElQRQlfSU8oVlNUX0lPQ19NQUdJQywgVlNUX0lPQ19GSVJTVCArIDEpCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9DT05GSUdfUlcJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QgKyAyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAppbmRleCAzMjhlYjQwLi40YzI4YzRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZNQUxMT0NfSAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIHBncHJvdF90ICovCiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsJCS8qIHZtYSBkZWZpbmluZyB1c2VyIG1hcHBpbmcgaW4gbW1fdHlwZXMuaCAqLwpAQCAtMjMsNyArMjQsNiBAQAogI2VuZGlmCiAKIHN0cnVjdCB2bV9zdHJ1Y3QgewotCS8qIGtlZXAgbmV4dCxhZGRyLHNpemUgdG9nZXRoZXIgdG8gc3BlZWR1cCBsb29rdXBzICovCiAJc3RydWN0IHZtX3N0cnVjdAkqbmV4dDsKIAl2b2lkCQkJKmFkZHI7CiAJdW5zaWduZWQgbG9uZwkJc2l6ZTsKQEAgLTM3LDYgKzM3LDE5IEBACiAvKgogICoJSGlnaGxldmVsIEFQSXMgZm9yIGRyaXZlciB1c2UKICAqLworZXh0ZXJuIHZvaWQgdm1fdW5tYXBfcmFtKGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkICp2bV9tYXBfcmFtKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJCQlpbnQgbm9kZSwgcGdwcm90X3QgcHJvdCk7CitleHRlcm4gdm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogZXh0ZXJuIHZvaWQgKnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkICp2bWFsbG9jX3VzZXIodW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkICp2bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCA1ODMzNGQ0Li45Y2QzYWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTQxLDYgKzQxLDE2IEBACiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCQlIVExCX0JVRERZX1BHQUxMT0MsIEhUTEJfQlVERFlfUEdBTExPQ19GQUlMLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQlVTkVWSUNUQUJMRV9QR0NVTExFRCwJLyogY3VsbGVkIHRvIG5vcmVjbGFpbSBsaXN0ICovCisJCVVORVZJQ1RBQkxFX1BHU0NBTk5FRCwJLyogc2Nhbm5lZCBmb3IgcmVjbGFpbWFiaWxpdHkgKi8KKwkJVU5FVklDVEFCTEVfUEdSRVNDVUVELAkvKiByZXNjdWVkIGZyb20gbm9yZWNsYWltIGxpc3QgKi8KKwkJVU5FVklDVEFCTEVfUEdNTE9DS0VELAorCQlVTkVWSUNUQUJMRV9QR01VTkxPQ0tFRCwKKwkJVU5FVklDVEFCTEVfUEdDTEVBUkVELAkvKiBvbiBDT1csIHBhZ2UgdHJ1bmNhdGUgKi8KKwkJVU5FVklDVEFCTEVfUEdTVFJBTkRFRCwJLyogdW5hYmxlIHRvIGlzb2xhdGUgb24gdW5sb2NrICovCisJCVVORVZJQ1RBQkxFX01MT0NLRlJFRUQsCisjZW5kaWYKIAkJTlJfVk1fRVZFTlRfSVRFTVMKIH07CiAKQEAgLTE1OSw2ICsxNjksMTYgQEAKIAlyZXR1cm4geDsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX2xydV9wYWdlcyh2b2lkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHpvbmVfbHJ1X3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKQoreworCXJldHVybiAoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkKKwkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTikKKwkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSkpOworfQorCiAjaWZkZWYgQ09ORklHX05VTUEKIC8qCiAgKiBEZXRlcm1pbmUgdGhlIHBlciBub2RlIHZhbHVlIG9mIGEgc3RhdCBpdGVtLiBUaGlzIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCAxMmIxNWM1Li5lNTg1NjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKQEAgLTYzLDcgKzYzLDE1IEBACiAJdW5zaWduZWQgZm9yX3dyaXRlcGFnZXM6MTsJLyogVGhpcyBpcyBhIHdyaXRlcGFnZXMoKSBjYWxsICovCiAJdW5zaWduZWQgcmFuZ2VfY3ljbGljOjE7CS8qIHJhbmdlX3N0YXJ0IGlzIGN5Y2xpYyAqLwogCXVuc2lnbmVkIG1vcmVfaW86MTsJCS8qIG1vcmUgaW8gdG8gYmUgZGlzcGF0Y2hlZCAqLwotCXVuc2lnbmVkIHJhbmdlX2NvbnQ6MTsKKwkvKgorCSAqIHdyaXRlX2NhY2hlX3BhZ2VzKCkgd29uJ3QgdXBkYXRlIHdiYy0+bnJfdG9fd3JpdGUgYW5kCisJICogbWFwcGluZy0+d3JpdGViYWNrX2luZGV4IGlmIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlCisJICogaXMgc2V0LiAgd3JpdGVfY2FjaGVfcGFnZXMoKSBtYXkgd3JpdGUgbW9yZSB0aGFuIHdlCisJICogcmVxdWVzdGVkIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBucl90b193cml0ZSBhbmQKKwkgKiB3cml0ZWJhY2tfaW5kZXggYXJlIHVwZGF0ZWQgaW4gYSBjb25zaXN0ZW50IG1hbm5lcgorCSAqIHNvIHdlIHVzZSBhIHNpbmdsZSBjb250cm9sIHRvIHVwZGF0ZSB0aGVtCisJICovCisJdW5zaWduZWQgbm9fbnJ3cml0ZV9pbmRleF91cGRhdGU6MTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCmluZGV4IDg1MWYxODIuLjFkMDkyYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCkBAIC0xLDMgKzEsMTMgQEAKKy8qCisgKiBHZW5lcmljIFBsYXRmb3JtIENhbWVyYSBEcml2ZXIgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCiAjaWZuZGVmIF9fU09DX0NBTUVSQV9IX18KICNkZWZpbmUgX19TT0NfQ0FNRVJBX0hfXwogCkBAIC05LDYgKzE5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZvcm1hdF9kZXB0aDsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZvcm1hdDsKIAl1bnNpZ25lZCBsb25nIGJ1c19wYXJhbTsKKwl2b2lkICgqcG93ZXIpKGludCk7CiAJaW50ICgqc2V0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sIGludCBlbmFibGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IDY3YzFmNTEuLjdkNGUyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogI2RlZmluZSBUVU5FUl9URUE1NzYxCQkJNzUJLyogT25seSBGTSBSYWRpbyBUdW5lciAqLwogI2RlZmluZSBUVU5FUl9YQzUwMDAJCQk3NgkvKiBYY2VpdmUgU2lsaWNvbiBUdW5lciAqLwogI2RlZmluZSBUVU5FUl9UQ0xfTUYwMkdJUF81TgkJNzcJLyogVENMIE1GMDJHSVBfNU4gKi8KKyNkZWZpbmUgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMwk3OAogCiAvKiB0diBjYXJkIHNwZWNpZmljICovCiAjZGVmaW5lIFREQTk4ODdfUFJFU0VOVCAJCSgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaAppbmRleCA5NzVmZmJmLi5lNjVkZDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaApAQCAtMjEsNiArMjEsMTcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKy8qIE5PVEU6IHRoZSBmdWxsIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgaXMgaW4gdGhlIHY0bC1kdmIgcmVwb3NpdG9yeQorICogYW5kIGFsbG93cyB2NGwgaTJjIGRyaXZlcnMgdG8gYmUgY29tcGlsZWQgb24gb2xkZXIga2VybmVscyBhcyB3ZWxsLgorICogVGhlIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgYXMgaXQgYXBwZWFycyBpbiB0aGUga2VybmVsIGlzIGEgc3RyaXBwZWQKKyAqIHZlcnNpb24gKHdpdGhvdXQgYWxsIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdHVmZikgYW5kIHNvIGl0CisgKiBsb29rcyBhIGJpdCBvZGQuCisgKgorICogSWYgeW91IGxvb2sgYXQgdGhlIGZ1bGwgdmVyc2lvbiB0aGVuIHlvdSB3aWxsIHVuZGVyc3RhbmQgdGhlIHJlYXNvbgorICogZm9yIGludHJvZHVjaW5nIHRoaXMgaGVhZGVyIHNpbmNlIHlvdSByZWFsbHkgZG9uJ3Qgd2FudCB0byBoYXZlIGFsbAorICogdGhlIHRyaWNreSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjb2RlIGluIGVhY2ggYW5kIGV2ZXJ5IGkyYyBkcml2ZXIuCisgKi8KKwogc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHsKIAljb25zdCBjaGFyICogY29uc3QgbmFtZTsKIAlpbnQgZHJpdmVyaWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaAppbmRleCA0MGVjZWYyLi5lZmRjOGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LmgKQEAgLTIxLDYgKzIxLDE3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisvKiBOT1RFOiB0aGUgZnVsbCB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGlzIGluIHRoZSB2NGwtZHZiIHJlcG9zaXRvcnkKKyAqIGFuZCBhbGxvd3MgdjRsIGkyYyBkcml2ZXJzIHRvIGJlIGNvbXBpbGVkIG9uIG9sZGVyIGtlcm5lbHMgYXMgd2VsbC4KKyAqIFRoZSB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGtlcm5lbCBpcyBhIHN0cmlwcGVkCisgKiB2ZXJzaW9uICh3aXRob3V0IGFsbCB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc3R1ZmYpIGFuZCBzbyBpdAorICogbG9va3MgYSBiaXQgb2RkLgorICoKKyAqIElmIHlvdSBsb29rIGF0IHRoZSBmdWxsIHZlcnNpb24gdGhlbiB5b3Ugd2lsbCB1bmRlcnN0YW5kIHRoZSByZWFzb24KKyAqIGZvciBpbnRyb2R1Y2luZyB0aGlzIGhlYWRlciBzaW5jZSB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSBhbGwKKyAqIHRoZSB0cmlja3kgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgY29kZSBpbiBlYWNoIGFuZCBldmVyeSBpMmMgZHJpdmVyLgorICovCisKICNpZm5kZWYgX19WNEwyX0kyQ19EUlZfSF9fCiAjZGVmaW5lIF9fVjRMMl9JMkNfRFJWX0hfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaAppbmRleCBiNzc3NDg2Li44MDQ3MWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZHZiLmgKQEAgLTE2LDcgKzE2LDYgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBuZmVlZHM7CiAKIAkvKiB2aWRlb2J1Zl9kdmJfKHVuKXJlZ2lzdGVyIG1hbmdlcyB0aGlzICovCi0Jc3RydWN0IGR2Yl9hZGFwdGVyICAgICAgICAgYWRhcHRlcjsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgICAgICBkZW11eDsKIAlzdHJ1Y3QgZG14ZGV2ICAgICAgICAgICAgICBkbXhkZXY7CiAJc3RydWN0IGRteF9mcm9udGVuZCAgICAgICAgZmVfaHc7CkBAIC0yNCwxMiArMjMsMzQgQEAKIAlzdHJ1Y3QgZHZiX25ldCAgICAgICAgICAgICBuZXQ7CiB9OwogCi1pbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YiwKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgeworCXN0cnVjdCBsaXN0X2hlYWQgZmVsaXN0OworCWludCBpZDsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiIGR2YjsKK307CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZlbGlzdDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgYWRhcHRlcjsKKwlpbnQgYWN0aXZlX2ZlX2lkOyAvKiBJbmRpY2F0ZXMgd2hpY2ggZnJvbnRlbmQgaW4gdGhlIGZlbGlzdCBpcyBpbiB1c2UgKi8KKwlpbnQgZ2F0ZTsgLyogRnJvbnRlbmQgd2l0aCBnYXRlIGNvbnRyb2wgMD0hTUZFLDE9ZmUwLDI9ZmUxIGV0YyAqLworfTsKKworaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCiAJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKIAkJCSAgdm9pZCAqYWRhcHRlcl9wcml2LAogCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCQkgIHNob3J0ICphZGFwdGVyX25yKTsKLXZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiKTsKKwkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIsCisJCQkgIGludCBtZmVfc2hhcmVkKTsKKwordm9pZCB2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYpOworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICogdmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLCBpbnQgaWQpOworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICogdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKTsKK2ludCB2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgc3RydWN0IGR2Yl9mcm9udGVuZCAqcCk7CisKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwLzlwLmggYi9pbmNsdWRlL25ldC85cC85cC5oCmluZGV4IGZiMTYzZTIuLmQyYzYwYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwLzlwLmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvOXAuaApAQCAtMjcsOCArMjcsNiBAQAogI2lmbmRlZiBORVRfOVBfSAogI2RlZmluZSBORVRfOVBfSAogCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCiAvKioKICAqIGVudW0gcDlfZGVidWdfZmxhZ3MgLSBiaXRzIGZvciBtb3VudCB0aW1lIGRlYnVnIHBhcmFtZXRlcgogICogQFA5X0RFQlVHX0VSUk9SOiBtb3JlIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMgaW5jbHVkaW5nIG9yaWdpbmFsIGVycm9yIHN0cmluZwpAQCAtMzksNiArMzcsNyBAQAogICogQFA5X0RFQlVHX1RSQU5TOiB0cmFuc3BvcnQgdHJhY2luZwogICogQFA5X0RFQlVHX1NMQUJTOiBtZW1vcnkgbWFuYWdlbWVudCB0cmFjaW5nCiAgKiBAUDlfREVCVUdfRkNBTEw6IHZlcmJvc2UgZHVtcCBvZiBwcm90b2NvbCBtZXNzYWdlcworICogQFA5X0RFQlVHX0ZJRDogZmlkIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nCiAgKgogICogVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCBhdCBtb3VudCB0aW1lIHRvIHR1cm4gb24gdmFyaW91cyBsZXZlbHMgb2YKICAqIHZlcmJvc2l0eSBhbmQgdHJhY2luZyB3aGljaCB3aWxsIGJlIG91dHB1dCB0byB0aGUgc3lzdGVtIGxvZ3MuCkBAIC01MywyNCArNTIsMjcgQEAKIAlQOV9ERUJVR19UUkFOUyA9CSgxPDw2KSwKIAlQOV9ERUJVR19TTEFCUyA9ICAgICAgCSgxPDw3KSwKIAlQOV9ERUJVR19GQ0FMTCA9CSgxPDw4KSwKKwlQOV9ERUJVR19GSUQgPQkJKDE8PDkpLAorCVA5X0RFQlVHX1BLVCA9CQkoMTw8MTApLAogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwOV9kZWJ1Z19sZXZlbDsKIAorI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKICNkZWZpbmUgUDlfRFBSSU5USyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKIGRvIHsgIFwKLQlpZiAoKHA5X2RlYnVnX2xldmVsICYgbGV2ZWwpID09IGxldmVsKSBcCi0JCXByaW50ayhLRVJOX05PVElDRSAiLS0gJXMgKCVkKTogIiBcCi0JCWZvcm1hdCAsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSAsICMjIGFyZyk7IFwKKwlpZiAoKHA5X2RlYnVnX2xldmVsICYgbGV2ZWwpID09IGxldmVsKSB7XAorCQlpZiAobGV2ZWwgPT0gUDlfREVCVUdfOVApIFwKKwkJCXByaW50ayhLRVJOX05PVElDRSAiKCU4LjhkKSAiIFwKKwkJCWZvcm1hdCAsIHRhc2tfcGlkX25yKGN1cnJlbnQpICwgIyMgYXJnKTsgXAorCQllbHNlIFwKKwkJCXByaW50ayhLRVJOX05PVElDRSAiLS0gJXMgKCVkKTogIiBcCisJCQlmb3JtYXQgLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkgLCAjIyBhcmcpOyBcCisJfSBcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIFBSSU5UX0ZDQUxMX0VSUk9SKHMsIGZjYWxsKSBQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAgIFwKLQkiJXM6ICUuKnNcbiIsIHMsIGZjYWxsP2ZjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yLmxlbjowLCBcCi0JZmNhbGw/ZmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJyb3Iuc3RyOiIiKTsKLQogI2Vsc2UKICNkZWZpbmUgUDlfRFBSSU5USyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBSSU5UX0ZDQUxMX0VSUk9SKHMsIGZjYWxsKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2RlZmluZSBQOV9FUFJJTlRLKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXApAQCAtMzI1LDMzICszMjcsNiBAQAogICogU2VlIEFsc286IGh0dHA6Ly9wbGFuOS5iZWxsLWxhYnMuY29tL21hZ2ljL21hbjJodG1sLzIvc3RhdAogICovCiAKLXN0cnVjdCBwOV9zdGF0IHsKLQl1MTYgc2l6ZTsKLQl1MTYgdHlwZTsKLQl1MzIgZGV2OwotCXN0cnVjdCBwOV9xaWQgcWlkOwotCXUzMiBtb2RlOwotCXUzMiBhdGltZTsKLQl1MzIgbXRpbWU7Ci0JdTY0IGxlbmd0aDsKLQlzdHJ1Y3QgcDlfc3RyIG5hbWU7Ci0Jc3RydWN0IHA5X3N0ciB1aWQ7Ci0Jc3RydWN0IHA5X3N0ciBnaWQ7Ci0Jc3RydWN0IHA5X3N0ciBtdWlkOwotCXN0cnVjdCBwOV9zdHIgZXh0ZW5zaW9uOwkvKiA5cDIwMDAudSBleHRlbnNpb25zICovCi0JdTMyIG5fdWlkOwkJCS8qIDlwMjAwMC51IGV4dGVuc2lvbnMgKi8KLQl1MzIgbl9naWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotCXUzMiBuX211aWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotfTsKLQotLyoKLSAqIGZpbGUgbWV0YWRhdGEgKHN0YXQpIHN0cnVjdHVyZSB1c2VkIHRvIGNyZWF0ZSBUd3N0YXQgbWVzc2FnZQotICogVGhlIGlzIGlkZW50aWNhbCB0byAmcDlfc3RhdCwgYnV0IHRoZSBzdHJpbmdzIGRvbid0IHBvaW50IHRvCi0gKiB0aGUgc2FtZSBtZW1vcnkgYmxvY2sgYW5kIHNob3VsZCBiZSBmcmVlZCBzZXBhcmF0ZWx5Ci0gKgotICogU2VlIEFsc286IGh0dHA6Ly9wbGFuOS5iZWxsLWxhYnMuY29tL21hZ2ljL21hbjJodG1sLzIvc3RhdAotICovCi0KIHN0cnVjdCBwOV93c3RhdCB7CiAJdTE2IHNpemU7CiAJdTE2IHR5cGU7CkBAIC00OTMsMTIgKzQ2OCwxMiBAQAogfTsKIAogc3RydWN0IHA5X3JzdGF0IHsKLQlzdHJ1Y3QgcDlfc3RhdCBzdGF0OworCXN0cnVjdCBwOV93c3RhdCBzdGF0OwogfTsKIAogc3RydWN0IHA5X3R3c3RhdCB7CiAJdTMyIGZpZDsKLQlzdHJ1Y3QgcDlfc3RhdCBzdGF0OworCXN0cnVjdCBwOV93c3RhdCBzdGF0OwogfTsKIAogc3RydWN0IHA5X3J3c3RhdCB7CkBAIC01MDksOCArNDg0LDkgQEAKICAqIEBzaXplOiBwcmVmaXhlZCBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZQogICogQGlkOiBwcm90b2NvbCBvcGVyYXRpbmcgaWRlbnRpZmllciBvZiB0eXBlICZwOV9tc2dfdAogICogQHRhZzogdHJhbnNhY3Rpb24gaWQgb2YgdGhlIHJlcXVlc3QKKyAqIEBvZmZzZXQ6IHVzZWQgYnkgbWFyc2hhbGxpbmcgcm91dGluZXMgdG8gdHJhY2sgY3VycmVudHBvc2l0aW9uIGluIGJ1ZmZlcgorICogQGNhcGFjaXR5OiB1c2VkIGJ5IG1hcnNoYWxsaW5nIHJvdXRpbmVzIHRvIHRyYWNrIHRvdGFsIGNhcGFjaXR5CiAgKiBAc2RhdGE6IHBheWxvYWQKLSAqIEBwYXJhbXM6IHBlci1vcGVyYXRpb24gcGFyYW1ldGVycwogICoKICAqICZwOV9mY2FsbCByZXByZXNlbnRzIHRoZSBzdHJ1Y3R1cmUgZm9yIGFsbCA5UCBSUEMKICAqIHRyYW5zYWN0aW9ucy4gIFJlcXVlc3RzIGFyZSBwYWNrYWdlZCBpbnRvIGZjYWxscywgYW5kIHJlcG9uc2VzCkBAIC01MjMsNjggKzQ5OSwxNSBAQAogCXUzMiBzaXplOwogCXU4IGlkOwogCXUxNiB0YWc7Ci0Jdm9pZCAqc2RhdGE7CiAKLQl1bmlvbiB7Ci0JCXN0cnVjdCBwOV90dmVyc2lvbiB0dmVyc2lvbjsKLQkJc3RydWN0IHA5X3J2ZXJzaW9uIHJ2ZXJzaW9uOwotCQlzdHJ1Y3QgcDlfdGF1dGggdGF1dGg7Ci0JCXN0cnVjdCBwOV9yYXV0aCByYXV0aDsKLQkJc3RydWN0IHA5X3JlcnJvciByZXJyb3I7Ci0JCXN0cnVjdCBwOV90Zmx1c2ggdGZsdXNoOwotCQlzdHJ1Y3QgcDlfcmZsdXNoIHJmbHVzaDsKLQkJc3RydWN0IHA5X3RhdHRhY2ggdGF0dGFjaDsKLQkJc3RydWN0IHA5X3JhdHRhY2ggcmF0dGFjaDsKLQkJc3RydWN0IHA5X3R3YWxrIHR3YWxrOwotCQlzdHJ1Y3QgcDlfcndhbGsgcndhbGs7Ci0JCXN0cnVjdCBwOV90b3BlbiB0b3BlbjsKLQkJc3RydWN0IHA5X3JvcGVuIHJvcGVuOwotCQlzdHJ1Y3QgcDlfdGNyZWF0ZSB0Y3JlYXRlOwotCQlzdHJ1Y3QgcDlfcmNyZWF0ZSByY3JlYXRlOwotCQlzdHJ1Y3QgcDlfdHJlYWQgdHJlYWQ7Ci0JCXN0cnVjdCBwOV9ycmVhZCBycmVhZDsKLQkJc3RydWN0IHA5X3R3cml0ZSB0d3JpdGU7Ci0JCXN0cnVjdCBwOV9yd3JpdGUgcndyaXRlOwotCQlzdHJ1Y3QgcDlfdGNsdW5rIHRjbHVuazsKLQkJc3RydWN0IHA5X3JjbHVuayByY2x1bms7Ci0JCXN0cnVjdCBwOV90cmVtb3ZlIHRyZW1vdmU7Ci0JCXN0cnVjdCBwOV9ycmVtb3ZlIHJyZW1vdmU7Ci0JCXN0cnVjdCBwOV90c3RhdCB0c3RhdDsKLQkJc3RydWN0IHA5X3JzdGF0IHJzdGF0OwotCQlzdHJ1Y3QgcDlfdHdzdGF0IHR3c3RhdDsKLQkJc3RydWN0IHA5X3J3c3RhdCByd3N0YXQ7Ci0JfSBwYXJhbXM7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3QgY2FwYWNpdHk7CisKKwl1aW50OF90ICpzZGF0YTsKIH07CiAKIHN0cnVjdCBwOV9pZHBvb2w7CiAKLWludCBwOV9kZXNlcmlhbGl6ZV9zdGF0KHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0YXQsCi0JaW50IGRvdHUpOwotaW50IHA5X2Rlc2VyaWFsaXplX2ZjYWxsKHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X2ZjYWxsICpmYywgaW50IGRvdHUpOwotdm9pZCBwOV9zZXRfdGFnKHN0cnVjdCBwOV9mY2FsbCAqZmMsIHUxNiB0YWcpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHZlcnNpb24odTMyIG1zaXplLCBjaGFyICp2ZXJzaW9uKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLAotCWNoYXIgKmFuYW1lLCB1MzIgbl91bmFtZSwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGF1dGgodTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSwKLQl1MzIgbl91bmFtZSwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGZsdXNoKHUxNiBvbGR0YWcpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdhbGsodTMyIGZpZCwgdTMyIG5ld2ZpZCwgdTE2IG53bmFtZSwKLQljaGFyICoqd25hbWVzKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RvcGVuKHUzMiBmaWQsIHU4IG1vZGUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGNyZWF0ZSh1MzIgZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgdTggbW9kZSwKLQljaGFyICpleHRlbnNpb24sIGludCBkb3R1KTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RyZWFkKHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCWNvbnN0IGNoYXIgKmRhdGEpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdyaXRlX3UodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCWNvbnN0IGNoYXIgX191c2VyICpkYXRhKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RjbHVuayh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RyZW1vdmUodTMyIGZpZCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90c3RhdCh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3c3RhdCh1MzIgZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCWludCBkb3R1KTsKLQotaW50IHA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZG90dSk7CiBpbnQgcDlfZXJyc3RyMmVycm5vKGNoYXIgKmVycnN0ciwgaW50IGxlbik7CiAKIHN0cnVjdCBwOV9pZHBvb2wgKnA5X2lkcG9vbF9jcmVhdGUodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGM5MzZkZDEuLjFmMTdmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0yNiw2ICsyNiw4NyBAQAogI2lmbmRlZiBORVRfOVBfQ0xJRU5UX0gKICNkZWZpbmUgTkVUXzlQX0NMSUVOVF9ICiAKKy8qIE51bWJlciBvZiByZXF1ZXN0cyBwZXIgcm93ICovCisjZGVmaW5lIFA5X1JPV19NQVhUQUcgMjU1CisKKy8qKgorICogZW51bSBwOV90cmFuc19zdGF0dXMgLSBkaWZmZXJlbnQgc3RhdGVzIG9mIHVuZGVybHlpbmcgdHJhbnNwb3J0cworICogQENvbm5lY3RlZDogdHJhbnNwb3J0IGlzIGNvbm5lY3RlZCBhbmQgaGVhbHRoeQorICogQERpc2Nvbm5lY3RlZDogdHJhbnNwb3J0IGhhcyBiZWVuIGRpc2Nvbm5lY3RlZAorICogQEh1bmc6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYnkgd2VkZ2VkCisgKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZXRhaWxzIHRoZSB2YXJpb3VzIHN0YXRlcyBhIHRyYW5zcG9ydAorICogaW5zdGF0aWF0aW9uIGNhbiBiZSBpbi4KKyAqLworCitlbnVtIHA5X3RyYW5zX3N0YXR1cyB7CisJQ29ubmVjdGVkLAorCURpc2Nvbm5lY3RlZCwKKwlIdW5nLAorfTsKKworLyoqCisgKiBlbnVtIHA5X3JlcV9zdGF0dXNfdCAtIHZpcnRpbyByZXF1ZXN0IHN0YXR1cworICogQFJFUV9TVEFUVVNfSURMRTogcmVxdWVzdCBzbG90IHVudXNlZAorICogQFJFUV9TVEFUVVNfQUxMT0M6IHJlcXVlc3QgaGFzIGJlZW4gYWxsb2NhdGVkIGJ1dCBub3Qgc2VudAorICogQFJFUV9TVEFUVVNfVU5TRU5UOiByZXF1ZXN0IHdhaXRpbmcgdG8gYmUgc2VudAorICogQFJFUV9TVEFUVVNfU0VOVDogcmVxdWVzdCBzZW50IHRvIHNlcnZlcgorICogQFJFUV9TVEFUVVNfRkxTSDogYSBmbHVzaCBoYXMgYmVlbiBzZW50IGZvciB0aGlzIHJlcXVlc3QKKyAqIEBSRVFfU1RBVFVTX1JDVkQ6IHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gc2VydmVyCisgKiBAUkVRX1NUQVRVU19GTFNIRDogcmVxdWVzdCBoYXMgYmVlbiBmbHVzaGVkCisgKiBAUkVRX1NUQVRVU19FUlJPUjogcmVxdWVzdCBlbmNvdW50ZXJlZCBhbiBlcnJvciBvbiB0aGUgY2xpZW50IHNpZGUKKyAqCisgKiBUaGUgQFJFUV9TVEFUVVNfSURMRSBzdGF0ZSBpcyB1c2VkIHRvIG1hcmsgYSByZXF1ZXN0IHNsb3QgYXMgdW51c2VkCisgKiBidXQgdXNlIGlzIGFjdHVhbGx5IHRyYWNrZWQgYnkgdGhlIGlkcG9vbCBzdHJ1Y3R1cmUgd2hpY2ggaGFuZGxlcyB0YWcKKyAqIGlkIGFsbG9jYXRpb24uCisgKgorICovCisKK2VudW0gcDlfcmVxX3N0YXR1c190IHsKKwlSRVFfU1RBVFVTX0lETEUsCisJUkVRX1NUQVRVU19BTExPQywKKwlSRVFfU1RBVFVTX1VOU0VOVCwKKwlSRVFfU1RBVFVTX1NFTlQsCisJUkVRX1NUQVRVU19GTFNILAorCVJFUV9TVEFUVVNfUkNWRCwKKwlSRVFfU1RBVFVTX0ZMU0hELAorCVJFUV9TVEFUVVNfRVJST1IsCit9OworCisvKioKKyAqIHN0cnVjdCBwOV9yZXFfdCAtIHJlcXVlc3Qgc2xvdHMKKyAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIHJlcXVlc3Qgc2xvdAorICogQHRfZXJyOiB0cmFuc3BvcnQgZXJyb3IKKyAqIEBmbHVzaF90YWc6IHRhZyBvZiByZXF1ZXN0IGJlaW5nIGZsdXNoZWQgKGZvciBmbHVzaCByZXF1ZXN0cykKKyAqIEB3cTogd2FpdF9xdWV1ZSBmb3IgdGhlIGNsaWVudCB0byBibG9jayBvbiBmb3IgdGhpcyByZXF1ZXN0CisgKiBAdGM6IHRoZSByZXF1ZXN0IGZjYWxsIHN0cnVjdHVyZQorICogQHJjOiB0aGUgcmVzcG9uc2UgZmNhbGwgc3RydWN0dXJlCisgKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgZGF0YSAocHJvdmlkZWQgZm9yIHRyYW5zX2ZkIG1pZ3JhdGlvbikKKyAqIEByZXFfbGlzdDogbGluayBmb3IgaGlnaGVyIGxldmVsIG9iamVjdHMgdG8gY2hhaW4gcmVxdWVzdHMKKyAqCisgKiBUcmFuc3BvcnQgdXNlIGFuIGFycmF5IHRvIHRyYWNrIG91dHN0YW5kaW5nIHJlcXVlc3RzCisgKiBpbnN0ZWFkIG9mIGEgbGlzdC4gIFdoaWxlIHRoaXMgbWF5IGluY3VyciBvdmVyaGVhZCBkdXJpbmcgaW5pdGlhbAorICogYWxsb2NhdGlvbiBvciBleHBhbnNpb24sIGl0IG1ha2VzIHJlcXVlc3QgbG9va3VwIG11Y2ggZWFzaWVyIGFzIHRoZQorICogdGFnIGlkIGlzIGEgaW5kZXggaW50byBhbiBhcnJheS4gIChXZSB1c2UgdGFnKzEgc28gdGhhdCB3ZSBjYW4gYWNjb21vZGF0ZQorICogdGhlIC0xIHRhZyBmb3IgdGhlIFRfVkVSU0lPTiByZXF1ZXN0KS4KKyAqIFRoaXMgYWxzbyBoYXMgdGhlIG5pY2UgZWZmZWN0IG9mIG9ubHkgaGF2aW5nIHRvIGFsbG9jYXRlIHdhaXRfcXVldWVzCisgKiBvbmNlLCBpbnN0ZWFkIG9mIGNvbnN0YW50bHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZyB0aGVtLiAgSXRzIHBvc3NpYmxlCisgKiBvdGhlciByZXNvdXJjZXMgY291bGQgYmVuZWZpdCBmcm9tIHRoaXMgc2NoZW1lIGFzIHdlbGwuCisgKgorICovCisKK3N0cnVjdCBwOV9yZXFfdCB7CisJaW50IHN0YXR1czsKKwlpbnQgdF9lcnI7CisJdTE2IGZsdXNoX3RhZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisJc3RydWN0IHA5X2ZjYWxsICp0YzsKKwlzdHJ1Y3QgcDlfZmNhbGwgKnJjOworCXZvaWQgKmF1eDsKKworCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7Cit9OworCiAvKioKICAqIHN0cnVjdCBwOV9jbGllbnQgLSBwZXIgY2xpZW50IGluc3RhbmNlIHN0YXRlCiAgKiBAbG9jazogcHJvdGVjdCBAZmlkbGlzdApAQCAtMzYsOSArMTE3LDIwIEBACiAgKiBAY29ubjogY29ubmVjdGlvbiBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRyYW5zX2ZkCiAgKiBAZmlkcG9vbDogZmlkIGhhbmRsZSBhY2NvdW50aW5nIGZvciBzZXNzaW9uCiAgKiBAZmlkbGlzdDogTGlzdCBvZiBhY3RpdmUgZmlkIGhhbmRsZXMKKyAqIEB0YWdwb29sIC0gdHJhbnNhY3Rpb24gaWQgYWNjb3VudGluZyBmb3Igc2Vzc2lvbgorICogQHJlcXMgLSAyRCBhcnJheSBvZiByZXF1ZXN0cworICogQG1heF90YWcgLSBjdXJyZW50IG1heGltdW0gdGFnIGlkIGFsbG9jYXRlZAogICoKICAqIFRoZSBjbGllbnQgc3RydWN0dXJlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB2YXJpb3VzIHBlci1jbGllbnQKICAqIHN0YXRlIHRoYXQgaGFzIGJlZW4gaW5zdGFudGlhdGVkLgorICogSW4gb3JkZXIgdG8gbWluaW1pemUgcGVyLXRyYW5zYWN0aW9uIG92ZXJoZWFkIHdlIHVzZSBhCisgKiBzaW1wbGUgYXJyYXkgdG8gbG9va3VwIHJlcXVlc3RzIGluc3RlYWQgb2YgYSBoYXNoIHRhYmxlCisgKiBvciBsaW5rZWQgbGlzdC4gIEluIG9yZGVyIHRvIHN1cHBvcnQgbGFyZ2VyIG51bWJlciBvZgorICogdHJhbnNhY3Rpb25zLCB3ZSBtYWtlIHRoaXMgYSAyRCBhcnJheSwgYWxsb2NhdGluZyBuZXcgcm93cworICogd2hlbiB3ZSBuZWVkIHRvIGdyb3cgdGhlIHRvdGFsIG51bWJlciBvZiB0aGUgdHJhbnNhY3Rpb25zLgorICoKKyAqIEVhY2ggcm93IGlzIDI1NiByZXF1ZXN0cyBhbmQgd2UnbGwgc3VwcG9ydCB1cCB0byAyNTYgcm93cyBmb3IKKyAqIGEgdG90YWwgb2YgNjRrIGNvbmN1cnJlbnQgcmVxdWVzdHMgcGVyIHNlc3Npb24uCiAgKgogICogQnVnczogZHVwbGljYXRlZCBkYXRhIGFuZCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBlbGVtZW50cy4KICAqLwpAQCAtNDgsMTEgKzE0MCwxNiBAQAogCWludCBtc2l6ZTsKIAl1bnNpZ25lZCBjaGFyIGRvdHU7CiAJc3RydWN0IHA5X3RyYW5zX21vZHVsZSAqdHJhbnNfbW9kOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CisJZW51bSBwOV90cmFuc19zdGF0dXMgc3RhdHVzOworCXZvaWQgKnRyYW5zOwogCXN0cnVjdCBwOV9jb25uICpjb25uOwogCiAJc3RydWN0IHA5X2lkcG9vbCAqZmlkcG9vbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpZGxpc3Q7CisKKwlzdHJ1Y3QgcDlfaWRwb29sICp0YWdwb29sOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxc1tQOV9ST1dfTUFYVEFHXTsKKwlpbnQgbWF4X3RhZzsKIH07CiAKIC8qKgpAQCAtNjUsOCArMTYyLDYgQEAKICAqIEB1aWQ6IHRoZSBudW1lcmljIHVpZCBvZiB0aGUgbG9jYWwgdXNlciB3aG8gb3ducyB0aGlzIGhhbmRsZQogICogQGF1eDogdHJhbnNwb3J0IHNwZWNpZmljIGluZm9ybWF0aW9uICh1bnVzZWQ/KQogICogQHJkaXJfZnBvczogdHJhY2tzIG9mZnNldCBvZiBmaWxlIHBvc2l0aW9uIHdoZW4gcmVhZGluZyBkaXJlY3RvcnkgY29udGVudHMKLSAqIEByZGlyX3BvczogKHVudXNlZD8pCi0gKiBAcmRpcl9mY2FsbDogaG9sZHMgcmVzcG9uc2Ugb2YgbGFzdCBkaXJlY3RvcnkgcmVhZCByZXF1ZXN0CiAgKiBAZmxpc3Q6IHBlci1jbGllbnQtaW5zdGFuY2UgZmlkIHRyYWNraW5nCiAgKiBAZGxpc3Q6IHBlci1kZW50cnkgZmlkIHRyYWNraW5nCiAgKgpAQCAtODMsOCArMTc4LDYgQEAKIAl2b2lkICphdXg7CiAKIAlpbnQgcmRpcl9mcG9zOwotCWludCByZGlyX3BvczsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJkaXJfZmNhbGw7CiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwpAQCAtMTAzLDE1ICsxOTYsMTggQEAKIAkJCQkJCQljaGFyICpleHRlbnNpb24pOwogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpOwogaW50IHA5X2NsaWVudF9yZW1vdmUoc3RydWN0IHA5X2ZpZCAqZmlkKTsKLWludCBwOV9jbGllbnRfcmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3JlYWRuKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKLWludCBwOV9jbGllbnRfd3JpdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF91cmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQl1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF91d3JpdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwgdTY0IG9mZnNldCwKLQkJCQkJCQkJdTMyIGNvdW50KTsKLXN0cnVjdCBwOV9zdGF0ICpwOV9jbGllbnRfc3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQpOworaW50IHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCk7CitpbnQgcDlfY2xpZW50X3dyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCk7CitzdHJ1Y3QgcDlfd3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCk7CiBpbnQgcDlfY2xpZW50X3dzdGF0KHN0cnVjdCBwOV9maWQgKmZpZCwgc3RydWN0IHA5X3dzdGF0ICp3c3QpOwotc3RydWN0IHA5X3N0YXQgKnA5X2NsaWVudF9kaXJyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgdTY0IG9mZnNldCk7CisKK3N0cnVjdCBwOV9yZXFfdCAqcDlfdGFnX2xvb2t1cChzdHJ1Y3QgcDlfY2xpZW50ICosIHUxNik7Cit2b2lkIHA5X2NsaWVudF9jYihzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CisKK2ludCBwOXN0YXRfcmVhZChjaGFyICosIGludCwgc3RydWN0IHA5X3dzdGF0ICosIGludCk7Cit2b2lkIHA5c3RhdF9mcmVlKHN0cnVjdCBwOV93c3RhdCAqKTsKKwogCiAjZW5kaWYgLyogTkVUXzlQX0NMSUVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC90cmFuc3BvcnQuaCBiL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCmluZGV4IDNjYTczNzEuLjZkNTg4NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCkBAIC0yNiw1MiArMjYsNiBAQAogI2lmbmRlZiBORVRfOVBfVFJBTlNQT1JUX0gKICNkZWZpbmUgTkVUXzlQX1RSQU5TUE9SVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotLyoqCi0gKiBlbnVtIHA5X3RyYW5zX3N0YXR1cyAtIGRpZmZlcmVudCBzdGF0ZXMgb2YgdW5kZXJseWluZyB0cmFuc3BvcnRzCi0gKiBAQ29ubmVjdGVkOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGFuZCBoZWFsdGh5Ci0gKiBARGlzY29ubmVjdGVkOiB0cmFuc3BvcnQgaGFzIGJlZW4gZGlzY29ubmVjdGVkCi0gKiBASHVuZzogdHJhbnNwb3J0IGlzIGNvbm5lY3RlZCBieSB3ZWRnZWQKLSAqCi0gKiBUaGlzIGVudW1lcmF0aW9uIGRldGFpbHMgdGhlIHZhcmlvdXMgc3RhdGVzIGEgdHJhbnNwb3J0Ci0gKiBpbnN0YXRpYXRpb24gY2FuIGJlIGluLgotICovCi0KLWVudW0gcDlfdHJhbnNfc3RhdHVzIHsKLQlDb25uZWN0ZWQsCi0JRGlzY29ubmVjdGVkLAotCUh1bmcsCi19OwotCi0vKioKLSAqIHN0cnVjdCBwOV90cmFucyAtIHBlci10cmFuc3BvcnQgc3RhdGUgYW5kIEFQSQotICogQHN0YXR1czogdHJhbnNwb3J0ICZwOV90cmFuc19zdGF0dXMKLSAqIEBtc2l6ZTogbmVnb3RpYXRlZCBtYXhpbXVtIHBhY2tldCBzaXplIChkdXBsaWNhdGUgZnJvbSBjbGllbnQpCi0gKiBAZXh0ZW5kZWQ6IG5lZ290aWF0ZWQgcHJvdG9jb2wgZXh0ZW5zaW9ucyAoZHVwbGljYXRlIGZyb20gY2xpZW50KQotICogQHByaXY6IHRyYW5zcG9ydCBwcml2YXRlIGRhdGEKLSAqIEBjbG9zZTogbWVtYmVyIGZ1bmN0aW9uIHRvIGRpc2Nvbm5lY3QgYW5kIGNsb3NlIHRoZSB0cmFuc3BvcnQKLSAqIEBycGM6IG1lbWJlciBmdW5jdGlvbiB0byBpc3N1ZSBhIHJlcXVlc3QgdG8gdGhlIHRyYW5zcG9ydAotICoKLSAqIFRoaXMgaXMgdGhlIGJhc2ljIEFQSSBmb3IgYSB0cmFuc3BvcnQgaW5zdGFuY2UuICBJdCBpcyB1c2VkIGFzCi0gKiBhIGhhbmRsZSBieSB0aGUgY2xpZW50IHRvIGlzc3VlIHJlcXVlc3RzLiAgVGhpcyBpbnRlcmZhY2UgaXMgY3VycmVudGx5Ci0gKiBpbiBmbHV4IGR1cmluZyByZW9yZ2FuaXphdGlvbi4KLSAqCi0gKiBCdWdzOiB0aGVyZSBpcyBsb3RzIG9mIGR1cGxpY2F0ZWQgZGF0YSBoZXJlIGFuZCBpdHMgbm90IGNsZWFyIHRoYXQKLSAqIHRoZSBtZW1iZXIgZnVuY3Rpb25zIG5lZWQgdG8gYmUgcGVyLWluc3RhbmNlIHZlcnN1cyBwZXIgdHJhbnNwb3J0Ci0gKiBtb2R1bGUuCi0gKi8KLQotc3RydWN0IHA5X3RyYW5zIHsKLQllbnVtIHA5X3RyYW5zX3N0YXR1cyBzdGF0dXM7Ci0JaW50IG1zaXplOwotCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQ7Ci0Jdm9pZCAqcHJpdjsKLQl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgcDlfdHJhbnMgKik7Ci0JaW50ICgqcnBjKSAoc3RydWN0IHA5X3RyYW5zICp0LCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLAotCQkJCQkJCXN0cnVjdCBwOV9mY2FsbCAqKnJjKTsKLX07Ci0KIC8qKgogICogc3RydWN0IHA5X3RyYW5zX21vZHVsZSAtIHRyYW5zcG9ydCBtb2R1bGUgaW50ZXJmYWNlCiAgKiBAbGlzdDogdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgY3VycmVudGx5IGF2YWlsYWJsZSB0cmFuc3BvcnRzCkBAIC03OSwxMiArMzMsMTQgQEAKICAqIEBtYXhzaXplOiB0cmFuc3BvcnQgcHJvdmlkZWQgbWF4aW11bSBwYWNrZXQgc2l6ZQogICogQGRlZjogc2V0IGlmIHRoaXMgdHJhbnNwb3J0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0CiAgKiBAY3JlYXRlOiBtZW1iZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gb24gdGhpcyB0cmFuc3BvcnQKKyAqIEByZXF1ZXN0OiBtZW1iZXIgZnVuY3Rpb24gdG8gaXNzdWUgYSByZXF1ZXN0IHRvIHRoZSB0cmFuc3BvcnQKKyAqIEBjYW5jZWw6IG1lbWJlciBmdW5jdGlvbiB0byBjYW5jZWwgYSByZXF1ZXN0IChpZiBpdCBoYXNuJ3QgYmVlbiBzZW50KQogICoKICAqIFRoaXMgaXMgdGhlIGJhc2ljIEFQSSBmb3IgYSB0cmFuc3BvcnQgbW9kdWxlIHdoaWNoIGlzIHJlZ2lzdGVyZWQgYnkgdGhlCiAgKiB0cmFuc3BvcnQgbW9kdWxlIHdpdGggdGhlIDlQIGNvcmUgbmV0d29yayBtb2R1bGUgYW5kIHVzZWQgYnkgdGhlIGNsaWVudAogICogdG8gaW5zdGFudGlhdGUgYSBuZXcgY29ubmVjdGlvbiBvbiBhIHRyYW5zcG9ydC4KICAqCi0gKiBCdWdzOiB0aGUgdHJhbnNwb3J0IG1vZHVsZSBsaXN0IGlzbid0IHByb3RlY3RlZC4KKyAqIEJVR1M6IHRoZSB0cmFuc3BvcnQgbW9kdWxlIGxpc3QgaXNuJ3QgcHJvdGVjdGVkLgogICovCiAKIHN0cnVjdCBwOV90cmFuc19tb2R1bGUgewpAQCAtOTIsOCArNDgsMTEgQEAKIAljaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0cmFuc3BvcnQgKi8KIAlpbnQgbWF4c2l6ZTsJCS8qIG1heCBtZXNzYWdlIHNpemUgb2YgdHJhbnNwb3J0ICovCiAJaW50IGRlZjsJCS8qIHRoaXMgdHJhbnNwb3J0IHNob3VsZCBiZSBkZWZhdWx0ICovCi0Jc3RydWN0IHA5X3RyYW5zICogKCpjcmVhdGUpKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIpOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWludCAoKmNyZWF0ZSkoc3RydWN0IHA5X2NsaWVudCAqLCBjb25zdCBjaGFyICosIGNoYXIgKik7CisJdm9pZCAoKmNsb3NlKSAoc3RydWN0IHA5X2NsaWVudCAqKTsKKwlpbnQgKCpyZXF1ZXN0KSAoc3RydWN0IHA5X2NsaWVudCAqLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CisJaW50ICgqY2FuY2VsKSAoc3RydWN0IHA5X2NsaWVudCAqLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CiB9OwogCiB2b2lkIHY5ZnNfcmVnaXN0ZXJfdHJhbnMoc3RydWN0IHA5X3RyYW5zX21vZHVsZSAqbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oIGIvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaAppbmRleCAwY2I2M2VkLi5iODA5Mzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKQEAgLTIsOSArMiw5IEBACiAjZGVmaW5lIF9fTkVUTlNfWF9UQUJMRVNfSAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogCiBzdHJ1Y3QgbmV0bnNfeHQgewotCXN0cnVjdCBsaXN0X2hlYWQgdGFibGVzW05QUk9UT107CisJc3RydWN0IGxpc3RfaGVhZCB0YWJsZXNbTkZQUk9UT19OVU1QUk9UT107CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaCBiL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oCmluZGV4IDE2YmUxMmYuLjBjOTUxNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oCisrKyBiL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oCkBAIC0yMTMsNiArMjEzLDggQEAKIAlJU0NTSV9FUlJfREFUQV9ER1NUCQk9IElTQ1NJX0VSUl9CQVNFICsgMTUsCiAJSVNDU0lfRVJSX1BBUkFNX05PVF9GT1VORAk9IElTQ1NJX0VSUl9CQVNFICsgMTYsCiAJSVNDU0lfRVJSX05PX1NDU0lfQ01ECQk9IElTQ1NJX0VSUl9CQVNFICsgMTcsCisJSVNDU0lfRVJSX0lOVkFMSURfSE9TVAkJPSBJU0NTSV9FUlJfQkFTRSArIDE4LAorCUlTQ1NJX0VSUl9YTUlUX0ZBSUxFRAkJPSBJU0NTSV9FUlJfQkFTRSArIDE5LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKaW5kZXggNWU3NWJiNy4uNjFlNTNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKQEAgLTI4Nyw2ICsyODcsMTEgQEAKIAlzdHJ1Y3QgaXNjc2lfcG9vbAljbWRwb29sOwkvKiBQRFUncyBwb29sICovCiB9OwogCitlbnVtIHsKKwlJU0NTSV9IT1NUX1NFVFVQLAorCUlTQ1NJX0hPU1RfUkVNT1ZFRCwKK307CisKIHN0cnVjdCBpc2NzaV9ob3N0IHsKIAljaGFyCQkJKmluaXRpYXRvcm5hbWU7CiAJLyogaHcgYWRkcmVzcyBvciBuZXRkZXYgaXNjc2kgY29ubmVjdGlvbiBpcyBib3VuZCB0byAqLwpAQCAtMjk1LDYgKzMwMCwxMiBAQAogCS8qIGxvY2FsIGFkZHJlc3MgKi8KIAlpbnQJCQlsb2NhbF9wb3J0OwogCWNoYXIJCQlsb2NhbF9hZGRyZXNzW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAlzZXNzaW9uX3JlbW92YWxfd3E7CisJLyogcHJvdGVjdHMgc2Vzc2lvbnMgYW5kIHN0YXRlICovCisJc3BpbmxvY2tfdAkJbG9jazsKKwlpbnQJCQludW1fc2Vzc2lvbnM7CisJaW50CQkJc3RhdGU7CiB9OwogCiAvKgpAQCAtMzAyLDcgKzMxMyw3IEBACiAgKi8KIGV4dGVybiBpbnQgaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwotZXh0ZXJuIGludCBpc2NzaV9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKK2V4dGVybiBpbnQgaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNjLAogCQkJICAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwpAQCAtMzUxLDYgKzM2Miw4IEBACiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fYmluZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKiwgc3RydWN0IGlzY3NpX2Nsc19jb25uICosCiAJCQkgICBpbnQpOwogZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnIpOworZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCQkJICBlbnVtIGlzY3NpX2VyciBlcnIpOwogZXh0ZXJuIGludCBpc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAogCQkJCWVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBpc2NzaV9zdXNwZW5kX3R4KHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDE5MmY4NzEuLmExMDkxNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtMzgxLDYgKzM4MSwxMSBAQAogI2RlZmluZSBESURfSU1NX1JFVFJZICAgMHgwYwkvKiBSZXRyeSB3aXRob3V0IGRlY3JlbWVudGluZyByZXRyeSBjb3VudCAgKi8KICNkZWZpbmUgRElEX1JFUVVFVUUJMHgwZAkvKiBSZXF1ZXVlIGNvbW1hbmQgKG5vIGltbWVkaWF0ZSByZXRyeSkgYWxzbwogCQkJCSAqIHdpdGhvdXQgZGVjcmVtZW50aW5nIHRoZSByZXRyeSBjb3VudAkgICAqLworI2RlZmluZSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCAweDBlIC8qIFRyYW5zcG9ydCBlcnJvciBkaXNydXB0ZWQgZXhlY3V0aW9uCisJCQkJICAgICAgKiBhbmQgdGhlIGRyaXZlciBibG9ja2VkIHRoZSBwb3J0IHRvCisJCQkJICAgICAgKiByZWNvdmVyIHRoZSBsaW5rLiBUcmFuc3BvcnQgY2xhc3Mgd2lsbAorCQkJCSAgICAgICogcmV0cnkgb3IgZmFpbCBJTyAqLworI2RlZmluZSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUCTB4MGYgLyogVHJhbnNwb3J0IGNsYXNzIGZhc3RmYWlsZWQgdGhlIGlvICovCiAjZGVmaW5lIERSSVZFUl9PSyAgICAgICAweDAwCS8qIERyaXZlciBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAvKgpAQCAtNDI2LDYgKzQzMSw3IEBACiAjZGVmaW5lIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kgICAweDEwNTUKICNkZWZpbmUgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIDB4MTA1NgogI2RlZmluZSBTQ1NJX01MUVVFVUVfRUhfUkVUUlkgICAgMHgxMDU3CisjZGVmaW5lIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSAweDEwNTgKIAogLyoKICAqICBVc2UgdGhlc2UgdG8gc2VwYXJhdGUgc3RhdHVzIG1zZyBhbmQgb3VyIGJ5dGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IGI0OWU3MjUuLmEzN2E4MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0yMzgsNiArMjM4LDE2IEBACiAJCQkJCQkgKiBmb3IgdGhlIGRldmljZSBhdCBhIHRpbWUuICovCiAJdW5zaWduZWQgaW50CQlwZHRfMWZfZm9yX25vX2x1bjsJLyogUERUID0gMHgxZiAqLwogCQkJCQkJLyogbWVhbnMgbm8gbHVuIHByZXNlbnQgKi8KKwkvKiBjb21tYW5kcyBhY3R1YWxseSBhY3RpdmUgb24gTExELiBwcm90ZWN0ZWQgYnkgaG9zdCBsb2NrLiAqLworCXVuc2lnbmVkIGludAkJdGFyZ2V0X2J1c3k7CisJLyoKKwkgKiBMTERzIHNob3VsZCBzZXQgdGhpcyBpbiB0aGUgc2xhdmVfYWxsb2MgaG9zdCB0ZW1wbGF0ZSBjYWxsb3V0LgorCSAqIElmIHNldCB0byB6ZXJvIHRoZW4gdGhlcmUgaXMgbm90IGxpbWl0LgorCSAqLworCXVuc2lnbmVkIGludAkJY2FuX3F1ZXVlOworCXVuc2lnbmVkIGludAkJdGFyZ2V0X2Jsb2NrZWQ7CisJdW5zaWduZWQgaW50CQltYXhfdGFyZ2V0X2Jsb2NrZWQ7CisjZGVmaW5lIFNDU0lfREVGQVVMVF9UQVJHRVRfQkxPQ0tFRAkzCiAKIAljaGFyCQkJc2NzaV9sZXZlbDsKIAlzdHJ1Y3QgZXhlY3V0ZV93b3JrCWV3OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAppbmRleCAyMTAxOGE0Li40OWQ4OTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaApAQCAtMzU3LDYgKzM1Nyw3IEBACiAvKiBiaXQgZmllbGQgdmFsdWVzIGZvciBzdHJ1Y3QgZmNfcnBvcnQgImZsYWdzIiBmaWVsZDogKi8KICNkZWZpbmUgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HCTB4MDEKICNkZWZpbmUgRkNfUlBPUlRfU0NBTl9QRU5ESU5HCQkweDAyCisjZGVmaW5lIEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVAkweDAzCiAKICNkZWZpbmUJZGV2X3RvX3Jwb3J0KGQpCQkJCVwKIAljb250YWluZXJfb2YoZCwgc3RydWN0IGZjX3Jwb3J0LCBkZXYpCkBAIC02NzgsMTIgKzY3OSwxNSBAQAogCQlpZiAocnBvcnQtPnJvbGVzICYgRkNfUE9SVF9ST0xFX0ZDUF9UQVJHRVQpCiAJCQlyZXN1bHQgPSAwOwogCQllbHNlIGlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcpCi0JCQlyZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQkJcmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWVsc2UKIAkJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlicmVhazsKIAljYXNlIEZDX1BPUlRTVEFURV9CTE9DS0VEOgotCQlyZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUKQorCQkJcmVzdWx0ID0gRElEX1RSQU5TUE9SVF9GQUlMRkFTVCA8PCAxNjsKKwkJZWxzZQorCQkJcmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAppbmRleCA4YjZjOTFkLi5jNjY3Y2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaApAQCAtMTM1LDcgKzEzNSw4IEBACiAvKgogICogY29udHJvbCBwbGFuZSB1cGNhbGxzCiAgKi8KLWV4dGVybiB2b2lkIGlzY3NpX2Nvbm5fZXJyb3Ioc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnJvcik7CitleHRlcm4gdm9pZCBpc2NzaV9jb25uX2Vycm9yX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwKKwkJCQkgICBlbnVtIGlzY3NpX2VyciBlcnJvcik7CiBleHRlcm4gaW50IGlzY3NpX3JlY3ZfcGR1KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX2hkciAqaGRyLAogCQkJICBjaGFyICpkYXRhLCB1aW50MzJfdCBkYXRhX3NpemUpOwogCkBAIC0yMDcsNyArMjA4LDcgQEAKIHN0cnVjdCBpc2NzaV9lbmRwb2ludCB7CiAJdm9pZCAqZGRfZGF0YTsJCQkvKiBMTEQgcHJpdmF0ZSBkYXRhICovCiAJc3RydWN0IGRldmljZSBkZXY7Ci0JdW5zaWduZWQgaW50IGlkOworCXVpbnQ2NF90IGlkOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc2NoZWQuaCBiL2luY2x1ZGUvdHJhY2Uvc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQ3MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9zY2hlZC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX1RSQUNFX1NDSEVEX0gKKyNkZWZpbmUgX1RSQUNFX1NDSEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitERUZJTkVfVFJBQ0Uoc2NoZWRfa3RocmVhZF9zdG9wLAorCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp0KSwKKwkJVFBBUkdTKHQpKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX2t0aHJlYWRfc3RvcF9yZXQsCisJVFBQUk9UTyhpbnQgcmV0KSwKKwkJVFBBUkdTKHJldCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfd2FpdF90YXNrLAorCVRQUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKwkJVFBBUkdTKHJxLCBwKSk7CisKK0RFRklORV9UUkFDRShzY2hlZF93YWtldXAsCisJVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCQlUUEFSR1MocnEsIHApKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX3dha2V1cF9uZXcsCisJVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCQlUUEFSR1MocnEsIHApKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX3N3aXRjaCwKKwlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSwKKwkJVFBBUkdTKHJxLCBwcmV2LCBuZXh0KSk7CisKK0RFRklORV9UUkFDRShzY2hlZF9taWdyYXRlX3Rhc2ssCisJVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBkZXN0X2NwdSksCisJCVRQQVJHUyhycSwgcCwgZGVzdF9jcHUpKTsKKworREVGSU5FX1RSQUNFKHNjaGVkX3Byb2Nlc3NfZnJlZSwKKwlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJCVRQQVJHUyhwKSk7CisKK0RFRklORV9UUkFDRShzY2hlZF9wcm9jZXNzX2V4aXQsCisJVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCQlUUEFSR1MocCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc193YWl0LAorCVRQUFJPVE8oc3RydWN0IHBpZCAqcGlkKSwKKwkJVFBBUkdTKHBpZCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc19mb3JrLAorCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpLAorCQlUUEFSR1MocGFyZW50LCBjaGlsZCkpOworCitERUZJTkVfVFJBQ0Uoc2NoZWRfc2lnbmFsX3NlbmQsCisJVFBQUk9UTyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCQlUUEFSR1Moc2lnLCBwKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9tb2JpbGVfbGNkYy5oIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaApyZW5hbWUgdG8gaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCmluZGV4IDEzMDEwMmYuLjFhNGJjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKQEAgLTI4LDYgKzI4LDEyIEBACiAKIGVudW0geyBMQ0RDX0NMS19CVVMsIExDRENfQ0xLX1BFUklQSEVSQUwsIExDRENfQ0xLX0VYVEVSTkFMIH07CiAKKyNkZWZpbmUgTENEQ19GTEFHU19EV1BPTCAoMSA8PCAwKSAvKiBSaXNpbmcgZWRnZSBkb3QgY2xvY2sgZGF0YSBsYXRjaCAqLworI2RlZmluZSBMQ0RDX0ZMQUdTX0RJUE9MICgxIDw8IDEpIC8qIEFjdGl2ZSBsb3cgZGlzcGxheSBlbmFibGUgcG9sYXJpdHkgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19EQVBPTCAoMSA8PCAyKSAvKiBBY3RpdmUgbG93IGRpc3BsYXkgZGF0YSBwb2xhcml0eSAqLworI2RlZmluZSBMQ0RDX0ZMQUdTX0hTQ05UICgxIDw8IDMpIC8qIERpc2FibGUgSFNZTkMgZHVyaW5nIFZCTEFOSyAqLworI2RlZmluZSBMQ0RDX0ZMQUdTX0RXQ05UICgxIDw8IDQpIC8qIERpc2FibGUgZG90Y2xvY2sgZHVyaW5nIGJsYW5raW5nICovCisKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyB7CiAJdW5zaWduZWQgbG9uZyBsZG10MnI7CiAJdW5zaWduZWQgbG9uZyBsZG10M3I7CkBAIC01Nyw2ICs2Myw3IEBACiAJaW50IGJwcDsKIAlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCiAJaW50IGNsb2NrX2RpdmlkZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogTENEQ19GTEFHU18uLi4gKi8KIAlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGxjZF9jZmc7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2xjZF9zaXplX2NmZyBsY2Rfc2l6ZV9jZmc7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZyBib2FyZF9jZmc7CkBAIC02NCw3ICs3MSw2IEBACiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBsZGRja3I7CiAJaW50IGNsb2NrX3NvdXJjZTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbl9jZmcgY2hbMl07CiB9OwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDVjZWZmMzIuLjExM2M3NGMgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5OSw2ICsyOTksMTMgQEAKICAgICAgICAgICBmb3IgaW5zdGFuY2UgdmlydHVhbCBzZXJ2ZXJzIGFuZCBjaGVja3BvaW50L3Jlc3RhcnQKICAgICAgICAgICBqb2JzLgogCitjb25maWcgQ0dST1VQX0ZSRUVaRVIKKyAgICAgICAgYm9vbCAiY29udHJvbCBncm91cCBmcmVlemVyIHN1YnN5c3RlbSIKKyAgICAgICAgZGVwZW5kcyBvbiBDR1JPVVBTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQcm92aWRlcyBhIHdheSB0byBmcmVlemUgYW5kIHVuZnJlZXplIGFsbCB0YXNrcyBpbiBhCisJICBjZ3JvdXAuCisKIGNvbmZpZyBDR1JPVVBfREVWSUNFCiAJYm9vbCAiRGV2aWNlIGNvbnRyb2xsZXIgZm9yIGNncm91cHMiCiAJZGVwZW5kcyBvbiBDR1JPVVBTICYmIEVYUEVSSU1FTlRBTApAQCAtNzMwLDYgKzczNywxNCBAQAogCSAgb24gRU1CRURERUQgc3lzdGVtcy4gIC9wcm9jL3Ztc3RhdCB3aWxsIG9ubHkgc2hvdyBwYWdlIGNvdW50cwogCSAgaWYgVk0gZXZlbnQgY291bnRlcnMgYXJlIGRpc2FibGVkLgogCitjb25maWcgUENJX1FVSVJLUworCWRlZmF1bHQgeQorCWJvb2wgIkVuYWJsZSBQQ0kgcXVpcmsgd29ya2Fyb3VuZHMiIGlmIEVNQkVEREVEICYmIFBDSQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB3b3JrYXJvdW5kcyBmb3IgdmFyaW91cyBQQ0kgY2hpcHNldAorICAgICAgICAgIGJ1Z3MvcXVpcmtzLiBEaXNhYmxlIHRoaXMgb25seSBpZiB5b3VyIHRhcmdldCBtYWNoaW5lIGlzCisgICAgICAgICAgdW5hZmZlY3RlZCBieSBQQ0kgcXVpcmtzLgorCiBjb25maWcgU0xVQl9ERUJVRwogCWRlZmF1bHQgeQogCWJvb2wgIkVuYWJsZSBTTFVCIGRlYnVnZ2luZyBzdXBwb3J0IiBpZiBFTUJFRERFRApAQCAtNzc5LDYgKzc5NCwxMyBAQAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAogCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCiAKKyMKKyMgUGxhY2UgYW4gZW1wdHkgZnVuY3Rpb24gY2FsbCBhdCBlYWNoIHRyYWNlcG9pbnQgc2l0ZS4gQ2FuIGJlCisjIGR5bmFtaWNhbGx5IGNoYW5nZWQgZm9yIGEgcHJvYmUgZnVuY3Rpb24uCisjCitjb25maWcgVFJBQ0VQT0lOVFMKKwlib29sCisKIGNvbmZpZyBNQVJLRVJTCiAJYm9vbCAiQWN0aXZhdGUgbWFya2VycyIKIAloZWxwCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDI3ZjZiZjYuLjNlMTdhM2IgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXJ0X2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC02MCw2ICs2MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CkBAIC02NDIsNiArNjQ0LDcgQEAKIAkJaW5pdHJkX3N0YXJ0ID0gMDsKIAl9CiAjZW5kaWYKKwl2bWFsbG9jX2luaXQoKTsKIAl2ZnNfY2FjaGVzX2luaXRfZWFybHkoKTsKIAljcHVzZXRfaW5pdF9lYXJseSgpOwogCW1lbV9pbml0KCk7CkBAIC02ODcsNiArNjkwLDggQEAKIAogCWFjcGlfZWFybHlfaW5pdCgpOyAvKiBiZWZvcmUgTEFQSUMgYW5kIFNNUCBpbml0ICovCiAKKwlmdHJhY2VfaW5pdCgpOworCiAJLyogRG8gdGhlIHJlc3Qgbm9uLV9faW5pdCdlZCwgd2UncmUgbm93IGFsaXZlICovCiAJcmVzdF9pbml0KCk7CiB9CkBAIC03MDMsMzAgKzcwOCwzMSBAQAogaW50IGRvX29uZV9pbml0Y2FsbChpbml0Y2FsbF90IGZuKQogewogCWludCBjb3VudCA9IHByZWVtcHRfY291bnQoKTsKLQlrdGltZV90IHQwLCB0MSwgZGVsdGE7CisJa3RpbWVfdCBkZWx0YTsKIAljaGFyIG1zZ2J1Zls2NF07Ci0JaW50IHJlc3VsdDsKKwlzdHJ1Y3QgYm9vdF90cmFjZSBpdDsKIAogCWlmIChpbml0Y2FsbF9kZWJ1ZykgewotCQlwcmludGsoImNhbGxpbmcgICVwRiBAICVpXG4iLCBmbiwgdGFza19waWRfbnIoY3VycmVudCkpOwotCQl0MCA9IGt0aW1lX2dldCgpOworCQlpdC5jYWxsZXIgPSB0YXNrX3BpZF9ucihjdXJyZW50KTsKKwkJcHJpbnRrKCJjYWxsaW5nICAlcEYgQCAlaVxuIiwgZm4sIGl0LmNhbGxlcik7CisJCWl0LmNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CiAJfQogCi0JcmVzdWx0ID0gZm4oKTsKKwlpdC5yZXN1bHQgPSBmbigpOwogCiAJaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCXQxID0ga3RpbWVfZ2V0KCk7Ci0JCWRlbHRhID0ga3RpbWVfc3ViKHQxLCB0MCk7Ci0KLQkJcHJpbnRrKCJpbml0Y2FsbCAlcEYgcmV0dXJuZWQgJWQgYWZ0ZXIgJUxkIG1zZWNzXG4iLAotCQkJZm4sIHJlc3VsdCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGRlbHRhLnR2NjQgPj4gMjApOworCQlpdC5yZXR0aW1lID0ga3RpbWVfZ2V0KCk7CisJCWRlbHRhID0ga3RpbWVfc3ViKGl0LnJldHRpbWUsIGl0LmNhbGx0aW1lKTsKKwkJaXQuZHVyYXRpb24gPSAodW5zaWduZWQgbG9uZyBsb25nKSBkZWx0YS50djY0ID4+IDEwOworCQlwcmludGsoImluaXRjYWxsICVwRiByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsIGZuLAorCQkJaXQucmVzdWx0LCBpdC5kdXJhdGlvbik7CisJCXRyYWNlX2Jvb3QoJml0LCBmbik7CiAJfQogCiAJbXNnYnVmWzBdID0gMDsKIAotCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpCi0JCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCAiLCByZXN1bHQpOworCWlmIChpdC5yZXN1bHQgJiYgaXQucmVzdWx0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpCisJCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCAiLCBpdC5yZXN1bHQpOwogCiAJaWYgKHByZWVtcHRfY291bnQoKSAhPSBjb3VudCkgewogCQlzdHJsY2F0KG1zZ2J1ZiwgInByZWVtcHRpb24gaW1iYWxhbmNlICIsIHNpemVvZihtc2didWYpKTsKQEAgLTc0MCw3ICs3NDYsNyBAQAogCQlwcmludGsoImluaXRjYWxsICVwRiByZXR1cm5lZCB3aXRoICVzXG4iLCBmbiwgbXNnYnVmKTsKIAl9CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBpdC5yZXN1bHQ7CiB9CiAKIApAQCAtODU1LDYgKzg2MSw3IEBACiAJc21wX3ByZXBhcmVfY3B1cyhzZXR1cF9tYXhfY3B1cyk7CiAKIAlkb19wcmVfc21wX2luaXRjYWxscygpOworCXN0YXJ0X2Jvb3RfdHJhY2UoKTsKIAogCXNtcF9pbml0KCk7CiAJc2NoZWRfaW5pdF9zbXAoKTsKQEAgLTg4MSw2ICs4ODgsNyBAQAogCSAqIHdlJ3JlIGVzc2VudGlhbGx5IHVwIGFuZCBydW5uaW5nLiBHZXQgcmlkIG9mIHRoZQogCSAqIGluaXRtZW0gc2VnbWVudHMgYW5kIHN0YXJ0IHRoZSB1c2VyLW1vZGUgc3R1ZmYuLgogCSAqLworCXN0b3BfYm9vdF90cmFjZSgpOwogCWluaXRfcG9zdCgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDk2ZmIzNmMuLjY4ZWI4NTcgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTUyLDYgKzUyLDE0IEBACiAjZGVmaW5lIEhBUkRfTVNHTUFYIAkoMTMxMDcyL3NpemVvZih2b2lkKikpCiAjZGVmaW5lIERGTFRfTVNHU0laRU1BWCA4MTkyCS8qIG1heCBtZXNzYWdlIHNpemUgKi8KIAorLyoKKyAqIERlZmluZSB0aGUgcmFuZ2VzIHZhcmlvdXMgdXNlci1zcGVjaWZpZWQgbWF4aW11bSB2YWx1ZXMgY2FuCisgKiBiZSBzZXQgdG8uCisgKi8KKyNkZWZpbmUgTUlOX01TR01BWAkxCQkvKiBtaW4gdmFsdWUgZm9yIG1zZ19tYXggKi8KKyNkZWZpbmUgTUFYX01TR01BWAlIQVJEX01TR01BWAkvKiBtYXggdmFsdWUgZm9yIG1zZ19tYXggKi8KKyNkZWZpbmUgTUlOX01TR1NJWkVNQVgJMTI4CQkvKiBtaW4gdmFsdWUgZm9yIG1zZ3NpemVfbWF4ICovCisjZGVmaW5lIE1BWF9NU0dTSVpFTUFYCSg4MTkyKjEyOCkJLyogbWF4IHZhbHVlIGZvciBtc2dzaXplX21heCAqLwogCiBzdHJ1Y3QgZXh0X3dhaXRfcXVldWUgewkJLyogcXVldWUgb2Ygc2xlZXBpbmcgdGFza3MgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CkBAIC0xMzQsOCArMTQyLDggQEAKIAkJCWluZm8tPnFzaXplID0gMDsKIAkJCWluZm8tPnVzZXIgPSBOVUxMOwkvKiBzZXQgd2hlbiBhbGwgaXMgb2sgKi8KIAkJCW1lbXNldCgmaW5mby0+YXR0ciwgMCwgc2l6ZW9mKGluZm8tPmF0dHIpKTsKLQkJCWluZm8tPmF0dHIubXFfbWF4bXNnID0gREZMVF9NU0dNQVg7Ci0JCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBERkxUX01TR1NJWkVNQVg7CisJCQlpbmZvLT5hdHRyLm1xX21heG1zZyA9IG1zZ19tYXg7CisJCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBtc2dzaXplX21heDsKIAkJCWlmIChhdHRyKSB7CiAJCQkJaW5mby0+YXR0ci5tcV9tYXhtc2cgPSBhdHRyLT5tcV9tYXhtc2c7CiAJCQkJaW5mby0+YXR0ci5tcV9tc2dzaXplID0gYXR0ci0+bXFfbXNnc2l6ZTsKQEAgLTExOTEsMTEgKzExOTksMTEgQEAKIAkua2lsbF9zYiA9IGtpbGxfbGl0dGVyX3N1cGVyLAogfTsKIAotc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21pbiA9IERGTFRfTVNHTUFYOwotc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21heCA9IEhBUkRfTVNHTUFYOworc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21pbiA9IE1JTl9NU0dNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWF4ID0gTUFYX01TR01BWDsKIAotc3RhdGljIGludCBtc2dfbWF4c2l6ZV9saW1pdF9taW4gPSBERkxUX01TR1NJWkVNQVg7Ci1zdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21heCA9IElOVF9NQVg7CitzdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21pbiA9IE1JTl9NU0dTSVpFTUFYOworc3RhdGljIGludCBtc2dfbWF4c2l6ZV9saW1pdF9tYXggPSBNQVhfTVNHU0laRU1BWDsKIAogc3RhdGljIGN0bF90YWJsZSBtcV9zeXNjdGxzW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IGU3N2VjNjk4Li4wYWRkM2ZhIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC03MzcsNiArNzM3LDEwIEBACiAJY2FzZSBTSE1fTE9DSzoKIAljYXNlIFNITV9VTkxPQ0s6CiAJeworCQlzdHJ1Y3QgZmlsZSAqdW5pbml0aWFsaXplZF92YXIoc2htX2ZpbGUpOworCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7ICAvKiBkcmFpbiBwYWdldmVjcyB0byBscnUgbGlzdHMgKi8KKwogCQlzaHAgPSBzaG1fbG9ja19jaGVjayhucywgc2htaWQpOwogCQlpZiAoSVNfRVJSKHNocCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2hwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIgYi9rZXJuZWwvS2NvbmZpZy5mcmVlemVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmI0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvS2NvbmZpZy5mcmVlemVyCkBAIC0wLDAgKzEsMiBAQAorY29uZmlnIEZSRUVaRVIKKwlkZWZfYm9vbCBQTV9TTEVFUCB8fCBDR1JPVVBfRlJFRVpFUgpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDRlMWQ3ZGYuLjMwNWYxMWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIENGTEFHU19SRU1PVkVfc2NoZWQubyA9IC1tbm8tc3BlIC1wZwogZW5kaWYKIAorb2JqLSQoQ09ORklHX0ZSRUVaRVIpICs9IGZyZWV6ZXIubwogb2JqLSQoQ09ORklHX1BST0ZJTElORykgKz0gcHJvZmlsZS5vCiBvYmotJChDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0spICs9IHN5c2N0bF9jaGVjay5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkgKz0gc3RhY2t0cmFjZS5vCkBAIC01NSw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfQ09NUEFUKSArPSBjb21wYXQubwogb2JqLSQoQ09ORklHX0NHUk9VUFMpICs9IGNncm91cC5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFQlVHKSArPSBjZ3JvdXBfZGVidWcubworb2JqLSQoQ09ORklHX0NHUk9VUF9GUkVFWkVSKSArPSBjZ3JvdXBfZnJlZXplci5vCiBvYmotJChDT05GSUdfQ1BVU0VUUykgKz0gY3B1c2V0Lm8KIG9iai0kKENPTkZJR19DR1JPVVBfTlMpICs9IG5zX2Nncm91cC5vCiBvYmotJChDT05GSUdfVVRTX05TKSArPSB1dHNuYW1lLm8KQEAgLTgzLDYgKzg1LDcgQEAKIG9iai0kKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpICs9IGRlbGF5YWNjdC5vCiBvYmotJChDT05GSUdfVEFTS1NUQVRTKSArPSB0YXNrc3RhdHMubyB0c2FjY3Qubwogb2JqLSQoQ09ORklHX01BUktFUlMpICs9IG1hcmtlci5vCitvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQubwogb2JqLSQoQ09ORklHX0xBVEVOQ1lUT1ApICs9IGxhdGVuY3l0b3Aubwogb2JqLSQoQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQpICs9IGRtYS1jb2hlcmVudC5vCiBvYmotJChDT05GSUdfRlRSQUNFKSArPSB0cmFjZS8KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA4YzZlMWMxLi4wNDZjMTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yNDEsNyArMjQxLDYgQEAKIAlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CiAJc3RydWN0IGNnX2Nncm91cF9saW5rICpzYXZlZF9saW5rOwogCi0Jd3JpdGVfbG9jaygmY3NzX3NldF9sb2NrKTsKIAlobGlzdF9kZWwoJmNnLT5obGlzdCk7CiAJY3NzX3NldF9jb3VudC0tOwogCkBAIC0yNTEsMTYgKzI1MCwyNSBAQAogCQlsaXN0X2RlbCgmbGluay0+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+cm9vdDsKQEAgLTI0OTUsOCArMjU0OSw3IEBACiBpbnQgX19pbml0IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpCiB7CiAJaW50IGk7Ci0Ja3JlZl9pbml0KCZpbml0X2Nzc19zZXQucmVmKTsKLQlrcmVmX2dldCgmaW5pdF9jc3Nfc2V0LnJlZik7CisJYXRvbWljX3NldCgmaW5pdF9jc3Nfc2V0LnJlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0LmNnX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0LnRhc2tzKTsKIAlJTklUX0hMSVNUX05PREUoJmluaXRfY3NzX3NldC5obGlzdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwX2RlYnVnLmMgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKaW5kZXggYzNkYzNhYi4uZGFjYTYyMCAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9jZ3JvdXBfZGVidWcuYwpAQCAtNTcsNyArNTcsNyBAQAogCXU2NCBjb3VudDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQljb3VudCA9IGF0b21pY19yZWFkKCZjdXJyZW50LT5jZ3JvdXBzLT5yZWYucmVmY291bnQpOworCWNvdW50ID0gYXRvbWljX3JlYWQoJmN1cnJlbnQtPmNncm91cHMtPnJlZmNvdW50KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05MCw3ICs5MCw3IEBACiAJewogCQkubmFtZSA9ICJyZWxlYXNhYmxlIiwKIAkJLnJlYWRfdTY0ID0gcmVsZWFzYWJsZV9yZWFkLAotCX0KKwl9LAogfTsKIAogc3RhdGljIGludCBkZWJ1Z19wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYyBiL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NTA1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYwpAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAqIGNncm91cF9mcmVlemVyLmMgLSAgY29udHJvbCBncm91cCBmcmVlemVyIHN1YnN5c3RlbQorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqCisgKiBBdXRob3IgOiBDZWRyaWMgTGUgR29hdGVyIDxjbGdAZnIuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitlbnVtIGZyZWV6ZXJfc3RhdGUgeworCUNHUk9VUF9USEFXRUQgPSAwLAorCUNHUk9VUF9GUkVFWklORywKKwlDR1JPVVBfRlJPWkVOLAorfTsKKworc3RydWN0IGZyZWV6ZXIgeworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgc3RhdGU7CisJc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0cyBfd3JpdGVzXyB0byBzdGF0ZSAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJlZXplciAqY2dyb3VwX2ZyZWV6ZXIoCisJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKAorCQljZ3JvdXBfc3Vic3lzX3N0YXRlKGNncm91cCwgZnJlZXplcl9zdWJzeXNfaWQpLAorCQlzdHJ1Y3QgZnJlZXplciwgY3NzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJlZXplciAqdGFza19mcmVlemVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHRhc2ssIGZyZWV6ZXJfc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgZnJlZXplciwgY3NzKTsKK30KKworaW50IGNncm91cF9mcm96ZW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWVudW0gZnJlZXplcl9zdGF0ZSBzdGF0ZTsKKworCXRhc2tfbG9jayh0YXNrKTsKKwlmcmVlemVyID0gdGFza19mcmVlemVyKHRhc2spOworCXN0YXRlID0gZnJlZXplci0+c3RhdGU7CisJdGFza191bmxvY2sodGFzayk7CisKKwlyZXR1cm4gc3RhdGUgPT0gQ0dST1VQX0ZST1pFTjsKK30KKworLyoKKyAqIGNncm91cHNfd3JpdGVfc3RyaW5nKCkgbGltaXRzIHRoZSBzaXplIG9mIGZyZWV6ZXIgc3RhdGUgc3RyaW5ncyB0bworICogQ0dST1VQX0xPQ0FMX0JVRkZFUl9TSVpFCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmcmVlemVyX3N0YXRlX3N0cnNbXSA9IHsKKwkiVEhBV0VEIiwKKwkiRlJFRVpJTkciLAorCSJGUk9aRU4iLAorfTsKKworLyoKKyAqIFN0YXRlIGRpYWdyYW0KKyAqIFRyYW5zaXRpb25zIGFyZSBjYXVzZWQgYnkgdXNlcnNwYWNlIHdyaXRlcyB0byB0aGUgZnJlZXplci5zdGF0ZSBmaWxlLgorICogVGhlIHZhbHVlcyBpbiBwYXJlbnRoZXNpcyBhcmUgc3RhdGUgbGFiZWxzLiBUaGUgcmVzdCBhcmUgZWRnZSBsYWJlbHMuCisgKgorICogKFRIQVdFRCkgLS1GUk9aRU4tLT4gKEZSRUVaSU5HKSAtLUZST1pFTi0tPiAoRlJPWkVOKQorICogICAgXiBeICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICogICAgfCBcX19fX19fX1RIQVdFRF9fX19fX18vICAgICAgICAgICAgICAgICAgICAgfAorICogICAgXF9fX19fX19fX19fX19fX19fX19fX19fX19fVEhBV0VEX19fX19fX19fX19fLworICovCisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGZyZWV6ZXJfc3Vic3lzOworCisvKiBMb2NrcyB0YWtlbiBhbmQgdGhlaXIgb3JkZXJpbmcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogY3NzX3NldF9sb2NrCisgKiBjZ3JvdXBfbXV0ZXggKEFLQSBjZ3JvdXBfbG9jaykKKyAqIHRhc2stPmFsbG9jX2xvY2sgKEFLQSB0YXNrX2xvY2spCisgKiBmcmVlemVyLT5sb2NrCisgKiB0YXNrLT5zaWdoYW5kLT5zaWdsb2NrCisgKgorICogY2dyb3VwIGNvZGUgZm9yY2VzIGNzc19zZXRfbG9jayB0byBiZSB0YWtlbiBiZWZvcmUgdGFzay0+YWxsb2NfbG9jaworICoKKyAqIGZyZWV6ZXJfY3JlYXRlKCksIGZyZWV6ZXJfZGVzdHJveSgpOgorICogY2dyb3VwX211dGV4IFsgYnkgY2dyb3VwIGNvcmUgXQorICoKKyAqIGNhbl9hdHRhY2goKToKKyAqIGNncm91cF9tdXRleAorICoKKyAqIGNncm91cF9mcm96ZW4oKToKKyAqIHRhc2stPmFsbG9jX2xvY2sgKHRvIGdldCB0YXNrJ3MgY2dyb3VwKQorICoKKyAqIGZyZWV6ZXJfZm9yaygpIChwcmVzZXJ2aW5nIGZvcmsoKSBwZXJmb3JtYW5jZSBtZWFucyBjYW4ndCB0YWtlIGNncm91cF9tdXRleCk6CisgKiB0YXNrLT5hbGxvY19sb2NrICh0byBnZXQgdGFzaydzIGNncm91cCkKKyAqIGZyZWV6ZXItPmxvY2sKKyAqICBzaWdoYW5kLT5zaWdsb2NrIChpZiB0aGUgY2dyb3VwIGlzIGZyZWV6aW5nKQorICoKKyAqIGZyZWV6ZXJfcmVhZCgpOgorICogY2dyb3VwX211dGV4CisgKiAgZnJlZXplci0+bG9jaworICogICByZWFkX2xvY2sgY3NzX3NldF9sb2NrIChjZ3JvdXAgaXRlcmF0b3Igc3RhcnQpCisgKgorICogZnJlZXplcl93cml0ZSgpIChmcmVlemUpOgorICogY2dyb3VwX211dGV4CisgKiAgZnJlZXplci0+bG9jaworICogICByZWFkX2xvY2sgY3NzX3NldF9sb2NrIChjZ3JvdXAgaXRlcmF0b3Igc3RhcnQpCisgKiAgICBzaWdoYW5kLT5zaWdsb2NrCisgKgorICogZnJlZXplcl93cml0ZSgpICh1bmZyZWV6ZSk6CisgKiBjZ3JvdXBfbXV0ZXgKKyAqICBmcmVlemVyLT5sb2NrCisgKiAgIHJlYWRfbG9jayBjc3Nfc2V0X2xvY2sgKGNncm91cCBpdGVyYXRvciBzdGFydCkKKyAqICAgIHRhc2stPmFsbG9jX2xvY2sgKHRvIHByZXZlbnQgcmFjZXMgd2l0aCBmcmVlemVfdGFzaygpKQorICogICAgIHNpZ2hhbmQtPnNpZ2xvY2sKKyAqLworc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmcmVlemVyX2NyZWF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkJCQkgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKworCWZyZWV6ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJlZXplciksIEdGUF9LRVJORUwpOworCWlmICghZnJlZXplcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzcGluX2xvY2tfaW5pdCgmZnJlZXplci0+bG9jayk7CisJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCXJldHVybiAmZnJlZXplci0+Y3NzOworfQorCitzdGF0aWMgdm9pZCBmcmVlemVyX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlrZnJlZShjZ3JvdXBfZnJlZXplcihjZ3JvdXApKTsKK30KKworLyogVGFzayBpcyBmcm96ZW4gb3Igd2lsbCBmcmVlemUgaW1tZWRpYXRlbHkgd2hlbiBuZXh0IGl0IGdldHMgd29rZW4gKi8KK3N0YXRpYyBib29sIGlzX3Rhc2tfZnJvemVuX2Vub3VnaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIGZyb3plbih0YXNrKSB8fAorCQkodGFza19pc19zdG9wcGVkX29yX3RyYWNlZCh0YXNrKSAmJiBmcmVlemluZyh0YXNrKSk7Cit9CisKKy8qCisgKiBUaGUgY2FsbCB0byBjZ3JvdXBfbG9jaygpIGluIHRoZSBmcmVlemVyLnN0YXRlIHdyaXRlIG1ldGhvZCBwcmV2ZW50cworICogYSB3cml0ZSB0byB0aGF0IGZpbGUgcmFjaW5nIGFnYWluc3QgYW4gYXR0YWNoLCBhbmQgaGVuY2UgdGhlCisgKiBjYW5fYXR0YWNoKCkgcmVzdWx0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBhdHRhY2ggY29tcGxldGVzLgorICovCitzdGF0aWMgaW50IGZyZWV6ZXJfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkgICAgICBzdHJ1Y3QgY2dyb3VwICpuZXdfY2dyb3VwLAorCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWludCByZXR2YWw7CisKKwkvKiBBbnl0aGluZyBmcm96ZW4gY2FuJ3QgbW92ZSBvciBiZSBtb3ZlZCB0by9mcm9tICovCisKKwlpZiAoaXNfdGFza19mcm96ZW5fZW5vdWdoKHRhc2spKQorCQlyZXR1cm4gLUVCVVNZOworCisJZnJlZXplciA9IGNncm91cF9mcmVlemVyKG5ld19jZ3JvdXApOworCWlmIChmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dmFsID0gMDsKKwl0YXNrX2xvY2sodGFzayk7CisJZnJlZXplciA9IHRhc2tfZnJlZXplcih0YXNrKTsKKwlpZiAoZnJlZXplci0+c3RhdGUgPT0gQ0dST1VQX0ZST1pFTikKKwkJcmV0dmFsID0gLUVCVVNZOworCXRhc2tfdW5sb2NrKHRhc2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWV6ZXJfZm9yayhzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKworCXRhc2tfbG9jayh0YXNrKTsKKwlmcmVlemVyID0gdGFza19mcmVlemVyKHRhc2spOworCXRhc2tfdW5sb2NrKHRhc2spOworCisJQlVHX09OKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUk9aRU4pOworCXNwaW5fbG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCS8qIExvY2tpbmcgYXZvaWRzIHJhY2Ugd2l0aCBGUkVFWklORyAtPiBUSEFXRUQgdHJhbnNpdGlvbnMuICovCisJaWYgKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUkVFWklORykKKwkJZnJlZXplX3Rhc2sodGFzaywgdHJ1ZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKK30KKworLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgZnJlZXplci0+bG9jaworICovCitzdGF0aWMgdm9pZCB1cGRhdGVfZnJlZXplcl9zdGF0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsCisJCQkJIHN0cnVjdCBmcmVlemVyICpmcmVlemVyKQoreworCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJdW5zaWduZWQgaW50IG5mcm96ZW4gPSAwLCBudG90YWwgPSAwOworCisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dyb3VwLCAmaXQpOworCXdoaWxlICgodGFzayA9IGNncm91cF9pdGVyX25leHQoY2dyb3VwLCAmaXQpKSkgeworCQludG90YWwrKzsKKwkJaWYgKGlzX3Rhc2tfZnJvemVuX2Vub3VnaCh0YXNrKSkKKwkJCW5mcm96ZW4rKzsKKwl9CisKKwkvKgorCSAqIFRyYW5zaXRpb24gdG8gRlJPWkVOIHdoZW4gbm8gbmV3IHRhc2tzIGNhbiBiZSBhZGRlZCBlbnN1cmVzCisJICogdGhhdCB3ZSBuZXZlciBleGlzdCBpbiB0aGUgRlJPWkVOIHN0YXRlIHdoaWxlIHRoZXJlIGFyZSB1bmZyb3plbgorCSAqIHRhc2tzLgorCSAqLworCWlmIChuZnJvemVuID09IG50b3RhbCkKKwkJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfRlJPWkVOOworCWVsc2UgaWYgKG5mcm96ZW4gPiAwKQorCQlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9GUkVFWklORzsKKwllbHNlCisJCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX1RIQVdFRDsKKwljZ3JvdXBfaXRlcl9lbmQoY2dyb3VwLCAmaXQpOworfQorCitzdGF0aWMgaW50IGZyZWV6ZXJfcmVhZChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwkJCXN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgc3RhdGU7CisKKwlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dyb3VwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmcmVlemVyID0gY2dyb3VwX2ZyZWV6ZXIoY2dyb3VwKTsKKwlzcGluX2xvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwlzdGF0ZSA9IGZyZWV6ZXItPnN0YXRlOworCWlmIChzdGF0ZSA9PSBDR1JPVVBfRlJFRVpJTkcpIHsKKwkJLyogV2UgY2hhbmdlIGZyb20gRlJFRVpJTkcgdG8gRlJPWkVOIGxhemlseSBpZiB0aGUgY2dyb3VwIHdhcworCQkgKiBvbmx5IHBhcnRpYWxseSBmcm96ZW4gd2hlbiB3ZSBleGl0dGVkIHdyaXRlLiAqLworCQl1cGRhdGVfZnJlZXplcl9zdGF0ZShjZ3JvdXAsIGZyZWV6ZXIpOworCQlzdGF0ZSA9IGZyZWV6ZXItPnN0YXRlOworCX0KKwlzcGluX3VubG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCWNncm91cF91bmxvY2soKTsKKworCXNlcV9wdXRzKG0sIGZyZWV6ZXJfc3RhdGVfc3Ryc1tzdGF0ZV0pOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV90b19mcmVlemVfY2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXIpCit7CisJc3RydWN0IGNncm91cF9pdGVyIGl0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBpbnQgbnVtX2NhbnRfZnJlZXplX25vdyA9IDA7CisKKwlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9GUkVFWklORzsKKwljZ3JvdXBfaXRlcl9zdGFydChjZ3JvdXAsICZpdCk7CisJd2hpbGUgKCh0YXNrID0gY2dyb3VwX2l0ZXJfbmV4dChjZ3JvdXAsICZpdCkpKSB7CisJCWlmICghZnJlZXplX3Rhc2sodGFzaywgdHJ1ZSkpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX3Rhc2tfZnJvemVuX2Vub3VnaCh0YXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWZyZWV6aW5nKHRhc2spICYmICFmcmVlemVyX3Nob3VsZF9za2lwKHRhc2spKQorCQkJbnVtX2NhbnRfZnJlZXplX25vdysrOworCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dyb3VwLCAmaXQpOworCisJcmV0dXJuIG51bV9jYW50X2ZyZWV6ZV9ub3cgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHVuZnJlZXplX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBmcmVlemVyICpmcmVlemVyKQoreworCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwljZ3JvdXBfaXRlcl9zdGFydChjZ3JvdXAsICZpdCk7CisJd2hpbGUgKCh0YXNrID0gY2dyb3VwX2l0ZXJfbmV4dChjZ3JvdXAsICZpdCkpKSB7CisJCWludCBkb193YWtlOworCisJCXRhc2tfbG9jayh0YXNrKTsKKwkJZG9fd2FrZSA9IF9fdGhhd19wcm9jZXNzKHRhc2spOworCQl0YXNrX3VubG9jayh0YXNrKTsKKwkJaWYgKGRvX3dha2UpCisJCQl3YWtlX3VwX3Byb2Nlc3ModGFzayk7CisJfQorCWNncm91cF9pdGVyX2VuZChjZ3JvdXAsICZpdCk7CisJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnJlZXplcl9jaGFuZ2Vfc3RhdGUoc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJCWVudW0gZnJlZXplcl9zdGF0ZSBnb2FsX3N0YXRlKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWludCByZXR2YWwgPSAwOworCisJZnJlZXplciA9IGNncm91cF9mcmVlemVyKGNncm91cCk7CisJc3Bpbl9sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisJdXBkYXRlX2ZyZWV6ZXJfc3RhdGUoY2dyb3VwLCBmcmVlemVyKTsKKwlpZiAoZ29hbF9zdGF0ZSA9PSBmcmVlemVyLT5zdGF0ZSkKKwkJZ290byBvdXQ7CisJc3dpdGNoIChmcmVlemVyLT5zdGF0ZSkgeworCWNhc2UgQ0dST1VQX1RIQVdFRDoKKwkJcmV0dmFsID0gdHJ5X3RvX2ZyZWV6ZV9jZ3JvdXAoY2dyb3VwLCBmcmVlemVyKTsKKwkJYnJlYWs7CisJY2FzZSBDR1JPVVBfRlJFRVpJTkc6CisJCWlmIChnb2FsX3N0YXRlID09IENHUk9VUF9GUk9aRU4pIHsKKwkJCS8qIFVzZXJzcGFjZSBpcyByZXRyeWluZyBhZnRlcgorCQkJICogIi9iaW4vZWNobyBGUk9aRU4gPiBmcmVlemVyLnN0YXRlIiByZXR1cm5lZCAtRUJVU1kgKi8KKwkJCXJldHZhbCA9IHRyeV90b19mcmVlemVfY2dyb3VwKGNncm91cCwgZnJlZXplcik7CisJCQlicmVhazsKKwkJfQorCQkvKiBzdGF0ZSA9PSBGUkVFWklORyBhbmQgZ29hbF9zdGF0ZSA9PSBUSEFXRUQsIHNvIHVuZnJlZXplICovCisJY2FzZSBDR1JPVVBfRlJPWkVOOgorCQlyZXR2YWwgPSB1bmZyZWV6ZV9jZ3JvdXAoY2dyb3VwLCBmcmVlemVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGZyZWV6ZXJfd3JpdGUoc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwkJCSBjb25zdCBjaGFyICpidWZmZXIpCit7CisJaW50IHJldHZhbDsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgZ29hbF9zdGF0ZTsKKworCWlmIChzdHJjbXAoYnVmZmVyLCBmcmVlemVyX3N0YXRlX3N0cnNbQ0dST1VQX1RIQVdFRF0pID09IDApCisJCWdvYWxfc3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCWVsc2UgaWYgKHN0cmNtcChidWZmZXIsIGZyZWV6ZXJfc3RhdGVfc3Ryc1tDR1JPVVBfRlJPWkVOXSkgPT0gMCkKKwkJZ29hbF9zdGF0ZSA9IENHUk9VUF9GUk9aRU47CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghY2dyb3VwX2xvY2tfbGl2ZV9ncm91cChjZ3JvdXApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR2YWwgPSBmcmVlemVyX2NoYW5nZV9zdGF0ZShjZ3JvdXAsIGdvYWxfc3RhdGUpOworCWNncm91cF91bmxvY2soKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IGNmdHlwZSBmaWxlc1tdID0geworCXsKKwkJLm5hbWUgPSAic3RhdGUiLAorCQkucmVhZF9zZXFfc3RyaW5nID0gZnJlZXplcl9yZWFkLAorCQkud3JpdGVfc3RyaW5nID0gZnJlZXplcl93cml0ZSwKKwl9LAorfTsKKworc3RhdGljIGludCBmcmVlemVyX3BvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dyb3VwKQoreworCXJldHVybiBjZ3JvdXBfYWRkX2ZpbGVzKGNncm91cCwgc3MsIGZpbGVzLCBBUlJBWV9TSVpFKGZpbGVzKSk7Cit9CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGZyZWV6ZXJfc3Vic3lzID0geworCS5uYW1lCQk9ICJmcmVlemVyIiwKKwkuY3JlYXRlCQk9IGZyZWV6ZXJfY3JlYXRlLAorCS5kZXN0cm95CT0gZnJlZXplcl9kZXN0cm95LAorCS5wb3B1bGF0ZQk9IGZyZWV6ZXJfcG9wdWxhdGUsCisJLnN1YnN5c19pZAk9IGZyZWV6ZXJfc3Vic3lzX2lkLAorCS5jYW5fYXR0YWNoCT0gZnJlZXplcl9jYW5fYXR0YWNoLAorCS5hdHRhY2gJCT0gTlVMTCwKKwkuZm9yawkJPSBmcmVlemVyX2ZvcmssCisJLmV4aXQJCT0gTlVMTCwKK307CmRpZmYgLS1naXQgYS9rZXJuZWwvY29tcGF0LmMgYi9rZXJuZWwvY29tcGF0LmMKaW5kZXggMTQzOTkwZS4uOGVhZmUzZSAxMDA2NDQKLS0tIGEva2VybmVsL2NvbXBhdC5jCisrKyBiL2tlcm5lbC9jb21wYXQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0yMDgsNDkgKzIwOSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29tcGF0X2Nsb2NrX3QgY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdChjbG9ja190IHgpCit7CisJcmV0dXJuIGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY2xvY2tfdF90b19qaWZmaWVzKHgpKTsKK30KKwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfdGltZXMoc3RydWN0IGNvbXBhdF90bXMgX191c2VyICp0YnVmKQogewotCS8qCi0JICoJSW4gdGhlIFNNUCB3b3JsZCB3ZSBtaWdodCBqdXN0IGJlIHVubHVja3kgYW5kIGhhdmUgb25lIG9mCi0JICoJdGhlIHRpbWVzIGluY3JlbWVudCBhcyB3ZSB1c2UgaXQuIFNpbmNlIHRoZSB2YWx1ZSBpcyBhbgotCSAqCWF0b21pY2FsbHkgc2FmZSB0eXBlIHRoaXMgaXMganVzdCBmaW5lLiBDb25jZXB0dWFsbHkgaXRzCi0JICoJYXMgaWYgdGhlIHN5c2NhbGwgdG9vayBhbiBpbnN0YW50IGxvbmdlciB0byBvY2N1ci4KLQkgKi8KIAlpZiAodGJ1ZikgeworCQlzdHJ1Y3QgdG1zIHRtczsKIAkJc3RydWN0IGNvbXBhdF90bXMgdG1wOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCXN0aW1lID0gdHNrLT5zaWduYWwtPnN0aW1lOwotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCQkvKgotCQkgKiBXaGlsZSB3ZSBoYXZlIHRhc2tsaXN0X2xvY2sgcmVhZC1sb2NrZWQsIG5vIGR5aW5nIHRocmVhZAotCQkgKiBjYW4gYmUgdXBkYXRpbmcgY3VycmVudC0+c2lnbmFsLT5bdXNddGltZS4gIEluc3RlYWQsCi0JCSAqIHdlIGdvdCB0aGVpciBjb3VudHMgaW5jbHVkZWQgaW4gdGhlIGxpdmUgdGhyZWFkIGxvb3AuCi0JCSAqIEhvd2V2ZXIsIGFub3RoZXIgdGhyZWFkIGNhbiBjb21lIGluIHJpZ2h0IG5vdyBhbmQKLQkJICogZG8gYSB3YWl0IGNhbGwgdGhhdCB1cGRhdGVzIGN1cnJlbnQtPnNpZ25hbC0+Y1t1c110aW1lLgotCQkgKiBUbyBtYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGF0IHBhaXIgdXBkYXRlZCBhdG9taWNhbGx5LAotCQkgKiB3ZSB0YWtlIHRoZSBzaWdsb2NrIGFyb3VuZCBmZXRjaGluZyB0aGVtLgotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3V0aW1lID0gdHNrLT5zaWduYWwtPmN1dGltZTsKLQkJY3N0aW1lID0gdHNrLT5zaWduYWwtPmNzdGltZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkJdG1wLnRtc191dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKHV0aW1lKSk7Ci0JCXRtcC50bXNfc3RpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyhzdGltZSkpOwotCQl0bXAudG1zX2N1dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGN1dGltZSkpOwotCQl0bXAudG1zX2NzdGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGNzdGltZSkpOworCQlkb19zeXNfdGltZXMoJnRtcyk7CisJCS8qIENvbnZlcnQgb3VyIHN0cnVjdCB0bXMgdG8gdGhlIGNvbXBhdCB2ZXJzaW9uLiAqLworCQl0bXAudG1zX3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX3V0aW1lKTsKKwkJdG1wLnRtc19zdGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc19zdGltZSk7CisJCXRtcC50bXNfY3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2N1dGltZSk7CisJCXRtcC50bXNfY3N0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2NzdGltZSk7CiAJCWlmIChjb3B5X3RvX3VzZXIodGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbmZpZ3MuYyBiL2tlcm5lbC9jb25maWdzLmMKaW5kZXggNGMzNDUyMS4uYWJhZWU2OCAxMDA2NDQKLS0tIGEva2VybmVsL2NvbmZpZ3MuYworKysgYi9rZXJuZWwvY29uZmlncy5jCkBAIC01NCw5ICs1NCw2IEBACiAKICNpZmRlZiBDT05GSUdfSUtDT05GSUdfUFJPQwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBnbG9iYWxzIGFuZCB1c2VmdWwgY29uc3RhbnRzICAgICAgICAgICAgICAgICAgICovCi0KIHN0YXRpYyBzc2l6ZV90CiBpa2NvbmZpZ19yZWFkX2N1cnJlbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqIG9mZnNldCkKQEAgLTcxLDkgKzY4LDYgQEAKIAkucmVhZCA9IGlrY29uZmlnX3JlYWRfY3VycmVudCwKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19pbml0OiBzdGFydCB1cCBldmVyeXRoaW5nIHdlIG5lZWQgdG8gKi8KLQogc3RhdGljIGludCBfX2luaXQgaWtjb25maWdfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CkBAIC04OSw5ICs4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19jbGVhbnVwOiBjbGVhbiB1cCBvdXIgbWVzcyAgICAgICAgICAgKi8KLQogc3RhdGljIHZvaWQgX19leGl0IGlrY29uZmlnX2NsZWFudXAodm9pZCkKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiY29uZmlnLmd6IiwgTlVMTCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZWFiN2JkNjYuLjNlMDA1MjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTExNzIsNyArMTE3Miw3IEBACiB7CiAJc3RydWN0IGNwdXNldCB0cmlhbGNzOwogCWludCBlcnI7Ci0JaW50IGNwdXNfbm9uZW1wdHksIGJhbGFuY2VfZmxhZ19jaGFuZ2VkOworCWludCBiYWxhbmNlX2ZsYWdfY2hhbmdlZDsKIAogCXRyaWFsY3MgPSAqY3M7CiAJaWYgKHR1cm5pbmdfb24pCkBAIC0xMTg0LDcgKzExODQsNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY3B1c19ub25lbXB0eSA9ICFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKTsKIAliYWxhbmNlX2ZsYWdfY2hhbmdlZCA9IChpc19zY2hlZF9sb2FkX2JhbGFuY2UoY3MpICE9CiAJCSAJCQlpc19zY2hlZF9sb2FkX2JhbGFuY2UoJnRyaWFsY3MpKTsKIApAQCAtMTE5Miw3ICsxMTkxLDcgQEAKIAljcy0+ZmxhZ3MgPSB0cmlhbGNzLmZsYWdzOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCi0JaWYgKGNwdXNfbm9uZW1wdHkgJiYgYmFsYW5jZV9mbGFnX2NoYW5nZWQpCisJaWYgKCFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKSAmJiBiYWxhbmNlX2ZsYWdfY2hhbmdlZCkKIAkJYXN5bmNfcmVidWlsZF9zY2hlZF9kb21haW5zKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI0MzcsMTkgKzI0MzYsMTUgQEAKIHZvaWQgY3B1c2V0X3Rhc2tfc3RhdHVzX2FsbG93ZWQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkOlx0Iik7Ci0JbS0+Y291bnQgKz0gY3B1bWFza19zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+Y3B1c19hbGxvd2VkKTsKKwlzZXFfY3B1bWFzayhtLCAmdGFzay0+Y3B1c19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogCXNlcV9wcmludGYobSwgIkNwdXNfYWxsb3dlZF9saXN0Olx0Iik7Ci0JbS0+Y291bnQgKz0gY3B1bGlzdF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+Y3B1c19hbGxvd2VkKTsKKwlzZXFfY3B1bWFza19saXN0KG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiTWVtc19hbGxvd2VkOlx0Iik7Ci0JbS0+Y291bnQgKz0gbm9kZW1hc2tfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCi0JCQkJCXRhc2stPm1lbXNfYWxsb3dlZCk7CisJc2VxX25vZGVtYXNrKG0sICZ0YXNrLT5tZW1zX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiTWVtc19hbGxvd2VkX2xpc3Q6XHQiKTsKLQltLT5jb3VudCArPSBub2RlbGlzdF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+bWVtc19hbGxvd2VkKTsKKwlzZXFfbm9kZW1hc2tfbGlzdChtLCAmdGFzay0+bWVtc19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggMGVmNDY3My4uODAxMzdhNSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTExMiw4ICsxMTMsNiBAQAogCQkgKiBXZSB3b24ndCBldmVyIGdldCBoZXJlIGZvciB0aGUgZ3JvdXAgbGVhZGVyLCBzaW5jZSBpdAogCQkgKiB3aWxsIGhhdmUgYmVlbiB0aGUgbGFzdCByZWZlcmVuY2Ugb24gdGhlIHNpZ25hbF9zdHJ1Y3QuCiAJCSAqLwotCQlzaWctPnV0aW1lID0gY3B1dGltZV9hZGQoc2lnLT51dGltZSwgdGFza191dGltZSh0c2spKTsKLQkJc2lnLT5zdGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+c3RpbWUsIHRhc2tfc3RpbWUodHNrKSk7CiAJCXNpZy0+Z3RpbWUgPSBjcHV0aW1lX2FkZChzaWctPmd0aW1lLCB0YXNrX2d0aW1lKHRzaykpOwogCQlzaWctPm1pbl9mbHQgKz0gdHNrLT5taW5fZmx0OwogCQlzaWctPm1hal9mbHQgKz0gdHNrLT5tYWpfZmx0OwpAQCAtMTIyLDcgKzEyMSw2IEBACiAJCXNpZy0+aW5ibG9jayArPSB0YXNrX2lvX2dldF9pbmJsb2NrKHRzayk7CiAJCXNpZy0+b3VibG9jayArPSB0YXNrX2lvX2dldF9vdWJsb2NrKHRzayk7CiAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnNpZy0+aW9hYywgJnRzay0+aW9hYyk7Ci0JCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgKz0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCQlzaWcgPSBOVUxMOyAvKiBNYXJrZXIgZm9yIGJlbG93LiAqLwogCX0KIApAQCAtMTQ5LDcgKzE0NywxMCBAQAogCiBzdGF0aWMgdm9pZCBkZWxheWVkX3B1dF90YXNrX3N0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKnJocCkKIHsKLQlwdXRfdGFza19zdHJ1Y3QoY29udGFpbmVyX29mKHJocCwgc3RydWN0IHRhc2tfc3RydWN0LCByY3UpKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcmN1KTsKKworCXRyYWNlX3NjaGVkX3Byb2Nlc3NfZnJlZSh0c2spOworCXB1dF90YXNrX3N0cnVjdCh0c2spOwogfQogCiAKQEAgLTEwNzMsNiArMTA3NCw4IEBACiAKIAlpZiAoZ3JvdXBfZGVhZCkKIAkJYWNjdF9wcm9jZXNzKCk7CisJdHJhY2Vfc2NoZWRfcHJvY2Vzc19leGl0KHRzayk7CisKIAlleGl0X3NlbSh0c2spOwogCWV4aXRfZmlsZXModHNrKTsKIAlleGl0X2ZzKHRzayk7CkBAIC0xMzAxLDYgKzEzMDQsNyBAQAogCWlmIChsaWtlbHkoIXRyYWNlZCkpIHsKIAkJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnBzaWc7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAogCQkvKgogCQkgKiBUaGUgcmVzb3VyY2UgY291bnRlcnMgZm9yIHRoZSBncm91cCBsZWFkZXIgYXJlIGluIGl0cwpAQCAtMTMxNiwyMCArMTMyMCwyMyBAQAogCQkgKiBuZWVkIHRvIHByb3RlY3QgdGhlIGFjY2VzcyB0byBwLT5wYXJlbnQtPnNpZ25hbCBmaWVsZHMsCiAJCSAqIGFzIG90aGVyIHRocmVhZHMgaW4gdGhlIHBhcmVudCBncm91cCBjYW4gYmUgcmlnaHQKIAkJICogaGVyZSByZWFwaW5nIG90aGVyIGNoaWxkcmVuIGF0IHRoZSBzYW1lIHRpbWUuCisJCSAqCisJCSAqIFdlIHVzZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSgpIHRvIGdldCB0aW1lcyBmb3IgdGhlIHRocmVhZAorCQkgKiBncm91cCwgd2hpY2ggY29uc29saWRhdGVzIHRpbWVzIGZvciBhbGwgdGhyZWFkcyBpbiB0aGUKKwkJICogZ3JvdXAgaW5jbHVkaW5nIHRoZSBncm91cCBsZWFkZXIuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxKCZwLT5wYXJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQlwc2lnID0gcC0+cGFyZW50LT5zaWduYWw7CiAJCXNpZyA9IHAtPnNpZ25hbDsKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOwogCQlwc2lnLT5jdXRpbWUgPQogCQkJY3B1dGltZV9hZGQocHNpZy0+Y3V0aW1lLAotCQkJY3B1dGltZV9hZGQocC0+dXRpbWUsCi0JCQljcHV0aW1lX2FkZChzaWctPnV0aW1lLAotCQkJCSAgICBzaWctPmN1dGltZSkpKTsKKwkJCWNwdXRpbWVfYWRkKGNwdXRpbWUudXRpbWUsCisJCQkJICAgIHNpZy0+Y3V0aW1lKSk7CiAJCXBzaWctPmNzdGltZSA9CiAJCQljcHV0aW1lX2FkZChwc2lnLT5jc3RpbWUsCi0JCQljcHV0aW1lX2FkZChwLT5zdGltZSwKLQkJCWNwdXRpbWVfYWRkKHNpZy0+c3RpbWUsCi0JCQkJICAgIHNpZy0+Y3N0aW1lKSkpOworCQkJY3B1dGltZV9hZGQoY3B1dGltZS5zdGltZSwKKwkJCQkgICAgc2lnLT5jc3RpbWUpKTsKIAkJcHNpZy0+Y2d0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmNndGltZSwKIAkJCWNwdXRpbWVfYWRkKHAtPmd0aW1lLApAQCAtMTY3NCw2ICsxNjgxLDggQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlpbnQgcmV0dmFsOwogCisJdHJhY2Vfc2NoZWRfcHJvY2Vzc193YWl0KHBpZCk7CisKIAlhZGRfd2FpdF9xdWV1ZSgmY3VycmVudC0+c2lnbmFsLT53YWl0X2NobGRleGl0LCZ3YWl0KTsKIHJlcGVhdDoKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMzdiM2UxNS4uZjYwODM1NiAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC03NTksMTUgKzc2MCw0NCBAQAogCQlrbWVtX2NhY2hlX2ZyZWUoc2lnaGFuZF9jYWNoZXAsIHNpZ2hhbmQpOwogfQogCisKKy8qCisgKiBJbml0aWFsaXplIFBPU0lYIHRpbWVyIGhhbmRsaW5nIGZvciBhIHRocmVhZCBncm91cC4KKyAqLworc3RhdGljIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19pbml0X2dyb3VwKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCit7CisJLyogVGhyZWFkIGdyb3VwIGNvdW50ZXJzLiAqLworCXRocmVhZF9ncm91cF9jcHV0aW1lX2luaXQoc2lnKTsKKworCS8qIEV4cGlyYXRpb24gdGltZXMgYW5kIGluY3JlbWVudHMuICovCisJc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdF92aXJ0X2luY3IgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdF9wcm9mX2luY3IgPSBjcHV0aW1lX3plcm87CisKKwkvKiBDYWNoZWQgZXhwaXJhdGlvbiB0aW1lcy4gKi8KKwlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IGNwdXRpbWVfemVybzsKKwlzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IGNwdXRpbWVfemVybzsKKwlzaWctPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSAwOworCisJLyogVGhlIHRpbWVyIGxpc3RzLiAqLworCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMF0pOworCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMV0pOworCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMl0pOworfQorCiBzdGF0aWMgaW50IGNvcHlfc2lnbmFsKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CiAJaW50IHJldDsKIAogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkgewotCQlhdG9taWNfaW5jKCZjdXJyZW50LT5zaWduYWwtPmNvdW50KTsKLQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5saXZlKTsKLQkJcmV0dXJuIDA7CisJCXJldCA9IHRocmVhZF9ncm91cF9jcHV0aW1lX2Nsb25lX3RocmVhZChjdXJyZW50KTsKKwkJaWYgKGxpa2VseSghcmV0KSkgeworCQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5jb3VudCk7CisJCQlhdG9taWNfaW5jKCZjdXJyZW50LT5zaWduYWwtPmxpdmUpOworCQl9CisJCXJldHVybiByZXQ7CiAJfQogCXNpZyA9IGttZW1fY2FjaGVfYWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJdHNrLT5zaWduYWwgPSBzaWc7CkBAIC03OTUsNDAgKzgyNSwyNSBAQAogCXNpZy0+aXRfcmVhbF9pbmNyLnR2NjQgPSAwOwogCXNpZy0+cmVhbF90aW1lci5mdW5jdGlvbiA9IGl0X3JlYWxfZm47CiAKLQlzaWctPml0X3ZpcnRfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0X3ZpcnRfaW5jciA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0X3Byb2ZfaW5jciA9IGNwdXRpbWVfemVybzsKLQogCXNpZy0+bGVhZGVyID0gMDsJLyogc2Vzc2lvbiBsZWFkZXJzaGlwIGRvZXNuJ3QgaW5oZXJpdCAqLwogCXNpZy0+dHR5X29sZF9wZ3JwID0gTlVMTDsKIAlzaWctPnR0eSA9IE5VTEw7CiAKLQlzaWctPnV0aW1lID0gc2lnLT5zdGltZSA9IHNpZy0+Y3V0aW1lID0gc2lnLT5jc3RpbWUgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jdXRpbWUgPSBzaWctPmNzdGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPmd0aW1lID0gY3B1dGltZV96ZXJvOwogCXNpZy0+Y2d0aW1lID0gY3B1dGltZV96ZXJvOwogCXNpZy0+bnZjc3cgPSBzaWctPm5pdmNzdyA9IHNpZy0+Y252Y3N3ID0gc2lnLT5jbml2Y3N3ID0gMDsKIAlzaWctPm1pbl9mbHQgPSBzaWctPm1hal9mbHQgPSBzaWctPmNtaW5fZmx0ID0gc2lnLT5jbWFqX2ZsdCA9IDA7CiAJc2lnLT5pbmJsb2NrID0gc2lnLT5vdWJsb2NrID0gc2lnLT5jaW5ibG9jayA9IHNpZy0+Y291YmxvY2sgPSAwOwogCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KCZzaWctPmlvYWMpOwotCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMF0pOwotCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMV0pOwotCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMl0pOwogCXRhc2tzdGF0c190Z2lkX2luaXQoc2lnKTsKIAogCXRhc2tfbG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwogCW1lbWNweShzaWctPnJsaW0sIGN1cnJlbnQtPnNpZ25hbC0+cmxpbSwgc2l6ZW9mIHNpZy0+cmxpbSk7CiAJdGFza191bmxvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAotCWlmIChzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgewotCQkvKgotCQkgKiBOZXcgc29sZSB0aHJlYWQgaW4gdGhlIHByb2Nlc3MgZ2V0cyBhbiBleHBpcnkgdGltZQotCQkgKiBvZiB0aGUgd2hvbGUgQ1BVIHRpbWUgbGltaXQuCi0JCSAqLwotCQl0c2stPml0X3Byb2ZfZXhwaXJlcyA9Ci0JCQlzZWNzX3RvX2NwdXRpbWUoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKLQl9CisJcG9zaXhfY3B1X3RpbWVyc19pbml0X2dyb3VwKHNpZyk7CisKIAlhY2N0X2luaXRfcGFjY3QoJnNpZy0+cGFjY3QpOwogCiAJdHR5X2F1ZGl0X2Zvcmsoc2lnKTsKQEAgLTgzOCw2ICs4NTMsNyBAQAogCiB2b2lkIF9fY2xlYW51cF9zaWduYWwoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKIHsKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZV9mcmVlKHNpZyk7CiAJZXhpdF90aHJlYWRfZ3JvdXBfa2V5cyhzaWcpOwogCXR0eV9rcmVmX3B1dChzaWctPnR0eSk7CiAJa21lbV9jYWNoZV9mcmVlKHNpZ25hbF9jYWNoZXAsIHNpZyk7CkBAIC04ODgsNiArOTA0LDE5IEBACiAjZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCiAKIC8qCisgKiBJbml0aWFsaXplIFBPU0lYIHRpbWVyIGhhbmRsaW5nIGZvciBhIHNpbmdsZSB0YXNrLgorICovCitzdGF0aWMgdm9pZCBwb3NpeF9jcHVfdGltZXJzX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmdHNrLT5jcHVfdGltZXJzWzBdKTsKKwlJTklUX0xJU1RfSEVBRCgmdHNrLT5jcHVfdGltZXJzWzFdKTsKKwlJTklUX0xJU1RfSEVBRCgmdHNrLT5jcHVfdGltZXJzWzJdKTsKK30KKworLyoKICAqIFRoaXMgY3JlYXRlcyBhIG5ldyBwcm9jZXNzIGFzIGEgY29weSBvZiB0aGUgb2xkIG9uZSwKICAqIGJ1dCBkb2VzIG5vdCBhY3R1YWxseSBzdGFydCBpdCB5ZXQuCiAgKgpAQCAtOTk5LDEyICsxMDI4LDcgQEAKIAl0YXNrX2lvX2FjY291bnRpbmdfaW5pdCgmcC0+aW9hYyk7CiAJYWNjdF9jbGVhcl9pbnRlZ3JhbHMocCk7CiAKLQlwLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0JcC0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXAtPml0X3NjaGVkX2V4cGlyZXMgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzBdKTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1sxXSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMl0pOworCXBvc2l4X2NwdV90aW1lcnNfaW5pdChwKTsKIAogCXAtPmxvY2tfZGVwdGggPSAtMTsJCS8qIC0xID0gbm8gbG9jayAqLwogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZwLT5zdGFydF90aW1lKTsKQEAgLTEyMDUsMjEgKzEyMjksNiBAQAogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkgewogCQlwLT5ncm91cF9sZWFkZXIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7CiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50aHJlYWRfZ3JvdXAsICZwLT5ncm91cF9sZWFkZXItPnRocmVhZF9ncm91cCk7Ci0KLQkJaWYgKCFjcHV0aW1lX2VxKGN1cnJlbnQtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAotCQkJCWNwdXRpbWVfemVybykgfHwKLQkJICAgICFjcHV0aW1lX2VxKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLAotCQkJCWNwdXRpbWVfemVybykgfHwKLQkJICAgIGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZIHx8Ci0JCSAgICAhbGlzdF9lbXB0eSgmY3VycmVudC0+c2lnbmFsLT5jcHVfdGltZXJzWzBdKSB8fAotCQkgICAgIWxpc3RfZW1wdHkoJmN1cnJlbnQtPnNpZ25hbC0+Y3B1X3RpbWVyc1sxXSkgfHwKLQkJICAgICFsaXN0X2VtcHR5KCZjdXJyZW50LT5zaWduYWwtPmNwdV90aW1lcnNbMl0pKSB7Ci0JCQkvKgotCQkJICogSGF2ZSBjaGlsZCB3YWtlIHVwIG9uIGl0cyBmaXJzdCB0aWNrIHRvIGNoZWNrCi0JCQkgKiBmb3IgcHJvY2VzcyBDUFUgdGltZXJzLgotCQkJICovCi0JCQlwLT5pdF9wcm9mX2V4cGlyZXMgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7Ci0JCX0KIAl9CiAKIAlpZiAobGlrZWx5KHAtPnBpZCkpIHsKQEAgLTEzNjYsNiArMTM3NSw4IEBACiAJaWYgKCFJU19FUlIocCkpIHsKIAkJc3RydWN0IGNvbXBsZXRpb24gdmZvcms7CiAKKwkJdHJhY2Vfc2NoZWRfcHJvY2Vzc19mb3JrKGN1cnJlbnQsIHApOworCiAJCW5yID0gdGFza19waWRfdm5yKHApOwogCiAJCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1BBUkVOVF9TRVRUSUQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyNDhiCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2ZyZWV6ZXIuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIGtlcm5lbC9mcmVlemVyLmMgLSBGdW5jdGlvbiB0byBmcmVlemUgYSBwcm9jZXNzCisgKgorICogT3JpZ2luYWxseSBmcm9tIGtlcm5lbC9wb3dlci9wcm9jZXNzLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisvKgorICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKK3sKKwlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKKwkJd21iKCk7CisJfQorCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOworfQorCisvKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KK3ZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCit7CisJLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCisJICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KKwlsb25nIHNhdmU7CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7CisJCWZyb3plbl9wcm9jZXNzKCk7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCX0gZWxzZSB7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCQlyZXR1cm47CisJfQorCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKKwlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmICghZnJvemVuKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlKCk7CisJfQorCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7CisJX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKK30KK0VYUE9SVF9TWU1CT0wocmVmcmlnZXJhdG9yKTsKKworc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJc2lnbmFsX3dha2VfdXAocCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKKyAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KKyAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCisgKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0CisgKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcworICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKKyAqCisgKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKKyAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgorICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCisgKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cworICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KKyAqLworYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpCit7CisJLyoKKwkgKiBXZSBmaXJzdCBjaGVjayBpZiB0aGUgdGFzayBpcyBmcmVlemluZyBhbmQgbmV4dCBpZiBpdCBoYXMgYWxyZWFkeQorCSAqIGJlZW4gZnJvemVuIHRvIGF2b2lkIHRoZSByYWNlIHdpdGggZnJvemVuX3Byb2Nlc3MoKSB3aGljaCBmaXJzdCBtYXJrcworCSAqIHRoZSB0YXNrIGFzIGZyb3plbiBhbmQgbmV4dCBjbGVhcnMgaXRzIFRJRl9GUkVFWkUuCisJICovCisJaWYgKCFmcmVlemluZyhwKSkgeworCQlybWIoKTsKKwkJaWYgKGZyb3plbihwKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoIXNpZ19vbmx5IHx8IHNob3VsZF9zZW5kX3NpZ25hbChwKSkKKwkJCXNldF9mcmVlemVfZmxhZyhwKTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzaG91bGRfc2VuZF9zaWduYWwocCkpIHsKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhwKSkKKwkJCWZha2Vfc2lnbmFsX3dha2VfdXAocCk7CisJfSBlbHNlIGlmIChzaWdfb25seSkgeworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJd2FrZV91cF9zdGF0ZShwLCBUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKworCXJldHVybiB0cnVlOworfQorCit2b2lkIGNhbmNlbF9mcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChmcmVlemluZyhwKSkgeworCQlwcl9kZWJ1ZygiICBjbGVhbiB1cDogJXNcbiIsIHAtPmNvbW0pOworCQljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UocCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBXYWtlIHVwIGEgZnJvemVuIHByb2Nlc3MKKyAqCisgKiB0YXNrX2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQorICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKKyAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KKyAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQorICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KKyAqLworaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAoZnJvemVuKHApKSB7CisJCXAtPmZsYWdzICY9IH5QRl9GUk9aRU47CisJCXJldHVybiAxOworCX0KKwljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdGFza19sb2NrKHApOworCWlmIChfX3RoYXdfcHJvY2VzcyhwKSA9PSAxKSB7CisJCXRhc2tfdW5sb2NrKHApOworCQl3YWtlX3VwX3Byb2Nlc3MocCk7CisJCXJldHVybiAxOworCX0KKwl0YXNrX3VubG9jayhwKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGhhd19wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDRmYzQxNDEuLjJiNDY1ZGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTQ2MSw5ICsxNDYxLDcgQEAKIAkJaWYgKCFiYXNlLT5maXJzdCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChiYXNlLT5nZXRfc29mdGlycV90aW1lKQotCQkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOwotCQllbHNlIGlmIChnZXR0aW1lKSB7CisJCWlmIChnZXR0aW1lKSB7CiAJCQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOwogCQkJZ2V0dGltZSA9IDA7CiAJCX0KQEAgLTE3NTIsOSArMTc1MCwxMSBAQAogCW5ld19iYXNlID0gJmdldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJdGlja19jYW5jZWxfc2NoZWRfdGltZXIoY3B1KTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7CkBAIC0xNzY3LDggKzE3NjcsNyBAQAogCQlyYWlzZSA9IDE7CiAKIAlzcGluX3VubG9jaygmb2xkX2Jhc2UtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+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+aXRfaW50ZXJ2YWwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCBhZWYyNjUzLi5hYzBmZGU3IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEzNzEsNiArMTM3Miw3IEBACiAJVk1DT1JFSU5GT19TWU1CT0wobm9kZV9vbmxpbmVfbWFwKTsKIAlWTUNPUkVJTkZPX1NZTUJPTChzd2FwcGVyX3BnX2Rpcik7CiAJVk1DT1JFSU5GT19TWU1CT0woX3N0ZXh0KTsKKwlWTUNPUkVJTkZPX1NZTUJPTCh2bWxpc3QpOwogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAJVk1DT1JFSU5GT19TWU1CT0wobWVtX21hcCk7CkBAIC0xNDA2LDYgKzE0MDgsNyBAQAogCVZNQ09SRUlORk9fT0ZGU0VUKGZyZWVfYXJlYSwgZnJlZV9saXN0KTsKIAlWTUNPUkVJTkZPX09GRlNFVChsaXN0X2hlYWQsIG5leHQpOwogCVZNQ09SRUlORk9fT0ZGU0VUKGxpc3RfaGVhZCwgcHJldik7CisJVk1DT1JFSU5GT19PRkZTRVQodm1fc3RydWN0LCBhZGRyKTsKIAlWTUNPUkVJTkZPX0xFTkdUSCh6b25lLmZyZWVfYXJlYSwgTUFYX09SREVSKTsKIAlWTUNPUkVJTkZPX0xFTkdUSChmcmVlX2FyZWEuZnJlZV9saXN0LCBNSUdSQVRFX1RZUEVTKTsKIAlWTUNPUkVJTkZPX05VTUJFUihOUl9GUkVFX1BBR0VTKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDk2Y2ZmMmYuLjhlN2E3Y2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNkZWZpbmUgS1RIUkVBRF9OSUNFX0xFVkVMICgtNSkKIApAQCAtMTcxLDEyICsxNzIsMTEgQEAKICAqLwogdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICprLCB1bnNpZ25lZCBpbnQgY3B1KQogewotCWlmIChrLT5zdGF0ZSAhPSBUQVNLX1VOSU5URVJSVVBUSUJMRSkgeworCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KKwlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KLQkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCi0Jd2FpdF90YXNrX2luYWN0aXZlKGssIDApOwogCXNldF90YXNrX2NwdShrLCBjcHUpOwogCWstPmNwdXNfYWxsb3dlZCA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAJay0+cnQubnJfY3B1c19hbGxvd2VkID0gMTsKQEAgLTIwNiw2ICsyMDYsOCBAQAogCS8qIEl0IGNvdWxkIGV4aXQgYWZ0ZXIgc3RvcF9pbmZvLmsgc2V0LCBidXQgYmVmb3JlIHdha2VfdXBfcHJvY2Vzcy4gKi8KIAlnZXRfdGFza19zdHJ1Y3Qoayk7CiAKKwl0cmFjZV9zY2hlZF9rdGhyZWFkX3N0b3Aoayk7CisKIAkvKiBNdXN0IGluaXQgY29tcGxldGlvbiAqYmVmb3JlKiB0aHJlYWQgc2VlcyBrdGhyZWFkX3N0b3BfaW5mby5rICovCiAJaW5pdF9jb21wbGV0aW9uKCZrdGhyZWFkX3N0b3BfaW5mby5kb25lKTsKIAlzbXBfd21iKCk7CkBAIC0yMjEsNiArMjIzLDggQEAKIAlyZXQgPSBrdGhyZWFkX3N0b3BfaW5mby5lcnI7CiAJbXV0ZXhfdW5sb2NrKCZrdGhyZWFkX3N0b3BfbG9jayk7CiAKKwl0cmFjZV9zY2hlZF9rdGhyZWFkX3N0b3BfcmV0KHJldCk7CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChrdGhyZWFkX3N0b3ApOwpkaWZmIC0tZ2l0IGEva2VybmVsL21hcmtlci5jIGIva2VybmVsL21hcmtlci5jCmluZGV4IDdkMWZhZWMuLmU5YzZiMmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tYXJrZXIuYworKysgYi9rZXJuZWwvbWFya2VyLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAlpbnQgcmVmY291bnQ7CS8qIE51bWJlciBvZiB0aW1lcyBhcm1lZC4gMCBpZiBkaXNhcm1lZC4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXZvaWQgKm9sZHB0cjsKLQl1bnNpZ25lZCBjaGFyIHJjdV9wZW5kaW5nOjE7CisJaW50IHJjdV9wZW5kaW5nOwogCXVuc2lnbmVkIGNoYXIgcHR5cGU6MTsKIAljaGFyIG5hbWVbMF07CS8qIENvbnRhaW5zIG5hbWUnXDAnZm9ybWF0J1wwJyAqLwogfTsKQEAgLTEwMywxMSArMTAzLDExIEBACiAJY2hhciBwdHlwZTsKIAogCS8qCi0JICogcHJlZW1wdF9kaXNhYmxlIGRvZXMgdHdvIHRoaW5ncyA6IGRpc2FibGluZyBwcmVlbXB0aW9uIHRvIG1ha2Ugc3VyZQotCSAqIHRoZSB0ZWFyZG93biBvZiB0aGUgY2FsbGJhY2tzIGNhbiBiZSBkb25lIGNvcnJlY3RseSB3aGVuIHRoZXkgYXJlIGluCi0JICogbW9kdWxlcyBhbmQgdGhleSBpbnN1cmUgUkNVIHJlYWQgY29oZXJlbmN5LgorCSAqIHJjdV9yZWFkX2xvY2tfc2NoZWQgZG9lcyB0d28gdGhpbmdzIDogZGlzYWJsaW5nIHByZWVtcHRpb24gdG8gbWFrZQorCSAqIHN1cmUgdGhlIHRlYXJkb3duIG9mIHRoZSBjYWxsYmFja3MgY2FuIGJlIGRvbmUgY29ycmVjdGx5IHdoZW4gdGhleQorCSAqIGFyZSBpbiBtb2R1bGVzIGFuZCB0aGV5IGluc3VyZSBSQ1UgcmVhZCBjb2hlcmVuY3kuCiAJICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJcmN1X3JlYWRfbG9ja19zY2hlZCgpOwogCXB0eXBlID0gbWRhdGEtPnB0eXBlOwogCWlmIChsaWtlbHkoIXB0eXBlKSkgewogCQltYXJrZXJfcHJvYmVfZnVuYyAqZnVuYzsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJdmFfZW5kKGFyZ3MpOwogCQl9CiAJfQotCXByZWVtcHRfZW5hYmxlKCk7CisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfcHJvYmVfY2IpOwogCkBAIC0xNjIsNyArMTYyLDcgQEAKIAl2YV9saXN0IGFyZ3M7CS8qIG5vdCBpbml0aWFsaXplZCAqLwogCWNoYXIgcHR5cGU7CiAKLQlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyY3VfcmVhZF9sb2NrX3NjaGVkKCk7CiAJcHR5cGUgPSBtZGF0YS0+cHR5cGU7CiAJaWYgKGxpa2VseSghcHR5cGUpKSB7CiAJCW1hcmtlcl9wcm9iZV9mdW5jICpmdW5jOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCQltdWx0aVtpXS5mdW5jKG11bHRpW2ldLnByb2JlX3ByaXZhdGUsIGNhbGxfcHJpdmF0ZSwKIAkJCQltZGF0YS0+Zm9ybWF0LCAmYXJncyk7CiAJfQotCXByZWVtcHRfZW5hYmxlKCk7CisJcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfcHJvYmVfY2Jfbm9hcmcpOwogCkBAIC01NjAsNyArNTYwLDcgQEAKICAqIERpc2FibGUgYSBtYXJrZXIgYW5kIGl0cyBwcm9iZSBjYWxsYmFjay4KICAqIE5vdGU6IG9ubHkgd2FpdGluZyBhbiBSQ1UgcGVyaW9kIGFmdGVyIHNldHRpbmcgZWxlbS0+Y2FsbCB0byB0aGUgZW1wdHkKICAqIGZ1bmN0aW9uIGluc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgaXMgbm90IHVzZWQgYW55bW9yZS4gVGhpcyBpbnN1cmVkCi0gKiBieSBwcmVlbXB0X2Rpc2FibGUgYXJvdW5kIHRoZSBjYWxsIHNpdGUuCisgKiBieSByY3VfcmVhZF9sb2NrX3NjaGVkIGFyb3VuZCB0aGUgY2FsbCBzaXRlLgogICovCiBzdGF0aWMgdm9pZCBkaXNhYmxlX21hcmtlcihzdHJ1Y3QgbWFya2VyICplbGVtKQogewpAQCAtNjUzLDExICs2NTMsMTcgQEAKIAllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7CiAJaWYgKCFlbnRyeSkgewogCQllbnRyeSA9IGFkZF9tYXJrZXIobmFtZSwgZm9ybWF0KTsKLQkJaWYgKElTX0VSUihlbnRyeSkpIHsKKwkJaWYgKElTX0VSUihlbnRyeSkpCiAJCQlyZXQgPSBQVFJfRVJSKGVudHJ5KTsKLQkJCWdvdG8gZW5kOwotCQl9CisJfSBlbHNlIGlmIChmb3JtYXQpIHsKKwkJaWYgKCFlbnRyeS0+Zm9ybWF0KQorCQkJcmV0ID0gbWFya2VyX3NldF9mb3JtYXQoJmVudHJ5LCBmb3JtYXQpOworCQllbHNlIGlmIChzdHJjbXAoZW50cnktPmZvcm1hdCwgZm9ybWF0KSkKKwkJCXJldCA9IC1FUEVSTTsKIAl9CisJaWYgKHJldCkKKwkJZ290byBlbmQ7CisKIAkvKgogCSAqIElmIHdlIGRldGVjdCB0aGF0IGEgY2FsbF9yY3UgaXMgcGVuZGluZyBmb3IgdGhpcyBtYXJrZXIsCiAJICogbWFrZSBzdXJlIGl0J3MgZXhlY3V0ZWQgbm93LgpAQCAtNjc0LDYgKzY4MCw4IEBACiAJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CiAJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwogCVdBUk5fT04oIWVudHJ5KTsKKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOwogCWVudHJ5LT5vbGRwdHIgPSBvbGQ7CiAJZW50cnktPnJjdV9wZW5kaW5nID0gMTsKIAkvKiB3cml0ZSByY3VfcGVuZGluZyBiZWZvcmUgY2FsbGluZyB0aGUgUkNVIGNhbGxiYWNrICovCkBAIC03MTcsNiArNzI1LDggQEAKIAllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7CiAJaWYgKCFlbnRyeSkKIAkJZ290byBlbmQ7CisJaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKIAllbnRyeS0+b2xkcHRyID0gb2xkOwogCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7CiAJLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwpAQCAtNzk1LDYgKzgwNSw4IEBACiAJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CiAJZW50cnkgPSBnZXRfbWFya2VyX2Zyb21fcHJpdmF0ZV9kYXRhKHByb2JlLCBwcm9iZV9wcml2YXRlKTsKIAlXQVJOX09OKCFlbnRyeSk7CisJaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKIAllbnRyeS0+b2xkcHRyID0gb2xkOwogCWVudHJ5LT5yY3VfcGVuZGluZyA9IDE7CiAJLyogd3JpdGUgcmN1X3BlbmRpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIFJDVSBjYWxsYmFjayAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IGI3MjA1ZjYuLjBkOGQyMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTQ2LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpY2Vuc2UuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKQEAgLTE0MzAsNiArMTQzMiw5IEBACiAJLyogTW9kdWxlIHVubG9hZCBzdHVmZiAqLwogCW1vZHVsZV91bmxvYWRfZnJlZShtb2QpOwogCisJLyogcmVsZWFzZSBhbnkgcG9pbnRlcnMgdG8gbWNvdW50IGluIHRoaXMgbW9kdWxlICovCisJZnRyYWNlX3JlbGVhc2UobW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpOworCiAJLyogVGhpcyBtYXkgYmUgTlVMTCwgYnV0IHRoYXQncyBPSyAqLwogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CiAJa2ZyZWUobW9kLT5hcmdzKTsKQEAgLTE4MzQsNiArMTgzOSw3IEBACiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAljaGFyICpzZWNzdHJpbmdzLCAqYXJncywgKm1vZG1hZ2ljLCAqc3RydGFiID0gTlVMTDsKKwljaGFyICpzdGFnaW5nOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBzeW1pbmRleCA9IDA7CiAJdW5zaWduZWQgaW50IHN0cmluZGV4ID0gMDsKQEAgLTE4NjAsOSArMTg2NiwxMyBAQAogCXVuc2lnbmVkIGludCBtYXJrZXJzaW5kZXg7CiAJdW5zaWduZWQgaW50IG1hcmtlcnNzdHJpbmdzaW5kZXg7CiAJdW5zaWduZWQgaW50IHZlcmJvc2VpbmRleDsKKwl1bnNpZ25lZCBpbnQgdHJhY2Vwb2ludHNpbmRleDsKKwl1bnNpZ25lZCBpbnQgdHJhY2Vwb2ludHNzdHJpbmdzaW5kZXg7CisJdW5zaWduZWQgaW50IG1jb3VudGluZGV4OwogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlsb25nIGVyciA9IDA7CiAJdm9pZCAqcGVyY3B1ID0gTlVMTCwgKnB0ciA9IE5VTEw7IC8qIFN0b3BzIHNwdXJpb3VzIGdjYyB3YXJuaW5nICovCisJdm9pZCAqbXNlZzsKIAlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleHRhYmxlOwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAKQEAgLTE5ODksNiArMTk5OSwxNCBAQAogCQlnb3RvIGZyZWVfaGRyOwogCX0KIAorCXN0YWdpbmcgPSBnZXRfbW9kaW5mbyhzZWNoZHJzLCBpbmZvaW5kZXgsICJzdGFnaW5nIik7CisJaWYgKHN0YWdpbmcpIHsKKwkJYWRkX3RhaW50X21vZHVsZShtb2QsIFRBSU5UX0NSQVApOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbW9kdWxlIGlzIGZyb20gdGhlIHN0YWdpbmcgZGlyZWN0b3J5LCIKKwkJICAgICAgICIgdGhlIHF1YWxpdHkgaXMgdW5rbm93biwgeW91IGhhdmUgYmVlbiB3YXJuZWQuXG4iLAorCQkgICAgICAgbW9kLT5uYW1lKTsKKwl9CisKIAkvKiBOb3cgY29weSBpbiBhcmdzICovCiAJYXJncyA9IHN0cm5kdXBfdXNlcih1YXJncywgfjBVTCA+PiAxKTsKIAlpZiAoSVNfRVJSKGFyZ3MpKSB7CkBAIC0yMTQ3LDYgKzIxNjUsMTIgQEAKICAJbWFya2Vyc3N0cmluZ3NpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKIAkJCQkJIl9fbWFya2Vyc19zdHJpbmdzIik7CiAJdmVyYm9zZWluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIik7CisJdHJhY2Vwb2ludHNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fdHJhY2Vwb2ludHMiKTsKKwl0cmFjZXBvaW50c3N0cmluZ3NpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKKwkJCQkJIl9fdHJhY2Vwb2ludHNfc3RyaW5ncyIpOworCisJbWNvdW50aW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCisJCQkgICAgICAgIl9fbWNvdW50X2xvYyIpOwogCiAJLyogTm93IGRvIHJlbG9jYXRpb25zLiAqLwogCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewpAQCAtMjE3NCw2ICsyMTk4LDEyIEBACiAJbW9kLT5udW1fbWFya2VycyA9CiAJCXNlY2hkcnNbbWFya2Vyc2luZGV4XS5zaF9zaXplIC8gc2l6ZW9mKCptb2QtPm1hcmtlcnMpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCisJbW9kLT50cmFjZXBvaW50cyA9ICh2b2lkICopc2VjaGRyc1t0cmFjZXBvaW50c2luZGV4XS5zaF9hZGRyOworCW1vZC0+bnVtX3RyYWNlcG9pbnRzID0KKwkJc2VjaGRyc1t0cmFjZXBvaW50c2luZGV4XS5zaF9zaXplIC8gc2l6ZW9mKCptb2QtPnRyYWNlcG9pbnRzKTsKKyNlbmRpZgorCiAKICAgICAgICAgLyogRmluZCBkdXBsaWNhdGUgc3ltYm9scyAqLwogCWVyciA9IHZlcmlmeV9leHBvcnRfc3ltYm9scyhtb2QpOwpAQCAtMjE5MiwxMiArMjIyMiwyMiBAQAogCiAJYWRkX2thbGxzeW1zKG1vZCwgc2VjaGRycywgc3ltaW5kZXgsIHN0cmluZGV4LCBzZWNzdHJpbmdzKTsKIAorCWlmICghbW9kLT50YWludHMpIHsKICNpZmRlZiBDT05GSUdfTUFSS0VSUwotCWlmICghbW9kLT50YWludHMpCiAJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAogCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2Vycyk7CiAjZW5kaWYKIAlkeW5hbWljX3ByaW50a19zZXR1cChzZWNoZHJzLCB2ZXJib3NlaW5kZXgpOworI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAorCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKyNlbmRpZgorCX0KKworCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLworCW1zZWcgPSAodm9pZCAqKXNlY2hkcnNbbWNvdW50aW5kZXhdLnNoX2FkZHI7CisJZnRyYWNlX2luaXRfbW9kdWxlKG1zZWcsIG1zZWcgKyBzZWNoZHJzW21jb3VudGluZGV4XS5zaF9zaXplKTsKKwogCWVyciA9IG1vZHVsZV9maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1vZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gY2xlYW51cDsKQEAgLTIyNjcsNiArMjMwNyw3IEBACiAgY2xlYW51cDoKIAlrb2JqZWN0X2RlbCgmbW9kLT5ta29iai5rb2JqKTsKIAlrb2JqZWN0X3B1dCgmbW9kLT5ta29iai5rb2JqKTsKKwlmdHJhY2VfcmVsZWFzZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CiAgZnJlZV91bmxvYWQ6CiAJbW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKQEAgLTI1ODcsNiArMjYyOCw4IEBACiAJCQlidWZbYngrK10gPSAnUCc7CiAJCWlmIChtb2QtPnRhaW50cyAmICgxIDw8IFRBSU5UX0ZPUkNFRF9NT0RVTEUpKQogCQkJYnVmW2J4KytdID0gJ0YnOworCQlpZiAobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9DUkFQKSkKKwkJCWJ1ZltieCsrXSA9ICdDJzsKIAkJLyoKIAkJICogVEFJTlRfRk9SQ0VEX1JNTU9EOiBjb3VsZCBiZSBhZGRlZC4KIAkJICogVEFJTlRfVU5TQUZFX1NNUCwgVEFJTlRfTUFDSElORV9DSEVDSywgVEFJTlRfQkFEX1BBR0UgZG9uJ3QKQEAgLTI3NDgsMyArMjc5MSw1MCBAQAogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIH0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCit2b2lkIG1vZHVsZV91cGRhdGVfdHJhY2Vwb2ludHModm9pZCkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkKKwkJaWYgKCFtb2QtPnRhaW50cykKKwkJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHMsCisJCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKwltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIDAgaWYgY3VycmVudCBub3QgZm91bmQuCisgKiBSZXR1cm5zIDEgaWYgY3VycmVudCBmb3VuZC4KKyAqLworaW50IG1vZHVsZV9nZXRfaXRlcl90cmFjZXBvaW50cyhzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKQoreworCXN0cnVjdCBtb2R1bGUgKml0ZXJfbW9kOworCWludCBmb3VuZCA9IDA7CisKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcl9tb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJCWlmICghaXRlcl9tb2QtPnRhaW50cykgeworCQkJLyoKKwkJCSAqIFNvcnRlZCBtb2R1bGUgbGlzdAorCQkJICovCisJCQlpZiAoaXRlcl9tb2QgPCBpdGVyLT5tb2R1bGUpCisJCQkJY29udGludWU7CisJCQllbHNlIGlmIChpdGVyX21vZCA+IGl0ZXItPm1vZHVsZSkKKwkJCQlpdGVyLT50cmFjZXBvaW50ID0gTlVMTDsKKwkJCWZvdW5kID0gdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZSgmaXRlci0+dHJhY2Vwb2ludCwKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHMsCisJCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzCisJCQkJCSsgaXRlcl9tb2QtPm51bV90cmFjZXBvaW50cyk7CisJCQlpZiAoZm91bmQpIHsKKwkJCQlpdGVyLT5tb2R1bGUgPSBpdGVyX21vZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CisJcmV0dXJuIGZvdW5kOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvbm90aWZpZXIuYyBiL2tlcm5lbC9ub3RpZmllci5jCmluZGV4IDgyM2JlMTE1Li40MjgyYzBhIDEwMDY0NAotLS0gYS9rZXJuZWwvbm90aWZpZXIuYworKysgYi9rZXJuZWwvbm90aWZpZXIuYwpAQCAtNTUwLDcgKzU1MCw3IEBACiAKIHN0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChkaWVfY2hhaW4pOwogCi1pbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjb25zdCBjaGFyICpzdHIsCitpbnQgbm90cmFjZSBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKIAkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKIHsKIAlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggZjI5MGU4ZS4uYmRhNTYxZSAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTE2MSw2ICsxNjEsNyBAQAogCXsgVEFJTlRfRElFLCAnRCcsICcgJyB9LAogCXsgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFLCAnQScsICcgJyB9LAogCXsgVEFJTlRfV0FSTiwgJ1cnLCAnICcgfSwKKwl7IFRBSU5UX0NSQVAsICdDJywgJyAnIH0sCiB9OwogCiAvKioKQEAgLTE3NSw2ICsxNzYsNyBAQAogICogICdVJyAtIFVzZXJzcGFjZS1kZWZpbmVkIG5hdWdodGluZXNzLgogICogICdBJyAtIEFDUEkgdGFibGUgb3ZlcnJpZGRlbi4KICAqICAnVycgLSBUYWludCBvbiB3YXJuaW5nLgorICogICdDJyAtIG1vZHVsZXMgZnJvbSBkcml2ZXJzL3N0YWdpbmcgYXJlIGxvYWRlZC4KICAqCiAgKglUaGUgc3RyaW5nIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGNhbGwgdG8gcHJpbnRfdGFpbnQoKS4KICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggYzQyYTAzYS4uMTUzZGNiMiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC03LDYgKzcsOTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKworLyoKKyAqIEFsbG9jYXRlIHRoZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSBzdHJ1Y3R1cmUgYXBwcm9wcmlhdGVseSBhbmQgZmlsbCBpbiB0aGUKKyAqIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBmaWVsZHMuICBDYWxsZWQgZnJvbSBjb3B5X3NpZ25hbCgpIHZpYQorICogdGhyZWFkX2dyb3VwX2NwdXRpbWVfY2xvbmVfdGhyZWFkKCkgd2hlbiBhZGRpbmcgYSBzZWNvbmQgb3Igc3Vic2VxdWVudAorICogdGhyZWFkIHRvIGEgdGhyZWFkIGdyb3VwLiAgQXNzdW1lcyBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIHdoZW4gY2FsbGVkLgorICovCitpbnQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IHRzay0+c2lnbmFsOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgKmNwdXRpbWU7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBhbmQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEKKwkgKiBwZXItQ1BVIHRhc2tfY3B1dGltZSBzdHJ1Y3QgKGNoZWNrZWQgaW4gdGhlIGNhbGxlciksIGFsbG9jYXRlCisJICogb25lIGFuZCBmaWxsIGl0IGluIHdpdGggdGhlIHRpbWVzIGFjY3VtdWxhdGVkIHNvIGZhci4gIFdlIG1heQorCSAqIHJhY2Ugd2l0aCBhbm90aGVyIHRocmVhZCBzbyByZWNoZWNrIGFmdGVyIHdlIHBpY2sgdXAgdGhlIHNpZ2hhbmQKKwkgKiBsb2NrLgorCSAqLworCWNwdXRpbWUgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRhc2tfY3B1dGltZSk7CisJaWYgKGNwdXRpbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJCWZyZWVfcGVyY3B1KGNwdXRpbWUpOworCQlyZXR1cm4gMDsKKwl9CisJc2lnLT5jcHV0aW1lLnRvdGFscyA9IGNwdXRpbWU7CisJY3B1dGltZSA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJY3B1dGltZS0+dXRpbWUgPSB0c2stPnV0aW1lOworCWNwdXRpbWUtPnN0aW1lID0gdHNrLT5zdGltZTsKKwljcHV0aW1lLT5zdW1fZXhlY19ydW50aW1lID0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lOworCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0aHJlYWRfZ3JvdXBfY3B1dGltZSAtIFN1bSB0aGUgdGhyZWFkIGdyb3VwIHRpbWUgZmllbGRzIGFjcm9zcyBhbGwgQ1BVcy4KKyAqCisgKiBAdHNrOglUaGUgdGFzayB3ZSB1c2UgdG8gaWRlbnRpZnkgdGhlIHRocmVhZCBncm91cC4KKyAqIEB0aW1lczoJdGFza19jcHV0aW1lIHN0cnVjdHVyZSBpbiB3aGljaCB3ZSByZXR1cm4gdGhlIHN1bW1lZCBmaWVsZHMuCisgKgorICogV2FsayB0aGUgbGlzdCBvZiBDUFVzIHRvIHN1bSB0aGUgcGVyLUNQVSB0aW1lIGZpZWxkcyBpbiB0aGUgdGhyZWFkIGdyb3VwCisgKiB0aW1lIHN0cnVjdHVyZS4KKyAqLwordm9pZCB0aHJlYWRfZ3JvdXBfY3B1dGltZSgKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lcykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCWludCBpOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRvdDsKKworCXNpZyA9IHRzay0+c2lnbmFsOworCWlmICh1bmxpa2VseSghc2lnKSB8fCAhc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQl0aW1lcy0+dXRpbWUgPSB0c2stPnV0aW1lOworCQl0aW1lcy0+c3RpbWUgPSB0c2stPnN0aW1lOworCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSA9IHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwkJcmV0dXJuOworCX0KKwl0aW1lcy0+c3RpbWUgPSB0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX3plcm87CisJdGltZXMtPnN1bV9leGVjX3J1bnRpbWUgPSAwOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXRvdCA9IHBlcl9jcHVfcHRyKHRzay0+c2lnbmFsLT5jcHV0aW1lLnRvdGFscywgaSk7CisJCXRpbWVzLT51dGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT51dGltZSwgdG90LT51dGltZSk7CisJCXRpbWVzLT5zdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT5zdGltZSwgdG90LT5zdGltZSk7CisJCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lICs9IHRvdC0+c3VtX2V4ZWNfcnVudGltZTsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgdXBkYXRpbmcgUkxJTUlUX0NQVSB0byBzZXQgdGltZXIgZXhwaXJhdGlvbiBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQgdXBkYXRlX3JsaW1pdF9jcHUodW5zaWduZWQgbG9uZyBybGltX25ldykKK3sKKwljcHV0aW1lX3QgY3B1dGltZTsKKworCWNwdXRpbWUgPSBzZWNzX3RvX2NwdXRpbWUocmxpbV9uZXcpOworCWlmIChjcHV0aW1lX2VxKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CisJICAgIGNwdXRpbWVfbHQoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsIGNwdXRpbWUpKSB7CisJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCQlzZXRfcHJvY2Vzc19jcHVfdGltZXIoY3VycmVudCwgQ1BVQ0xPQ0tfUFJPRiwgJmNwdXRpbWUsIE5VTEwpOworCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCX0KK30KIAogc3RhdGljIGludCBjaGVja19jbG9jayhjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2spCiB7CkBAIC0xNTgsMTAgKzI0NSw2IEBACiB7CiAJcmV0dXJuIHAtPnV0aW1lOwogfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfbnMoc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCXJldHVybiB0YXNrX3NjaGVkX3J1bnRpbWUocCk7Ci19CiAKIGludCBwb3NpeF9jcHVfY2xvY2tfZ2V0cmVzKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICp0cCkKIHsKQEAgLTIxMSw0NiArMjk0LDcgQEAKIAkJY3B1LT5jcHUgPSB2aXJ0X3RpY2tzKHApOwogCQlicmVhazsKIAljYXNlIENQVUNMT0NLX1NDSEVEOgotCQljcHUtPnNjaGVkID0gc2NoZWRfbnMocCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNhbXBsZSBhIHByb2Nlc3MgKHRocmVhZCBncm91cCkgY2xvY2sgZm9yIHRoZSBnaXZlbiBncm91cF9sZWFkZXIgdGFzay4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGZvciByZWFkaW5nLgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXNrbGlzdF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIGFuZCBwLT5zaWdoYW5kLT5zaWdsb2NrLgotICovCi1zdGF0aWMgaW50IGNwdV9jbG9ja19zYW1wbGVfZ3JvdXBfbG9ja2VkKHVuc2lnbmVkIGludCBjbG9ja19pZHgsCi0JCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkJCSB1bmlvbiBjcHVfdGltZV9jb3VudCAqY3B1KQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHA7Ci0gCXN3aXRjaCAoY2xvY2tfaWR4KSB7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBDUFVDTE9DS19QUk9GOgotCQljcHUtPmNwdSA9IGNwdXRpbWVfYWRkKHAtPnNpZ25hbC0+dXRpbWUsIHAtPnNpZ25hbC0+c3RpbWUpOwotCQlkbyB7Ci0JCQljcHUtPmNwdSA9IGNwdXRpbWVfYWRkKGNwdS0+Y3B1LCBwcm9mX3RpY2tzKHQpKTsKLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19WSVJUOgotCQljcHUtPmNwdSA9IHAtPnNpZ25hbC0+dXRpbWU7Ci0JCWRvIHsKLQkJCWNwdS0+Y3B1ID0gY3B1dGltZV9hZGQoY3B1LT5jcHUsIHZpcnRfdGlja3ModCkpOwotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1NDSEVEOgotCQljcHUtPnNjaGVkID0gcC0+c2lnbmFsLT5zdW1fc2NoZWRfcnVudGltZTsKLQkJLyogQWRkIGluIGVhY2ggb3RoZXIgbGl2ZSB0aHJlYWQuICAqLwotCQl3aGlsZSAoKHQgPSBuZXh0X3RocmVhZCh0KSkgIT0gcCkgewotCQkJY3B1LT5zY2hlZCArPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lOwotCQl9Ci0JCWNwdS0+c2NoZWQgKz0gc2NoZWRfbnMocCk7CisJCWNwdS0+c2NoZWQgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lICsgdGFza19kZWx0YV9leGVjKHApOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNjQsMTMgKzMwOCwyMyBAQAogCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCSAgdW5pb24gY3B1X3RpbWVfY291bnQgKmNwdSkKIHsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBjcHVfY2xvY2tfc2FtcGxlX2dyb3VwX2xvY2tlZChDUFVDTE9DS19XSElDSCh3aGljaF9jbG9jayksIHAsCi0JCQkJCSAgICBjcHUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKworCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwlzd2l0Y2ggKHdoaWNoX2Nsb2NrKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBDUFVDTE9DS19QUk9GOgorCQljcHUtPmNwdSA9IGNwdXRpbWVfYWRkKGNwdXRpbWUudXRpbWUsIGNwdXRpbWUuc3RpbWUpOworCQlicmVhazsKKwljYXNlIENQVUNMT0NLX1ZJUlQ6CisJCWNwdS0+Y3B1ID0gY3B1dGltZS51dGltZTsKKwkJYnJlYWs7CisJY2FzZSBDUFVDTE9DS19TQ0hFRDoKKwkJY3B1LT5zY2hlZCA9IGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZSArIHRhc2tfZGVsdGFfZXhlYyhwKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOwogfQogCiAKQEAgLTQ3MSw4MCArNTI1LDExIEBACiB9CiB2b2lkIHBvc2l4X2NwdV90aW1lcnNfZXhpdF9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZjcHV0aW1lKTsKIAljbGVhbnVwX3RpbWVycyh0c2stPnNpZ25hbC0+Y3B1X3RpbWVycywKLQkJICAgICAgIGNwdXRpbWVfYWRkKHRzay0+dXRpbWUsIHRzay0+c2lnbmFsLT51dGltZSksCi0JCSAgICAgICBjcHV0aW1lX2FkZCh0c2stPnN0aW1lLCB0c2stPnNpZ25hbC0+c3RpbWUpLAotCQkgICAgIHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZSArIHRzay0+c2lnbmFsLT5zdW1fc2NoZWRfcnVudGltZSk7Ci19Ci0KLQotLyoKLSAqIFNldCB0aGUgZXhwaXJ5IHRpbWVzIG9mIGFsbCB0aGUgdGhyZWFkcyBpbiB0aGUgcHJvY2VzcyBzbyBvbmUgb2YgdGhlbQotICogd2lsbCBnbyBvZmYgYmVmb3JlIHRoZSBwcm9jZXNzIGN1bXVsYXRpdmUgZXhwaXJ5IHRvdGFsIGlzIHJlYWNoZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHByb2Nlc3NfdGltZXJfcmViYWxhbmNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNsb2NrX2lkeCwKLQkJCQkgICAgdW5pb24gY3B1X3RpbWVfY291bnQgZXhwaXJlcywKLQkJCQkgICAgdW5pb24gY3B1X3RpbWVfY291bnQgdmFsKQotewotCWNwdXRpbWVfdCB0aWNrcywgbGVmdDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbnMsIG5zbGVmdDsKLSAJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gcDsKLQl1bnNpZ25lZCBpbnQgbnRocmVhZHMgPSBhdG9taWNfcmVhZCgmcC0+c2lnbmFsLT5saXZlKTsKLQotCWlmICghbnRocmVhZHMpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoY2xvY2tfaWR4KSB7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJbGVmdCA9IGNwdXRpbWVfZGl2X25vbl96ZXJvKGNwdXRpbWVfc3ViKGV4cGlyZXMuY3B1LCB2YWwuY3B1KSwKLQkJCQkgICAgICAgbnRocmVhZHMpOwotCQlkbyB7Ci0JCQlpZiAobGlrZWx5KCEodC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkpIHsKLQkJCQl0aWNrcyA9IGNwdXRpbWVfYWRkKHByb2ZfdGlja3ModCksIGxlZnQpOwotCQkJCWlmIChjcHV0aW1lX2VxKHQtPml0X3Byb2ZfZXhwaXJlcywKLQkJCQkJICAgICAgIGNwdXRpbWVfemVybykgfHwKLQkJCQkgICAgY3B1dGltZV9ndCh0LT5pdF9wcm9mX2V4cGlyZXMsIHRpY2tzKSkgewotCQkJCQl0LT5pdF9wcm9mX2V4cGlyZXMgPSB0aWNrczsKLQkJCQl9Ci0JCQl9Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKLQkJbGVmdCA9IGNwdXRpbWVfZGl2X25vbl96ZXJvKGNwdXRpbWVfc3ViKGV4cGlyZXMuY3B1LCB2YWwuY3B1KSwKLQkJCQkgICAgICAgbnRocmVhZHMpOwotCQlkbyB7Ci0JCQlpZiAobGlrZWx5KCEodC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkpIHsKLQkJCQl0aWNrcyA9IGNwdXRpbWVfYWRkKHZpcnRfdGlja3ModCksIGxlZnQpOwotCQkJCWlmIChjcHV0aW1lX2VxKHQtPml0X3ZpcnRfZXhwaXJlcywKLQkJCQkJICAgICAgIGNwdXRpbWVfemVybykgfHwKLQkJCQkgICAgY3B1dGltZV9ndCh0LT5pdF92aXJ0X2V4cGlyZXMsIHRpY2tzKSkgewotCQkJCQl0LT5pdF92aXJ0X2V4cGlyZXMgPSB0aWNrczsKLQkJCQl9Ci0JCQl9Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCW5zbGVmdCA9IGV4cGlyZXMuc2NoZWQgLSB2YWwuc2NoZWQ7Ci0JCWRvX2Rpdihuc2xlZnQsIG50aHJlYWRzKTsKLQkJbnNsZWZ0ID0gbWF4X3QodW5zaWduZWQgbG9uZyBsb25nLCBuc2xlZnQsIDEpOwotCQlkbyB7Ci0JCQlpZiAobGlrZWx5KCEodC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkpIHsKLQkJCQlucyA9IHQtPnNlLnN1bV9leGVjX3J1bnRpbWUgKyBuc2xlZnQ7Ci0JCQkJaWYgKHQtPml0X3NjaGVkX2V4cGlyZXMgPT0gMCB8fAotCQkJCSAgICB0LT5pdF9zY2hlZF9leHBpcmVzID4gbnMpIHsKLQkJCQkJdC0+aXRfc2NoZWRfZXhwaXJlcyA9IG5zOwotCQkJCX0KLQkJCX0KLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSBwKTsKLQkJYnJlYWs7Ci0JfQorCQkgICAgICAgY3B1dGltZS51dGltZSwgY3B1dGltZS5zdGltZSwgY3B1dGltZS5zdW1fZXhlY19ydW50aW1lKTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYXJfZGVhZF90YXNrKHN0cnVjdCBrX2l0aW1lciAqdGltZXIsIHVuaW9uIGNwdV90aW1lX2NvdW50IG5vdykKQEAgLTYwOCwyOSArNTkzLDMyIEBACiAJCQlkZWZhdWx0OgogCQkJCUJVRygpOwogCQkJY2FzZSBDUFVDTE9DS19QUk9GOgotCQkJCWlmIChjcHV0aW1lX2VxKHAtPml0X3Byb2ZfZXhwaXJlcywKKwkJCQlpZiAoY3B1dGltZV9lcShwLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAsCiAJCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QocC0+aXRfcHJvZl9leHBpcmVzLAorCQkJCSAgICBjcHV0aW1lX2d0KHAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCwKIAkJCQkJICAgICAgIG50LT5leHBpcmVzLmNwdSkpCi0JCQkJCXAtPml0X3Byb2ZfZXhwaXJlcyA9IG50LT5leHBpcmVzLmNwdTsKKwkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0KKwkJCQkJCW50LT5leHBpcmVzLmNwdTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKLQkJCQlpZiAoY3B1dGltZV9lcShwLT5pdF92aXJ0X2V4cGlyZXMsCisJCQkJaWYgKGNwdXRpbWVfZXEocC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLAogCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHAtPml0X3ZpcnRfZXhwaXJlcywKKwkJCQkgICAgY3B1dGltZV9ndChwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAsCiAJCQkJCSAgICAgICBudC0+ZXhwaXJlcy5jcHUpKQotCQkJCQlwLT5pdF92aXJ0X2V4cGlyZXMgPSBudC0+ZXhwaXJlcy5jcHU7CisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9CisJCQkJCQludC0+ZXhwaXJlcy5jcHU7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENQVUNMT0NLX1NDSEVEOgotCQkJCWlmIChwLT5pdF9zY2hlZF9leHBpcmVzID09IDAgfHwKLQkJCQkgICAgcC0+aXRfc2NoZWRfZXhwaXJlcyA+IG50LT5leHBpcmVzLnNjaGVkKQotCQkJCQlwLT5pdF9zY2hlZF9leHBpcmVzID0gbnQtPmV4cGlyZXMuc2NoZWQ7CisJCQkJaWYgKHAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPT0gMCB8fAorCQkJCSAgICBwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID4KKwkJCQkJCQludC0+ZXhwaXJlcy5zY2hlZCkKKwkJCQkJcC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9CisJCQkJCQludC0+ZXhwaXJlcy5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qCi0JCQkgKiBGb3IgYSBwcm9jZXNzIHRpbWVyLCB3ZSBtdXN0IGJhbGFuY2UKLQkJCSAqIGFsbCB0aGUgbGl2ZSB0aHJlYWRzJyBleHBpcmF0aW9ucy4KKwkJCSAqIEZvciBhIHByb2Nlc3MgdGltZXIsIHNldCB0aGUgY2FjaGVkIGV4cGlyYXRpb24gdGltZS4KIAkJCSAqLwogCQkJc3dpdGNoIChDUFVDTE9DS19XSElDSCh0aW1lci0+aXRfY2xvY2spKSB7CiAJCQlkZWZhdWx0OgpAQCAtNjQxLDcgKzYyOSw5IEBACiAJCQkJICAgIGNwdXRpbWVfbHQocC0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXMsCiAJCQkJCSAgICAgICB0aW1lci0+aXQuY3B1LmV4cGlyZXMuY3B1KSkKIAkJCQkJYnJlYWs7Ci0JCQkJZ290byByZWJhbGFuY2U7CisJCQkJcC0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPQorCQkJCQl0aW1lci0+aXQuY3B1LmV4cGlyZXMuY3B1OworCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19QUk9GOgogCQkJCWlmICghY3B1dGltZV9lcShwLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywKIAkJCQkJCWNwdXRpbWVfemVybykgJiYKQEAgLTY1MiwxMyArNjQyLDEyIEBACiAJCQkJaWYgKGkgIT0gUkxJTV9JTkZJTklUWSAmJgogCQkJCSAgICBpIDw9IGNwdXRpbWVfdG9fc2Vjcyh0aW1lci0+aXQuY3B1LmV4cGlyZXMuY3B1KSkKIAkJCQkJYnJlYWs7Ci0JCQkJZ290byByZWJhbGFuY2U7CisJCQkJcC0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPQorCQkJCQl0aW1lci0+aXQuY3B1LmV4cGlyZXMuY3B1OworCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJCXJlYmFsYW5jZToKLQkJCQlwcm9jZXNzX3RpbWVyX3JlYmFsYW5jZSgKLQkJCQkJdGltZXItPml0LmNwdS50YXNrLAotCQkJCQlDUFVDTE9DS19XSElDSCh0aW1lci0+aXRfY2xvY2spLAotCQkJCQl0aW1lci0+aXQuY3B1LmV4cGlyZXMsIG5vdyk7CisJCQkJcC0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0KKwkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLnNjaGVkOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC05NjksMTMgKzk1OCwxMyBAQAogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpjb25zdCBzaWcgPSB0c2stPnNpZ25hbDsKIAogCW1heGZpcmUgPSAyMDsKLQl0c2stPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IGNwdXRpbWVfemVybzsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewogCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKIAkJaWYgKCEtLW1heGZpcmUgfHwgY3B1dGltZV9sdChwcm9mX3RpY2tzKHRzayksIHQtPmV4cGlyZXMuY3B1KSkgewotCQkJdHNrLT5pdF9wcm9mX2V4cGlyZXMgPSB0LT5leHBpcmVzLmNwdTsKKwkJCXRzay0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gdC0+ZXhwaXJlcy5jcHU7CiAJCQlicmVhazsKIAkJfQogCQl0LT5maXJpbmcgPSAxOwpAQCAtOTg0LDEzICs5NzMsMTMgQEAKIAogCSsrdGltZXJzOwogCW1heGZpcmUgPSAyMDsKLQl0c2stPml0X3ZpcnRfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IGNwdXRpbWVfemVybzsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewogCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKIAkJaWYgKCEtLW1heGZpcmUgfHwgY3B1dGltZV9sdCh2aXJ0X3RpY2tzKHRzayksIHQtPmV4cGlyZXMuY3B1KSkgewotCQkJdHNrLT5pdF92aXJ0X2V4cGlyZXMgPSB0LT5leHBpcmVzLmNwdTsKKwkJCXRzay0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gdC0+ZXhwaXJlcy5jcHU7CiAJCQlicmVhazsKIAkJfQogCQl0LT5maXJpbmcgPSAxOwpAQCAtOTk5LDEzICs5ODgsMTMgQEAKIAogCSsrdGltZXJzOwogCW1heGZpcmUgPSAyMDsKLQl0c2stPml0X3NjaGVkX2V4cGlyZXMgPSAwOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZSA8IHQtPmV4cGlyZXMuc2NoZWQpIHsKLQkJCXRzay0+aXRfc2NoZWRfZXhwaXJlcyA9IHQtPmV4cGlyZXMuc2NoZWQ7CisJCQl0c2stPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSB0LT5leHBpcmVzLnNjaGVkOwogCQkJYnJlYWs7CiAJCX0KIAkJdC0+ZmlyaW5nID0gMTsKQEAgLTEwNTUsMTAgKzEwNDQsMTAgQEAKIHsKIAlpbnQgbWF4ZmlyZTsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqY29uc3Qgc2lnID0gdHNrLT5zaWduYWw7Ci0JY3B1dGltZV90IHV0aW1lLCBzdGltZSwgcHRpbWUsIHZpcnRfZXhwaXJlcywgcHJvZl9leHBpcmVzOworCWNwdXRpbWVfdCB1dGltZSwgcHRpbWUsIHZpcnRfZXhwaXJlcywgcHJvZl9leHBpcmVzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzdW1fc2NoZWRfcnVudGltZSwgc2NoZWRfZXhwaXJlczsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGltZXJzID0gc2lnLT5jcHVfdGltZXJzOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAogCS8qCiAJICogRG9uJ3Qgc2FtcGxlIHRoZSBjdXJyZW50IHByb2Nlc3MgQ1BVIGNsb2NrcyBpZiB0aGVyZSBhcmUgbm8gdGltZXJzLgpAQCAtMTA3NCwxOCArMTA2MywxMCBAQAogCS8qCiAJICogQ29sbGVjdCB0aGUgY3VycmVudCBwcm9jZXNzIHRvdGFscy4KIAkgKi8KLQl1dGltZSA9IHNpZy0+dXRpbWU7Ci0Jc3RpbWUgPSBzaWctPnN0aW1lOwotCXN1bV9zY2hlZF9ydW50aW1lID0gc2lnLT5zdW1fc2NoZWRfcnVudGltZTsKLQl0ID0gdHNrOwotCWRvIHsKLQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdC0+dXRpbWUpOwotCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCXN1bV9zY2hlZF9ydW50aW1lICs9IHQtPnNlLnN1bV9leGVjX3J1bnRpbWU7Ci0JCXQgPSBuZXh0X3RocmVhZCh0KTsKLQl9IHdoaWxlICh0ICE9IHRzayk7Ci0JcHRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgc3RpbWUpOwotCisJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmY3B1dGltZSk7CisJdXRpbWUgPSBjcHV0aW1lLnV0aW1lOworCXB0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIGNwdXRpbWUuc3RpbWUpOworCXN1bV9zY2hlZF9ydW50aW1lID0gY3B1dGltZS5zdW1fZXhlY19ydW50aW1lOwogCW1heGZpcmUgPSAyMDsKIAlwcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKQEAgLTExOTMsNjAgKzExNzQsMTggQEAKIAkJfQogCX0KIAotCWlmICghY3B1dGltZV9lcShwcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwKLQkgICAgIWNwdXRpbWVfZXEodmlydF9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JICAgIHNjaGVkX2V4cGlyZXMgIT0gMCkgewotCQkvKgotCQkgKiBSZWJhbGFuY2UgdGhlIHRocmVhZHMnIGV4cGlyeSB0aW1lcyBmb3IgdGhlIHJlbWFpbmluZwotCQkgKiBwcm9jZXNzIENQVSB0aW1lcnMuCi0JCSAqLwotCi0JCWNwdXRpbWVfdCBwcm9mX2xlZnQsIHZpcnRfbGVmdCwgdGlja3M7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9sZWZ0LCBzY2hlZDsKLQkJY29uc3QgdW5zaWduZWQgaW50IG50aHJlYWRzID0gYXRvbWljX3JlYWQoJnNpZy0+bGl2ZSk7Ci0KLQkJaWYgKCFudGhyZWFkcykKLQkJCXJldHVybjsKLQotCQlwcm9mX2xlZnQgPSBjcHV0aW1lX3N1Yihwcm9mX2V4cGlyZXMsIHV0aW1lKTsKLQkJcHJvZl9sZWZ0ID0gY3B1dGltZV9zdWIocHJvZl9sZWZ0LCBzdGltZSk7Ci0JCXByb2ZfbGVmdCA9IGNwdXRpbWVfZGl2X25vbl96ZXJvKHByb2ZfbGVmdCwgbnRocmVhZHMpOwotCQl2aXJ0X2xlZnQgPSBjcHV0aW1lX3N1Yih2aXJ0X2V4cGlyZXMsIHV0aW1lKTsKLQkJdmlydF9sZWZ0ID0gY3B1dGltZV9kaXZfbm9uX3plcm8odmlydF9sZWZ0LCBudGhyZWFkcyk7Ci0JCWlmIChzY2hlZF9leHBpcmVzKSB7Ci0JCQlzY2hlZF9sZWZ0ID0gc2NoZWRfZXhwaXJlcyAtIHN1bV9zY2hlZF9ydW50aW1lOwotCQkJZG9fZGl2KHNjaGVkX2xlZnQsIG50aHJlYWRzKTsKLQkJCXNjaGVkX2xlZnQgPSBtYXhfdCh1bnNpZ25lZCBsb25nIGxvbmcsIHNjaGVkX2xlZnQsIDEpOwotCQl9IGVsc2UgewotCQkJc2NoZWRfbGVmdCA9IDA7Ci0JCX0KLQkJdCA9IHRzazsKLQkJZG8gewotCQkJaWYgKHVubGlrZWx5KHQtPmZsYWdzICYgUEZfRVhJVElORykpCi0JCQkJY29udGludWU7Ci0KLQkJCXRpY2tzID0gY3B1dGltZV9hZGQoY3B1dGltZV9hZGQodC0+dXRpbWUsIHQtPnN0aW1lKSwKLQkJCQkJICAgIHByb2ZfbGVmdCk7Ci0JCQlpZiAoIWNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCi0JCQkgICAgKGNwdXRpbWVfZXEodC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JCQkgICAgIGNwdXRpbWVfZ3QodC0+aXRfcHJvZl9leHBpcmVzLCB0aWNrcykpKSB7Ci0JCQkJdC0+aXRfcHJvZl9leHBpcmVzID0gdGlja3M7Ci0JCQl9Ci0KLQkJCXRpY2tzID0gY3B1dGltZV9hZGQodC0+dXRpbWUsIHZpcnRfbGVmdCk7Ci0JCQlpZiAoIWNwdXRpbWVfZXEodmlydF9leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCi0JCQkgICAgKGNwdXRpbWVfZXEodC0+aXRfdmlydF9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JCQkgICAgIGNwdXRpbWVfZ3QodC0+aXRfdmlydF9leHBpcmVzLCB0aWNrcykpKSB7Ci0JCQkJdC0+aXRfdmlydF9leHBpcmVzID0gdGlja3M7Ci0JCQl9Ci0KLQkJCXNjaGVkID0gdC0+c2Uuc3VtX2V4ZWNfcnVudGltZSArIHNjaGVkX2xlZnQ7Ci0JCQlpZiAoc2NoZWRfZXhwaXJlcyAmJiAodC0+aXRfc2NoZWRfZXhwaXJlcyA9PSAwIHx8Ci0JCQkJCSAgICAgIHQtPml0X3NjaGVkX2V4cGlyZXMgPiBzY2hlZCkpIHsKLQkJCQl0LT5pdF9zY2hlZF9leHBpcmVzID0gc2NoZWQ7Ci0JCQl9Ci0JCX0gd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IHRzayk7Ci0JfQorCWlmICghY3B1dGltZV9lcShwcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgJiYKKwkgICAgKGNwdXRpbWVfZXEoc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAsIGNwdXRpbWVfemVybykgfHwKKwkgICAgIGNwdXRpbWVfZ3Qoc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAsIHByb2ZfZXhwaXJlcykpKQorCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IHByb2ZfZXhwaXJlczsKKwlpZiAoIWNwdXRpbWVfZXEodmlydF9leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgIChjcHV0aW1lX2VxKHNpZy0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICBjcHV0aW1lX2d0KHNpZy0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLCB2aXJ0X2V4cGlyZXMpKSkKKwkJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSB2aXJ0X2V4cGlyZXM7CisJaWYgKHNjaGVkX2V4cGlyZXMgIT0gMCAmJgorCSAgICAoc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID09IDAgfHwKKwkgICAgIHNpZy0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA+IHNjaGVkX2V4cGlyZXMpKQorCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSBzY2hlZF9leHBpcmVzOwogfQogCiAvKgpAQCAtMTMxNCw2ICsxMjUzLDg2IEBACiAJKyt0aW1lci0+aXRfcmVxdWV1ZV9wZW5kaW5nOwogfQogCisvKioKKyAqIHRhc2tfY3B1dGltZV96ZXJvIC0gQ2hlY2sgYSB0YXNrX2NwdXRpbWUgc3RydWN0IGZvciBhbGwgemVybyBmaWVsZHMuCisgKgorICogQGNwdXRpbWU6CVRoZSBzdHJ1Y3QgdG8gY29tcGFyZS4KKyAqCisgKiBDaGVja3MgQGNwdXRpbWUgdG8gc2VlIGlmIGFsbCBmaWVsZHMgYXJlIHplcm8uICBSZXR1cm5zIHRydWUgaWYgYWxsIGZpZWxkcworICogYXJlIHplcm8sIGZhbHNlIGlmIGFueSBmaWVsZCBpcyBub256ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2NwdXRpbWVfemVybyhjb25zdCBzdHJ1Y3QgdGFza19jcHV0aW1lICpjcHV0aW1lKQoreworCWlmIChjcHV0aW1lX2VxKGNwdXRpbWUtPnV0aW1lLCBjcHV0aW1lX3plcm8pICYmCisJICAgIGNwdXRpbWVfZXEoY3B1dGltZS0+c3RpbWUsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZS0+c3VtX2V4ZWNfcnVudGltZSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0YXNrX2NwdXRpbWVfZXhwaXJlZCAtIENvbXBhcmUgdHdvIHRhc2tfY3B1dGltZSBlbnRpdGllcy4KKyAqCisgKiBAc2FtcGxlOglUaGUgdGFza19jcHV0aW1lIHN0cnVjdHVyZSB0byBiZSBjaGVja2VkIGZvciBleHBpcmF0aW9uLgorICogQGV4cGlyZXM6CUV4cGlyYXRpb24gdGltZXMsIGFnYWluc3Qgd2hpY2ggQHNhbXBsZSB3aWxsIGJlIGNoZWNrZWQuCisgKgorICogQ2hlY2tzIEBzYW1wbGUgYWdhaW5zdCBAZXhwaXJlcyB0byBzZWUgaWYgYW55IGZpZWxkIG9mIEBzYW1wbGUgaGFzIGV4cGlyZWQuCisgKiBSZXR1cm5zIHRydWUgaWYgYW55IGZpZWxkIG9mIHRoZSBmb3JtZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nCisgKiBmaWVsZCBvZiB0aGUgbGF0dGVyIGlmIHRoZSBsYXR0ZXIgZmllbGQgaXMgc2V0LiAgT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfY3B1dGltZV9leHBpcmVkKGNvbnN0IHN0cnVjdCB0YXNrX2NwdXRpbWUgKnNhbXBsZSwKKwkJCQkJY29uc3Qgc3RydWN0IHRhc2tfY3B1dGltZSAqZXhwaXJlcykKK3sKKwlpZiAoIWNwdXRpbWVfZXEoZXhwaXJlcy0+dXRpbWUsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZV9nZShzYW1wbGUtPnV0aW1lLCBleHBpcmVzLT51dGltZSkpCisJCXJldHVybiAxOworCWlmICghY3B1dGltZV9lcShleHBpcmVzLT5zdGltZSwgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lX2dlKGNwdXRpbWVfYWRkKHNhbXBsZS0+dXRpbWUsIHNhbXBsZS0+c3RpbWUpLAorCQkgICAgICAgZXhwaXJlcy0+c3RpbWUpKQorCQlyZXR1cm4gMTsKKwlpZiAoZXhwaXJlcy0+c3VtX2V4ZWNfcnVudGltZSAhPSAwICYmCisJICAgIHNhbXBsZS0+c3VtX2V4ZWNfcnVudGltZSA+PSBleHBpcmVzLT5zdW1fZXhlY19ydW50aW1lKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmYXN0cGF0aF90aW1lcl9jaGVjayAtIFBPU0lYIENQVSB0aW1lcnMgZmFzdCBwYXRoLgorICoKKyAqIEB0c2s6CVRoZSB0YXNrICh0aHJlYWQpIGJlaW5nIGNoZWNrZWQuCisgKgorICogQ2hlY2sgdGhlIHRhc2sgYW5kIHRocmVhZCBncm91cCB0aW1lcnMuICBJZiBib3RoIGFyZSB6ZXJvICh0aGVyZSBhcmUgbm8KKyAqIHRpbWVycyBzZXQpIHJldHVybiBmYWxzZS4gIE90aGVyd2lzZSBzbmFwc2hvdCB0aGUgdGFzayBhbmQgdGhyZWFkIGdyb3VwCisgKiB0aW1lcnMgYW5kIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGV4cGlyYXRpb24gdGltZXMuICBSZXR1cm4KKyAqIHRydWUgaWYgYSB0aW1lciBoYXMgZXhwaXJlZCwgZWxzZSByZXR1cm4gZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZhc3RwYXRoX3RpbWVyX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stPnNpZ25hbDsKKworCWlmICh1bmxpa2VseSghc2lnKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXRhc2tfY3B1dGltZV96ZXJvKCZ0c2stPmNwdXRpbWVfZXhwaXJlcykpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSB0YXNrX3NhbXBsZSA9IHsKKwkJCS51dGltZSA9IHRzay0+dXRpbWUsCisJCQkuc3RpbWUgPSB0c2stPnN0aW1lLAorCQkJLnN1bV9leGVjX3J1bnRpbWUgPSB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWUKKwkJfTsKKworCQlpZiAodGFza19jcHV0aW1lX2V4cGlyZWQoJnRhc2tfc2FtcGxlLCAmdHNrLT5jcHV0aW1lX2V4cGlyZXMpKQorCQkJcmV0dXJuIDE7CisJfQorCWlmICghdGFza19jcHV0aW1lX3plcm8oJnNpZy0+Y3B1dGltZV9leHBpcmVzKSkgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGdyb3VwX3NhbXBsZTsKKworCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZncm91cF9zYW1wbGUpOworCQlpZiAodGFza19jcHV0aW1lX2V4cGlyZWQoJmdyb3VwX3NhbXBsZSwgJnNpZy0+Y3B1dGltZV9leHBpcmVzKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHRpbWVyIGludGVycnVwdCBoYW5kbGVyLiAgVGhlIGlycSBoYW5kbGVyIGhhcwogICogYWxyZWFkeSB1cGRhdGVkIG91ciBjb3VudHMuICBXZSBuZWVkIHRvIGNoZWNrIGlmIGFueSB0aW1lcnMgZmlyZSBub3cuCkBAIC0xMzI2LDQyICsxMzQ1LDMxIEBACiAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLSNkZWZpbmUgVU5FWFBJUkVEKGNsb2NrKSBcCi0JCShjcHV0aW1lX2VxKHRzay0+aXRfIyNjbG9jayMjX2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwgXAotCQkgY3B1dGltZV9sdChjbG9jayMjX3RpY2tzKHRzayksIHRzay0+aXRfIyNjbG9jayMjX2V4cGlyZXMpKQotCi0JaWYgKFVORVhQSVJFRChwcm9mKSAmJiBVTkVYUElSRUQodmlydCkgJiYKLQkgICAgKHRzay0+aXRfc2NoZWRfZXhwaXJlcyA9PSAwIHx8Ci0JICAgICB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWUgPCB0c2stPml0X3NjaGVkX2V4cGlyZXMpKQorCS8qCisJICogVGhlIGZhc3QgcGF0aCBjaGVja3MgdGhhdCB0aGVyZSBhcmUgbm8gZXhwaXJlZCB0aHJlYWQgb3IgdGhyZWFkCisJICogZ3JvdXAgdGltZXJzLiAgSWYgdGhhdCdzIHNvLCBqdXN0IHJldHVybi4KKwkgKi8KKwlpZiAoIWZhc3RwYXRoX3RpbWVyX2NoZWNrKHRzaykpCiAJCXJldHVybjsKIAotI3VuZGVmCVVORVhQSVJFRAorCXNwaW5fbG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkvKgorCSAqIEhlcmUgd2UgdGFrZSBvZmYgdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbTl0gYW5kCisJICogdHNrLT5jcHVfdGltZXJzW05dIGFsbCB0aGUgdGltZXJzIHRoYXQgYXJlIGZpcmluZywgYW5kCisJICogcHV0IHRoZW0gb24gdGhlIGZpcmluZyBsaXN0LgorCSAqLworCWNoZWNrX3RocmVhZF90aW1lcnModHNrLCAmZmlyaW5nKTsKKwljaGVja19wcm9jZXNzX3RpbWVycyh0c2ssICZmaXJpbmcpOwogCiAJLyoKLQkgKiBEb3VibGUtY2hlY2sgd2l0aCBsb2NrcyBoZWxkLgorCSAqIFdlIG11c3QgcmVsZWFzZSB0aGVzZSBsb2NrcyBiZWZvcmUgdGFraW5nIGFueSB0aW1lcidzIGxvY2suCisJICogVGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSB3aXRoIHRpbWVyIGRlbGV0aW9uIGhlcmUsIGFzIHRoZQorCSAqIHNpZ2xvY2sgbm93IHByb3RlY3RzIG91ciBwcml2YXRlIGZpcmluZyBsaXN0LiAgV2UgaGF2ZSBzZXQKKwkgKiB0aGUgZmlyaW5nIGZsYWcgaW4gZWFjaCB0aW1lciwgc28gdGhhdCBhIGRlbGV0aW9uIGF0dGVtcHQKKwkgKiB0aGF0IGdldHMgdGhlIHRpbWVyIGxvY2sgYmVmb3JlIHdlIGRvIHdpbGwgZ2l2ZSBpdCB1cCBhbmQKKwkgKiBzcGluIHVudGlsIHdlJ3ZlIHRha2VuIGNhcmUgb2YgdGhhdCB0aW1lciBiZWxvdy4KIAkgKi8KLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCWlmIChsaWtlbHkodHNrLT5zaWduYWwgIT0gTlVMTCkpIHsKLQkJc3Bpbl9sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JCS8qCi0JCSAqIEhlcmUgd2UgdGFrZSBvZmYgdHNrLT5jcHVfdGltZXJzW05dIGFuZCB0c2stPnNpZ25hbC0+Y3B1X3RpbWVyc1tOXQotCQkgKiBhbGwgdGhlIHRpbWVycyB0aGF0IGFyZSBmaXJpbmcsIGFuZCBwdXQgdGhlbSBvbiB0aGUgZmlyaW5nIGxpc3QuCi0JCSAqLwotCQljaGVja190aHJlYWRfdGltZXJzKHRzaywgJmZpcmluZyk7Ci0JCWNoZWNrX3Byb2Nlc3NfdGltZXJzKHRzaywgJmZpcmluZyk7Ci0KLQkJLyoKLQkJICogV2UgbXVzdCByZWxlYXNlIHRoZXNlIGxvY2tzIGJlZm9yZSB0YWtpbmcgYW55IHRpbWVyJ3MgbG9jay4KLQkJICogVGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSB3aXRoIHRpbWVyIGRlbGV0aW9uIGhlcmUsIGFzIHRoZQotCQkgKiBzaWdsb2NrIG5vdyBwcm90ZWN0cyBvdXIgcHJpdmF0ZSBmaXJpbmcgbGlzdC4gIFdlIGhhdmUgc2V0Ci0JCSAqIHRoZSBmaXJpbmcgZmxhZyBpbiBlYWNoIHRpbWVyLCBzbyB0aGF0IGEgZGVsZXRpb24gYXR0ZW1wdAotCQkgKiB0aGF0IGdldHMgdGhlIHRpbWVyIGxvY2sgYmVmb3JlIHdlIGRvIHdpbGwgZ2l2ZSBpdCB1cCBhbmQKLQkJICogc3BpbiB1bnRpbCB3ZSd2ZSB0YWtlbiBjYXJlIG9mIHRoYXQgdGltZXIgYmVsb3cuCi0JCSAqLwotCQlzcGluX3VubG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQl9Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCiAJLyoKIAkgKiBOb3cgdGhhdCBhbGwgdGhlIHRpbWVycyBvbiBvdXIgbGlzdCBoYXZlIHRoZSBmaXJpbmcgZmxhZywKQEAgLTEzODksMTAgKzEzOTcsOSBAQAogCiAvKgogICogU2V0IG9uZSBvZiB0aGUgcHJvY2Vzcy13aWRlIHNwZWNpYWwgY2FzZSBDUFUgdGltZXJzLgotICogVGhlIHRhc2tsaXN0X2xvY2sgYW5kIHRzay0+c2lnaGFuZC0+c2lnbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4KLSAqIFRoZSBvbGR2YWwgYXJndW1lbnQgaXMgbnVsbCBmb3IgdGhlIFJMSU1JVF9DUFUgdGltZXIsIHdoZXJlICpuZXd2YWwgaXMKLSAqIGFic29sdXRlOyBub24tbnVsbCBmb3IgSVRJTUVSXyosIHdoZXJlICpuZXd2YWwgaXMgcmVsYXRpdmUgYW5kIHdlIHVwZGF0ZQotICogaXQgdG8gYmUgYWJzb2x1dGUsICpvbGR2YWwgaXMgYWJzb2x1dGUgYW5kIHdlIHVwZGF0ZSBpdCB0byBiZSByZWxhdGl2ZS4KKyAqIFRoZSB0c2stPnNpZ2hhbmQtPnNpZ2xvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuCisgKiBUaGUgKm5ld3ZhbCBhcmd1bWVudCBpcyByZWxhdGl2ZSBhbmQgd2UgdXBkYXRlIGl0IHRvIGJlIGFic29sdXRlLCAqb2xkdmFsCisgKiBpcyBhYnNvbHV0ZSBhbmQgd2UgdXBkYXRlIGl0IHRvIGJlIHJlbGF0aXZlLgogICovCiB2b2lkIHNldF9wcm9jZXNzX2NwdV90aW1lcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgaW50IGNsb2NrX2lkeCwKIAkJCSAgIGNwdXRpbWVfdCAqbmV3dmFsLCBjcHV0aW1lX3QgKm9sZHZhbCkKQEAgLTE0MDEsNyArMTQwOCw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAogCUJVR19PTihjbG9ja19pZHggPT0gQ1BVQ0xPQ0tfU0NIRUQpOwotCWNwdV9jbG9ja19zYW1wbGVfZ3JvdXBfbG9ja2VkKGNsb2NrX2lkeCwgdHNrLCAmbm93KTsKKwljcHVfY2xvY2tfc2FtcGxlX2dyb3VwKGNsb2NrX2lkeCwgdHNrLCAmbm93KTsKIAogCWlmIChvbGR2YWwpIHsKIAkJaWYgKCFjcHV0aW1lX2VxKCpvbGR2YWwsIGNwdXRpbWVfemVybykpIHsKQEAgLTE0MzUsMTMgKzE0NDIsMTQgQEAKIAkgICAgY3B1dGltZV9nZShsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsCiAJCQkJICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsIGVudHJ5KS0+ZXhwaXJlcy5jcHUsCiAJCSAgICAgICAqbmV3dmFsKSkgewotCQkvKgotCQkgKiBSZWppZ2dlciBlYWNoIHRocmVhZCdzIGV4cGlyeSB0aW1lIHNvIHRoYXQgb25lIHdpbGwKLQkJICogbm90aWNlIGJlZm9yZSB3ZSBoaXQgdGhlIHByb2Nlc3MtY3VtdWxhdGl2ZSBleHBpcnkgdGltZS4KLQkJICovCi0JCXVuaW9uIGNwdV90aW1lX2NvdW50IGV4cGlyZXMgPSB7IC5zY2hlZCA9IDAgfTsKLQkJZXhwaXJlcy5jcHUgPSAqbmV3dmFsOwotCQlwcm9jZXNzX3RpbWVyX3JlYmFsYW5jZSh0c2ssIGNsb2NrX2lkeCwgZXhwaXJlcywgbm93KTsKKwkJc3dpdGNoIChjbG9ja19pZHgpIHsKKwkJY2FzZSBDUFVDTE9DS19QUk9GOgorCQkJdHNrLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9ICpuZXd2YWw7CisJCQlicmVhazsKKwkJY2FzZSBDUFVDTE9DS19WSVJUOgorCQkJdHNrLT5zaWduYWwtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9ICpuZXd2YWw7CisJCQlicmVhazsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCmluZGV4IGVlMjA0NTguLjVlNzljNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKQEAgLTIyMyw2ICsyMjMsMTUgQEAKIH0KIAogLyoKKyAqIEdldCBtb25vdG9uaWMgdGltZSBmb3IgcG9zaXggdGltZXJzCisgKi8KK3N0YXRpYyBpbnQgcG9zaXhfZ2V0X21vbm90b25pY19yYXcoY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQoreworCWdldHJhd21vbm90b25pYyh0cCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcsIHdlbGwsIGp1c3QgZXZlcnl0aGluZyBpbiBQb3NpeCBjbG9ja3MvdGltZXJzIDspCiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IGluaXRfcG9zaXhfdGltZXJzKHZvaWQpCkBAIC0yMzUsOSArMjQ0LDE1IEBACiAJCS5jbG9ja19nZXQgPSBwb3NpeF9rdGltZV9nZXRfdHMsCiAJCS5jbG9ja19zZXQgPSBkb19wb3NpeF9jbG9ja19ub3NldHRpbWUsCiAJfTsKKwlzdHJ1Y3Qga19jbG9jayBjbG9ja19tb25vdG9uaWNfcmF3ID0geworCQkuY2xvY2tfZ2V0cmVzID0gaHJ0aW1lcl9nZXRfcmVzLAorCQkuY2xvY2tfZ2V0ID0gcG9zaXhfZ2V0X21vbm90b25pY19yYXcsCisJCS5jbG9ja19zZXQgPSBkb19wb3NpeF9jbG9ja19ub3NldHRpbWUsCisJfTsKIAogCXJlZ2lzdGVyX3Bvc2l4X2Nsb2NrKENMT0NLX1JFQUxUSU1FLCAmY2xvY2tfcmVhbHRpbWUpOwogCXJlZ2lzdGVyX3Bvc2l4X2Nsb2NrKENMT0NLX01PTk9UT05JQywgJmNsb2NrX21vbm90b25pYyk7CisJcmVnaXN0ZXJfcG9zaXhfY2xvY2soQ0xPQ0tfTU9OT1RPTklDX1JBVywgJmNsb2NrX21vbm90b25pY19yYXcpOwogCiAJcG9zaXhfdGltZXJzX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBvc2l4X3RpbWVyc19jYWNoZSIsCiAJCQkJCXNpemVvZiAoc3RydWN0IGtfaXRpbWVyKSwgMCwgU0xBQl9QQU5JQywKQEAgLTI5OCw2ICszMTMsNyBAQAogCiBpbnQgcG9zaXhfdGltZXJfZXZlbnQoc3RydWN0IGtfaXRpbWVyICp0aW1yLCBpbnQgc2lfcHJpdmF0ZSkKIHsKKwlpbnQgc2hhcmVkLCByZXQ7CiAJLyoKIAkgKiBGSVhNRTogaWYgLT5zaWdxIGlzIHF1ZXVlZCB3ZSBjYW4gcmFjZSB3aXRoCiAJICogZGVxdWV1ZV9zaWduYWwoKS0+ZG9fc2NoZWR1bGVfbmV4dF90aW1lcigpLgpAQCAtMzExLDI1ICszMjcsMTAgQEAKIAkgKi8KIAl0aW1yLT5zaWdxLT5pbmZvLnNpX3N5c19wcml2YXRlID0gc2lfcHJpdmF0ZTsKIAotCXRpbXItPnNpZ3EtPmluZm8uc2lfc2lnbm8gPSB0aW1yLT5pdF9zaWdldl9zaWdubzsKLQl0aW1yLT5zaWdxLT5pbmZvLnNpX2NvZGUgPSBTSV9USU1FUjsKLQl0aW1yLT5zaWdxLT5pbmZvLnNpX3RpZCA9IHRpbXItPml0X2lkOwotCXRpbXItPnNpZ3EtPmluZm8uc2lfdmFsdWUgPSB0aW1yLT5pdF9zaWdldl92YWx1ZTsKLQotCWlmICh0aW1yLT5pdF9zaWdldl9ub3RpZnkgJiBTSUdFVl9USFJFQURfSUQpIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7Ci0JCWludCByZXQgPSBzZW5kX3NpZ3F1ZXVlKHRpbXItPnNpZ3EsIHRpbXItPml0X3Byb2Nlc3MsIDApOwotCi0JCWlmIChsaWtlbHkocmV0ID49IDApKQotCQkJcmV0dXJuIHJldDsKLQotCQl0aW1yLT5pdF9zaWdldl9ub3RpZnkgPSBTSUdFVl9TSUdOQUw7Ci0JCWxlYWRlciA9IHRpbXItPml0X3Byb2Nlc3MtPmdyb3VwX2xlYWRlcjsKLQkJcHV0X3Rhc2tfc3RydWN0KHRpbXItPml0X3Byb2Nlc3MpOwotCQl0aW1yLT5pdF9wcm9jZXNzID0gbGVhZGVyOwotCX0KLQotCXJldHVybiBzZW5kX3NpZ3F1ZXVlKHRpbXItPnNpZ3EsIHRpbXItPml0X3Byb2Nlc3MsIDEpOworCXNoYXJlZCA9ICEodGltci0+aXRfc2lnZXZfbm90aWZ5ICYgU0lHRVZfVEhSRUFEX0lEKTsKKwlyZXQgPSBzZW5kX3NpZ3F1ZXVlKHRpbXItPnNpZ3EsIHRpbXItPml0X3Byb2Nlc3MsIHNoYXJlZCk7CisJLyogSWYgd2UgZmFpbGVkIHRvIHNlbmQgdGhlIHNpZ25hbCB0aGUgdGltZXIgc3RvcHMuICovCisJcmV0dXJuIHJldCA+IDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwb3NpeF90aW1lcl9ldmVudCk7CiAKQEAgLTQ2OCwxMSArNDY5LDkgQEAKIAkJIHN0cnVjdCBzaWdldmVudCBfX3VzZXIgKnRpbWVyX2V2ZW50X3NwZWMsCiAJCSB0aW1lcl90IF9fdXNlciAqIGNyZWF0ZWRfdGltZXJfaWQpCiB7Ci0JaW50IGVycm9yID0gMDsKLQlzdHJ1Y3Qga19pdGltZXIgKm5ld190aW1lciA9IE5VTEw7Ci0JaW50IG5ld190aW1lcl9pZDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByb2Nlc3MgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGtfaXRpbWVyICpuZXdfdGltZXI7CisJaW50IGVycm9yLCBuZXdfdGltZXJfaWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwcm9jZXNzOwogCXNpZ2V2ZW50X3QgZXZlbnQ7CiAJaW50IGl0X2lkX3NldCA9IElUX0lEX05PVF9TRVQ7CiAKQEAgLTQ5MCwxMiArNDg5LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAlzcGluX2xvY2tfaXJxKCZpZHJfbG9jayk7Ci0JZXJyb3IgPSBpZHJfZ2V0X25ldygmcG9zaXhfdGltZXJzX2lkLCAodm9pZCAqKSBuZXdfdGltZXIsCi0JCQkgICAgJm5ld190aW1lcl9pZCk7CisJZXJyb3IgPSBpZHJfZ2V0X25ldygmcG9zaXhfdGltZXJzX2lkLCBuZXdfdGltZXIsICZuZXdfdGltZXJfaWQpOwogCXNwaW5fdW5sb2NrX2lycSgmaWRyX2xvY2spOwotCWlmIChlcnJvciA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OwotCWVsc2UgaWYgKGVycm9yKSB7CisJaWYgKGVycm9yKSB7CisJCWlmIChlcnJvciA9PSAtRUFHQUlOKQorCQkJZ290byByZXRyeTsKIAkJLyoKIAkJICogV2VpcmQgbG9va2luZywgYnV0IHdlIHJldHVybiBFQUdBSU4gaWYgdGhlIElEUiBpcwogCQkgKiBmdWxsIChwcm9wZXIgUE9TSVggcmV0dXJuIHZhbHVlIGZvciB0aGlzKQpAQCAtNTI2LDY3ICs1MjQsNDMgQEAKIAkJCWVycm9yID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfbm90aWZ5ID0gZXZlbnQuc2lnZXZfbm90aWZ5OwotCQluZXdfdGltZXItPml0X3NpZ2V2X3NpZ25vID0gZXZlbnQuc2lnZXZfc2lnbm87Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfdmFsdWUgPSBldmVudC5zaWdldl92YWx1ZTsKLQotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCQlpZiAoKHByb2Nlc3MgPSBnb29kX3NpZ2V2ZW50KCZldmVudCkpKSB7Ci0JCQkvKgotCQkJICogV2UgbWF5IGJlIHNldHRpbmcgdXAgdGhpcyBwcm9jZXNzIGZvciBhbm90aGVyCi0JCQkgKiB0aHJlYWQuICBJdCBtYXkgYmUgZXhpdGluZy4gIFRvIGNhdGNoIHRoaXMKLQkJCSAqIGNhc2UgdGhlIHdlIGNoZWNrIHRoZSBQRl9FWElUSU5HIGZsYWcuICBJZgotCQkJICogdGhlIGZsYWcgaXMgbm90IHNldCwgdGhlIHNpZ2xvY2sgd2lsbCBjYXRjaAotCQkJICogaGltIGJlZm9yZSBpdCBpcyB0b28gbGF0ZSAoaW4gZXhpdF9pdGltZXJzKS4KLQkJCSAqCi0JCQkgKiBUaGUgZXhlYyBjYXNlIGlzIGEgYml0IG1vcmUgaW52bG92ZWQgYnV0IGVhc3kKLQkJCSAqIHRvIGNvZGUuICBJZiB0aGUgcHJvY2VzcyBpcyBpbiBvdXIgdGhyZWFkCi0JCQkgKiBncm91cCAoYW5kIGl0IG11c3QgYmUgb3Igd2Ugd291bGQgbm90IGFsbG93Ci0JCQkgKiBpdCBoZXJlKSBhbmQgaXMgZG9pbmcgYW4gZXhlYywgaXQgd2lsbCBjYXVzZQotCQkJICogdXMgdG8gYmUga2lsbGVkLiAgSW4gdGhpcyBjYXNlIGl0IHdpbGwgd2FpdAotCQkJICogZm9yIHVzIHRvIGRpZSB3aGljaCBtZWFucyB3ZSBjYW4gZmluaXNoIHRoaXMKLQkJCSAqIGxpbmthZ2Ugd2l0aCBvdXIgbGFzdCBnYXNwLiBJLmUuIG5vIGNvZGUgOikKLQkJCSAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByb2Nlc3MtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJCWlmICghKHByb2Nlc3MtPmZsYWdzICYgUEZfRVhJVElORykpIHsKLQkJCQluZXdfdGltZXItPml0X3Byb2Nlc3MgPSBwcm9jZXNzOwotCQkJCWxpc3RfYWRkKCZuZXdfdGltZXItPmxpc3QsCi0JCQkJCSAmcHJvY2Vzcy0+c2lnbmFsLT5wb3NpeF90aW1lcnMpOwotCQkJCWlmIChuZXdfdGltZXItPml0X3NpZ2V2X25vdGlmeSA9PSAoU0lHRVZfU0lHTkFMfFNJR0VWX1RIUkVBRF9JRCkpCi0JCQkJCWdldF90YXNrX3N0cnVjdChwcm9jZXNzKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb2Nlc3MtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJCQlwcm9jZXNzID0gTlVMTDsKLQkJCX0KLQkJfQotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJcHJvY2VzcyA9IGdvb2Rfc2lnZXZlbnQoJmV2ZW50KTsKKwkJaWYgKHByb2Nlc3MpCisJCQlnZXRfdGFza19zdHJ1Y3QocHJvY2Vzcyk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlpZiAoIXByb2Nlc3MpIHsKIAkJCWVycm9yID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgPSBTSUdFVl9TSUdOQUw7Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfc2lnbm8gPSBTSUdBTFJNOwotCQluZXdfdGltZXItPml0X3NpZ2V2X3ZhbHVlLnNpdmFsX2ludCA9IG5ld190aW1lci0+aXRfaWQ7CisJCWV2ZW50LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTDsKKwkJZXZlbnQuc2lnZXZfc2lnbm8gPSBTSUdBTFJNOworCQlldmVudC5zaWdldl92YWx1ZS5zaXZhbF9pbnQgPSBuZXdfdGltZXItPml0X2lkOwogCQlwcm9jZXNzID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQluZXdfdGltZXItPml0X3Byb2Nlc3MgPSBwcm9jZXNzOwotCQlsaXN0X2FkZCgmbmV3X3RpbWVyLT5saXN0LCAmcHJvY2Vzcy0+c2lnbmFsLT5wb3NpeF90aW1lcnMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCWdldF90YXNrX3N0cnVjdChwcm9jZXNzKTsKIAl9CiAKKwluZXdfdGltZXItPml0X3NpZ2V2X25vdGlmeSAgICAgPSBldmVudC5zaWdldl9ub3RpZnk7CisJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX3NpZ25vID0gZXZlbnQuc2lnZXZfc2lnbm87CisJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX3ZhbHVlID0gZXZlbnQuc2lnZXZfdmFsdWU7CisJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX3RpZCAgID0gbmV3X3RpbWVyLT5pdF9pZDsKKwluZXdfdGltZXItPnNpZ3EtPmluZm8uc2lfY29kZSAgPSBTSV9USU1FUjsKKworCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCW5ld190aW1lci0+aXRfcHJvY2VzcyA9IHByb2Nlc3M7CisJbGlzdF9hZGQoJm5ld190aW1lci0+bGlzdCwgJmN1cnJlbnQtPnNpZ25hbC0+cG9zaXhfdGltZXJzKTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJcmV0dXJuIDA7CiAgCS8qCiAJICogSW4gdGhlIGNhc2Ugb2YgdGhlIHRpbWVyIGJlbG9uZ2luZyB0byBhbm90aGVyIHRhc2ssIGFmdGVyCiAJICogdGhlIHRhc2sgaXMgdW5sb2NrZWQsIHRoZSB0aW1lciBpcyBvd25lZCBieSB0aGUgb3RoZXIgdGFzawogCSAqIGFuZCBtYXkgY2Vhc2UgdG8gZXhpc3QgYXQgYW55IHRpbWUuICBEb24ndCB1c2Ugb3IgbW9kaWZ5CiAJICogbmV3X3RpbWVyIGFmdGVyIHRoZSB1bmxvY2sgY2FsbC4KIAkgKi8KLQogb3V0OgotCWlmIChlcnJvcikKLQkJcmVsZWFzZV9wb3NpeF90aW1lcihuZXdfdGltZXIsIGl0X2lkX3NldCk7Ci0KKwlyZWxlYXNlX3Bvc2l4X3RpbWVyKG5ld190aW1lciwgaXRfaWRfc2V0KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTU5Nyw3ICs1NzEsNyBAQAogICogdGhlIGZpbmQgdG8gdGhlIHRpbWVyIGxvY2suICBUbyBhdm9pZCBhIGRlYWQgbG9jaywgdGhlIHRpbWVyIGlkIE1VU1QKICAqIGJlIHJlbGVhc2Ugd2l0aCBvdXQgaG9sZGluZyB0aGUgdGltZXIgbG9jay4KICAqLwotc3RhdGljIHN0cnVjdCBrX2l0aW1lciAqIGxvY2tfdGltZXIodGltZXJfdCB0aW1lcl9pZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCitzdGF0aWMgc3RydWN0IGtfaXRpbWVyICpsb2NrX3RpbWVyKHRpbWVyX3QgdGltZXJfaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewogCXN0cnVjdCBrX2l0aW1lciAqdGltcjsKIAkvKgpAQCAtNjA1LDIzICs1NzksMjAgQEAKIAkgKiBmbGFncyBwYXJ0IG92ZXIgdG8gdGhlIHRpbWVyIGxvY2suICBNdXN0IG5vdCBsZXQgaW50ZXJydXB0cyBpbgogCSAqIHdoaWxlIHdlIGFyZSBtb3ZpbmcgdGhlIGxvY2suCiAJICovCi0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRyX2xvY2ssICpmbGFncyk7Ci0JdGltciA9IChzdHJ1Y3Qga19pdGltZXIgKikgaWRyX2ZpbmQoJnBvc2l4X3RpbWVyc19pZCwgKGludCkgdGltZXJfaWQpOworCXRpbXIgPSBpZHJfZmluZCgmcG9zaXhfdGltZXJzX2lkLCAoaW50KXRpbWVyX2lkKTsKIAlpZiAodGltcikgewogCQlzcGluX2xvY2soJnRpbXItPml0X2xvY2spOwotCi0JCWlmICgodGltci0+aXRfaWQgIT0gdGltZXJfaWQpIHx8ICEodGltci0+aXRfcHJvY2VzcykgfHwKLQkJCQkhc2FtZV90aHJlYWRfZ3JvdXAodGltci0+aXRfcHJvY2VzcywgY3VycmVudCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZ0aW1yLT5pdF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkcl9sb2NrLCAqZmxhZ3MpOwotCQkJdGltciA9IE5VTEw7Ci0JCX0gZWxzZQorCQlpZiAodGltci0+aXRfcHJvY2VzcyAmJgorCQkgICAgc2FtZV90aHJlYWRfZ3JvdXAodGltci0+aXRfcHJvY2VzcywgY3VycmVudCkpIHsKIAkJCXNwaW5fdW5sb2NrKCZpZHJfbG9jayk7Ci0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkcl9sb2NrLCAqZmxhZ3MpOworCQkJcmV0dXJuIHRpbXI7CisJCX0KKwkJc3Bpbl91bmxvY2soJnRpbXItPml0X2xvY2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZHJfbG9jaywgKmZsYWdzKTsKIAotCXJldHVybiB0aW1yOworCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtODYwLDggKzgzMSw3IEBACiAJICogVGhpcyBrZWVwcyBhbnkgdGFza3Mgd2FpdGluZyBvbiB0aGUgc3BpbiBsb2NrIGZyb20gdGhpbmtpbmcKIAkgKiB0aGV5IGdvdCBzb21ldGhpbmcgKHNlZSB0aGUgbG9jayBjb2RlIGFib3ZlKS4KIAkgKi8KLQlpZiAodGltZXItPml0X3NpZ2V2X25vdGlmeSA9PSAoU0lHRVZfU0lHTkFMfFNJR0VWX1RIUkVBRF9JRCkpCi0JCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CisJcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKIAl0aW1lci0+aXRfcHJvY2VzcyA9IE5VTEw7CiAKIAl1bmxvY2tfdGltZXIodGltZXIsIGZsYWdzKTsKQEAgLTg4OCw4ICs4NTgsNyBAQAogCSAqIFRoaXMga2VlcHMgYW55IHRhc2tzIHdhaXRpbmcgb24gdGhlIHNwaW4gbG9jayBmcm9tIHRoaW5raW5nCiAJICogdGhleSBnb3Qgc29tZXRoaW5nIChzZWUgdGhlIGxvY2sgY29kZSBhYm92ZSkuCiAJICovCi0JaWYgKHRpbWVyLT5pdF9zaWdldl9ub3RpZnkgPT0gKFNJR0VWX1NJR05BTHxTSUdFVl9USFJFQURfSUQpKQotCQlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOworCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CiAJdGltZXItPml0X3Byb2Nlc3MgPSBOVUxMOwogCiAJdW5sb2NrX3RpbWVyKHRpbWVyLCBmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCAyNzg5NDZhLi5jYTYzNDAxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTI4LDEyMSArMjgsNiBAQAogCXJldHVybiAxOwogfQogCi0vKgotICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKLXsKLQlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7Ci0JCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKLQkJd21iKCk7Ci0JfQotCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOwotfQotCi0vKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KLXZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCi17Ci0JLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCi0JICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KLQlsb25nIHNhdmU7Ci0KLQl0YXNrX2xvY2soY3VycmVudCk7Ci0JaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7Ci0JCWZyb3plbl9wcm9jZXNzKCk7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCX0gZWxzZSB7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCQlyZXR1cm47Ci0JfQotCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKLQlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JZm9yICg7OykgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghZnJvemVuKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0Jc2lnbmFsX3dha2VfdXAocCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOwotfQotCi0vKioKLSAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKLSAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KLSAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCi0gKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0Ci0gKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcwotICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKLSAqCi0gKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKLSAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgotICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCi0gKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cwotICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KLSAqLwotc3RhdGljIGJvb2wgZnJlZXplX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHNpZ19vbmx5KQotewotCS8qCi0JICogV2UgZmlyc3QgY2hlY2sgaWYgdGhlIHRhc2sgaXMgZnJlZXppbmcgYW5kIG5leHQgaWYgaXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIGZyb3plbiB0byBhdm9pZCB0aGUgcmFjZSB3aXRoIGZyb3plbl9wcm9jZXNzKCkgd2hpY2ggZmlyc3QgbWFya3MKLQkgKiB0aGUgdGFzayBhcyBmcm96ZW4gYW5kIG5leHQgY2xlYXJzIGl0cyBUSUZfRlJFRVpFLgotCSAqLwotCWlmICghZnJlZXppbmcocCkpIHsKLQkJcm1iKCk7Ci0JCWlmIChmcm96ZW4ocCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKCFzaWdfb25seSB8fCBzaG91bGRfc2VuZF9zaWduYWwocCkpCi0JCQlzZXRfZnJlZXplX2ZsYWcocCk7Ci0JCWVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoc2hvdWxkX3NlbmRfc2lnbmFsKHApKSB7Ci0JCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCi0JCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOwotCX0gZWxzZSBpZiAoc2lnX29ubHkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCXdha2VfdXBfc3RhdGUocCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGZyZWV6aW5nKHApKSB7Ci0JCXByX2RlYnVnKCIgIGNsZWFuIHVwOiAlc1xuIiwgcC0+Y29tbSk7Ci0JCWNsZWFyX2ZyZWV6ZV9mbGFnKHApOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZ19hbmRfd2FrZShwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCX0KLX0KLQogc3RhdGljIGludCB0cnlfdG9fZnJlZXplX3Rhc2tzKGJvb2wgc2lnX29ubHkpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKQEAgLTI1MCw2ICsxMzUsOSBAQAogCQlpZiAobm9zaWdfb25seSAmJiBzaG91bGRfc2VuZF9zaWduYWwocCkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoY2dyb3VwX2Zyb3plbihwKSkKKwkJCWNvbnRpbnVlOworCiAJCXRoYXdfcHJvY2VzcyhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTI2NCw0ICsxNTIsMyBAQAogCXByaW50aygiZG9uZS5cbiIpOwogfQogCi1FWFBPUlRfU1lNQk9MKHJlZnJpZ2VyYXRvcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMzU2Njk5YS4uMWU2OGU0YyAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDUsNyArNDUsNyBAQAogICogVEFTS19UUkFDRUQsIHJlc3VtZSBpdCBub3cuCiAgKiBSZXF1aXJlcyB0aGF0IGlycXMgYmUgZGlzYWJsZWQuCiAgKi8KLXZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3N0YXRpYyB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJc3Bpbl9sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKHRhc2tfaXNfdHJhY2VkKGNoaWxkKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXByZWVtcHQuYyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKaW5kZXggY2E0YmJiZS4uNTkyMzZlOCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXByZWVtcHQuYworKysgYi9rZXJuZWwvcmN1cHJlZW1wdC5jCkBAIC01NCw5ICs1NCw5IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cHJlZW1wdF90cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyoKICAqIFBSRUVNUFRfUkNVIGRhdGEgc3RydWN0dXJlcy4KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDkwYjViMTIuLjg1Y2I5MDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNDIsMTAgKzQyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQHVzLmlibS5jb20+IGFuZCAiCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGViM2M3MjkuLmJmYTg3OTE4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CkBAIC0xOTM1LDYgKzE5MzYsNyBAQAogCQkgKiBqdXN0IGdvIGJhY2sgYW5kIHJlcGVhdC4KIAkJICovCiAJCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJCXRyYWNlX3NjaGVkX3dhaXRfdGFzayhycSwgcCk7CiAJCXJ1bm5pbmcgPSB0YXNrX3J1bm5pbmcocnEsIHApOwogCQlvbl9ycSA9IHAtPnNlLm9uX3JxOwogCQluY3N3ID0gMDsKQEAgLTIyOTYsOSArMjI5OCw3IEBACiAJc3VjY2VzcyA9IDE7CiAKIG91dF9ydW5uaW5nOgotCXRyYWNlX21hcmsoa2VybmVsX3NjaGVkX3dha2V1cCwKLQkJInBpZCAlZCBzdGF0ZSAlbGQgIyMgcnEgJXAgdGFzayAlcCBycS0+Y3VyciAlcCIsCi0JCXAtPnBpZCwgcC0+c3RhdGUsIHJxLCBwLCBycS0+Y3Vycik7CisJdHJhY2Vfc2NoZWRfd2FrZXVwKHJxLCBwKTsKIAljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIHN5bmMpOwogCiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CkBAIC0yNDMxLDkgKzI0MzEsNyBAQAogCQlwLT5zY2hlZF9jbGFzcy0+dGFza19uZXcocnEsIHApOwogCQlpbmNfbnJfcnVubmluZyhycSk7CiAJfQotCXRyYWNlX21hcmsoa2VybmVsX3NjaGVkX3dha2V1cF9uZXcsCi0JCSJwaWQgJWQgc3RhdGUgJWxkICMjIHJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiLAotCQlwLT5waWQsIHAtPnN0YXRlLCBycSwgcCwgcnEtPmN1cnIpOworCXRyYWNlX3NjaGVkX3dha2V1cF9uZXcocnEsIHApOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKQpAQCAtMjYwNiwxMSArMjYwNCw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICpvbGRtbTsKIAogCXByZXBhcmVfdGFza19zd2l0Y2gocnEsIHByZXYsIG5leHQpOwotCXRyYWNlX21hcmsoa2VybmVsX3NjaGVkX3NjaGVkdWxlLAotCQkicHJldl9waWQgJWQgbmV4dF9waWQgJWQgcHJldl9zdGF0ZSAlbGQgIgotCQkiIyMgcnEgJXAgcHJldiAlcCBuZXh0ICVwIiwKLQkJcHJldi0+cGlkLCBuZXh0LT5waWQsIHByZXYtPnN0YXRlLAotCQlycSwgcHJldiwgbmV4dCk7CisJdHJhY2Vfc2NoZWRfc3dpdGNoKHJxLCBwcmV2LCBuZXh0KTsKIAltbSA9IG5leHQtPm1tOwogCW9sZG1tID0gcHJldi0+YWN0aXZlX21tOwogCS8qCkBAIC0yODUwLDYgKzI4NDQsNyBAQAogCSAgICB8fCB1bmxpa2VseSghY3B1X2FjdGl2ZShkZXN0X2NwdSkpKQogCQlnb3RvIG91dDsKIAorCXRyYWNlX3NjaGVkX21pZ3JhdGVfdGFzayhycSwgcCwgZGVzdF9jcHUpOwogCS8qIGZvcmNlIHRoZSBwcm9jZXNzIG9udG8gdGhlIHNwZWNpZmllZCBDUFUgKi8KIAlpZiAobWlncmF0ZV90YXNrKHAsIGRlc3RfY3B1LCAmcmVxKSkgewogCQkvKiBOZWVkIHRvIHdhaXQgZm9yIG1pZ3JhdGlvbiB0aHJlYWQgKG1pZ2h0IGV4aXQ6IHRha2UgcmVmKS4gKi8KQEAgLTQwNTEsMjMgKzQwNDYsMjYgQEAKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChrc3RhdCk7CiAKIC8qCi0gKiBSZXR1cm4gcC0+c3VtX2V4ZWNfcnVudGltZSBwbHVzIGFueSBtb3JlIG5zIG9uIHRoZSBzY2hlZF9jbG9jawotICogdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBiYW5rZWQgaW4gY2FzZSB0aGUgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KKyAqIFJldHVybiBhbnkgbnMgb24gdGhlIHNjaGVkX2Nsb2NrIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYmFua2VkIGluCisgKiBAcCBpbiBjYXNlIHRoYXQgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfc2NoZWRfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit1bnNpZ25lZCBsb25nIGxvbmcgdGFza19kZWx0YV9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU2NCBucywgZGVsdGFfZXhlYzsKIAlzdHJ1Y3QgcnEgKnJxOworCXU2NCBucyA9IDA7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwotCW5zID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwogCWlmICh0YXNrX2N1cnJlbnQocnEsIHApKSB7CisJCXU2NCBkZWx0YV9leGVjOworCiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJCWRlbHRhX2V4ZWMgPSBycS0+Y2xvY2sgLSBwLT5zZS5leGVjX3N0YXJ0OwogCQlpZiAoKHM2NClkZWx0YV9leGVjID4gMCkKLQkJCW5zICs9IGRlbHRhX2V4ZWM7CisJCQlucyA9IGRlbHRhX2V4ZWM7CiAJfQorCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIAlyZXR1cm4gbnM7CkBAIC00MDg0LDYgKzQwODIsNyBAQAogCWNwdXRpbWU2NF90IHRtcDsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCiAJLyogQWRkIHVzZXIgdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDEwOCw2ICs0MTA3LDcgQEAKIAl0bXAgPSBjcHV0aW1lX3RvX2NwdXRpbWU2NChjcHV0aW1lKTsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCXAtPmd0aW1lID0gY3B1dGltZV9hZGQocC0+Z3RpbWUsIGNwdXRpbWUpOwogCiAJY3B1c3RhdC0+dXNlciA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+dXNlciwgdG1wKTsKQEAgLTQxNDMsNiArNDE0Myw3IEBACiAJfQogCiAJcC0+c3RpbWUgPSBjcHV0aW1lX2FkZChwLT5zdGltZSwgY3B1dGltZSk7CisJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBjcHV0aW1lKTsKIAogCS8qIEFkZCBzeXN0ZW0gdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDE4NCw2ICs0MTg1LDcgQEAKIAogCWlmIChwID09IHJxLT5pZGxlKSB7CiAJCXAtPnN0aW1lID0gY3B1dGltZV9hZGQocC0+c3RpbWUsIHN0ZWFsKTsKKwkJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBzdGVhbCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcnEtPm5yX2lvd2FpdCkgPiAwKQogCQkJY3B1c3RhdC0+aW93YWl0ID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pb3dhaXQsIHRtcCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDE4ZmQxNzEuLmY2MDRkYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VydGFzayA9IHRhc2tfb2YoY3Vycik7CiAKIAkJY3B1YWNjdF9jaGFyZ2UoY3VydGFzaywgZGVsdGFfZXhlYyk7CisJCWFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKGN1cnRhc2ssIGRlbHRhX2V4ZWMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBjZGY1NzQwLi5iNDQ2ZGM4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtNTI2LDYgKzUyNiw4IEBACiAJc2NoZWRzdGF0X3NldChjdXJyLT5zZS5leGVjX21heCwgbWF4KGN1cnItPnNlLmV4ZWNfbWF4LCBkZWx0YV9leGVjKSk7CiAKIAljdXJyLT5zZS5zdW1fZXhlY19ydW50aW1lICs9IGRlbHRhX2V4ZWM7CisJYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUoY3VyciwgZGVsdGFfZXhlYyk7CisKIAljdXJyLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOwogCWNwdWFjY3RfY2hhcmdlKGN1cnIsIGRlbHRhX2V4ZWMpOwogCkBAIC0xNDU4LDcgKzE0NjAsNyBAQAogCQlwLT5ydC50aW1lb3V0Kys7CiAJCW5leHQgPSBESVZfUk9VTkRfVVAobWluKHNvZnQsIGhhcmQpLCBVU0VDX1BFUl9TRUMvSFopOwogCQlpZiAocC0+cnQudGltZW91dCA+IG5leHQpCi0JCQlwLT5pdF9zY2hlZF9leHBpcmVzID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwkJCXAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCA4Mzg1ZDQzLi5iOGMxNTY5IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtMjcwLDMgKzI3MCw4OSBAQAogI2RlZmluZSBzY2hlZF9pbmZvX3N3aXRjaCh0LCBuZXh0KQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19TQ0hFRFNUQVRTIHx8IENPTkZJR19UQVNLX0RFTEFZX0FDQ1QgKi8KIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQgc2NoZWR1bGVyLWludGVybmFsIHRpbWUgYWNjb3VudGluZy4KKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGNhbGxlZCBhdCB0aGUgdGltZXIgdGljay4gIE5vbmUgb2YgdGhpcyBkZXBlbmRzCisgKiBvbiBDT05GSUdfU0NIRURTVEFUUy4KKyAqLworCisvKioKKyAqIGFjY291bnRfZ3JvdXBfdXNlcl90aW1lIC0gTWFpbnRhaW4gdXRpbWUgZm9yIGEgdGhyZWFkIGdyb3VwLgorICoKKyAqIEB0c2s6CVBvaW50ZXIgdG8gdGFzayBzdHJ1Y3R1cmUuCisgKiBAY3B1dGltZToJVGltZSB2YWx1ZSBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIHV0aW1lIGZpZWxkIG9mIHRoZQorICoJCXRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBydW5uaW5nIENQVSBhbmQgdXBkYXRlIHRoZSB1dGltZSBmaWVsZCB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgICBjcHV0aW1lX3QgY3B1dGltZSkKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCisJc2lnID0gdHNrLT5zaWduYWw7CisJaWYgKHVubGlrZWx5KCFzaWcpKQorCQlyZXR1cm47CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXM7CisKKwkJdGltZXMgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBnZXRfY3B1KCkpOworCQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIGNwdXRpbWUpOworCQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKKwl9Cit9CisKKy8qKgorICogYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZSAtIE1haW50YWluIHN0aW1lIGZvciBhIHRocmVhZCBncm91cC4KKyAqCisgKiBAdHNrOglQb2ludGVyIHRvIHRhc2sgc3RydWN0dXJlLgorICogQGNwdXRpbWU6CVRpbWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSBzdGltZSBmaWVsZCBvZiB0aGUKKyAqCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSBzdHJ1Y3R1cmUuCisgKgorICogSWYgdGhyZWFkIGdyb3VwIHRpbWUgaXMgYmVpbmcgbWFpbnRhaW5lZCwgZ2V0IHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZQorICogcnVubmluZyBDUFUgYW5kIHVwZGF0ZSB0aGUgc3RpbWUgZmllbGQgdGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgICAgIGNwdXRpbWVfdCBjcHV0aW1lKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybjsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lczsKKworCQl0aW1lcyA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIGdldF9jcHUoKSk7CisJCXRpbWVzLT5zdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT5zdGltZSwgY3B1dGltZSk7CisJCXB1dF9jcHVfbm9fcmVzY2hlZCgpOworCX0KK30KKworLyoqCisgKiBhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZSAtIE1haW50YWluIGV4ZWMgcnVudGltZSBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKgorICogQHRzazoJUG9pbnRlciB0byB0YXNrIHN0cnVjdHVyZS4KKyAqIEBuczoJCVRpbWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSBzdW1fZXhlY19ydW50aW1lIGZpZWxkCisgKgkJb2YgdGhlIHRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBydW5uaW5nIENQVSBhbmQgdXBkYXRlIHRoZSBzdW1fZXhlY19ydW50aW1lIGZpZWxkIHRoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBucykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCisJc2lnID0gdHNrLT5zaWduYWw7CisJaWYgKHVubGlrZWx5KCFzaWcpKQorCQlyZXR1cm47CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXM7CisKKwkJdGltZXMgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBnZXRfY3B1KCkpOworCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSBuczsKKwkJcHV0X2NwdV9ub19yZXNjaGVkKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IGU2NjFiMDEuLjEwNTIxN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTgwMyw2ICs4MDQsOCBAQAogCXN0cnVjdCBzaWdwZW5kaW5nICpwZW5kaW5nOwogCXN0cnVjdCBzaWdxdWV1ZSAqcTsKIAorCXRyYWNlX3NjaGVkX3NpZ25hbF9zZW5kKHNpZywgdCk7CisKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCWlmICghcHJlcGFyZV9zaWduYWwoc2lnLCB0KSkKIAkJcmV0dXJuIDA7CkBAIC0xMzM4LDYgKzEzNDEsNyBAQAogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnBzaWc7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCWludCByZXQgPSBzaWc7CiAKIAlCVUdfT04oc2lnID09IC0xKTsKQEAgLTEzNjgsMTAgKzEzNzIsOSBAQAogCiAJaW5mby5zaV91aWQgPSB0c2stPnVpZDsKIAotCWluZm8uc2lfdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV9hZGQodHNrLT51dGltZSwKLQkJCQkJCSAgICAgICB0c2stPnNpZ25hbC0+dXRpbWUpKTsKLQlpbmZvLnNpX3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNwdXRpbWVfYWRkKHRzay0+c3RpbWUsCi0JCQkJCQkgICAgICAgdHNrLT5zaWduYWwtPnN0aW1lKSk7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmY3B1dGltZSk7CisJaW5mby5zaV91dGltZSA9IGNwdXRpbWVfdG9famlmZmllcyhjcHV0aW1lLnV0aW1lKTsKKwlpbmZvLnNpX3N0aW1lID0gY3B1dGltZV90b19qaWZmaWVzKGNwdXRpbWUuc3RpbWUpOwogCiAJaW5mby5zaV9zdGF0dXMgPSB0c2stPmV4aXRfY29kZSAmIDB4N2Y7CiAJaWYgKHRzay0+ZXhpdF9jb2RlICYgMHg4MCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDM3ZDY3YWEuLjcxMTBkYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNiw2ICs2LDggQEAKICAqCURpc3RyaWJ1dGUgdW5kZXIgR1BMdjIuCiAgKgogICoJUmV3cml0dGVuLiBPbGQgb25lIHdhcyBnb29kIGluIDIuMiwgYnV0IGluIDIuMyBpdCB3YXMgaW1tb3JhbC4gLS1BTksgKDk5MDkwMykKKyAqCisgKglSZW1vdGUgc29mdGlycSBpbmZyYXN0cnVjdHVyZSBpcyBieSBKZW5zIEF4Ym9lLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI2NSwxNiArMjY3LDEyIEBACiAgKi8KIHZvaWQgaXJxX2VudGVyKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX05PX0haCiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCWlmIChpZGxlX2NwdShjcHUpICYmICFpbl9pbnRlcnJ1cHQoKSkKLQkJdGlja19ub2h6X3N0b3BfaWRsZShjcHUpOwotI2VuZGlmCisJCXRpY2tfY2hlY2tfaWRsZShjcHUpOworCiAJX19pcnFfZW50ZXIoKTsKLSNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAoaWRsZV9jcHUoY3B1KSkKLQkJdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKCk7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIF9fQVJDSF9JUlFfRVhJVF9JUlFTX0RJU0FCTEVECkBAIC00NzQsMTcgKzQ3MiwxNDQgQEAKIAogRVhQT1JUX1NZTUJPTCh0YXNrbGV0X2tpbGwpOwogCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkIFtOUl9TT0ZUSVJRU10sIHNvZnRpcnFfd29ya19saXN0KTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChzb2Z0aXJxX3dvcmtfbGlzdCk7CisKK3N0YXRpYyB2b2lkIF9fbG9jYWxfdHJpZ2dlcihzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBzb2Z0aXJxKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmX19nZXRfY3B1X3Zhcihzb2Z0aXJxX3dvcmtfbGlzdFtzb2Z0aXJxXSk7CisKKwlsaXN0X2FkZF90YWlsKCZjcC0+bGlzdCwgaGVhZCk7CisKKwkvKiBUcmlnZ2VyIHRoZSBzb2Z0aXJxIG9ubHkgaWYgdGhlIGxpc3Qgd2FzIHByZXZpb3VzbHkgZW1wdHkuICAqLworCWlmIChoZWFkLT5uZXh0ID09ICZjcC0+bGlzdCkKKwkJcmFpc2Vfc29mdGlycV9pcnFvZmYoc29mdGlycSk7Cit9CisKKyNpZmRlZiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKK3N0YXRpYyB2b2lkIHJlbW90ZV9zb2Z0aXJxX3JlY2VpdmUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNvZnRpcnE7CisKKwlzb2Z0aXJxID0gY3AtPnByaXY7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19sb2NhbF90cmlnZ2VyKGNwLCBzb2Z0aXJxKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX190cnlfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSkKK3sKKwlpZiAoY3B1X29ubGluZShjcHUpKSB7CisJCWNwLT5mdW5jID0gcmVtb3RlX3NvZnRpcnFfcmVjZWl2ZTsKKwkJY3AtPmluZm8gPSBjcDsKKwkJY3AtPmZsYWdzID0gMDsKKwkJY3AtPnByaXYgPSBzb2Z0aXJxOworCisJCV9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3ApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisjZWxzZSAvKiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgKi8KK3N0YXRpYyBpbnQgX190cnlfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisvKioKKyAqIF9fc2VuZF9yZW1vdGVfc29mdGlycSAtIHRyeSB0byBzY2hlZHVsZSBzb2Z0aXJxIHdvcmsgb24gYSByZW1vdGUgY3B1CisgKiBAY3A6IHByaXZhdGUgU01QIGNhbGwgZnVuY3Rpb24gZGF0YSBhcmVhCisgKiBAY3B1OiB0aGUgcmVtb3RlIGNwdQorICogQHRoaXNfY3B1OiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjcHUKKyAqIEBzb2Z0aXJxOiB0aGUgc29mdGlycSBmb3IgdGhlIHdvcmsKKyAqCisgKiBBdHRlbXB0IHRvIHNjaGVkdWxlIHNvZnRpcnEgd29yayBvbiBhIHJlbW90ZSBjcHUuICBJZiB0aGlzIGNhbm5vdCBiZQorICogZG9uZSwgdGhlIHdvcmsgaXMgaW5zdGVhZCBxdWV1ZWQgdXAgb24gdGhlIGxvY2FsIGNwdS4KKyAqCisgKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQuCisgKi8KK3ZvaWQgX19zZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHRoaXNfY3B1LCBpbnQgc29mdGlycSkKK3sKKwlpZiAoY3B1ID09IHRoaXNfY3B1IHx8IF9fdHJ5X3JlbW90ZV9zb2Z0aXJxKGNwLCBjcHUsIHNvZnRpcnEpKQorCQlfX2xvY2FsX3RyaWdnZXIoY3AsIHNvZnRpcnEpOworfQorRVhQT1JUX1NZTUJPTChfX3NlbmRfcmVtb3RlX3NvZnRpcnEpOworCisvKioKKyAqIHNlbmRfcmVtb3RlX3NvZnRpcnEgLSB0cnkgdG8gc2NoZWR1bGUgc29mdGlycSB3b3JrIG9uIGEgcmVtb3RlIGNwdQorICogQGNwOiBwcml2YXRlIFNNUCBjYWxsIGZ1bmN0aW9uIGRhdGEgYXJlYQorICogQGNwdTogdGhlIHJlbW90ZSBjcHUKKyAqIEBzb2Z0aXJxOiB0aGUgc29mdGlycSBmb3IgdGhlIHdvcmsKKyAqCisgKiBMaWtlIF9fc2VuZF9yZW1vdGVfc29mdGlycSBleGNlcHQgdGhhdCBkaXNhYmxpbmcgaW50ZXJydXB0cyBhbmQKKyAqIGNvbXB1dGluZyB0aGUgY3VycmVudCBjcHUgaXMgZG9uZSBmb3IgdGhlIGNhbGxlci4KKyAqLwordm9pZCBzZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdGhpc19jcHU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJX19zZW5kX3JlbW90ZV9zb2Z0aXJxKGNwLCBjcHUsIHRoaXNfY3B1LCBzb2Z0aXJxKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHNlbmRfcmVtb3RlX3NvZnRpcnEpOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCByZW1vdGVfc29mdGlycV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCS8qCisJICogSWYgYSBDUFUgZ29lcyBhd2F5LCBzcGxpY2UgaXRzIGVudHJpZXMgdG8gdGhlIGN1cnJlbnQgQ1BVCisJICogYW5kIHRyaWdnZXIgYSBydW4gb2YgdGhlIHNvZnRpcnEKKwkgKi8KKwlpZiAoYWN0aW9uID09IENQVV9ERUFEIHx8IGFjdGlvbiA9PSBDUFVfREVBRF9GUk9aRU4pIHsKKwkJaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKSBoY3B1OworCQlpbnQgaTsKKworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlmb3IgKGkgPSAwOyBpIDwgTlJfU09GVElSUVM7IGkrKykgeworCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZwZXJfY3B1KHNvZnRpcnFfd29ya19saXN0W2ldLCBjcHUpOworCQkJc3RydWN0IGxpc3RfaGVhZCAqbG9jYWxfaGVhZDsKKworCQkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCQkJY29udGludWU7CisKKwkJCWxvY2FsX2hlYWQgPSAmX19nZXRfY3B1X3Zhcihzb2Z0aXJxX3dvcmtfbGlzdFtpXSk7CisJCQlsaXN0X3NwbGljZV9pbml0KGhlYWQsIGxvY2FsX2hlYWQpOworCQkJcmFpc2Vfc29mdGlycV9pcnFvZmYoaSk7CisJCX0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSByZW1vdGVfc29mdGlycV9jcHVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSByZW1vdGVfc29mdGlycV9jcHVfbm90aWZ5LAorfTsKKwogdm9pZCBfX2luaXQgc29mdGlycV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaW50IGk7CisKIAkJcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS50YWlsID0KIAkJCSZwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLmhlYWQ7CiAJCXBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkudGFpbCA9CiAJCQkmcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkOworCQlmb3IgKGkgPSAwOyBpIDwgTlJfU09GVElSUVM7IGkrKykKKwkJCUlOSVRfTElTVF9IRUFEKCZwZXJfY3B1KHNvZnRpcnFfd29ya19saXN0W2ldLCBjcHUpKTsKIAl9CiAKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZmllcik7CisKIAlvcGVuX3NvZnRpcnEoVEFTS0xFVF9TT0ZUSVJRLCB0YXNrbGV0X2FjdGlvbik7CiAJb3Blbl9zb2Z0aXJxKEhJX1NPRlRJUlEsIHRhc2tsZXRfaGlfYWN0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCBmYzcxZjk5Li4zMWRlYmE4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC04NTMsMzggKzg1MywyOCBAQAogCXJldHVybiBvbGRfZnNnaWQ7CiB9CiAKK3ZvaWQgZG9fc3lzX3RpbWVzKHN0cnVjdCB0bXMgKnRtcykKK3sKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisJY3B1dGltZV90IGN1dGltZSwgY3N0aW1lOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWUoY3VycmVudCwgJmNwdXRpbWUpOworCWN1dGltZSA9IGN1cnJlbnQtPnNpZ25hbC0+Y3V0aW1lOworCWNzdGltZSA9IGN1cnJlbnQtPnNpZ25hbC0+Y3N0aW1lOworCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdG1zLT50bXNfdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZS51dGltZSk7CisJdG1zLT50bXNfc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZS5zdGltZSk7CisJdG1zLT50bXNfY3V0aW1lID0gY3B1dGltZV90b19jbG9ja190KGN1dGltZSk7CisJdG1zLT50bXNfY3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNzdGltZSk7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdGltZXMoc3RydWN0IHRtcyBfX3VzZXIgKiB0YnVmKQogewotCS8qCi0JICoJSW4gdGhlIFNNUCB3b3JsZCB3ZSBtaWdodCBqdXN0IGJlIHVubHVja3kgYW5kIGhhdmUgb25lIG9mCi0JICoJdGhlIHRpbWVzIGluY3JlbWVudCBhcyB3ZSB1c2UgaXQuIFNpbmNlIHRoZSB2YWx1ZSBpcyBhbgotCSAqCWF0b21pY2FsbHkgc2FmZSB0eXBlIHRoaXMgaXMganVzdCBmaW5lLiBDb25jZXB0dWFsbHkgaXRzCi0JICoJYXMgaWYgdGhlIHN5c2NhbGwgdG9vayBhbiBpbnN0YW50IGxvbmdlciB0byBvY2N1ci4KLQkgKi8KIAlpZiAodGJ1ZikgewogCQlzdHJ1Y3QgdG1zIHRtcDsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0JCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lOwogCi0JCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXV0aW1lID0gdHNrLT5zaWduYWwtPnV0aW1lOwotCQlzdGltZSA9IHRzay0+c2lnbmFsLT5zdGltZTsKLQkJdCA9IHRzazsKLQkJZG8gewotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdC0+dXRpbWUpOwotCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdC0+c3RpbWUpOwotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHRzayk7Ci0KLQkJY3V0aW1lID0gdHNrLT5zaWduYWwtPmN1dGltZTsKLQkJY3N0aW1lID0gdHNrLT5zaWduYWwtPmNzdGltZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JCXRtcC50bXNfdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QodXRpbWUpOwotCQl0bXAudG1zX3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KHN0aW1lKTsKLQkJdG1wLnRtc19jdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3V0aW1lKTsKLQkJdG1wLnRtc19jc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3N0aW1lKTsKKwkJZG9fc3lzX3RpbWVzKCZ0bXApOwogCQlpZiAoY29weV90b191c2VyKHRidWYsICZ0bXAsIHNpemVvZihzdHJ1Y3QgdG1zKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0xNDQ5LDcgKzE0MzksNiBAQAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqcmxpbSkKIHsKIAlzdHJ1Y3QgcmxpbWl0IG5ld19ybGltLCAqb2xkX3JsaW07Ci0JdW5zaWduZWQgbG9uZyBpdF9wcm9mX3NlY3M7CiAJaW50IHJldHZhbDsKIAogCWlmIChyZXNvdXJjZSA+PSBSTElNX05MSU1JVFMpCkBAIC0xNTAzLDE4ICsxNDkyLDcgQEAKIAlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKIAkJZ290byBvdXQ7CiAKLQlpdF9wcm9mX3NlY3MgPSBjcHV0aW1lX3RvX3NlY3MoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMpOwotCWlmIChpdF9wcm9mX3NlY3MgPT0gMCB8fCBuZXdfcmxpbS5ybGltX2N1ciA8PSBpdF9wcm9mX3NlY3MpIHsKLQkJdW5zaWduZWQgbG9uZyBybGltX2N1ciA9IG5ld19ybGltLnJsaW1fY3VyOwotCQljcHV0aW1lX3QgY3B1dGltZTsKLQotCQljcHV0aW1lID0gc2Vjc190b19jcHV0aW1lKHJsaW1fY3VyKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNldF9wcm9jZXNzX2NwdV90aW1lcihjdXJyZW50LCBDUFVDTE9DS19QUk9GLCAmY3B1dGltZSwgTlVMTCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQl9CisJdXBkYXRlX3JsaW1pdF9jcHUobmV3X3JsaW0ucmxpbV9jdXIpOwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtMTU1MiwxMSArMTUzMCw4IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIGFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBydXNhZ2UgKnIsCi0JCQkJICAgICBjcHV0aW1lX3QgKnV0aW1lcCwgY3B1dGltZV90ICpzdGltZXApCitzdGF0aWMgdm9pZCBhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgcnVzYWdlICpyKQogewotCSp1dGltZXAgPSBjcHV0aW1lX2FkZCgqdXRpbWVwLCB0LT51dGltZSk7Ci0JKnN0aW1lcCA9IGNwdXRpbWVfYWRkKCpzdGltZXAsIHQtPnN0aW1lKTsKIAlyLT5ydV9udmNzdyArPSB0LT5udmNzdzsKIAlyLT5ydV9uaXZjc3cgKz0gdC0+bml2Y3N3OwogCXItPnJ1X21pbmZsdCArPSB0LT5taW5fZmx0OwpAQCAtMTU3MCwxMiArMTU0NSwxMyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNwdXRpbWVfdCB1dGltZSwgc3RpbWU7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCiAJbWVtc2V0KChjaGFyICopIHIsIDAsIHNpemVvZiAqcik7CiAJdXRpbWUgPSBzdGltZSA9IGNwdXRpbWVfemVybzsKIAogCWlmICh3aG8gPT0gUlVTQUdFX1RIUkVBRCkgewotCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UocCwgciwgJnV0aW1lLCAmc3RpbWUpOworCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UocCwgcik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU5OCw4ICsxNTc0LDkgQEAKIAkJCQlicmVhazsKIAogCQljYXNlIFJVU0FHRV9TRUxGOgotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgcC0+c2lnbmFsLT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBwLT5zaWduYWwtPnN0aW1lKTsKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIGNwdXRpbWUudXRpbWUpOworCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgY3B1dGltZS5zdGltZSk7CiAJCQlyLT5ydV9udmNzdyArPSBwLT5zaWduYWwtPm52Y3N3OwogCQkJci0+cnVfbml2Y3N3ICs9IHAtPnNpZ25hbC0+bml2Y3N3OwogCQkJci0+cnVfbWluZmx0ICs9IHAtPnNpZ25hbC0+bWluX2ZsdDsKQEAgLTE2MDgsNyArMTU4NSw3IEBACiAJCQlyLT5ydV9vdWJsb2NrICs9IHAtPnNpZ25hbC0+b3VibG9jazsKIAkJCXQgPSBwOwogCQkJZG8gewotCQkJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZSh0LCByLCAmdXRpbWUsICZzdGltZSk7CisJCQkJYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHQsIHIpOwogCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKIAkJCX0gd2hpbGUgKHQgIT0gcCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCA2MTdkNDFlLi5iM2NjNzM5IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC04MzMsNiArODMzLDE2IEBACiAJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInNjYW5fdW5ldmljdGFibGVfcGFnZXMiLAorCQkuZGF0YQkJPSAmc2Nhbl91bmV2aWN0YWJsZV9wYWdlcywKKwkJLm1heGxlbgkJPSBzaXplb2Yoc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmc2Nhbl91bmV2aWN0YWJsZV9oYW5kbGVyLAorCX0sCisjZW5kaWYKIC8qCiAgKiBOT1RFOiBkbyBub3QgYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgdGFibGUgdW5sZXNzIHlvdSBoYXZlIHJlYWQKICAqIERvY3VtZW50YXRpb24vc3lzY3RsL2N0bF91bm51bWJlcmVkLnR4dApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggMDkzZDRhYy4uOWVkMmVlYyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zMjUsNiArMzI1LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKKwkvKiBzYXZlIG11bHRfb3JpZyBvbiByZWdpc3RyYXRpb24gKi8KKwljLT5tdWx0X29yaWcgPSBjLT5tdWx0OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc291cmNlX2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBjbG9ja3NvdXJjZV9lbnF1ZXVlKGMpOwogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jCmluZGV4IDRjMjU2ZmQuLjFjYTk5NTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYworKysgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAkucmVhZAkJPSBqaWZmaWVzX3JlYWQsCiAJLm1hc2sJCT0gMHhmZmZmZmZmZiwgLyozMmJpdHMqLwogCS5tdWx0CQk9IE5TRUNfUEVSX0pJRkZZIDw8IEpJRkZJRVNfU0hJRlQsIC8qIGRldGFpbHMgYWJvdmUgKi8KKwkubXVsdF9vcmlnCT0gTlNFQ19QRVJfSklGRlkgPDwgSklGRklFU19TSElGVCwKIAkuc2hpZnQJCT0gSklGRklFU19TSElGVCwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL250cC5jIGIva2VybmVsL3RpbWUvbnRwLmMKaW5kZXggOWMxMTRiNy4uOGZmMTVlNSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvbnRwLmMKKysrIGIva2VybmVsL3RpbWUvbnRwLmMKQEAgLTEwLDEzICsxMCwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKIC8qCkBAIC0yMTcsMTEgKzIxNywxMSBAQAogLyogRGlzYWJsZSB0aGUgY21vcyB1cGRhdGUgLSB1c2VkIGJ5IHZpcnR1YWxpemF0aW9uIGFuZCBlbWJlZGRlZCAqLwogaW50IG5vX3N5bmNfY21vc19jbG9jayAgX19yZWFkX21vc3RseTsKIAotc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHVuc2lnbmVkIGxvbmcgZHVtbXkpOworc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKLXN0YXRpYyBERUZJTkVfVElNRVIoc3luY19jbW9zX3RpbWVyLCBzeW5jX2Ntb3NfY2xvY2ssIDAsIDApOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHN5bmNfY21vc193b3JrLCBzeW5jX2Ntb3NfY2xvY2spOwogCi1zdGF0aWMgdm9pZCBzeW5jX2Ntb3NfY2xvY2sodW5zaWduZWQgbG9uZyBkdW1teSkKK3N0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHRpbWVzcGVjIG5vdywgbmV4dDsKIAlpbnQgZmFpbCA9IDE7CkBAIC0yNTcsMTMgKzI1NywxMyBAQAogCQluZXh0LnR2X3NlYysrOwogCQluZXh0LnR2X25zZWMgLT0gTlNFQ19QRVJfU0VDOwogCX0KLQltb2RfdGltZXIoJnN5bmNfY21vc190aW1lciwgamlmZmllcyArIHRpbWVzcGVjX3RvX2ppZmZpZXMoJm5leHQpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnN5bmNfY21vc193b3JrLCB0aW1lc3BlY190b19qaWZmaWVzKCZuZXh0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIG5vdGlmeV9jbW9zX3RpbWVyKHZvaWQpCiB7CiAJaWYgKCFub19zeW5jX2Ntb3NfY2xvY2spCi0JCW1vZF90aW1lcigmc3luY19jbW9zX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3luY19jbW9zX3dvcmssIDApOwogfQogCiAjZWxzZQpAQCAtMjc2LDM4ICsyNzYsNTAgQEAKIGludCBkb19hZGp0aW1leChzdHJ1Y3QgdGltZXggKnR4YykKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0JbG9uZyBzYXZlX2FkanVzdCwgc2VjOwogCWludCByZXN1bHQ7CiAKLQkvKiBJbiBvcmRlciB0byBtb2RpZnkgYW55dGhpbmcsIHlvdSBnb3R0YSBiZSBzdXBlci11c2VyISAqLwotCWlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiBOb3cgd2UgdmFsaWRhdGUgdGhlIGRhdGEgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzICovCi0KLQlpZiAoKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpID09IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgeworCS8qIFZhbGlkYXRlIHRoZSBkYXRhIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLworCWlmICh0eGMtPm1vZGVzICYgQURKX0FESlRJTUUpIHsKIAkJLyogc2luZ2xlc2hvdCBtdXN0IG5vdCBiZSB1c2VkIHdpdGggYW55IG90aGVyIG1vZGUgYml0cyAqLwotCQlpZiAodHhjLT5tb2RlcyAmIH5BREpfT0ZGU0VUX1NTX1JFQUQpCisJCWlmICghKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1JFQURPTkxZKSAmJgorCQkgICAgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKKwkJCXJldHVybiAtRVBFUk07CisJfSBlbHNlIHsKKwkJLyogSW4gb3JkZXIgdG8gbW9kaWZ5IGFueXRoaW5nLCB5b3UgZ290dGEgYmUgc3VwZXItdXNlciEgKi8KKwkJIGlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmchICovCisJCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0sgJiYKKwkJICAgICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKKwkJICAgICB0eGMtPnRpY2sgPiAxMTAwMDAwL1VTRVJfSFopKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUyAmJiB0aW1lX3N0YXRlICE9IFRJTUVfT0spCisJCQlocnRpbWVyX2NhbmNlbCgmbGVhcF90aW1lcik7CiAJfQogCi0JLyogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyAhICovCi0JaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKLQkJaWYgKHR4Yy0+dGljayA8ICA5MDAwMDAvVVNFUl9IWiB8fAotCQkgICAgdHhjLT50aWNrID4gMTEwMDAwMC9VU0VSX0haKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodGltZV9zdGF0ZSAhPSBUSU1FX09LICYmIHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTKQotCQlocnRpbWVyX2NhbmNlbCgmbGVhcF90aW1lcik7CiAJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKIAogCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAotCS8qIFNhdmUgZm9yIGxhdGVyIC0gc2VtYW50aWNzIG9mIGFkanRpbWUgaXMgdG8gcmV0dXJuIG9sZCB2YWx1ZSAqLwotCXNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7Ci0KIAkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW0gKi8KKwlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CisJCWxvbmcgc2F2ZV9hZGp1c3QgPSB0aW1lX2FkanVzdDsKKworCQlpZiAoISh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9SRUFET05MWSkpIHsKKwkJCS8qIGFkanRpbWUoKSBpcyBpbmRlcGVuZGVudCBmcm9tIG50cF9hZGp0aW1lKCkgKi8KKwkJCXRpbWVfYWRqdXN0ID0gdHhjLT5vZmZzZXQ7CisJCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOworCQl9CisJCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7CisJCWdvdG8gYWRqX2RvbmU7CisJfQogCWlmICh0eGMtPm1vZGVzKSB7CisJCWxvbmcgc2VjOworCiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUykgewogCQkJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmCiAJCQkgICAgISh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKSB7CkBAIC0zNzQsMTMgKzM4Niw4IEBACiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1RBSSAmJiB0eGMtPmNvbnN0YW50ID4gMCkKIAkJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKIAotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpIHsKLQkJCWlmICh0eGMtPm1vZGVzID09IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkKLQkJCQkvKiBhZGp0aW1lKCkgaXMgaW5kZXBlbmRlbnQgZnJvbSBudHBfYWRqdGltZSgpICovCi0JCQkJdGltZV9hZGp1c3QgPSB0eGMtPm9mZnNldDsKLQkJCWVsc2UKLQkJCQludHBfdXBkYXRlX29mZnNldCh0eGMtPm9mZnNldCk7Ci0JCX0KKwkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKQorCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKQogCQkJdGlja191c2VjID0gdHhjLT50aWNrOwogCkBAIC0zODgsMjIgKzM5NSwxOCBAQAogCQkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKIAl9CiAKKwl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCisJCQkJICBOVFBfU0NBTEVfU0hJRlQpOworCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQorCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCithZGpfZG9uZToKIAlyZXN1bHQgPSB0aW1lX3N0YXRlOwkvKiBtb3N0bHkgYFRJTUVfT0snICovCiAJaWYgKHRpbWVfc3RhdHVzICYgKFNUQV9VTlNZTkN8U1RBX0NMT0NLRVJSKSkKIAkJcmVzdWx0ID0gVElNRV9FUlJPUjsKIAotCWlmICgodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpIHx8Ci0JICAgICh0eGMtPm1vZGVzID09IEFESl9PRkZTRVRfU1NfUkVBRCkpCi0JCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7Ci0JZWxzZSB7Ci0JCXR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQgKiBOVFBfSU5URVJWQUxfRlJFUSwKLQkJCQkJICBOVFBfU0NBTEVfU0hJRlQpOwotCQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKLQkJCXR4Yy0+b2Zmc2V0IC89IE5TRUNfUEVSX1VTRUM7Ci0JfQotCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KChzMzIpKHRpbWVfZnJlcSA+PiBQUE1fU0NBTEVfSU5WX1NISUZUKSAqCi0JCQkJCSAoczY0KVBQTV9TQ0FMRV9JTlYsCi0JCQkJCSBOVFBfU0NBTEVfU0hJRlQpOworCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KCh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgorCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLCBOVFBfU0NBTEVfU0hJRlQpOwogCXR4Yy0+bWF4ZXJyb3IJICAgPSB0aW1lX21heGVycm9yOwogCXR4Yy0+ZXN0ZXJyb3IJICAgPSB0aW1lX2VzdGVycm9yOwogCXR4Yy0+c3RhdHVzCSAgID0gdGltZV9zdGF0dXM7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCBjYjAxY2Q4Li5mOThhMWI3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTM4NCw2ICszODQsMTkgQEAKIH0KIAogLyoKKyAqIENhbGxlZCBmcm9tIGlycV9lbnRlcigpIHdoZW4gaWRsZSB3YXMgaW50ZXJydXB0ZWQgdG8gcmVlbmFibGUgdGhlCisgKiBwZXIgY3B1IGRldmljZS4KKyAqLwordm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpCit7CisJaWYgKGNwdV9pc3NldChjcHUsIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzaykpIHsKKwkJc3RydWN0IHRpY2tfZGV2aWNlICp0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKworCQljbG9ja2V2ZW50c19zZXRfbW9kZSh0ZC0+ZXZ0ZGV2LCBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKKwl9Cit9CisKKy8qCiAgKiBIYW5kbGUgb25lc2hvdCBtb2RlIGJyb2FkY2FzdGluZwogICovCiBzdGF0aWMgdm9pZCB0aWNrX2hhbmRsZV9vbmVzaG90X2Jyb2FkY2FzdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmggYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKaW5kZXggNDY5MjQ4Ny4uYjFjMDViZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCisrKyBiL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaApAQCAtMzYsNiArMzYsNyBAQAogZXh0ZXJuIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApOwogZXh0ZXJuIGludCB0aWNrX3Jlc3VtZV9icm9hZGNhc3Rfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYyk7CiBleHRlcm4gaW50IHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYWN0aXZlKHZvaWQpOworZXh0ZXJuIHZvaWQgdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChpbnQgY3B1KTsKICMgZWxzZSAvKiBCUk9BRENBU1QgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9zZXR1cF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKQogewpAQCAtNDUsNiArNDYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfYnJvYWRjYXN0X3N3aXRjaF90b19vbmVzaG90KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfc2h1dGRvd25fYnJvYWRjYXN0X29uZXNob3QodW5zaWduZWQgaW50ICpjcHVwKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpIHsgfQogIyBlbmRpZiAvKiAhQlJPQURDQVNUICovCiAKICNlbHNlIC8qICFPTkVTSE9UICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggYTU0N2JlMS4uNWJiYjEwNCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogfQogCi12b2lkIHRpY2tfbm9oel9zdG9wX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHRpY2tfbm9oel9zdG9wX2lkbGUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKIApAQCAtMzc3LDYgKzM3NywzMiBAQAogCXJldHVybiB0cy0+c2xlZXBfbGVuZ3RoOwogfQogCitzdGF0aWMgdm9pZCB0aWNrX25vaHpfcmVzdGFydChzdHJ1Y3QgdGlja19zY2hlZCAqdHMsIGt0aW1lX3Qgbm93KQoreworCWhydGltZXJfY2FuY2VsKCZ0cy0+c2NoZWRfdGltZXIpOworCWhydGltZXJfc2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciwgdHMtPmlkbGVfdGljayk7CisKKwl3aGlsZSAoMSkgeworCQkvKiBGb3J3YXJkIHRoZSB0aW1lIHRvIGV4cGlyZSBpbiB0aGUgZnV0dXJlICovCisJCWhydGltZXJfZm9yd2FyZCgmdHMtPnNjaGVkX3RpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKKworCQlpZiAodHMtPm5vaHpfbW9kZSA9PSBOT0haX01PREVfSElHSFJFUykgeworCQkJaHJ0aW1lcl9zdGFydF9leHBpcmVzKCZ0cy0+c2NoZWRfdGltZXIsCisJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCQkvKiBDaGVjaywgaWYgdGhlIHRpbWVyIHdhcyBhbHJlYWR5IGluIHRoZSBwYXN0ICovCisJCQlpZiAoaHJ0aW1lcl9hY3RpdmUoJnRzLT5zY2hlZF90aW1lcikpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRpY2tfcHJvZ3JhbV9ldmVudCgKKwkJCQlocnRpbWVyX2dldF9leHBpcmVzKCZ0cy0+c2NoZWRfdGltZXIpLCAwKSkKKwkJCQlicmVhazsKKwkJfQorCQkvKiBVcGRhdGUgamlmZmllcyBhbmQgcmVyZWFkIHRpbWUgKi8KKwkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CisJCW5vdyA9IGt0aW1lX2dldCgpOworCX0KK30KKwogLyoqCiAgKiB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrIC0gcmVzdGFydCB0aGUgaWRsZSB0aWNrIGZyb20gdGhlIGlkbGUgdGFzawogICoKQEAgLTQzMCwyOCArNDU2LDkgQEAKIAkgKi8KIAl0cy0+dGlja19zdG9wcGVkICA9IDA7CiAJdHMtPmlkbGVfZXhpdHRpbWUgPSBub3c7Ci0JaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7Ci0JaHJ0aW1lcl9zZXRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyLCB0cy0+aWRsZV90aWNrKTsKIAotCXdoaWxlICgxKSB7Ci0JCS8qIEZvcndhcmQgdGhlIHRpbWUgdG8gZXhwaXJlIGluIHRoZSBmdXR1cmUgKi8KLQkJaHJ0aW1lcl9mb3J3YXJkKCZ0cy0+c2NoZWRfdGltZXIsIG5vdywgdGlja19wZXJpb2QpOworCXRpY2tfbm9oel9yZXN0YXJ0KHRzLCBub3cpOwogCi0JCWlmICh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9ISUdIUkVTKSB7Ci0JCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciwKLQkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKLQkJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KLQkJCWlmIChocnRpbWVyX2FjdGl2ZSgmdHMtPnNjaGVkX3RpbWVyKSkKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCWlmICghdGlja19wcm9ncmFtX2V2ZW50KAotCQkJCWhydGltZXJfZ2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lciksIDApKQotCQkJCWJyZWFrOwotCQl9Ci0JCS8qIFVwZGF0ZSBqaWZmaWVzIGFuZCByZXJlYWQgdGltZSAqLwotCQl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKLQkJbm93ID0ga3RpbWVfZ2V0KCk7Ci0JfQogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIApAQCAtNTAzLDEwICs1MTAsNiBAQAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCi0JLyogRG8gbm90IHJlc3RhcnQsIHdoZW4gd2UgYXJlIGluIHRoZSBpZGxlIGxvb3AgKi8KLQlpZiAodHMtPnRpY2tfc3RvcHBlZCkKLQkJcmV0dXJuOwotCiAJd2hpbGUgKHRpY2tfbm9oel9yZXByb2dyYW0odHMsIG5vdykpIHsKIAkJbm93ID0ga3RpbWVfZ2V0KCk7CiAJCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOwpAQCAtNTUyLDYgKzU1NSwzNyBAQAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCisvKgorICogV2hlbiBOT0haIGlzIGVuYWJsZWQgYW5kIHRoZSB0aWNrIGlzIHN0b3BwZWQsIHdlIG5lZWQgdG8ga2ljayB0aGUKKyAqIHRpY2sgdGltZXIgZnJvbSBpcnFfZW50ZXIoKSBzbyB0aGF0IHRoZSBqaWZmaWVzIHVwZGF0ZSBpcyBrZXB0CisgKiBhbGl2ZSBkdXJpbmcgbG9uZyBydW5uaW5nIHNvZnRpcnFzLiBUaGF0J3MgdWdseSBhcyBoZWxsLCBidXQKKyAqIGNvcnJlY3RuZXNzIGlzIGtleSBldmVuIGlmIHdlIG5lZWQgdG8gZml4IHRoZSBvZmZlbmRpbmcgc29mdGlycSBpbgorICogdGhlIGZpcnN0IHBsYWNlLgorICoKKyAqIE5vdGUsIHRoaXMgaXMgZGlmZmVyZW50IHRvIHRpY2tfbm9oel9yZXN0YXJ0LiBXZSBqdXN0IGtpY2sgdGhlCisgKiB0aW1lciBhbmQgZG8gbm90IHRvdWNoIHRoZSBvdGhlciBtYWdpYyBiaXRzIHdoaWNoIG5lZWQgdG8gYmUgZG9uZQorICogd2hlbiBpZGxlIGlzIGxlZnQuCisgKi8KK3N0YXRpYyB2b2lkIHRpY2tfbm9oel9raWNrX3RpY2soaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKKwlrdGltZV90IGRlbHRhLCBub3c7CisKKwlpZiAoIXRzLT50aWNrX3N0b3BwZWQpCisJCXJldHVybjsKKworCS8qCisJICogRG8gbm90IHRvdWNoIHRoZSB0aWNrIGRldmljZSwgd2hlbiB0aGUgbmV4dCBleHBpcnkgaXMgZWl0aGVyCisJICogYWxyZWFkeSByZWFjaGVkIG9yIGxlc3MvZXF1YWwgdGhhbiB0aGUgdGljayBwZXJpb2QuCisJICovCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJZGVsdGEgPQlrdGltZV9zdWIoaHJ0aW1lcl9nZXRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyKSwgbm93KTsKKwlpZiAoZGVsdGEudHY2NCA8PSB0aWNrX3BlcmlvZC50djY0KQorCQlyZXR1cm47CisKKwl0aWNrX25vaHpfcmVzdGFydCh0cywgbm93KTsKK30KKwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9zd2l0Y2hfdG9fbm9oeih2b2lkKSB7IH0KQEAgLTU1OSw2ICs1OTMsMTkgQEAKICNlbmRpZiAvKiBOT19IWiAqLwogCiAvKgorICogQ2FsbGVkIGZyb20gaXJxX2VudGVyIHRvIG5vdGlmeSBhYm91dCB0aGUgcG9zc2libGUgaW50ZXJydXB0aW9uIG9mIGlkbGUoKQorICovCit2b2lkIHRpY2tfY2hlY2tfaWRsZShpbnQgY3B1KQoreworCXRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoY3B1KTsKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwl0aWNrX25vaHpfc3RvcF9pZGxlKGNwdSk7CisJdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKCk7CisJdGlja19ub2h6X2tpY2tfdGljayhjcHUpOworI2VuZGlmCit9CisKKy8qCiAgKiBIaWdoIHJlc29sdXRpb24gdGltZXIgc3BlY2lmaWMgY29kZQogICovCiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwpAQCAtNjExLDEwICs2NTgsNiBAQAogCQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CiAJfQogCi0JLyogRG8gbm90IHJlc3RhcnQsIHdoZW4gd2UgYXJlIGluIHRoZSBpZGxlIGxvb3AgKi8KLQlpZiAodHMtPnRpY2tfc3RvcHBlZCkKLQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwotCiAJaHJ0aW1lcl9mb3J3YXJkKHRpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKIAogCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBlOTFjMjlmLi5lN2FjZmI0IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTU4LDI3ICs1OCwyNiBAQAogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQogLyoqCi0gKiBfX2dldF9uc2VjX29mZnNldCAtIFJldHVybnMgbmFub3NlY29uZHMgc2luY2UgbGFzdCBjYWxsIHRvIHBlcmlvZGljX2hvb2sKKyAqIGNsb2Nrc291cmNlX2ZvcndhcmRfbm93IC0gdXBkYXRlIGNsb2NrIHRvIHRoZSBjdXJyZW50IHRpbWUKICAqCi0gKiBwcml2YXRlIGZ1bmN0aW9uLCBtdXN0IGhvbGQgeHRpbWVfbG9jayBsb2NrIHdoZW4gYmVpbmcKLSAqIGNhbGxlZC4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHNpbmNlIHRoZQotICogbGFzdCBjYWxsIHRvIHVwZGF0ZV93YWxsX3RpbWUoKSAoYWRqdXN0ZWQgYnkgTlRQIHNjYWxpbmcpCisgKiBGb3J3YXJkIHRoZSBjdXJyZW50IGNsb2NrIHRvIHVwZGF0ZSBpdHMgc3RhdGUgc2luY2UgdGhlIGxhc3QgY2FsbCB0bworICogdXBkYXRlX3dhbGxfdGltZSgpLiBUaGlzIGlzIHVzZWZ1bCBiZWZvcmUgc2lnbmlmaWNhbnQgY2xvY2sgY2hhbmdlcywKKyAqIGFzIGl0IGF2b2lkcyBoYXZpbmcgdG8gZGVhbCB3aXRoIHRoaXMgdGltZSBvZmZzZXQgZXhwbGljaXRseS4KICAqLwotc3RhdGljIGlubGluZSBzNjQgX19nZXRfbnNlY19vZmZzZXQodm9pZCkKK3N0YXRpYyB2b2lkIGNsb2Nrc291cmNlX2ZvcndhcmRfbm93KHZvaWQpCiB7CiAJY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOwotCXM2NCBuc19vZmZzZXQ7CisJczY0IG5zZWM7CiAKLQkvKiByZWFkIGNsb2Nrc291cmNlOiAqLwogCWN5Y2xlX25vdyA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOwotCi0JLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB1cGRhdGVfd2FsbF90aW1lOiAqLwogCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOworCWNsb2NrLT5jeWNsZV9sYXN0ID0gY3ljbGVfbm93OwogCi0JLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KLQluc19vZmZzZXQgPSBjeWMybnMoY2xvY2ssIGN5Y2xlX2RlbHRhKTsKKwluc2VjID0gY3ljMm5zKGNsb2NrLCBjeWNsZV9kZWx0YSk7CisJdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgbnNlYyk7CiAKLQlyZXR1cm4gbnNfb2Zmc2V0OworCW5zZWMgPSAoKHM2NCljeWNsZV9kZWx0YSAqIGNsb2NrLT5tdWx0X29yaWcpID4+IGNsb2NrLT5zaGlmdDsKKwljbG9jay0+cmF3X3RpbWUudHZfbnNlYyArPSBuc2VjOwogfQogCiAvKioKQEAgLTg5LDYgKzg4LDcgQEAKICAqLwogdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnRzKQogeworCWN5Y2xlX3QgY3ljbGVfbm93LCBjeWNsZV9kZWx0YTsKIAl1bnNpZ25lZCBsb25nIHNlcTsKIAlzNjQgbnNlY3M7CiAKQEAgLTk2LDcgKzk2LDE1IEBACiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwogCiAJCSp0cyA9IHh0aW1lOwotCQluc2VjcyA9IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisKKwkJLyogcmVhZCBjbG9ja3NvdXJjZTogKi8KKwkJY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7CisKKwkJLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB1cGRhdGVfd2FsbF90aW1lOiAqLworCQljeWNsZV9kZWx0YSA9IChjeWNsZV9ub3cgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKKworCQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLworCQluc2VjcyA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOwogCiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKQEAgLTEyOSwyMiArMTM3LDIyIEBACiAgKi8KIGludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKIHsKKwlzdHJ1Y3QgdGltZXNwZWMgdHNfZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7CiAKIAlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCi0JbnNlYyAtPSBfX2dldF9uc2VjX29mZnNldCgpOworCWNsb2Nrc291cmNlX2ZvcndhcmRfbm93KCk7CiAKLQl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwotCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CisJdHNfZGVsdGEudHZfc2VjID0gdHYtPnR2X3NlYyAtIHh0aW1lLnR2X3NlYzsKKwl0c19kZWx0YS50dl9uc2VjID0gdHYtPnR2X25zZWMgLSB4dGltZS50dl9uc2VjOworCXdhbGxfdG9fbW9ub3RvbmljID0gdGltZXNwZWNfc3ViKHdhbGxfdG9fbW9ub3RvbmljLCB0c19kZWx0YSk7CiAKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7CisJeHRpbWUgPSAqdHY7CisKIAl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAKIAljbG9jay0+ZXJyb3IgPSAwOwpAQCAtMTcwLDIyICsxNzgsMTkgQEAKIHN0YXRpYyB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKQogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqbmV3OwotCWN5Y2xlX3Qgbm93OwotCXU2NCBuc2VjOwogCiAJbmV3ID0gY2xvY2tzb3VyY2VfZ2V0X25leHQoKTsKIAogCWlmIChjbG9jayA9PSBuZXcpCiAJCXJldHVybjsKIAotCW5ldy0+Y3ljbGVfbGFzdCA9IDA7Ci0Jbm93ID0gY2xvY2tzb3VyY2VfcmVhZChuZXcpOwotCW5zZWMgPSAgX19nZXRfbnNlY19vZmZzZXQoKTsKLQl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCBuc2VjKTsKKwljbG9ja3NvdXJjZV9mb3J3YXJkX25vdygpOworCisJbmV3LT5yYXdfdGltZSA9IGNsb2NrLT5yYXdfdGltZTsKIAogCWNsb2NrID0gbmV3OwotCWNsb2NrLT5jeWNsZV9sYXN0ID0gbm93OwotCisJY2xvY2stPmN5Y2xlX2xhc3QgPSAwOworCWNsb2NrLT5jeWNsZV9sYXN0ID0gY2xvY2tzb3VyY2VfcmVhZChuZXcpOwogCWNsb2NrLT5lcnJvciA9IDA7CiAJY2xvY2stPnh0aW1lX25zZWMgPSAwOwogCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgTlRQX0lOVEVSVkFMX0xFTkdUSCk7CkBAIC0yMDAsMTEgKzIwNSw0NCBAQAogCSAqLwogfQogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja3NvdXJjZV9mb3J3YXJkX25vdyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHM2NCBfX2dldF9uc2VjX29mZnNldCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogLyoqCisgKiBnZXRyYXdtb25vdG9uaWMgLSBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgaW4gYSB0aW1lc3BlYworICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWMgdG8gYmUgc2V0CisgKgorICogUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIChjb21wbGV0ZWx5IHVuLW1vZGlmaWVkIGJ5IG50cCkKKyAqLwordm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlzNjQgbnNlY3M7CisJY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOworCisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKKworCQkvKiByZWFkIGNsb2Nrc291cmNlOiAqLworCQljeWNsZV9ub3cgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCisJCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOworCisJCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJCW5zZWNzID0gKChzNjQpY3ljbGVfZGVsdGEgKiBjbG9jay0+bXVsdF9vcmlnKSA+PiBjbG9jay0+c2hpZnQ7CisKKwkJKnRzID0gY2xvY2stPnJhd190aW1lOworCisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisKKwl0aW1lc3BlY19hZGRfbnModHMsIG5zZWNzKTsKK30KK0VYUE9SVF9TWU1CT0woZ2V0cmF3bW9ub3RvbmljKTsKKworCisvKioKICAqIHRpbWVrZWVwaW5nX3ZhbGlkX2Zvcl9ocmVzIC0gQ2hlY2sgaWYgdGltZWtlZXBpbmcgaXMgc3VpdGFibGUgZm9yIGhyZXMKICAqLwogaW50IHRpbWVrZWVwaW5nX3ZhbGlkX2Zvcl9ocmVzKHZvaWQpCkBAIC0yNjUsOCArMzAzLDYgQEAKIHN0YXRpYyBpbnQgdGltZWtlZXBpbmdfc3VzcGVuZGVkOwogLyogdGltZSBpbiBzZWNvbmRzIHdoZW4gc3VzcGVuZCBiZWdhbiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lOwotLyogeHRpbWUgb2Zmc2V0IHdoZW4gd2Ugd2VudCBpbnRvIHN1c3BlbmQgKi8KLXN0YXRpYyBzNjQgdGltZWtlZXBpbmdfc3VzcGVuZF9uc2VjczsKIAogLyoqCiAgKiB0aW1la2VlcGluZ19yZXN1bWUgLSBSZXN1bWVzIHRoZSBnZW5lcmljIHRpbWVrZWVwaW5nIHN1YnN5c3RlbS4KQEAgLTI5Miw4ICszMjgsNiBAQAogCQl3YWxsX3RvX21vbm90b25pYy50dl9zZWMgLT0gc2xlZXBfbGVuZ3RoOwogCQl0b3RhbF9zbGVlcF90aW1lICs9IHNsZWVwX2xlbmd0aDsKIAl9Ci0JLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCB4dGltZSByZWZlcmVuY2UgKi8KLQl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCB0aW1la2VlcGluZ19zdXNwZW5kX25zZWNzKTsKIAl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLwogCWNsb2NrLT5jeWNsZV9sYXN0ID0gMDsKQEAgLTMxOSw4ICszNTMsNyBAQAogCXRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSA9IHJlYWRfcGVyc2lzdGVudF9jbG9jaygpOwogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JLyogR2V0IHRoZSBjdXJyZW50IHh0aW1lIG9mZnNldCAqLwotCXRpbWVrZWVwaW5nX3N1c3BlbmRfbnNlY3MgPSBfX2dldF9uc2VjX29mZnNldCgpOworCWNsb2Nrc291cmNlX2ZvcndhcmRfbm93KCk7CiAJdGltZWtlZXBpbmdfc3VzcGVuZGVkID0gMTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCkBAIC00NTQsMjMgKzQ4NywyOSBAQAogI2Vsc2UKIAlvZmZzZXQgPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CiAjZW5kaWYKLQljbG9jay0+eHRpbWVfbnNlYyArPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OworCWNsb2NrLT54dGltZV9uc2VjID0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKIAogCS8qIG5vcm1hbGx5IHRoaXMgbG9vcCB3aWxsIHJ1biBqdXN0IG9uY2UsIGhvd2V2ZXIgaW4gdGhlCiAJICogY2FzZSBvZiBsb3N0IG9yIGxhdGUgdGlja3MsIGl0IHdpbGwgYWNjdW11bGF0ZSBjb3JyZWN0bHkuCiAJICovCiAJd2hpbGUgKG9mZnNldCA+PSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWwpIHsKIAkJLyogYWNjdW11bGF0ZSBvbmUgaW50ZXJ2YWwgKi8KLQkJY2xvY2stPnh0aW1lX25zZWMgKz0gY2xvY2stPnh0aW1lX2ludGVydmFsOwotCQljbG9jay0+Y3ljbGVfbGFzdCArPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CiAJCW9mZnNldCAtPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CisJCWNsb2NrLT5jeWNsZV9sYXN0ICs9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKIAorCQljbG9jay0+eHRpbWVfbnNlYyArPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWw7CiAJCWlmIChjbG9jay0+eHRpbWVfbnNlYyA+PSAodTY0KU5TRUNfUEVSX1NFQyA8PCBjbG9jay0+c2hpZnQpIHsKIAkJCWNsb2NrLT54dGltZV9uc2VjIC09ICh1NjQpTlNFQ19QRVJfU0VDIDw8IGNsb2NrLT5zaGlmdDsKIAkJCXh0aW1lLnR2X3NlYysrOwogCQkJc2Vjb25kX292ZXJmbG93KCk7CiAJCX0KIAorCQljbG9jay0+cmF3X3RpbWUudHZfbnNlYyArPSBjbG9jay0+cmF3X2ludGVydmFsOworCQlpZiAoY2xvY2stPnJhd190aW1lLnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKSB7CisJCQljbG9jay0+cmF3X3RpbWUudHZfbnNlYyAtPSBOU0VDX1BFUl9TRUM7CisJCQljbG9jay0+cmF3X3RpbWUudHZfc2VjKys7CisJCX0KKwogCQkvKiBhY2N1bXVsYXRlIGVycm9yIGJldHdlZW4gTlRQIGFuZCBjbG9jayBpbnRlcnZhbCAqLwogCQljbG9jay0+ZXJyb3IgKz0gdGlja19sZW5ndGg7CiAJCWNsb2NrLT5lcnJvciAtPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWwgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIGNsb2NrLT5zaGlmdCk7CkBAIC00NzksOSArNTE4LDEyIEBACiAJLyogY29ycmVjdCB0aGUgY2xvY2sgd2hlbiBOVFAgZXJyb3IgaXMgdG9vIGJpZyAqLwogCWNsb2Nrc291cmNlX2FkanVzdChvZmZzZXQpOwogCi0JLyogc3RvcmUgZnVsbCBuYW5vc2Vjb25kcyBpbnRvIHh0aW1lICovCi0JeHRpbWUudHZfbnNlYyA9IChzNjQpY2xvY2stPnh0aW1lX25zZWMgPj4gY2xvY2stPnNoaWZ0OworCS8qIHN0b3JlIGZ1bGwgbmFub3NlY29uZHMgaW50byB4dGltZSBhZnRlciByb3VuZGluZyBpdCB1cCBhbmQKKwkgKiBhZGQgdGhlIHJlbWFpbmRlciB0byB0aGUgZXJyb3IgZGlmZmVyZW5jZS4KKwkgKi8KKwl4dGltZS50dl9uc2VjID0gKChzNjQpY2xvY2stPnh0aW1lX25zZWMgPj4gY2xvY2stPnNoaWZ0KSArIDE7CiAJY2xvY2stPnh0aW1lX25zZWMgLT0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKKwljbG9jay0+ZXJyb3IgKz0gY2xvY2stPnh0aW1lX25zZWMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIGNsb2NrLT5zaGlmdCk7CiAKIAl1cGRhdGVfeHRpbWVfY2FjaGUoY3ljMm5zKGNsb2NrLCBvZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IDEyMmVlNzUuLmE5OTliOTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTQ3LDEzICs0NywxNCBAQAogfQogCiBzdGF0aWMgdm9pZAotcHJpbnRfdGltZXIoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGludCBpZHgsIHU2NCBub3cpCitwcmludF90aW1lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyICp0YWRkciwgc3RydWN0IGhydGltZXIgKnRpbWVyLAorCSAgICBpbnQgaWR4LCB1NjQgbm93KQogewogI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUwogCWNoYXIgdG1wW1RBU0tfQ09NTV9MRU4gKyAxXTsKICNlbmRpZgogCVNFUV9wcmludGYobSwgIiAjJWQ6ICIsIGlkeCk7Ci0JcHJpbnRfbmFtZV9vZmZzZXQobSwgdGltZXIpOworCXByaW50X25hbWVfb2Zmc2V0KG0sIHRhZGRyKTsKIAlTRVFfcHJpbnRmKG0sICIsICIpOwogCXByaW50X25hbWVfb2Zmc2V0KG0sIHRpbWVyLT5mdW5jdGlvbik7CiAJU0VRX3ByaW50ZihtLCAiLCBTOiUwMmx4IiwgdGltZXItPnN0YXRlKTsKQEAgLTEwMSw3ICsxMDIsNyBAQAogCQl0bXAgPSAqdGltZXI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiAKLQkJcHJpbnRfdGltZXIobSwgJnRtcCwgaSwgbm93KTsKKwkJcHJpbnRfdGltZXIobSwgdGltZXIsICZ0bXAsIGksIG5vdyk7CiAJCW5leHQrKzsKIAkJZ290byBuZXh0X29uZTsKIAl9CkBAIC0xMTEsNiArMTEyLDcgQEAKIHN0YXRpYyB2b2lkCiBwcmludF9iYXNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwgdTY0IG5vdykKIHsKKwlTRVFfcHJpbnRmKG0sICIgIC5iYXNlOiAgICAgICAlcFxuIiwgYmFzZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuaW5kZXg6ICAgICAgJWRcbiIsCiAJCQliYXNlLT5pbmRleCk7CiAJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLApAQCAtMTg1LDEyICsxODcsMTYgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiBzdGF0aWMgdm9pZAotcHJpbnRfdGlja2RldmljZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0aWNrX2RldmljZSAqdGQpCitwcmludF90aWNrZGV2aWNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRpY2tfZGV2aWNlICp0ZCwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSB0ZC0+ZXZ0ZGV2OwogCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKIAlTRVFfcHJpbnRmKG0sICJUaWNrIERldmljZTogbW9kZTogICAgICVkXG4iLCB0ZC0+bW9kZSk7CisJaWYgKGNwdSA8IDApCisJCVNFUV9wcmludGYobSwgIkJyb2FkY2FzdCBkZXZpY2VcbiIpOworCWVsc2UKKwkJU0VRX3ByaW50ZihtLCAiUGVyIENQVSBkZXZpY2U6ICVkXG4iLCBjcHUpOwogCiAJU0VRX3ByaW50ZihtLCAiQ2xvY2sgRXZlbnQgRGV2aWNlOiAiKTsKIAlpZiAoIWRldikgewpAQCAtMjI0LDcgKzIzMCw3IEBACiAJaW50IGNwdTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAotCXByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfYnJvYWRjYXN0X2RldmljZSgpKTsKKwlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2UoKSwgLTEpOwogCVNFUV9wcmludGYobSwgInRpY2tfYnJvYWRjYXN0X21hc2s6ICUwOGx4XG4iLAogCQkgICB0aWNrX2dldF9icm9hZGNhc3RfbWFzaygpLT5iaXRzWzBdKTsKICNpZmRlZiBDT05GSUdfVElDS19PTkVTSE9UCkBAIC0yMzQsNyArMjQwLDcgQEAKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwogI2VuZGlmCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCSAgIHByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfZGV2aWNlKGNwdSkpOworCQlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2RldmljZShjcHUpLCBjcHUpOwogCVNFUV9wcmludGYobSwgIlxuIik7CiB9CiAjZWxzZQpAQCAtMjQ2LDcgKzI1Miw3IEBACiAJdTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlpbnQgY3B1OwogCi0JU0VRX3ByaW50ZihtLCAiVGltZXIgTGlzdCBWZXJzaW9uOiB2MC4zXG4iKTsKKwlTRVFfcHJpbnRmKG0sICJUaW1lciBMaXN0IFZlcnNpb246IHYwLjRcbiIpOwogCVNFUV9wcmludGYobSwgIkhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOiAlZFxuIiwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVMpOwogCVNFUV9wcmludGYobSwgIm5vdyBhdCAlTGQgbnNlY3NcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbm93KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA1MTBmZTY5Li41NmJlY2YzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtMTQzNiw5ICsxNDM2LDExIEBACiAJQlVHX09OKGNwdV9vbmxpbmUoY3B1KSk7CiAJb2xkX2Jhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7CiAJbmV3X2Jhc2UgPSBnZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCUJVR19PTihvbGRfYmFzZS0+cnVubmluZ190aW1lcik7CkBAIC0xNDUzLDggKzE0NTUsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7Ci0Jc3Bpbl91bmxvY2soJm5ld19iYXNlLT5sb2NrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJcHV0X2NwdV92YXIodHZlY19iYXNlcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDI2M2U5ZTYuLjFjYjNlMWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC0xLDIzICsxLDM3IEBACiAjCiAjIEFyY2hpdGVjdHVyZXMgdGhhdCBvZmZlciBhbiBGVFJBQ0UgaW1wbGVtZW50YXRpb24gc2hvdWxkIHNlbGVjdCBIQVZFX0ZUUkFDRToKICMKLWNvbmZpZyBIQVZFX0ZUUkFDRQorCitjb25maWcgTk9QX1RSQUNFUgogCWJvb2wKIAorY29uZmlnIEhBVkVfRlRSQUNFCisJYm9vbAorCXNlbGVjdCBOT1BfVFJBQ0VSCisKIGNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJYm9vbAogCitjb25maWcgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAorCWJvb2wKKwogY29uZmlnIFRSQUNFUl9NQVhfVFJBQ0UKIAlib29sCiAKK2NvbmZpZyBSSU5HX0JVRkZFUgorCWJvb2wKKwogY29uZmlnIFRSQUNJTkcKIAlib29sCiAJc2VsZWN0IERFQlVHX0ZTCisJc2VsZWN0IFJJTkdfQlVGRkVSCiAJc2VsZWN0IFNUQUNLVFJBQ0UKKwlzZWxlY3QgVFJBQ0VQT0lOVFMKIAogY29uZmlnIEZUUkFDRQogCWJvb2wgIktlcm5lbCBGdW5jdGlvbiBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IEZSQU1FX1BPSU5URVIKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKQEAgLTM2LDYgKzUwLDcgQEAKIAlkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQogCWRlcGVuZHMgb24gSEFWRV9GVFJBQ0UKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDRV9JUlFGTEFHUwogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTU5LDYgKzc0LDcgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQogCWRlcGVuZHMgb24gUFJFRU1QVAogCWRlcGVuZHMgb24gSEFWRV9GVFJBQ0UKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKIAloZWxwCkBAIC04Niw2ICsxMDIsNyBAQAogY29uZmlnIFNDSEVEX1RSQUNFUgogCWJvb2wgIlNjaGVkdWxpbmcgTGF0ZW5jeSBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTk2LDE2ICsxMTMsNTYgQEAKIGNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAlib29sICJUcmFjZSBwcm9jZXNzIGNvbnRleHQgc3dpdGNoZXMiCiAJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgTUFSS0VSUwogCWhlbHAKIAkgIFRoaXMgdHJhY2VyIGdldHMgY2FsbGVkIGZyb20gdGhlIGNvbnRleHQgc3dpdGNoIGFuZCByZWNvcmRzCiAJICBhbGwgc3dpdGNoaW5nIG9mIHRhc2tzLgogCitjb25maWcgQk9PVF9UUkFDRVIKKwlib29sICJUcmFjZSBib290IGluaXRjYWxscyIKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gb3B0aW1pemUgYm9vdCB0aW1lczogaXQgcmVjb3JkcworCSAgdGhlIHRpbWluZ3Mgb2YgdGhlIGluaXRjYWxscyBhbmQgdHJhY2VzIGtleSBldmVudHMgYW5kIHRoZSBpZGVudGl0eQorCSAgb2YgdGFza3MgdGhhdCBjYW4gY2F1c2UgYm9vdCBkZWxheXMsIHN1Y2ggYXMgY29udGV4dC1zd2l0Y2hlcy4KKworCSAgSXRzIGFpbSBpcyB0byBiZSBwYXJzZWQgYnkgdGhlIC9zY3JpcHRzL2Jvb3RncmFwaC5wbCB0b29sIHRvCisJICBwcm9kdWNlIHByZXR0eSBncmFwaGljcyBhYm91dCBib290IGluZWZmaWNpZW5jaWVzLCBnaXZpbmcgYSB2aXN1YWwKKwkgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkZWxheXMgZHVyaW5nIGluaXRjYWxscyAtIGJ1dCB0aGUgcmF3CisJICAvZGVidWcvdHJhY2luZy90cmFjZSB0ZXh0IG91dHB1dCBpcyByZWFkYWJsZSB0b28uCisKKwkgICggTm90ZSB0aGF0IHRyYWNpbmcgc2VsZiB0ZXN0cyBjYW4ndCBiZSBlbmFibGVkIGlmIHRoaXMgdHJhY2VyIGlzCisJICAgIHNlbGVjdGVkLCBiZWNhdXNlIHRoZSBzZWxmLXRlc3RzIGFyZSBhbiBpbml0Y2FsbCBhcyB3ZWxsIGFuZCB0aGF0CisJICAgIHdvdWxkIGludmFsaWRhdGUgdGhlIGJvb3QgdHJhY2UuICkKKworY29uZmlnIFNUQUNLX1RSQUNFUgorCWJvb2wgIlRyYWNlIG1heCBzdGFjayIKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlzZWxlY3QgRlRSQUNFCisJc2VsZWN0IFNUQUNLVFJBQ0UKKwloZWxwCisJICBUaGlzIHNwZWNpYWwgdHJhY2VyIHJlY29yZHMgdGhlIG1heGltdW0gc3RhY2sgZm9vdHByaW50IG9mIHRoZQorCSAga2VybmVsIGFuZCBkaXNwbGF5cyBpdCBpbiBkZWJ1Z2ZzL3RyYWNpbmcvc3RhY2tfdHJhY2UuCisKKwkgIFRoaXMgdHJhY2VyIHdvcmtzIGJ5IGhvb2tpbmcgaW50byBldmVyeSBmdW5jdGlvbiBjYWxsIHRoYXQgdGhlCisJICBrZXJuZWwgZXhlY3V0ZXMsIGFuZCBrZWVwaW5nIGEgbWF4aW11bSBzdGFjayBkZXB0aCB2YWx1ZSBhbmQKKwkgIHN0YWNrLXRyYWNlIHNhdmVkLiBCZWNhdXNlIHRoaXMgbG9naWMgaGFzIHRvIGV4ZWN1dGUgaW4gZXZlcnkKKwkgIGtlcm5lbCBmdW5jdGlvbiwgYWxsIHRoZSB0aW1lLCB0aGlzIG9wdGlvbiBjYW4gc2xvdyBkb3duIHRoZQorCSAga2VybmVsIG1lYXN1cmFibHkgYW5kIGlzIGdlbmVyYWxseSBpbnRlbmRlZCBmb3Iga2VybmVsCisJICBkZXZlbG9wZXJzIG9ubHkuCisKKwkgIFNheSBOIGlmIHVuc3VyZS4KKwogY29uZmlnIERZTkFNSUNfRlRSQUNFCiAJYm9vbCAiZW5hYmxlL2Rpc2FibGUgZnRyYWNlIHRyYWNlcG9pbnRzIGR5bmFtaWNhbGx5IgogCWRlcGVuZHMgb24gRlRSQUNFCiAJZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAgICAgICAgICBUaGlzIG9wdGlvbiB3aWxsIG1vZGlmeSBhbGwgdGhlIGNhbGxzIHRvIGZ0cmFjZSBkeW5hbWljYWxseQpAQCAtMTIxLDEyICsxNzgsMTcgQEAKIAkgd2VyZSBtYWRlLiBJZiBzbywgaXQgcnVucyBzdG9wX21hY2hpbmUgKHN0b3BzIGFsbCBDUFVTKQogCSBhbmQgbW9kaWZpZXMgdGhlIGNvZGUgdG8ganVtcCBvdmVyIHRoZSBjYWxsIHRvIGZ0cmFjZS4KIAorY29uZmlnIEZUUkFDRV9NQ09VTlRfUkVDT1JECisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0UKKwlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKKwogY29uZmlnIEZUUkFDRV9TRUxGVEVTVAogCWJvb2wKIAogY29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1QKIAlib29sICJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZSIKLQlkZXBlbmRzIG9uIFRSQUNJTkcKKwlkZXBlbmRzIG9uIFRSQUNJTkcgJiYgREVCVUdfS0VSTkVMICYmICFCT09UX1RSQUNFUgogCXNlbGVjdCBGVFJBQ0VfU0VMRlRFU1QKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwZXJmb3JtcyBhIHNlcmllcyBvZiBzdGFydHVwIHRlc3RzIG9uIGZ0cmFjZS4gT24gYm9vdHVwCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKaW5kZXggNzFkMTdkZS4uYTg1ZGZiYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL01ha2VmaWxlCisrKyBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogZW5kaWYKIAogb2JqLSQoQ09ORklHX0ZUUkFDRSkgKz0gbGliZnRyYWNlLm8KK29iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIubwogCiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2Uubwogb2JqLSQoQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUikgKz0gdHJhY2Vfc2NoZWRfc3dpdGNoLm8KQEAgLTE5LDYgKzIwLDkgQEAKIG9iai0kKENPTkZJR19JUlFTT0ZGX1RSQUNFUikgKz0gdHJhY2VfaXJxc29mZi5vCiBvYmotJChDT05GSUdfUFJFRU1QVF9UUkFDRVIpICs9IHRyYWNlX2lycXNvZmYubwogb2JqLSQoQ09ORklHX1NDSEVEX1RSQUNFUikgKz0gdHJhY2Vfc2NoZWRfd2FrZXVwLm8KK29iai0kKENPTkZJR19OT1BfVFJBQ0VSKSArPSB0cmFjZV9ub3Aubworb2JqLSQoQ09ORklHX1NUQUNLX1RSQUNFUikgKz0gdHJhY2Vfc3RhY2subwogb2JqLSQoQ09ORklHX01NSU9UUkFDRSkgKz0gdHJhY2VfbW1pb3RyYWNlLm8KK29iai0kKENPTkZJR19CT09UX1RSQUNFUikgKz0gdHJhY2VfYm9vdC5vCiAKIGxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggZjZlM2FmMy4uNGRkYTRmNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtODEsNyArODEsNyBAQAogCiBzdGF0aWMgaW50IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCiB7Ci0JLyogU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBieSBpbnRlcnJ1cHRzICovCisJLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwogCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwogCiAJb3BzLT5uZXh0ID0gZnRyYWNlX2xpc3Q7CkBAIC0xMTUsNiArMTE1LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX29wcyAqKnA7CiAJaW50IHJldCA9IDA7CiAKKwkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCiAJc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAkvKgpAQCAtMTUzLDYgKzE1NCwzMCBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKKyNpZm5kZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECisvKgorICogVGhlIGhhc2ggbG9jayBpcyBvbmx5IG5lZWRlZCB3aGVuIHRoZSByZWNvcmRpbmcgb2YgdGhlIG1jb3VudAorICogY2FsbGVycyBhcmUgZHluYW1pYy4gVGhhdCBpcywgYnkgdGhlIGNhbGxlciB0aGVtc2VsdmVzIGFuZAorICogbm90IHJlY29yZGVkIHZpYSB0aGUgY29tcGlsYXRpb24uCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnRyYWNlX2hhc2hfbG9jayk7CisjZGVmaW5lIGZ0cmFjZV9oYXNoX2xvY2soZmxhZ3MpCSAgc3Bpbl9sb2NrX2lycXNhdmUoJmZ0cmFjZV9oYXNoX2xvY2ssIGZsYWdzKQorI2RlZmluZSBmdHJhY2VfaGFzaF91bmxvY2soZmxhZ3MpIFwKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZ0cmFjZV9oYXNoX2xvY2ssIGZsYWdzKQorI2Vsc2UKKy8qIFRoaXMgaXMgcHJvdGVjdGVkIHZpYSB0aGUgZnRyYWNlX2xvY2sgd2l0aCBNQ09VTlRfUkVDT1JELiAqLworI2RlZmluZSBmdHJhY2VfaGFzaF9sb2NrKGZsYWdzKSAgIGRvIHsgKHZvaWQpKGZsYWdzKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZnRyYWNlX2hhc2hfdW5sb2NrKGZsYWdzKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKgorICogU2luY2UgTUNPVU5UX0FERFIgbWF5IHBvaW50IHRvIG1jb3VudCBpdHNlbGYsIHdlIGRvIG5vdCB3YW50CisgKiB0byBnZXQgaXQgY29uZnVzZWQgYnkgcmVhZGluZyBhIHJlZmVyZW5jZSBpbiB0aGUgY29kZSBhcyB3ZQorICogYXJlIHBhcnNpbmcgb24gb2JqY29weSBvdXRwdXQgb2YgdGV4dC4gVXNlIGEgdmFyaWFibGUgZm9yCisgKiBpdCBpbnN0ZWFkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtY291bnRfYWRkciA9IE1DT1VOVF9BRERSOworCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmdHJhY2VkX3Rhc2s7CiAKIGVudW0gewpAQCAtMTcxLDcgKzE5Niw2IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGZ0cmFjZV9zaHV0ZG93bl9kaXNhYmxlX2NwdSk7CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnRyYWNlX3NodXRkb3duX2xvY2spOwogc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VkX2xvY2spOwogc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VfcmVnZXhfbG9jayk7CiAKQEAgLTI5NCwxMyArMzE4LDM3IEBACiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX3JlYyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQogewotCS8qIG5vIGxvY2tpbmcsIG9ubHkgY2FsbGVkIGZyb20ga3N0b3BfbWFjaGluZSAqLwotCiAJcmVjLT5pcCA9ICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9mcmVlX3JlY29yZHM7CiAJZnRyYWNlX2ZyZWVfcmVjb3JkcyA9IHJlYzsKIAlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GUkVFOwogfQogCit2b2lkIGZ0cmFjZV9yZWxlYXNlKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCXVuc2lnbmVkIGxvbmcgcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZSA9IHMgKyBzaXplOworCWludCBpOworCisJaWYgKGZ0cmFjZV9kaXNhYmxlZCB8fCAhc3RhcnQpCisJCXJldHVybjsKKworCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWZvciAocGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7IHBnOyBwZyA9IHBnLT5uZXh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgeworCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOworCisJCQlpZiAoKHJlYy0+aXAgPj0gcykgJiYgKHJlYy0+aXAgPCBlKSkKKwkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOworCit9CisKIHN0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX2FsbG9jX2R5bl9ub2RlKHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKQEAgLTMzOCw3ICszODYsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBrZXk7CiAJaW50IHJlc2NoZWQ7Ci0JaW50IGF0b21pYzsKIAlpbnQgY3B1OwogCiAJaWYgKCFmdHJhY2VfZW5hYmxlZCB8fCBmdHJhY2VfZGlzYWJsZWQpCkBAIC0zNjgsOSArNDE1LDcgQEAKIAlpZiAoZnRyYWNlX2lwX2luX2hhc2goaXAsIGtleSkpCiAJCWdvdG8gb3V0OwogCi0JYXRvbWljID0gaXJxc19kaXNhYmxlZCgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZ0cmFjZV9zaHV0ZG93bl9sb2NrLCBmbGFncyk7CisJZnRyYWNlX2hhc2hfbG9jayhmbGFncyk7CiAKIAkvKiBUaGlzIGlwIG1heSBoYXZlIGhpdCB0aGUgaGFzaCBiZWZvcmUgdGhlIGxvY2sgKi8KIAlpZiAoZnRyYWNlX2lwX2luX2hhc2goaXAsIGtleSkpCkBAIC0zODcsNyArNDMyLDcgQEAKIAlmdHJhY2VkX3RyaWdnZXIgPSAxOwogCiAgb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmdHJhY2Vfc2h1dGRvd25fbG9jaywgZmxhZ3MpOworCWZ0cmFjZV9oYXNoX3VubG9jayhmbGFncyk7CiAgb3V0OgogCXBlcl9jcHUoZnRyYWNlX3NodXRkb3duX2Rpc2FibGVfY3B1LCBjcHUpLS07CiAKQEAgLTUzMSw2ICs1NzYsMTYgQEAKIAlmdHJhY2VfcGFnZXMtPm5leHQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfaXBfaW5zKGNvbnN0IGNoYXIgKmZtdCwgdW5zaWduZWQgY2hhciAqcCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZm10KTsKKworCWZvciAoaSA9IDA7IGkgPCBNQ09VTlRfSU5TTl9TSVpFOyBpKyspCisJCXByaW50ayhLRVJOX0NPTlQgIiVzJTAyeCIsIGkgPyAiOiIgOiAiIiwgcFtpXSk7Cit9CisKIHN0YXRpYyBpbnQKIGZ0cmFjZV9jb2RlX2Rpc2FibGUoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKIHsKQEAgLTU0MSwxMCArNTk2LDI3IEBACiAJaXAgPSByZWMtPmlwOwogCiAJbm9wID0gZnRyYWNlX25vcF9yZXBsYWNlKCk7Ci0JY2FsbCA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIE1DT1VOVF9BRERSKTsKKwljYWxsID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgbWNvdW50X2FkZHIpOwogCiAJZmFpbGVkID0gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBjYWxsLCBub3ApOwogCWlmIChmYWlsZWQpIHsKKwkJc3dpdGNoIChmYWlsZWQpIHsKKwkJY2FzZSAxOgorCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJcHJfaW5mbygiZnRyYWNlIGZhdWx0ZWQgb24gbW9kaWZ5aW5nICIpOworCQkJcHJpbnRfaXBfc3ltKGlwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlXQVJOX09OX09OQ0UoMSk7CisJCQlwcl9pbmZvKCJmdHJhY2UgZmFpbGVkIHRvIG1vZGlmeSAiKTsKKwkJCXByaW50X2lwX3N5bShpcCk7CisJCQlwcmludF9pcF9pbnMoIiBleHBlY3RlZDogIiwgY2FsbCk7CisJCQlwcmludF9pcF9pbnMoIiBhY3R1YWw6ICIsICh1bnNpZ25lZCBjaGFyICopaXApOworCQkJcHJpbnRfaXBfaW5zKCIgcmVwbGFjZTogIiwgbm9wKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCQlicmVhazsKKwkJfQorCiAJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzkyLDQ3ICs4NjQsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGZ0cmFjZWQodm9pZCAqaWdub3JlKQotewotCXVuc2lnbmVkIGxvbmcgdXNlY3M7Ci0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQkJLyogY2hlY2sgb25jZSBhIHNlY29uZCAqLwotCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQotCQlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKLQkJCWNvbnRpbnVlOwotCi0JCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7Ci0JCW11dGV4X2xvY2soJmZ0cmFjZWRfbG9jayk7Ci0JCWlmICghZnRyYWNlZF9zdXNwZW5kICYmICFmdHJhY2VkX3N0b3AgJiYKLQkJICAgIGZ0cmFjZV91cGRhdGVfY29kZSgpKSB7Ci0JCQl1c2VjcyA9IG5zZWNzX3RvX3VzZWNzKGZ0cmFjZV91cGRhdGVfdGltZSk7Ci0JCQlpZiAoZnRyYWNlX3VwZGF0ZV90b3RfY250ID4gMTAwMDAwKSB7Ci0JCQkJZnRyYWNlX3VwZGF0ZV90b3RfY250ID0gMDsKLQkJCQlwcl9pbmZvKCJobSwgZGZ0cmFjZSBvdmVyZmxvdzogJWx1IGNoYW5nZSVzIgotCQkJCQkiICglbHUgdG90YWwpIGluICVsdSB1c2VjJXNcbiIsCi0JCQkJCWZ0cmFjZV91cGRhdGVfY250LAotCQkJCQlmdHJhY2VfdXBkYXRlX2NudCAhPSAxID8gInMiIDogIiIsCi0JCQkJCWZ0cmFjZV91cGRhdGVfdG90X2NudCwKLQkJCQkJdXNlY3MsIHVzZWNzICE9IDEgPyAicyIgOiAiIik7Ci0JCQkJZnRyYWNlX2Rpc2FibGVkID0gMTsKLQkJCQlXQVJOX09OX09OQ0UoMSk7Ci0JCQl9Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZmdHJhY2VkX2xvY2spOwotCQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7Ci0KLQkJZnRyYWNlX3NodXRkb3duX3JlcGxlbmlzaCgpOwotCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZ0cmFjZV9keW5fdGFibGVfYWxsb2Modm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGZ0cmFjZV9keW5fdGFibGVfYWxsb2ModW5zaWduZWQgbG9uZyBudW1fdG9faW5pdCkKIHsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwogCWludCBjbnQ7CkBAIC04NTksNyArODkxLDkgQEAKIAogCXBnID0gZnRyYWNlX3BhZ2VzID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwogCi0JY250ID0gTlJfVE9fSU5JVCAvIEVOVFJJRVNfUEVSX1BBR0U7CisJY250ID0gbnVtX3RvX2luaXQgLyBFTlRSSUVTX1BFUl9QQUdFOworCXByX2luZm8oImZ0cmFjZTogYWxsb2NhdGluZyAlbGQgaGFzaCBlbnRyaWVzIGluICVkIHBhZ2VzXG4iLAorCQludW1fdG9faW5pdCwgY250KTsKIAogCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewogCQlwZy0+bmV4dCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwpAQCAtOTAxLDYgKzkzNSw4IEBACiAKIAkoKnBvcykrKzsKIAorCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKICByZXRyeToKIAlpZiAoaXRlci0+aWR4ID49IGl0ZXItPnBnLT5pbmRleCkgewogCQlpZiAoaXRlci0+cGctPm5leHQpIHsKQEAgLTkxMCwxNSArOTQ2LDEzIEBACiAJCX0KIAl9IGVsc2UgewogCQlyZWMgPSAmaXRlci0+cGctPnJlY29yZHNbaXRlci0+aWR4KytdOwotCQlpZiAoKCEoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GQUlMVVJFUykgJiYKKwkJaWYgKChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUpIHx8CisKKwkJICAgICghKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRkFJTFVSRVMpICYmCiAJCSAgICAgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKSkgfHwKIAogCQkgICAgKChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZBSUxVUkVTKSAmJgotCQkgICAgICghKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKSB8fAotCQkgICAgICAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFKSkpIHx8Ci0KLQkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GSUxURVIpICYmCi0JCSAgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpIHx8CisJCSAgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkpIHx8CiAKIAkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9OT1RSQUNFKSAmJgogCQkgICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9OT1RSQUNFKSkpIHsKQEAgLTkyNiw2ICs5NjAsNyBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCX0KKwlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJaXRlci0+cG9zID0gKnBvczsKIApAQCAtMTAzOSw4ICsxMDc0LDggQEAKIAl1bnNpZ25lZCBsb25nIHR5cGUgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7CiAJdW5zaWduZWQgaTsKIAotCS8qIGtlZXAga3N0b3AgbWFjaGluZSBmcm9tIHJ1bm5pbmcgKi8KLQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCisJc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CiAJaWYgKGVuYWJsZSkKIAkJZnRyYWNlX2ZpbHRlcmVkID0gMDsKIAlwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsKQEAgLTEwNTMsNyArMTA4OCw3IEBACiAJCX0KIAkJcGcgPSBwZy0+bmV4dDsKIAl9Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTY1LDggKzEyMDAsOCBAQAogCQl9CiAJfQogCi0JLyoga2VlcCBrc3RvcCBtYWNoaW5lIGZyb20gcnVubmluZyAqLwotCXByZWVtcHRfZGlzYWJsZSgpOworCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlpZiAoZW5hYmxlKQogCQlmdHJhY2VfZmlsdGVyZWQgPSAxOwogCXBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwpAQCAtMTIwMyw3ICsxMjM4LDcgQEAKIAkJfQogCQlwZyA9IHBnLT5uZXh0OwogCX0KLQlwcmVlbXB0X2VuYWJsZSgpOworCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xNTU2LDYgKzE1OTEsMTE0IEBACiAKIGZzX2luaXRjYWxsKGZ0cmFjZV9pbml0X2RlYnVnZnMpOwogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECitzdGF0aWMgaW50IGZ0cmFjZV9jb252ZXJ0X25vcHModW5zaWduZWQgbG9uZyAqc3RhcnQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kKQoreworCXVuc2lnbmVkIGxvbmcgKnA7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwID0gc3RhcnQ7CisJd2hpbGUgKHAgPCBlbmQpIHsKKwkJYWRkciA9IGZ0cmFjZV9jYWxsX2FkanVzdCgqcCsrKTsKKwkJLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLworCQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKwkJZnRyYWNlX3JlY29yZF9pcChhZGRyKTsKKwkJc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwkJZnRyYWNlX3NodXRkb3duX3JlcGxlbmlzaCgpOworCX0KKworCS8qIHAgaXMgaWdub3JlZCAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2Z0cmFjZV91cGRhdGVfY29kZShwKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmdHJhY2VfaW5pdF9tb2R1bGUodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKK3sKKwlpZiAoZnRyYWNlX2Rpc2FibGVkIHx8IHN0YXJ0ID09IGVuZCkKKwkJcmV0dXJuOworCWZ0cmFjZV9jb252ZXJ0X25vcHMoc3RhcnQsIGVuZCk7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfbWNvdW50X2xvY1tdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX21jb3VudF9sb2NbXTsKKwordm9pZCBfX2luaXQgZnRyYWNlX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50LCBhZGRyLCBmbGFnczsKKwlpbnQgcmV0OworCisJLyogS2VlcCB0aGUgZnRyYWNlIHBvaW50ZXIgdG8gdGhlIHN0dWIgKi8KKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX3N0dWI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZnRyYWNlX2R5bl9hcmNoX2luaXQoJmFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIGZ0cmFjZV9keW5fYXJjaF9pbml0IHBsYWNlcyB0aGUgcmV0dXJuIGNvZGUgaW4gYWRkciAqLworCWlmIChhZGRyKQorCQlnb3RvIGZhaWxlZDsKKworCWNvdW50ID0gX19zdG9wX21jb3VudF9sb2MgLSBfX3N0YXJ0X21jb3VudF9sb2M7CisKKwlyZXQgPSBmdHJhY2VfZHluX3RhYmxlX2FsbG9jKGNvdW50KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCWxhc3RfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZCA9IDE7CisKKwlyZXQgPSBmdHJhY2VfY29udmVydF9ub3BzKF9fc3RhcnRfbWNvdW50X2xvYywKKwkJCQkgIF9fc3RvcF9tY291bnRfbG9jKTsKKworCXJldHVybjsKKyBmYWlsZWQ6CisJZnRyYWNlX2Rpc2FibGVkID0gMTsKK30KKyNlbHNlIC8qIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRCAqLworc3RhdGljIGludCBmdHJhY2VkKHZvaWQgKmlnbm9yZSkKK3sKKwl1bnNpZ25lZCBsb25nIHVzZWNzOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCS8qIGNoZWNrIG9uY2UgYSBzZWNvbmQgKi8KKwkJc2NoZWR1bGVfdGltZW91dChIWik7CisKKwkJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCQljb250aW51ZTsKKworCQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCQltdXRleF9sb2NrKCZmdHJhY2VkX2xvY2spOworCQlpZiAoIWZ0cmFjZWRfc3VzcGVuZCAmJiAhZnRyYWNlZF9zdG9wICYmCisJCSAgICBmdHJhY2VfdXBkYXRlX2NvZGUoKSkgeworCQkJdXNlY3MgPSBuc2Vjc190b191c2VjcyhmdHJhY2VfdXBkYXRlX3RpbWUpOworCQkJaWYgKGZ0cmFjZV91cGRhdGVfdG90X2NudCA+IDEwMDAwMCkgeworCQkJCWZ0cmFjZV91cGRhdGVfdG90X2NudCA9IDA7CisJCQkJcHJfaW5mbygiaG0sIGRmdHJhY2Ugb3ZlcmZsb3c6ICVsdSBjaGFuZ2UlcyIKKwkJCQkJIiAoJWx1IHRvdGFsKSBpbiAlbHUgdXNlYyVzXG4iLAorCQkJCQlmdHJhY2VfdXBkYXRlX2NudCwKKwkJCQkJZnRyYWNlX3VwZGF0ZV9jbnQgIT0gMSA/ICJzIiA6ICIiLAorCQkJCQlmdHJhY2VfdXBkYXRlX3RvdF9jbnQsCisJCQkJCXVzZWNzLCB1c2VjcyAhPSAxID8gInMiIDogIiIpOworCQkJCWZ0cmFjZV9kaXNhYmxlZCA9IDE7CisJCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmZnRyYWNlZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCisJCWZ0cmFjZV9zaHV0ZG93bl9yZXBsZW5pc2goKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBmdHJhY2VfZHluYW1pY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtMTU3Miw3ICsxNzE1LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JcmV0ID0gZnRyYWNlX2R5bl90YWJsZV9hbGxvYygpOworCXJldCA9IGZ0cmFjZV9keW5fdGFibGVfYWxsb2MoTlJfVE9fSU5JVCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTE1OTMsNiArMTczNiw4IEBACiB9CiAKIGNvcmVfaW5pdGNhbGwoZnRyYWNlX2R5bmFtaWNfaW5pdCk7CisjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JEICovCisKICNlbHNlCiAjIGRlZmluZSBmdHJhY2Vfc3RhcnR1cCgpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2Vfc2h1dGRvd24oKQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGFmMWZlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTAsMCArMSwyMDE0IEBACisvKgorICogR2VuZXJpYyByaW5nIGJ1ZmZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogdXNlZCBmb3Igc2NoZWRfY2xvY2soKSAoZm9yIG5vdykgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisvKiBVcCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlIFRJTUVfRVhURU5UUyBhbmQgbm9ybWFsaXphdGlvbiAqLworI2RlZmluZSBERUJVR19TSElGVCAwCisKKy8qIEZJWE1FISEhICovCit1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChpbnQgY3B1KQoreworCS8qIHNoaWZ0IHRvIGRlYnVnL3Rlc3Qgbm9ybWFsaXphdGlvbiBhbmQgVElNRV9FWFRFTlRTICovCisJcmV0dXJuIHNjaGVkX2Nsb2NrKCkgPDwgREVCVUdfU0hJRlQ7Cit9CisKK3ZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoaW50IGNwdSwgdTY0ICp0cykKK3sKKwkvKiBKdXN0IHN0dXBpZCB0ZXN0aW5nIHRoZSBub3JtYWxpemUgZnVuY3Rpb24gYW5kIGRlbHRhcyAqLworCSp0cyA+Pj0gREVCVUdfU0hJRlQ7Cit9CisKKyNkZWZpbmUgUkJfRVZOVF9IRFJfU0laRSAoc2l6ZW9mKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCkpCisjZGVmaW5lIFJCX0FMSUdOTUVOVF9TSElGVAkyCisjZGVmaW5lIFJCX0FMSUdOTUVOVAkJKDEgPDwgUkJfQUxJR05NRU5UX1NISUZUKQorI2RlZmluZSBSQl9NQVhfU01BTExfREFUQQkyOAorCitlbnVtIHsKKwlSQl9MRU5fVElNRV9FWFRFTkQgPSA4LAorCVJCX0xFTl9USU1FX1NUQU1QID0gMTYsCit9OworCisvKiBpbmxpbmUgZm9yIHJpbmcgYnVmZmVyIGZhc3QgcGF0aHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3JiX2V2ZW50X2xlbmd0aChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGxlbmd0aDsKKworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgorCQkvKiB1bmRlZmluZWQgKi8KKwkJcmV0dXJuIC0xOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CisJCXJldHVybiBSQl9MRU5fVElNRV9FWFRFTkQ7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQlyZXR1cm4gUkJfTEVOX1RJTUVfU1RBTVA7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9EQVRBOgorCQlpZiAoZXZlbnQtPmxlbikKKwkJCWxlbmd0aCA9IGV2ZW50LT5sZW4gPDwgUkJfQUxJR05NRU5UX1NISUZUOworCQllbHNlCisJCQlsZW5ndGggPSBldmVudC0+YXJyYXlbMF07CisJCXJldHVybiBsZW5ndGggKyBSQl9FVk5UX0hEUl9TSVpFOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwkvKiBub3QgaGl0ICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoIC0gcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGV2ZW50CisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byBnZXQgdGhlIGxlbmd0aCBvZgorICovCit1bnNpZ25lZCByaW5nX2J1ZmZlcl9ldmVudF9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KTsKK30KKworLyogaW5saW5lIGZvciByaW5nIGJ1ZmZlciBmYXN0IHBhdGhzICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorcmJfZXZlbnRfZGF0YShzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCUJVR19PTihldmVudC0+dHlwZSAhPSBSSU5HQlVGX1RZUEVfREFUQSk7CisJLyogSWYgbGVuZ3RoIGlzIGluIGxlbiBmaWVsZCwgdGhlbiBhcnJheVswXSBoYXMgdGhlIGRhdGEgKi8KKwlpZiAoZXZlbnQtPmxlbikKKwkJcmV0dXJuICh2b2lkICopJmV2ZW50LT5hcnJheVswXTsKKwkvKiBPdGhlcndpc2UgbGVuZ3RoIGlzIGluIGFycmF5WzBdIGFuZCBhcnJheVsxXSBoYXMgdGhlIGRhdGEgKi8KKwlyZXR1cm4gKHZvaWQgKikmZXZlbnQtPmFycmF5WzFdOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEgLSByZXR1cm4gdGhlIGRhdGEgb2YgdGhlIGV2ZW50CisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byBnZXQgdGhlIGRhdGEgZnJvbQorICovCit2b2lkICpyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIHJiX2V2ZW50X2RhdGEoZXZlbnQpOworfQorCisjZGVmaW5lIGZvcl9lYWNoX2J1ZmZlcl9jcHUoYnVmZmVyLCBjcHUpCQlcCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBidWZmZXItPmNwdW1hc2spCisKKyNkZWZpbmUgVFNfU0hJRlQJMjcKKyNkZWZpbmUgVFNfTUFTSwkJKCgxVUxMIDw8IFRTX1NISUZUKSAtIDEpCisjZGVmaW5lIFRTX0RFTFRBX1RFU1QJKH5UU19NQVNLKQorCisvKgorICogVGhpcyBoYWNrIHN0b2xlbiBmcm9tIG1tL3Nsb2IuYy4KKyAqIFdlIGNhbiBzdG9yZSBwZXIgcGFnZSB0aW1pbmcgaW5mb3JtYXRpb24gaW4gdGhlIHBhZ2UgZnJhbWUgb2YgdGhlIHBhZ2UuCisgKiBUaGFua3MgdG8gUGV0ZXIgWmlqbHN0cmEgZm9yIHN1Z2dlc3RpbmcgdGhpcyBpZGVhLgorICovCitzdHJ1Y3QgYnVmZmVyX3BhZ2UgeworCXU2NAkJIHRpbWVfc3RhbXA7CS8qIHBhZ2UgdGltZSBzdGFtcCAqLworCWxvY2FsX3QJCSB3cml0ZTsJCS8qIGluZGV4IGZvciBuZXh0IHdyaXRlICovCisJbG9jYWxfdAkJIGNvbW1pdDsJLyogd3JpdGUgY29tbWl0ZWQgaW5kZXggKi8KKwl1bnNpZ25lZAkgcmVhZDsJCS8qIGluZGV4IGZvciBuZXh0IHJlYWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIGZyZWUgcGFnZXMgKi8KKwl2b2lkICpwYWdlOwkJCS8qIEFjdHVhbCBkYXRhIHBhZ2UgKi8KK307CisKKy8qCisgKiBBbHNvIHN0b2xlbiBmcm9tIG1tL3Nsb2IuYy4gVGhhbmtzIHRvIE1hdGhpZXUgRGVzbm95ZXJzIGZvciBwb2ludGluZworICogdGhpcyBpc3N1ZSBvdXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2J1ZmZlcl9wYWdlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCit7CisJaWYgKGJwYWdlLT5wYWdlKQorCQlfX2ZyZWVfcGFnZShicGFnZS0+cGFnZSk7CisJa2ZyZWUoYnBhZ2UpOworfQorCisvKgorICogV2UgbmVlZCB0byBmaXQgdGhlIHRpbWVfc3RhbXAgZGVsdGEgaW50byAyNyBiaXRzLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X3RpbWVfc3RhbXAodTY0IGRlbHRhKQoreworCWlmIChkZWx0YSAmIFRTX0RFTFRBX1RFU1QpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisjZGVmaW5lIEJVRl9QQUdFX1NJWkUgUEFHRV9TSVpFCisKKy8qCisgKiBoZWFkX3BhZ2UgPT0gdGFpbF9wYWdlICYmIGhlYWQgPT0gdGFpbCB0aGVuIGJ1ZmZlciBpcyBlbXB0eS4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgeworCWludAkJCQljcHU7CisJc3RydWN0IHJpbmdfYnVmZmVyCQkqYnVmZmVyOworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBsb2NrX2NsYXNzX2tleQkJbG9ja19rZXk7CisJc3RydWN0IGxpc3RfaGVhZAkJcGFnZXM7CisJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqaGVhZF9wYWdlOwkvKiByZWFkIGZyb20gaGVhZCAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKnRhaWxfcGFnZTsJLyogd3JpdGUgdG8gdGFpbCAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKmNvbW1pdF9wYWdlOwkvKiBjb21taXRlZCBwYWdlcyAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKnJlYWRlcl9wYWdlOworCXVuc2lnbmVkIGxvbmcJCQlvdmVycnVuOworCXVuc2lnbmVkIGxvbmcJCQllbnRyaWVzOworCXU2NAkJCQl3cml0ZV9zdGFtcDsKKwl1NjQJCQkJcmVhZF9zdGFtcDsKKwlhdG9taWNfdAkJCXJlY29yZF9kaXNhYmxlZDsKK307CisKK3N0cnVjdCByaW5nX2J1ZmZlciB7CisJdW5zaWduZWQgbG9uZwkJCXNpemU7CisJdW5zaWduZWQJCQlwYWdlczsKKwl1bnNpZ25lZAkJCWZsYWdzOworCWludAkJCQljcHVzOworCWNwdW1hc2tfdAkJCWNwdW1hc2s7CisJYXRvbWljX3QJCQlyZWNvcmRfZGlzYWJsZWQ7CisKKwlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKKworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1CSoqYnVmZmVyczsKK307CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9pdGVyIHsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdQkqY3B1X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nCQkJaGVhZDsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpoZWFkX3BhZ2U7CisJdTY0CQkJCXJlYWRfc3RhbXA7Cit9OworCisjZGVmaW5lIFJCX1dBUk5fT04oYnVmZmVyLCBjb25kKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmICh1bmxpa2VseShjb25kKSkgewkJCQlcCisJCQlhdG9taWNfaW5jKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CVwKKwkJCVdBUk5fT04oMSk7CQkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJCX1dBUk5fT05fUkVUKGJ1ZmZlciwgY29uZCkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAodW5saWtlbHkoY29uZCkpIHsJCQkJXAorCQkJYXRvbWljX2luYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwlcCisJCQlXQVJOX09OKDEpOwkJCQlcCisJCQlyZXR1cm4gLTE7CQkJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJCX1dBUk5fT05fT05DRShidWZmZXIsIGNvbmQpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJc3RhdGljIGludCBvbmNlOwkJCQlcCisJCWlmICh1bmxpa2VseShjb25kKSAmJiAhb25jZSkgewkJCVwKKwkJCW9uY2UrKzsJCQkJCVwKKwkJCWF0b21pY19pbmMoJmJ1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsJXAorCQkJV0FSTl9PTigxKTsJCQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogY2hlY2tfcGFnZXMgLSBpbnRlZ3JpdHkgY2hlY2sgb2YgYnVmZmVyIHBhZ2VzCisgKiBAY3B1X2J1ZmZlcjogQ1BVIGJ1ZmZlciB3aXRoIHBhZ2VzIHRvIHRlc3QKKyAqCisgKiBBcyBhIHNhZnR5IG1lYXN1cmUgd2UgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHBhZ2VzIGhhdmUgbm90CisgKiBiZWVuIGNvcnJ1cHRlZC4KKyAqLworc3RhdGljIGludCByYl9jaGVja19wYWdlcyhzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNwdV9idWZmZXItPnBhZ2VzOworCXN0cnVjdCBidWZmZXJfcGFnZSAqcGFnZSwgKnRtcDsKKworCVJCX1dBUk5fT05fUkVUKGNwdV9idWZmZXIsIGhlYWQtPm5leHQtPnByZXYgIT0gaGVhZCk7CisJUkJfV0FSTl9PTl9SRVQoY3B1X2J1ZmZlciwgaGVhZC0+cHJldi0+bmV4dCAhPSBoZWFkKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsIGhlYWQsIGxpc3QpIHsKKwkJUkJfV0FSTl9PTl9SRVQoY3B1X2J1ZmZlciwKKwkJCSAgICAgICBwYWdlLT5saXN0Lm5leHQtPnByZXYgIT0gJnBhZ2UtPmxpc3QpOworCQlSQl9XQVJOX09OX1JFVChjcHVfYnVmZmVyLAorCQkJICAgICAgIHBhZ2UtPmxpc3QucHJldi0+bmV4dCAhPSAmcGFnZS0+bGlzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmJfYWxsb2NhdGVfcGFnZXMoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkgICAgIHVuc2lnbmVkIG5yX3BhZ2VzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY3B1X2J1ZmZlci0+cGFnZXM7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlMSVNUX0hFQUQocGFnZXMpOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlwYWdlID0ga3phbGxvY19ub2RlKEFMSUdOKHNpemVvZigqcGFnZSksIGNhY2hlX2xpbmVfc2l6ZSgpKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1X2J1ZmZlci0+Y3B1KSk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gZnJlZV9wYWdlczsKKwkJbGlzdF9hZGQoJnBhZ2UtPmxpc3QsICZwYWdlcyk7CisKKwkJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFhZGRyKQorCQkJZ290byBmcmVlX3BhZ2VzOworCQlwYWdlLT5wYWdlID0gKHZvaWQgKilhZGRyOworCX0KKworCWxpc3Rfc3BsaWNlKCZwYWdlcywgaGVhZCk7CisKKwlyYl9jaGVja19wYWdlcyhjcHVfYnVmZmVyKTsKKworCXJldHVybiAwOworCisgZnJlZV9wYWdlczoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCAmcGFnZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bGlzdCk7CisJCWZyZWVfYnVmZmVyX3BhZ2UocGFnZSk7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKgorcmJfYWxsb2NhdGVfY3B1X2J1ZmZlcihzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCByZXQ7CisKKwljcHVfYnVmZmVyID0ga3phbGxvY19ub2RlKEFMSUdOKHNpemVvZigqY3B1X2J1ZmZlciksIGNhY2hlX2xpbmVfc2l6ZSgpKSwKKwkJCQkgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGNwdSkpOworCWlmICghY3B1X2J1ZmZlcikKKwkJcmV0dXJuIE5VTEw7CisKKwljcHVfYnVmZmVyLT5jcHUgPSBjcHU7CisJY3B1X2J1ZmZlci0+YnVmZmVyID0gYnVmZmVyOworCXNwaW5fbG9ja19pbml0KCZjcHVfYnVmZmVyLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY3B1X2J1ZmZlci0+cGFnZXMpOworCisJcGFnZSA9IGt6YWxsb2Nfbm9kZShBTElHTihzaXplb2YoKnBhZ2UpLCBjYWNoZV9saW5lX3NpemUoKSksCisJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CisJaWYgKCFwYWdlKQorCQlnb3RvIGZhaWxfZnJlZV9idWZmZXI7CisKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSA9IHBhZ2U7CisJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWFkZHIpCisJCWdvdG8gZmFpbF9mcmVlX3JlYWRlcjsKKwlwYWdlLT5wYWdlID0gKHZvaWQgKilhZGRyOworCisJSU5JVF9MSVNUX0hFQUQoJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0KTsKKworCXJldCA9IHJiX2FsbG9jYXRlX3BhZ2VzKGNwdV9idWZmZXIsIGJ1ZmZlci0+cGFnZXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfZnJlZV9yZWFkZXI7CisKKwljcHVfYnVmZmVyLT5oZWFkX3BhZ2UKKwkJPSBsaXN0X2VudHJ5KGNwdV9idWZmZXItPnBhZ2VzLm5leHQsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CisJY3B1X2J1ZmZlci0+dGFpbF9wYWdlID0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisKKwlyZXR1cm4gY3B1X2J1ZmZlcjsKKworIGZhaWxfZnJlZV9yZWFkZXI6CisJZnJlZV9idWZmZXJfcGFnZShjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSk7CisKKyBmYWlsX2ZyZWVfYnVmZmVyOgorCWtmcmVlKGNwdV9idWZmZXIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByYl9mcmVlX2NwdV9idWZmZXIoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZjcHVfYnVmZmVyLT5wYWdlczsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnBhZ2UsICp0bXA7CisKKwlsaXN0X2RlbF9pbml0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdCk7CisJZnJlZV9idWZmZXJfcGFnZShjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCBoZWFkLCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxpc3QpOworCQlmcmVlX2J1ZmZlcl9wYWdlKHBhZ2UpOworCX0KKwlrZnJlZShjcHVfYnVmZmVyKTsKK30KKworLyoKKyAqIENhdXNlcyBjb21waWxlIGVycm9ycyBpZiB0aGUgc3RydWN0IGJ1ZmZlcl9wYWdlIGdldHMgYmlnZ2VyCisgKiB0aGFuIHRoZSBzdHJ1Y3QgcGFnZS4KKyAqLworZXh0ZXJuIGludCByaW5nX2J1ZmZlcl9wYWdlX3Rvb19iaWcodm9pZCk7CisKKy8qKgorICogcmluZ19idWZmZXJfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyByaW5nX2J1ZmZlcgorICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIHRoYXQgaXMgbmVlZGVkLgorICogQGZsYWdzOiBhdHRyaWJ1dGVzIHRvIHNldCBmb3IgdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIEN1cnJlbnRseSB0aGUgb25seSBmbGFnIHRoYXQgaXMgYXZhaWxhYmxlIGlzIHRoZSBSQl9GTF9PVkVSV1JJVEUKKyAqIGZsYWcuIFRoaXMgZmxhZyBtZWFucyB0aGF0IHRoZSBidWZmZXIgd2lsbCBvdmVyd3JpdGUgb2xkIGRhdGEKKyAqIHdoZW4gdGhlIGJ1ZmZlciB3cmFwcy4gSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIHRoZSBidWZmZXIgd2lsbAorICogZHJvcCBkYXRhIHdoZW4gdGhlIHRhaWwgaGl0cyB0aGUgaGVhZC4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyICpyaW5nX2J1ZmZlcl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOworCWludCBic2l6ZTsKKwlpbnQgY3B1OworCisJLyogUGFyYW5vaWQhIE9wdGltaXplcyBvdXQgd2hlbiBhbGwgaXMgd2VsbCAqLworCWlmIChzaXplb2Yoc3RydWN0IGJ1ZmZlcl9wYWdlKSA+IHNpemVvZihzdHJ1Y3QgcGFnZSkpCisJCXJpbmdfYnVmZmVyX3BhZ2VfdG9vX2JpZygpOworCisKKwkvKiBrZWVwIGl0IGluIGl0cyBvd24gY2FjaGUgbGluZSAqLworCWJ1ZmZlciA9IGt6YWxsb2MoQUxJR04oc2l6ZW9mKCpidWZmZXIpLCBjYWNoZV9saW5lX3NpemUoKSksCisJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBOVUxMOworCisJYnVmZmVyLT5wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBCVUZfUEFHRV9TSVpFKTsKKwlidWZmZXItPmZsYWdzID0gZmxhZ3M7CisKKwkvKiBuZWVkIGF0IGxlYXN0IHR3byBwYWdlcyAqLworCWlmIChidWZmZXItPnBhZ2VzID09IDEpCisJCWJ1ZmZlci0+cGFnZXMrKzsKKworCWJ1ZmZlci0+Y3B1bWFzayA9IGNwdV9wb3NzaWJsZV9tYXA7CisJYnVmZmVyLT5jcHVzID0gbnJfY3B1X2lkczsKKworCWJzaXplID0gc2l6ZW9mKHZvaWQgKikgKiBucl9jcHVfaWRzOworCWJ1ZmZlci0+YnVmZmVycyA9IGt6YWxsb2MoQUxJR04oYnNpemUsIGNhY2hlX2xpbmVfc2l6ZSgpKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyLT5idWZmZXJzKQorCQlnb3RvIGZhaWxfZnJlZV9idWZmZXI7CisKKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWJ1ZmZlci0+YnVmZmVyc1tjcHVdID0KKwkJCXJiX2FsbG9jYXRlX2NwdV9idWZmZXIoYnVmZmVyLCBjcHUpOworCQlpZiAoIWJ1ZmZlci0+YnVmZmVyc1tjcHVdKQorCQkJZ290byBmYWlsX2ZyZWVfYnVmZmVyczsKKwl9CisKKwltdXRleF9pbml0KCZidWZmZXItPm11dGV4KTsKKworCXJldHVybiBidWZmZXI7CisKKyBmYWlsX2ZyZWVfYnVmZmVyczoKKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWlmIChidWZmZXItPmJ1ZmZlcnNbY3B1XSkKKwkJCXJiX2ZyZWVfY3B1X2J1ZmZlcihidWZmZXItPmJ1ZmZlcnNbY3B1XSk7CisJfQorCWtmcmVlKGJ1ZmZlci0+YnVmZmVycyk7CisKKyBmYWlsX2ZyZWVfYnVmZmVyOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZnJlZSAtIGZyZWUgYSByaW5nIGJ1ZmZlci4KKyAqIEBidWZmZXI6IHRoZSBidWZmZXIgdG8gZnJlZS4KKyAqLwordm9pZAorcmluZ19idWZmZXJfZnJlZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkKKwkJcmJfZnJlZV9jcHVfYnVmZmVyKGJ1ZmZlci0+YnVmZmVyc1tjcHVdKTsKKworCWtmcmVlKGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHJiX3Jlc2V0X2NwdShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcik7CisKK3N0YXRpYyB2b2lkCityYl9yZW1vdmVfcGFnZXMoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsIHVuc2lnbmVkIG5yX3BhZ2VzKQoreworCXN0cnVjdCBidWZmZXJfcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXVuc2lnbmVkIGk7CisKKwlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworCXN5bmNocm9uaXplX3NjaGVkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlCVUdfT04obGlzdF9lbXB0eSgmY3B1X2J1ZmZlci0+cGFnZXMpKTsKKwkJcCA9IGNwdV9idWZmZXItPnBhZ2VzLm5leHQ7CisJCXBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxpc3QpOworCQlmcmVlX2J1ZmZlcl9wYWdlKHBhZ2UpOworCX0KKwlCVUdfT04obGlzdF9lbXB0eSgmY3B1X2J1ZmZlci0+cGFnZXMpKTsKKworCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKworCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOworCisJYXRvbWljX2RlYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKKworfQorCitzdGF0aWMgdm9pZAorcmJfaW5zZXJ0X3BhZ2VzKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJdW5zaWduZWQgaTsKKworCWF0b21pY19pbmMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCUJVR19PTihsaXN0X2VtcHR5KHBhZ2VzKSk7CisJCXAgPSBwYWdlcy0+bmV4dDsKKwkJcGFnZSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxpc3QsICZjcHVfYnVmZmVyLT5wYWdlcyk7CisJfQorCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKworCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOworCisJYXRvbWljX2RlYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9yZXNpemUgLSByZXNpemUgdGhlIHJpbmcgYnVmZmVyCisgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRvIHJlc2l6ZS4KKyAqIEBzaXplOiB0aGUgbmV3IHNpemUuCisgKgorICogVGhlIHRyYWNlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzCisgKiBub3QgYmVpbmcgdXNlZCB3aGlsZSBjaGFuZ2luZyB0aGUgc2l6ZS4KKyAqIE5vdGU6IFdlIG1heSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgYWJvdmUgcmVxdWlyZW1lbnQgYnkgdXNpbmcKKyAqICBSQ1Ugc3luY2hyb25pemF0aW9ucy4KKyAqCisgKiBNaW5pbXVtIHNpemUgaXMgMiAqIEJVRl9QQUdFX1NJWkUuCisgKgorICogUmV0dXJucyAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgcmluZ19idWZmZXJfcmVzaXplKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJdW5zaWduZWQgbnJfcGFnZXMsIHJtX3BhZ2VzLCBuZXdfcGFnZXM7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemU7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCUxJU1RfSEVBRChwYWdlcyk7CisJaW50IGksIGNwdTsKKworCXNpemUgPSBESVZfUk9VTkRfVVAoc2l6ZSwgQlVGX1BBR0VfU0laRSk7CisJc2l6ZSAqPSBCVUZfUEFHRV9TSVpFOworCWJ1ZmZlcl9zaXplID0gYnVmZmVyLT5wYWdlcyAqIEJVRl9QQUdFX1NJWkU7CisKKwkvKiB3ZSBuZWVkIGEgbWluaW11bSBvZiB0d28gcGFnZXMgKi8KKwlpZiAoc2l6ZSA8IEJVRl9QQUdFX1NJWkUgKiAyKQorCQlzaXplID0gQlVGX1BBR0VfU0laRSAqIDI7CisKKwlpZiAoc2l6ZSA9PSBidWZmZXJfc2l6ZSkKKwkJcmV0dXJuIHNpemU7CisKKwltdXRleF9sb2NrKCZidWZmZXItPm11dGV4KTsKKworCW5yX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIEJVRl9QQUdFX1NJWkUpOworCisJaWYgKHNpemUgPCBidWZmZXJfc2l6ZSkgeworCisJCS8qIGVhc3kgY2FzZSwganVzdCBmcmVlIHBhZ2VzICovCisJCUJVR19PTihucl9wYWdlcyA+PSBidWZmZXItPnBhZ2VzKTsKKworCQlybV9wYWdlcyA9IGJ1ZmZlci0+cGFnZXMgLSBucl9wYWdlczsKKworCQlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCQljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CisJCQlyYl9yZW1vdmVfcGFnZXMoY3B1X2J1ZmZlciwgcm1fcGFnZXMpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhpcyBpcyBhIGJpdCBtb3JlIGRpZmZpY3VsdC4gV2Ugb25seSB3YW50IHRvIGFkZCBwYWdlcworCSAqIHdoZW4gd2UgY2FuIGFsbG9jYXRlIGVub3VnaCBmb3IgYWxsIENQVXMuIFdlIGRvIHRoaXMKKwkgKiBieSBhbGxvY2F0aW5nIGFsbCB0aGUgcGFnZXMgYW5kIHN0b3JpbmcgdGhlbSBvbiBhIGxvY2FsCisJICogbGluayBsaXN0LiBJZiB3ZSBzdWNjZWVkIGluIG91ciBhbGxvY2F0aW9uLCB0aGVuIHdlCisJICogYWRkIHRoZXNlIHBhZ2VzIHRvIHRoZSBjcHVfYnVmZmVycy4gT3RoZXJ3aXNlIHdlIGp1c3QgZnJlZQorCSAqIHRoZW0gYWxsIGFuZCByZXR1cm4gLUVOT01FTTsKKwkgKi8KKwlCVUdfT04obnJfcGFnZXMgPD0gYnVmZmVyLT5wYWdlcyk7CisJbmV3X3BhZ2VzID0gbnJfcGFnZXMgLSBidWZmZXItPnBhZ2VzOworCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbmV3X3BhZ2VzOyBpKyspIHsKKwkJCXBhZ2UgPSBremFsbG9jX25vZGUoQUxJR04oc2l6ZW9mKCpwYWdlKSwKKwkJCQkJCSAgY2FjaGVfbGluZV9zaXplKCkpLAorCQkJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CisJCQlpZiAoIXBhZ2UpCisJCQkJZ290byBmcmVlX3BhZ2VzOworCQkJbGlzdF9hZGQoJnBhZ2UtPmxpc3QsICZwYWdlcyk7CisJCQlhZGRyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQkJaWYgKCFhZGRyKQorCQkJCWdvdG8gZnJlZV9wYWdlczsKKwkJCXBhZ2UtPnBhZ2UgPSAodm9pZCAqKWFkZHI7CisJCX0KKwl9CisKKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwkJcmJfaW5zZXJ0X3BhZ2VzKGNwdV9idWZmZXIsICZwYWdlcywgbmV3X3BhZ2VzKTsKKwl9CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnBhZ2VzKSk7CisKKyBvdXQ6CisJYnVmZmVyLT5wYWdlcyA9IG5yX3BhZ2VzOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7CisKKwlyZXR1cm4gc2l6ZTsKKworIGZyZWVfcGFnZXM6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHRtcCwgJnBhZ2VzLCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxpc3QpOworCQlmcmVlX2J1ZmZlcl9wYWdlKHBhZ2UpOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmJfbnVsbF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORzsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpfX3JiX3BhZ2VfaW5kZXgoc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCB1bnNpZ25lZCBpbmRleCkKK3sKKwlyZXR1cm4gcGFnZS0+cGFnZSArIGluZGV4OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityYl9yZWFkZXJfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJcmV0dXJuIF9fcmJfcGFnZV9pbmRleChjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSwKKwkJCSAgICAgICBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JiX2hlYWRfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJcmV0dXJuIF9fcmJfcGFnZV9pbmRleChjcHVfYnVmZmVyLT5oZWFkX3BhZ2UsCisJCQkgICAgICAgY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5yZWFkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgorcmJfaXRlcl9oZWFkX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQoreworCXJldHVybiBfX3JiX3BhZ2VfaW5kZXgoaXRlci0+aGVhZF9wYWdlLCBpdGVyLT5oZWFkKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCByYl9wYWdlX3dyaXRlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCit7CisJcmV0dXJuIGxvY2FsX3JlYWQoJmJwYWdlLT53cml0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmJfcGFnZV9jb21taXQoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKK3sKKwlyZXR1cm4gbG9jYWxfcmVhZCgmYnBhZ2UtPmNvbW1pdCk7Cit9CisKKy8qIFNpemUgaXMgZGV0ZXJtaW5lZCBieSB3aGF0IGhhcyBiZWVuIGNvbW1pdGVkICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX3BhZ2Vfc2l6ZShzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlKQoreworCXJldHVybiByYl9wYWdlX2NvbW1pdChicGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3JiX2NvbW1pdF9pbmRleChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlyZXR1cm4gcmJfcGFnZV9jb21taXQoY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX2hlYWRfc2l6ZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlyZXR1cm4gcmJfcGFnZV9jb21taXQoY3B1X2J1ZmZlci0+aGVhZF9wYWdlKTsKK30KKworLyoKKyAqIFdoZW4gdGhlIHRhaWwgaGl0cyB0aGUgaGVhZCBhbmQgdGhlIGJ1ZmZlciBpcyBpbiBvdmVyd3JpdGUgbW9kZSwKKyAqIHRoZSBoZWFkIGp1bXBzIHRvIHRoZSBuZXh0IHBhZ2UgYW5kIGFsbCBjb250ZW50IG9uIHRoZSBwcmV2aW91cworICogcGFnZSBpcyBkaXNjYXJkZWQuIEJ1dCBiZWZvcmUgZG9pbmcgc28sIHdlIHVwZGF0ZSB0aGUgb3ZlcnJ1bgorICogdmFyaWFibGUgb2YgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgcmJfdXBkYXRlX292ZXJmbG93KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBoZWFkOworCisJZm9yIChoZWFkID0gMDsgaGVhZCA8IHJiX2hlYWRfc2l6ZShjcHVfYnVmZmVyKTsKKwkgICAgIGhlYWQgKz0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KSkgeworCisJCWV2ZW50ID0gX19yYl9wYWdlX2luZGV4KGNwdV9idWZmZXItPmhlYWRfcGFnZSwgaGVhZCk7CisJCUJVR19PTihyYl9udWxsX2V2ZW50KGV2ZW50KSk7CisJCS8qIE9ubHkgY291bnQgZGF0YSBlbnRyaWVzICovCisJCWlmIChldmVudC0+dHlwZSAhPSBSSU5HQlVGX1RZUEVfREFUQSkKKwkJCWNvbnRpbnVlOworCQljcHVfYnVmZmVyLT5vdmVycnVuKys7CisJCWNwdV9idWZmZXItPmVudHJpZXMtLTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9pbmNfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX3BhZ2UgKipwYWdlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnAgPSAoKnBhZ2UpLT5saXN0Lm5leHQ7CisKKwlpZiAocCA9PSAmY3B1X2J1ZmZlci0+cGFnZXMpCisJCXAgPSBwLT5uZXh0OworCisJKnBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3JiX2V2ZW50X2luZGV4KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZXZlbnQ7CisKKwlyZXR1cm4gKGFkZHIgJiB+UEFHRV9NQVNLKSAtIChQQUdFX1NJWkUgLSBCVUZfUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JiX2lzX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKworCWluZGV4ID0gcmJfZXZlbnRfaW5kZXgoZXZlbnQpOworCWFkZHIgJj0gUEFHRV9NQVNLOworCisJcmV0dXJuIGNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlID09ICh2b2lkICopYWRkciAmJgorCQlyYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikgPT0gaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmJfc2V0X2NvbW1pdF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKworCWluZGV4ID0gcmJfZXZlbnRfaW5kZXgoZXZlbnQpOworCWFkZHIgJj0gUEFHRV9NQVNLOworCisJd2hpbGUgKGNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlICE9ICh2b2lkICopYWRkcikgeworCQlSQl9XQVJOX09OKGNwdV9idWZmZXIsCisJCQkgICBjcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9PSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpOworCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+Y29tbWl0ID0KKwkJCWNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT53cml0ZTsKKwkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJmNwdV9idWZmZXItPmNvbW1pdF9wYWdlKTsKKwkJY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXAgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+dGltZV9zdGFtcDsKKwl9CisKKwkvKiBOb3cgc2V0IHRoZSBjb21taXQgdG8gdGhlIGV2ZW50J3MgaW5kZXggKi8KKwlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5jb21taXQsIGluZGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityYl9zZXRfY29tbWl0X3RvX3dyaXRlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCS8qCisJICogV2Ugb25seSByYWNlIHdpdGggaW50ZXJydXB0cyBhbmQgTk1JcyBvbiB0aGlzIENQVS4KKwkgKiBJZiB3ZSBvd24gdGhlIGNvbW1pdCBldmVudCwgdGhlbiB3ZSBjYW4gY29tbWl0CisJICogYWxsIG90aGVycyB0aGF0IGludGVycnVwdGVkIHVzLCBzaW5jZSB0aGUgaW50ZXJydXB0aW9ucworCSAqIGFyZSBpbiBzdGFjayBmb3JtYXQgKHRoZXkgZmluaXNoIGJlZm9yZSB0aGV5IGNvbWUKKwkgKiBiYWNrIHRvIHVzKS4gVGhpcyBhbGxvd3MgdXMgdG8gZG8gYSBzaW1wbGUgbG9vcCB0bworCSAqIGFzc2lnbiB0aGUgY29tbWl0IHRvIHRoZSB0YWlsLgorCSAqLworCXdoaWxlIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpIHsKKwkJY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPmNvbW1pdCA9CisJCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+d3JpdGU7CisJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZjcHVfYnVmZmVyLT5jb21taXRfcGFnZSk7CisJCWNwdV9idWZmZXItPndyaXRlX3N0YW1wID0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPnRpbWVfc3RhbXA7CisJCS8qIGFkZCBiYXJyaWVyIHRvIGtlZXAgZ2NjIGZyb20gb3B0aW1pemluZyB0b28gbXVjaCAqLworCQliYXJyaWVyKCk7CisJfQorCXdoaWxlIChyYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikgIT0KKwkgICAgICAgcmJfcGFnZV93cml0ZShjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkpIHsKKwkJY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPmNvbW1pdCA9CisJCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+d3JpdGU7CisJCWJhcnJpZXIoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJiX3Jlc2V0X3JlYWRlcl9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCWNwdV9idWZmZXItPnJlYWRfc3RhbXAgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+dGltZV9zdGFtcDsKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9pbmNfaXRlcihzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKKwkvKgorCSAqIFRoZSBpdGVyYXRvciBjb3VsZCBiZSBvbiB0aGUgcmVhZGVyIHBhZ2UgKGl0IHN0YXJ0cyB0aGVyZSkuCisJICogQnV0IHRoZSBoZWFkIGNvdWxkIGhhdmUgbW92ZWQsIHNpbmNlIHRoZSByZWFkZXIgd2FzCisJICogZm91bmQuIENoZWNrIGZvciB0aGlzIGNhc2UgYW5kIGFzc2lnbiB0aGUgaXRlcmF0b3IKKwkgKiB0byB0aGUgaGVhZCBwYWdlIGluc3RlYWQgb2YgbmV4dC4KKwkgKi8KKwlpZiAoaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlKQorCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisJZWxzZQorCQlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmaXRlci0+aGVhZF9wYWdlKTsKKworCWl0ZXItPnJlYWRfc3RhbXAgPSBpdGVyLT5oZWFkX3BhZ2UtPnRpbWVfc3RhbXA7CisJaXRlci0+aGVhZCA9IDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfdXBkYXRlX2V2ZW50IC0gdXBkYXRlIGV2ZW50IHR5cGUgYW5kIGRhdGEKKyAqIEBldmVudDogdGhlIGV2ZW4gdG8gdXBkYXRlCisgKiBAdHlwZTogdGhlIHR5cGUgb2YgZXZlbnQKKyAqIEBsZW5ndGg6IHRoZSBzaXplIG9mIHRoZSBldmVudCBmaWVsZCBpbiB0aGUgcmluZyBidWZmZXIKKyAqCisgKiBVcGRhdGUgdGhlIHR5cGUgYW5kIGRhdGEgZmllbGRzIG9mIHRoZSBldmVudC4gVGhlIGxlbmd0aAorICogaXMgdGhlIGFjdHVhbCBzaXplIHRoYXQgaXMgd3JpdHRlbiB0byB0aGUgcmluZyBidWZmZXIsCisgKiBhbmQgd2l0aCB0aGlzLCB3ZSBjYW4gZGV0ZXJtaW5lIHdoYXQgdG8gcGxhY2UgaW50byB0aGUKKyAqIGRhdGEgZmllbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcmJfdXBkYXRlX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbGVuZ3RoKQoreworCWV2ZW50LT50eXBlID0gdHlwZTsKKworCXN3aXRjaCAodHlwZSkgeworCisJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKKwkJYnJlYWs7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKKwkJZXZlbnQtPmxlbiA9CisJCQkoUkJfTEVOX1RJTUVfRVhURU5EICsgKFJCX0FMSUdOTUVOVC0xKSkKKwkJCT4+IFJCX0FMSUdOTUVOVF9TSElGVDsKKwkJYnJlYWs7CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQlldmVudC0+bGVuID0KKwkJCShSQl9MRU5fVElNRV9TVEFNUCArIChSQl9BTElHTk1FTlQtMSkpCisJCQk+PiBSQl9BTElHTk1FTlRfU0hJRlQ7CisJCWJyZWFrOworCisJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKKwkJbGVuZ3RoIC09IFJCX0VWTlRfSERSX1NJWkU7CisJCWlmIChsZW5ndGggPiBSQl9NQVhfU01BTExfREFUQSkgeworCQkJZXZlbnQtPmxlbiA9IDA7CisJCQlldmVudC0+YXJyYXlbMF0gPSBsZW5ndGg7CisJCX0gZWxzZQorCQkJZXZlbnQtPmxlbiA9CisJCQkJKGxlbmd0aCArIChSQl9BTElHTk1FTlQtMSkpCisJCQkJPj4gUkJfQUxJR05NRU5UX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmJfY2FsY3VsYXRlX2V2ZW50X2xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50IGV2ZW50OyAvKiBVc2VkIG9ubHkgZm9yIHNpemVvZiBhcnJheSAqLworCisJLyogemVybyBsZW5ndGggY2FuIGNhdXNlIGNvbmZ1c2lvbnMgKi8KKwlpZiAoIWxlbmd0aCkKKwkJbGVuZ3RoID0gMTsKKworCWlmIChsZW5ndGggPiBSQl9NQVhfU01BTExfREFUQSkKKwkJbGVuZ3RoICs9IHNpemVvZihldmVudC5hcnJheVswXSk7CisKKwlsZW5ndGggKz0gUkJfRVZOVF9IRFJfU0laRTsKKwlsZW5ndGggPSBBTElHTihsZW5ndGgsIFJCX0FMSUdOTUVOVCk7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK19fcmJfcmVzZXJ2ZV9uZXh0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkgIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB1NjQgKnRzKQoreworCXN0cnVjdCBidWZmZXJfcGFnZSAqdGFpbF9wYWdlLCAqaGVhZF9wYWdlLCAqcmVhZGVyX3BhZ2U7CisJdW5zaWduZWQgbG9uZyB0YWlsLCB3cml0ZTsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IGNwdV9idWZmZXItPmJ1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl0YWlsX3BhZ2UgPSBjcHVfYnVmZmVyLT50YWlsX3BhZ2U7CisJd3JpdGUgPSBsb2NhbF9hZGRfcmV0dXJuKGxlbmd0aCwgJnRhaWxfcGFnZS0+d3JpdGUpOworCXRhaWwgPSB3cml0ZSAtIGxlbmd0aDsKKworCS8qIFNlZSBpZiB3ZSBzaG90IHBhc3MgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlciBwYWdlICovCisJaWYgKHdyaXRlID4gQlVGX1BBR0VfU0laRSkgeworCQlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKm5leHRfcGFnZSA9IHRhaWxfcGFnZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCisJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZuZXh0X3BhZ2UpOworCisJCWhlYWRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwkJcmVhZGVyX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKworCQkvKiB3ZSBncmFiYmVkIHRoZSBsb2NrIGJlZm9yZSBpbmNyZW1lbnRpbmcgKi8KKwkJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCBuZXh0X3BhZ2UgPT0gcmVhZGVyX3BhZ2UpOworCisJCS8qCisJCSAqIElmIGZvciBzb21lIHJlYXNvbiwgd2UgaGFkIGFuIGludGVycnVwdCBzdG9ybSB0aGF0IG1hZGUKKwkJICogaXQgYWxsIHRoZSB3YXkgYXJvdW5kIHRoZSBidWZmZXIsIGJhaWwsIGFuZCB3YXJuCisJCSAqIGFib3V0IGl0LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KG5leHRfcGFnZSA9PSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkpIHsKKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWlmIChuZXh0X3BhZ2UgPT0gaGVhZF9wYWdlKSB7CisJCQlpZiAoIShidWZmZXItPmZsYWdzICYgUkJfRkxfT1ZFUldSSVRFKSkgeworCQkJCS8qIHJlc2V0IHdyaXRlICovCisJCQkJaWYgKHRhaWwgPD0gQlVGX1BBR0VfU0laRSkKKwkJCQkJbG9jYWxfc2V0KCZ0YWlsX3BhZ2UtPndyaXRlLCB0YWlsKTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisKKwkJCS8qIHRhaWxfcGFnZSBoYXMgbm90IG1vdmVkIHlldD8gKi8KKwkJCWlmICh0YWlsX3BhZ2UgPT0gY3B1X2J1ZmZlci0+dGFpbF9wYWdlKSB7CisJCQkJLyogY291bnQgb3ZlcmZsb3dzICovCisJCQkJcmJfdXBkYXRlX292ZXJmbG93KGNwdV9idWZmZXIpOworCisJCQkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJmhlYWRfcGFnZSk7CisJCQkJY3B1X2J1ZmZlci0+aGVhZF9wYWdlID0gaGVhZF9wYWdlOworCQkJCWNwdV9idWZmZXItPmhlYWRfcGFnZS0+cmVhZCA9IDA7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgdGFpbCBwYWdlIGlzIHN0aWxsIHRoZSBzYW1lIGFzIHdoYXQgd2UgdGhpbmsKKwkJICogaXQgaXMsIHRoZW4gaXQgaXMgdXAgdG8gdXMgdG8gdXBkYXRlIHRoZSB0YWlsCisJCSAqIHBvaW50ZXIuCisJCSAqLworCQlpZiAodGFpbF9wYWdlID09IGNwdV9idWZmZXItPnRhaWxfcGFnZSkgeworCQkJbG9jYWxfc2V0KCZuZXh0X3BhZ2UtPndyaXRlLCAwKTsKKwkJCWxvY2FsX3NldCgmbmV4dF9wYWdlLT5jb21taXQsIDApOworCQkJY3B1X2J1ZmZlci0+dGFpbF9wYWdlID0gbmV4dF9wYWdlOworCisJCQkvKiByZXJlYWQgdGhlIHRpbWUgc3RhbXAgKi8KKwkJCSp0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1KTsKKwkJCWNwdV9idWZmZXItPnRhaWxfcGFnZS0+dGltZV9zdGFtcCA9ICp0czsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBhY3R1YWwgdGFpbCBwYWdlIGhhcyBtb3ZlZCBmb3J3YXJkLgorCQkgKi8KKwkJaWYgKHRhaWwgPCBCVUZfUEFHRV9TSVpFKSB7CisJCQkvKiBNYXJrIHRoZSByZXN0IG9mIHRoZSBwYWdlIHdpdGggcGFkZGluZyAqLworCQkJZXZlbnQgPSBfX3JiX3BhZ2VfaW5kZXgodGFpbF9wYWdlLCB0YWlsKTsKKwkJCWV2ZW50LT50eXBlID0gUklOR0JVRl9UWVBFX1BBRERJTkc7CisJCX0KKworCQlpZiAodGFpbCA8PSBCVUZfUEFHRV9TSVpFKQorCQkJLyogU2V0IHRoZSB3cml0ZSBiYWNrIHRvIHRoZSBwcmV2aW91cyBzZXR0aW5nICovCisJCQlsb2NhbF9zZXQoJnRhaWxfcGFnZS0+d3JpdGUsIHRhaWwpOworCisJCS8qCisJCSAqIElmIHRoaXMgd2FzIGEgY29tbWl0IGVudHJ5IHRoYXQgZmFpbGVkLAorCQkgKiBpbmNyZW1lbnQgdGhhdCB0b28KKwkJICovCisJCWlmICh0YWlsX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UgJiYKKwkJICAgIHRhaWwgPT0gcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpKSB7CisJCQlyYl9zZXRfY29tbWl0X3RvX3dyaXRlKGNwdV9idWZmZXIpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCisJCS8qIGZhaWwgYW5kIGxldCB0aGUgY2FsbGVyIHRyeSBhZ2FpbiAqLworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwkvKiBXZSByZXNlcnZlZCBzb21ldGhpbmcgb24gdGhlIGJ1ZmZlciAqLworCisJQlVHX09OKHdyaXRlID4gQlVGX1BBR0VfU0laRSk7CisKKwlldmVudCA9IF9fcmJfcGFnZV9pbmRleCh0YWlsX3BhZ2UsIHRhaWwpOworCXJiX3VwZGF0ZV9ldmVudChldmVudCwgdHlwZSwgbGVuZ3RoKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNvbW1pdCBhbmQgdGhlIHRhaWwgaXMgemVybywgdGhlbiB1cGRhdGUKKwkgKiB0aGlzIHBhZ2UncyB0aW1lIHN0YW1wLgorCSAqLworCWlmICghdGFpbCAmJiByYl9pc19jb21taXQoY3B1X2J1ZmZlciwgZXZlbnQpKQorCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+dGltZV9zdGFtcCA9ICp0czsKKworCXJldHVybiBldmVudDsKKworIG91dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CityYl9hZGRfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICB1NjQgKnRzLCB1NjQgKmRlbHRhKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RhdGljIGludCBvbmNlOworCWludCByZXQ7CisKKwlpZiAodW5saWtlbHkoKmRlbHRhID4gKDFVTEwgPDwgNTkpICYmICFvbmNlKyspKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRlbHRhIHdheSB0b28gYmlnISAlbGx1IgorCQkgICAgICAgIiB0cz0lbGx1IHdyaXRlIHN0YW1wID0gJWxsdVxuIiwKKwkJICAgICAgICpkZWx0YSwgKnRzLCBjcHVfYnVmZmVyLT53cml0ZV9zdGFtcCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJLyoKKwkgKiBUaGUgZGVsdGEgaXMgdG9vIGJpZywgd2UgdG8gYWRkIGEKKwkgKiBuZXcgdGltZXN0YW1wLgorCSAqLworCWV2ZW50ID0gX19yYl9yZXNlcnZlX25leHQoY3B1X2J1ZmZlciwKKwkJCQkgIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORCwKKwkJCQkgIFJCX0xFTl9USU1FX0VYVEVORCwKKwkJCQkgIHRzKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKFBUUl9FUlIoZXZlbnQpID09IC1FQUdBSU4pCisJCXJldHVybiAtRUFHQUlOOworCisJLyogT25seSBhIGNvbW1pdGVkIHRpbWUgZXZlbnQgY2FuIHVwZGF0ZSB0aGUgd3JpdGUgc3RhbXAgKi8KKwlpZiAocmJfaXNfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBvbiB0aGUgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvCisJCSAqIHVwZGF0ZSB0aGUgcGFnZSBpdHNlbGYsIGFuZCBqdXN0IHB1dCBpbiBhIHplcm8uCisJCSAqLworCQlpZiAocmJfZXZlbnRfaW5kZXgoZXZlbnQpKSB7CisJCQlldmVudC0+dGltZV9kZWx0YSA9ICpkZWx0YSAmIFRTX01BU0s7CisJCQlldmVudC0+YXJyYXlbMF0gPSAqZGVsdGEgPj4gVFNfU0hJRlQ7CisJCX0gZWxzZSB7CisJCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+dGltZV9zdGFtcCA9ICp0czsKKwkJCWV2ZW50LT50aW1lX2RlbHRhID0gMDsKKwkJCWV2ZW50LT5hcnJheVswXSA9IDA7CisJCX0KKwkJY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXAgPSAqdHM7CisJCS8qIGxldCB0aGUgY2FsbGVyIGtub3cgdGhpcyB3YXMgdGhlIGNvbW1pdCAqLworCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCS8qIERhcm4sIHRoaXMgaXMganVzdCB3YXN0ZWQgc3BhY2UgKi8KKwkJZXZlbnQtPnRpbWVfZGVsdGEgPSAwOworCQlldmVudC0+YXJyYXlbMF0gPSAwOworCQlyZXQgPSAwOworCX0KKworCSpkZWx0YSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JiX3Jlc2VydmVfbmV4dF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICAgICAgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwl1NjQgdHMsIGRlbHRhOworCWludCBjb21taXQgPSAwOworCisgYWdhaW46CisJdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmNwdSk7CisKKwkvKgorCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCisJICogWWVzIHRoZXJlIGlzIGEgcmFjZSBoZXJlLiBJZiBhbiBpbnRlcnJ1cHQgY29tZXMgaW4KKwkgKiBqdXN0IGFmdGVyIHRoZSBjb25kaXRpb25hbCBhbmQgaXQgdHJhY2VzIHRvbywgdGhlbiBpdAorCSAqIHdpbGwgYWxzbyBjaGVjayB0aGUgZGVsdGFzLiBNb3JlIHRoYW4gb25lIHRpbWVzdGFtcCBtYXkKKwkgKiBhbHNvIGJlIG1hZGUuIEJ1dCBvbmx5IHRoZSBlbnRyeSB0aGF0IGRpZCB0aGUgYWN0dWFsCisJICogY29tbWl0IHdpbGwgYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gemVyby4KKwkgKi8KKwlpZiAoY3B1X2J1ZmZlci0+dGFpbF9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlICYmCisJICAgIHJiX3BhZ2Vfd3JpdGUoY3B1X2J1ZmZlci0+dGFpbF9wYWdlKSA9PQorCSAgICByYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikpIHsKKworCQlkZWx0YSA9IHRzIC0gY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXA7CisKKwkJLyogbWFrZSBzdXJlIHRoaXMgZGVsdGEgaXMgY2FsY3VsYXRlZCBoZXJlICovCisJCWJhcnJpZXIoKTsKKworCQkvKiBEaWQgdGhlIHdyaXRlIHN0YW1wIGdldCB1cGRhdGVkIGFscmVhZHk/ICovCisJCWlmICh1bmxpa2VseSh0cyA8IGNwdV9idWZmZXItPndyaXRlX3N0YW1wKSkKKwkJCWdvdG8gYWdhaW47CisKKwkJaWYgKHRlc3RfdGltZV9zdGFtcChkZWx0YSkpIHsKKworCQkJY29tbWl0ID0gcmJfYWRkX3RpbWVfc3RhbXAoY3B1X2J1ZmZlciwgJnRzLCAmZGVsdGEpOworCisJCQlpZiAoY29tbWl0ID09IC1FQlVTWSkKKwkJCQlyZXR1cm4gTlVMTDsKKworCQkJaWYgKGNvbW1pdCA9PSAtRUFHQUlOKQorCQkJCWdvdG8gYWdhaW47CisKKwkJCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgY29tbWl0IDwgMCk7CisJCX0KKwl9IGVsc2UKKwkJLyogTm9uIGNvbW1pdHMgaGF2ZSB6ZXJvIGRlbHRhcyAqLworCQlkZWx0YSA9IDA7CisKKwlldmVudCA9IF9fcmJfcmVzZXJ2ZV9uZXh0KGNwdV9idWZmZXIsIHR5cGUsIGxlbmd0aCwgJnRzKTsKKwlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVBR0FJTikKKwkJZ290byBhZ2FpbjsKKworCWlmICghZXZlbnQpIHsKKwkJaWYgKHVubGlrZWx5KGNvbW1pdCkpCisJCQkvKgorCQkJICogT3VjaCEgV2UgbmVlZGVkIGEgdGltZXN0YW1wIGFuZCBpdCB3YXMgY29tbWl0ZWQuIEJ1dAorCQkJICogd2UgZGlkbid0IGdldCBvdXIgZXZlbnQgcmVzZXJ2ZWQuCisJCQkgKi8KKwkJCXJiX3NldF9jb21taXRfdG9fd3JpdGUoY3B1X2J1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogSWYgdGhlIHRpbWVzdGFtcCB3YXMgY29tbWl0ZWQsIG1ha2UgdGhlIGNvbW1pdCBvdXIgZW50cnkKKwkgKiBub3cgc28gdGhhdCB3ZSB3aWxsIHVwZGF0ZSBpdCB3aGVuIG5lZWRlZC4KKwkgKi8KKwlpZiAoY29tbWl0KQorCQlyYl9zZXRfY29tbWl0X2V2ZW50KGNwdV9idWZmZXIsIGV2ZW50KTsKKwllbHNlIGlmICghcmJfaXNfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KSkKKwkJZGVsdGEgPSAwOworCisJZXZlbnQtPnRpbWVfZGVsdGEgPSBkZWx0YTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmJfbmVlZF9yZXNjaGVkKTsKKworLyoqCisgKiByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgLSByZXNlcnZlIGEgcGFydCBvZiB0aGUgYnVmZmVyCisgKiBAYnVmZmVyOiB0aGUgcmluZyBidWZmZXIgdG8gcmVzZXJ2ZSBmcm9tCisgKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlc2VydmUgKGV4Y2x1ZGluZyBldmVudCBoZWFkZXIpCisgKiBAZmxhZ3M6IGEgcG9pbnRlciB0byBzYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIGEgcmVzZXZlcmQgZXZlbnQgb24gdGhlIHJpbmcgYnVmZmVyIHRvIGNvcHkgZGlyZWN0bHkgdG8uCisgKiBUaGUgdXNlciBvZiB0aGlzIGludGVyZmFjZSB3aWxsIG5lZWQgdG8gZ2V0IHRoZSBib2R5IHRvIHdyaXRlIGludG8KKyAqIGFuZCBjYW4gdXNlIHRoZSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKCkgaW50ZXJmYWNlLgorICoKKyAqIFRoZSBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBuZWVkZWQsIG5vdCB0aGUgZXZlbnQgbGVuZ3RoCisgKiB3aGljaCBhbHNvIGluY2x1ZGVzIHRoZSBldmVudCBoZWFkZXIuCisgKgorICogTXVzdCBiZSBwYWlyZWQgd2l0aCByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0LCB1bmxlc3MgTlVMTCBpcyByZXR1cm5lZC4KKyAqIElmIE5VTEwgaXMgcmV0dXJuZWQsIHRoZW4gbm90aGluZyBoYXMgYmVlbiBhbGxvY2F0ZWQgb3IgbG9ja2VkLgorICovCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgorcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJaW50IGNwdSwgcmVzY2hlZDsKKworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIElmIHdlIGFyZSB0cmFjaW5nIHNjaGVkdWxlLCB3ZSBkb24ndCB3YW50IHRvIHJlY3Vyc2UgKi8KKwlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCWdvdG8gb3V0OworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCisJaWYgKGF0b21pY19yZWFkKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKKworCWxlbmd0aCA9IHJiX2NhbGN1bGF0ZV9ldmVudF9sZW5ndGgobGVuZ3RoKTsKKwlpZiAobGVuZ3RoID4gQlVGX1BBR0VfU0laRSkKKwkJZ290byBvdXQ7CisKKwlldmVudCA9IHJiX3Jlc2VydmVfbmV4dF9ldmVudChjcHVfYnVmZmVyLCBSSU5HQlVGX1RZUEVfREFUQSwgbGVuZ3RoKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKKworCS8qCisJICogTmVlZCB0byBzdG9yZSByZXNjaGVkIHN0YXRlIG9uIHRoaXMgY3B1LgorCSAqIE9ubHkgdGhlIGZpcnN0IG5lZWRzIHRvLgorCSAqLworCisJaWYgKHByZWVtcHRfY291bnQoKSA9PSAxKQorCQlwZXJfY3B1KHJiX25lZWRfcmVzY2hlZCwgY3B1KSA9IHJlc2NoZWQ7CisKKwlyZXR1cm4gZXZlbnQ7CisKKyBvdXQ6CisJaWYgKHJlc2NoZWQpCisJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKwllbHNlCisJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmJfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCWNwdV9idWZmZXItPmVudHJpZXMrKzsKKworCS8qIE9ubHkgcHJvY2VzcyBmdXJ0aGVyIGlmIHdlIG93biB0aGUgY29tbWl0ICovCisJaWYgKCFyYl9pc19jb21taXQoY3B1X2J1ZmZlciwgZXZlbnQpKQorCQlyZXR1cm47CisKKwljcHVfYnVmZmVyLT53cml0ZV9zdGFtcCArPSBldmVudC0+dGltZV9kZWx0YTsKKworCXJiX3NldF9jb21taXRfdG9fd3JpdGUoY3B1X2J1ZmZlcik7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCAtIGNvbW1pdCBhIHJlc2VydmVkCisgKiBAYnVmZmVyOiBUaGUgYnVmZmVyIHRvIGNvbW1pdCB0bworICogQGV2ZW50OiBUaGUgZXZlbnQgcG9pbnRlciB0byBjb21taXQuCisgKiBAZmxhZ3M6IHRoZSBpbnRlcnJ1cHQgZmxhZ3MgcmVjZWl2ZWQgZnJvbSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUuCisgKgorICogVGhpcyBjb21taXRzIHRoZSBkYXRhIHRvIHRoZSByaW5nIGJ1ZmZlciwgYW5kIHJlbGVhc2VzIGFueSBsb2NrcyBoZWxkLgorICoKKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggcmluZ19idWZmZXJfbG9ja19yZXNlcnZlLgorICovCitpbnQgcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCisJcmJfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KTsKKworCS8qCisJICogT25seSB0aGUgbGFzdCBwcmVlbXB0IGNvdW50IG5lZWRzIHRvIHJlc3RvcmUgcHJlZW1wdGlvbi4KKwkgKi8KKwlpZiAocHJlZW1wdF9jb3VudCgpID09IDEpIHsKKwkJaWYgKHBlcl9jcHUocmJfbmVlZF9yZXNjaGVkLCBjcHUpKQorCQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisJCWVsc2UKKwkJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKwl9IGVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl93cml0ZSAtIHdyaXRlIGRhdGEgdG8gdGhlIGJ1ZmZlciB3aXRob3V0IHJlc2VydmluZworICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHdyaXRlIHRvLgorICogQGxlbmd0aDogVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBiZWluZyB3cml0dGVuIChleGNsdWRpbmcgdGhlIGV2ZW50IGhlYWRlcikKKyAqIEBkYXRhOiBUaGUgZGF0YSB0byB3cml0ZSB0byB0aGUgYnVmZmVyLgorICoKKyAqIFRoaXMgaXMgbGlrZSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgYW5kIHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQgYXMKKyAqIG9uZSBmdW5jdGlvbi4gSWYgeW91IGFscmVhZHkgaGF2ZSB0aGUgZGF0YSB0byB3cml0ZSB0byB0aGUgYnVmZmVyLCBpdAorICogbWF5IGJlIGVhc2llciB0byBzaW1wbHkgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIE5vdGUsIGxpa2UgcmluZ19idWZmZXJfbG9ja19yZXNlcnZlLCB0aGUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKyAqIGFuZCBub3QgdGhlIGxlbmd0aCBvZiB0aGUgZXZlbnQgd2hpY2ggd291bGQgaG9sZCB0aGUgaGVhZGVyLgorICovCitpbnQgcmluZ19idWZmZXJfd3JpdGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCwKKwkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50X2xlbmd0aDsKKwl2b2lkICpib2R5OworCWludCByZXQgPSAtRUJVU1k7CisJaW50IGNwdSwgcmVzY2hlZDsKKworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmVzY2hlZCA9IG5lZWRfcmVzY2hlZCgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKCFjcHVfaXNzZXQoY3B1LCBidWZmZXItPmNwdW1hc2spKQorCQlnb3RvIG91dDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKworCWlmIChhdG9taWNfcmVhZCgmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKSkKKwkJZ290byBvdXQ7CisKKwlldmVudF9sZW5ndGggPSByYl9jYWxjdWxhdGVfZXZlbnRfbGVuZ3RoKGxlbmd0aCk7CisJZXZlbnQgPSByYl9yZXNlcnZlX25leHRfZXZlbnQoY3B1X2J1ZmZlciwKKwkJCQkgICAgICBSSU5HQlVGX1RZUEVfREFUQSwgZXZlbnRfbGVuZ3RoKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKKworCWJvZHkgPSByYl9ldmVudF9kYXRhKGV2ZW50KTsKKworCW1lbWNweShib2R5LCBkYXRhLCBsZW5ndGgpOworCisJcmJfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KTsKKworCXJldCA9IDA7Cisgb3V0OgorCWlmIChyZXNjaGVkKQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKKwllbHNlCisJCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJiX3Blcl9jcHVfZW1wdHkoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXIgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpjb21taXQgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZTsKKworCXJldHVybiByZWFkZXItPnJlYWQgPT0gcmJfcGFnZV9jb21taXQocmVhZGVyKSAmJgorCQkoY29tbWl0ID09IHJlYWRlciB8fAorCQkgKGNvbW1pdCA9PSBoZWFkICYmCisJCSAgaGVhZC0+cmVhZCA9PSByYl9wYWdlX2NvbW1pdChjb21taXQpKSk7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcmVjb3JkX2Rpc2FibGUgLSBzdG9wIGFsbCB3cml0ZXMgaW50byB0aGUgYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gc3RvcCB3cml0ZXMgdG8uCisgKgorICogVGhpcyBwcmV2ZW50cyBhbGwgd3JpdGVzIHRvIHRoZSBidWZmZXIuIEFueSBhdHRlbXB0IHRvIHdyaXRlCisgKiB0byB0aGUgYnVmZmVyIGFmdGVyIHRoaXMgd2lsbCBmYWlsIGFuZCByZXR1cm4gTlVMTC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIHN5bmNocm9uaXplX3NjaGVkKCkgYWZ0ZXIgdGhpcy4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZWNvcmRfZGlzYWJsZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlhdG9taWNfaW5jKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCk7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZSAtIGVuYWJsZSB3cml0ZXMgdG8gdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIGVuYWJsZSB3cml0ZXMKKyAqCisgKiBOb3RlLCBtdWx0aXBsZSBkaXNhYmxlcyB3aWxsIG5lZWQgdGhlIHNhbWUgbnVtYmVyIG9mIGVuYWJsZXMKKyAqIHRvIHRydWVseSBlbmFibGUgdGhlIHdyaXRpbmcgKG11Y2ggbGlrZSBwcmVlbXB0X2Rpc2FibGUpLgorICovCit2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCit7CisJYXRvbWljX2RlYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3JlY29yZF9kaXNhYmxlX2NwdSAtIHN0b3AgYWxsIHdyaXRlcyBpbnRvIHRoZSBjcHVfYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gc3RvcCB3cml0ZXMgdG8uCisgKiBAY3B1OiBUaGUgQ1BVIGJ1ZmZlciB0byBzdG9wCisgKgorICogVGhpcyBwcmV2ZW50cyBhbGwgd3JpdGVzIHRvIHRoZSBidWZmZXIuIEFueSBhdHRlbXB0IHRvIHdyaXRlCisgKiB0byB0aGUgYnVmZmVyIGFmdGVyIHRoaXMgd2lsbCBmYWlsIGFuZCByZXR1cm4gTlVMTC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIHN5bmNocm9uaXplX3NjaGVkKCkgYWZ0ZXIgdGhpcy4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZWNvcmRfZGlzYWJsZV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybjsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1IC0gZW5hYmxlIHdyaXRlcyB0byB0aGUgYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gZW5hYmxlIHdyaXRlcworICogQGNwdTogVGhlIENQVSB0byBlbmFibGUuCisgKgorICogTm90ZSwgbXVsdGlwbGUgZGlzYWJsZXMgd2lsbCBuZWVkIHRoZSBzYW1lIG51bWJlciBvZiBlbmFibGVzCisgKiB0byB0cnVlbHkgZW5hYmxlIHRoZSB3cml0aW5nIChtdWNoIGxpa2UgcHJlZW1wdF9kaXNhYmxlKS4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCWF0b21pY19kZWMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZW50cmllc19jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGEgY3B1IGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyCisgKiBAY3B1OiBUaGUgcGVyIENQVSBidWZmZXIgdG8gZ2V0IHRoZSBlbnRyaWVzIGZyb20uCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfZW50cmllc19jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiAwOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCXJldHVybiBjcHVfYnVmZmVyLT5lbnRyaWVzOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYSBjcHVfYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKKyAqIEBjcHU6IFRoZSBwZXIgQ1BVIGJ1ZmZlciB0byBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBmcm9tCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiAwOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCXJldHVybiBjcHVfYnVmZmVyLT5vdmVycnVuOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2VudHJpZXMgLSBnZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGEgYnVmZmVyCisgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcmluZyBidWZmZXIKKyAqIChhbGwgQ1BVIGVudHJpZXMpCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfZW50cmllcyhzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXMgPSAwOworCWludCBjcHU7CisKKwkvKiBpZiB5b3UgY2FyZSBhYm91dCB0aGlzIGJlaW5nIGNvcnJlY3QsIGxvY2sgdGhlIGJ1ZmZlciAqLworCWZvcl9lYWNoX2J1ZmZlcl9jcHUoYnVmZmVyLCBjcHUpIHsKKwkJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCQllbnRyaWVzICs9IGNwdV9idWZmZXItPmVudHJpZXM7CisJfQorCisJcmV0dXJuIGVudHJpZXM7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKKyAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlcgorICoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBvdmVycnVucyBpbiB0aGUgcmluZyBidWZmZXIKKyAqIChhbGwgQ1BVIGVudHJpZXMpCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBvdmVycnVucyA9IDA7CisJaW50IGNwdTsKKworCS8qIGlmIHlvdSBjYXJlIGFib3V0IHRoaXMgYmVpbmcgY29ycmVjdCwgbG9jayB0aGUgYnVmZmVyICovCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkgeworCQljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CisJCW92ZXJydW5zICs9IGNwdV9idWZmZXItPm92ZXJydW47CisJfQorCisJcmV0dXJuIG92ZXJydW5zOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQgLSByZXNldCBhbiBpdGVyYXRvcgorICogQGl0ZXI6IFRoZSBpdGVyYXRvciB0byByZXNldAorICoKKyAqIFJlc2V0cyB0aGUgaXRlcmF0b3IsIHNvIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcKKyAqIGFnYWluLgorICovCit2b2lkIHJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOworCisJLyogSXRlcmF0b3IgdXNhZ2UgaXMgZXhwZWN0ZWQgdG8gaGF2ZSByZWNvcmQgZGlzYWJsZWQgKi8KKwlpZiAobGlzdF9lbXB0eSgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QpKSB7CisJCWl0ZXItPmhlYWRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwkJaXRlci0+aGVhZCA9IGNwdV9idWZmZXItPmhlYWRfcGFnZS0+cmVhZDsKKwl9IGVsc2UgeworCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKwkJaXRlci0+aGVhZCA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkOworCX0KKwlpZiAoaXRlci0+aGVhZCkKKwkJaXRlci0+cmVhZF9zdGFtcCA9IGNwdV9idWZmZXItPnJlYWRfc3RhbXA7CisJZWxzZQorCQlpdGVyLT5yZWFkX3N0YW1wID0gaXRlci0+aGVhZF9wYWdlLT50aW1lX3N0YW1wOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkgLSBjaGVjayBpZiBhbiBpdGVyYXRvciBoYXMgbm8gbW9yZSB0byByZWFkCisgKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHRvIGNoZWNrCisgKi8KK2ludCByaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCisJY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKKwlyZXR1cm4gaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlICYmCisJCWl0ZXItPmhlYWQgPT0gcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpOworfQorCitzdGF0aWMgdm9pZAorcmJfdXBkYXRlX3JlYWRfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCSAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwl1NjQgZGVsdGE7CisKKwlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKKwkJcmV0dXJuOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CisJCWRlbHRhID0gZXZlbnQtPmFycmF5WzBdOworCQlkZWx0YSA8PD0gVFNfU0hJRlQ7CisJCWRlbHRhICs9IGV2ZW50LT50aW1lX2RlbHRhOworCQljcHVfYnVmZmVyLT5yZWFkX3N0YW1wICs9IGRlbHRhOworCQlyZXR1cm47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQkvKiBGSVhNRTogbm90IGltcGxlbWVudGVkICovCisJCXJldHVybjsKKworCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CisJCWNwdV9idWZmZXItPnJlYWRfc3RhbXAgKz0gZXZlbnQtPnRpbWVfZGVsdGE7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCityYl91cGRhdGVfaXRlcl9yZWFkX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLAorCQkJICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXU2NCBkZWx0YTsKKworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgorCQlyZXR1cm47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKKwkJZGVsdGEgPSBldmVudC0+YXJyYXlbMF07CisJCWRlbHRhIDw8PSBUU19TSElGVDsKKwkJZGVsdGEgKz0gZXZlbnQtPnRpbWVfZGVsdGE7CisJCWl0ZXItPnJlYWRfc3RhbXAgKz0gZGVsdGE7CisJCXJldHVybjsKKworCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfU1RBTVA6CisJCS8qIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgKi8KKwkJcmV0dXJuOworCisJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKKwkJaXRlci0+cmVhZF9zdGFtcCArPSBldmVudC0+dGltZV9kZWx0YTsKKwkJcmV0dXJuOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBidWZmZXJfcGFnZSAqCityYl9nZXRfcmVhZGVyX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+bG9jaywgZmxhZ3MpOworCisgYWdhaW46CisJcmVhZGVyID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2U7CisKKwkvKiBJZiB0aGVyZSdzIG1vcmUgdG8gcmVhZCwgcmV0dXJuIHRoaXMgcGFnZSAqLworCWlmIChjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA8IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpKQorCQlnb3RvIG91dDsKKworCS8qIE5ldmVyIHNob3VsZCB3ZSBoYXZlIGFuIGluZGV4IGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSAqLworCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwKKwkJICAgY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPiByYl9wYWdlX3NpemUocmVhZGVyKSk7CisKKwkvKiBjaGVjayBpZiB3ZSBjYXVnaHQgdXAgdG8gdGhlIHRhaWwgKi8KKwlyZWFkZXIgPSBOVUxMOworCWlmIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9PSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFNwbGljZSB0aGUgZW1wdHkgcmVhZGVyIHBhZ2UgaW50byB0aGUgbGlzdCBhcm91bmQgdGhlIGhlYWQuCisJICogUmVzZXQgdGhlIHJlYWRlciBwYWdlIHRvIHNpemUgemVyby4KKwkgKi8KKworCXJlYWRlciA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdC5uZXh0ID0gcmVhZGVyLT5saXN0Lm5leHQ7CisJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QucHJldiA9IHJlYWRlci0+bGlzdC5wcmV2OworCisJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+d3JpdGUsIDApOworCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmNvbW1pdCwgMCk7CisKKwkvKiBNYWtlIHRoZSByZWFkZXIgcGFnZSBub3cgcmVwbGFjZSB0aGUgaGVhZCAqLworCXJlYWRlci0+bGlzdC5wcmV2LT5uZXh0ID0gJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0OworCXJlYWRlci0+bGlzdC5uZXh0LT5wcmV2ID0gJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0OworCisJLyoKKwkgKiBJZiB0aGUgdGFpbCBpcyBvbiB0aGUgcmVhZGVyLCB0aGVuIHdlIG11c3Qgc2V0IHRoZSBoZWFkCisJICogdG8gdGhlIGluc2VydGVkIHBhZ2UsIG90aGVyd2lzZSB3ZSBzZXQgaXQgb25lIGJlZm9yZS4KKwkgKi8KKwljcHVfYnVmZmVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKKworCWlmIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPSByZWFkZXIpCisJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZjcHVfYnVmZmVyLT5oZWFkX3BhZ2UpOworCisJLyogRmluYWxseSB1cGRhdGUgdGhlIHJlYWRlciBwYWdlIHRvIHRoZSBuZXcgaGVhZCAqLworCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlID0gcmVhZGVyOworCXJiX3Jlc2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOworCisJZ290byBhZ2FpbjsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVhZGVyOworfQorCitzdGF0aWMgdm9pZCByYl9hZHZhbmNlX3JlYWRlcihzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyOworCXVuc2lnbmVkIGxlbmd0aDsKKworCXJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTsKKworCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiBidWZmZXIgaXMgZW1wdHkgKi8KKwlCVUdfT04oIXJlYWRlcik7CisKKwlldmVudCA9IHJiX3JlYWRlcl9ldmVudChjcHVfYnVmZmVyKTsKKworCWlmIChldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfREFUQSkKKwkJY3B1X2J1ZmZlci0+ZW50cmllcy0tOworCisJcmJfdXBkYXRlX3JlYWRfc3RhbXAoY3B1X2J1ZmZlciwgZXZlbnQpOworCisJbGVuZ3RoID0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KTsKKwljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCArPSBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIHJiX2FkdmFuY2VfaXRlcihzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxlbmd0aDsKKworCWNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOworCWJ1ZmZlciA9IGNwdV9idWZmZXItPmJ1ZmZlcjsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkgKi8KKwlpZiAoaXRlci0+aGVhZCA+PSByYl9wYWdlX3NpemUoaXRlci0+aGVhZF9wYWdlKSkgeworCQlCVUdfT04oaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKTsKKwkJcmJfaW5jX2l0ZXIoaXRlcik7CisJCXJldHVybjsKKwl9CisKKwlldmVudCA9IHJiX2l0ZXJfaGVhZF9ldmVudChpdGVyKTsKKworCWxlbmd0aCA9IHJiX2V2ZW50X2xlbmd0aChldmVudCk7CisKKwkvKgorCSAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdG8gYWR2YW5jZSB0aGUgaGVhZGVyIGlmIHdlIGFyZQorCSAqIGF0IHRoZSB0YWlsIG9mIHRoZSBidWZmZXIuCisJICovCisJQlVHX09OKChpdGVyLT5oZWFkX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpICYmCisJICAgICAgIChpdGVyLT5oZWFkICsgbGVuZ3RoID4gcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpKSk7CisKKwlyYl91cGRhdGVfaXRlcl9yZWFkX3N0YW1wKGl0ZXIsIGV2ZW50KTsKKworCWl0ZXItPmhlYWQgKz0gbGVuZ3RoOworCisJLyogY2hlY2sgZm9yIGVuZCBvZiBwYWdlIHBhZGRpbmcgKi8KKwlpZiAoKGl0ZXItPmhlYWQgPj0gcmJfcGFnZV9zaXplKGl0ZXItPmhlYWRfcGFnZSkpICYmCisJICAgIChpdGVyLT5oZWFkX3BhZ2UgIT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpKQorCQlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcGVlayAtIHBlZWsgYXQgdGhlIG5leHQgZXZlbnQgdG8gYmUgcmVhZAorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHJlYWQKKyAqIEBjcHU6IFRoZSBjcHUgdG8gcGVhayBhdAorICogQHRzOiBUaGUgdGltZXN0YW1wIGNvdW50ZXIgb2YgdGhpcyBldmVudC4KKyAqCisgKiBUaGlzIHdpbGwgcmV0dXJuIHRoZSBldmVudCB0aGF0IHdpbGwgYmUgcmVhZCBuZXh0LCBidXQgZG9lcworICogbm90IGNvbnN1bWUgdGhlIGRhdGEuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9wZWVrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LCB1NjQgKnRzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiBOVUxMOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCisgYWdhaW46CisJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOworCWlmICghcmVhZGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWV2ZW50ID0gcmJfcmVhZGVyX2V2ZW50KGNwdV9idWZmZXIpOworCisJc3dpdGNoIChldmVudC0+dHlwZSkgeworCWNhc2UgUklOR0JVRl9UWVBFX1BBRERJTkc6CisJCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgMSk7CisJCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOworCQlyZXR1cm4gTlVMTDsKKworCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgorCQkvKiBJbnRlcm5hbCBkYXRhLCBPSyB0byBhZHZhbmNlICovCisJCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9TVEFNUDoKKwkJLyogRklYTUU6IG5vdCBpbXBsZW1lbnRlZCAqLworCQlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKKwkJZ290byBhZ2FpbjsKKworCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CisJCWlmICh0cykgeworCQkJKnRzID0gY3B1X2J1ZmZlci0+cmVhZF9zdGFtcCArIGV2ZW50LT50aW1lX2RlbHRhOworCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CisJCX0KKwkJcmV0dXJuIGV2ZW50OworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfaXRlcl9wZWVrIC0gcGVlayBhdCB0aGUgbmV4dCBldmVudCB0byBiZSByZWFkCisgKiBAaXRlcjogVGhlIHJpbmcgYnVmZmVyIGl0ZXJhdG9yCisgKiBAdHM6IFRoZSB0aW1lc3RhbXAgY291bnRlciBvZiB0aGlzIGV2ZW50LgorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGV2ZW50IHRoYXQgd2lsbCBiZSByZWFkIG5leHQsIGJ1dCBkb2VzCisgKiBub3QgaW5jcmVtZW50IHRoZSBpdGVyYXRvci4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX2l0ZXJfcGVlayhzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlciwgdTY0ICp0cykKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCisJaWYgKHJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlcikpCisJCXJldHVybiBOVUxMOworCisJY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisJYnVmZmVyID0gY3B1X2J1ZmZlci0+YnVmZmVyOworCisgYWdhaW46CisJaWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpCisJCXJldHVybiBOVUxMOworCisJZXZlbnQgPSByYl9pdGVyX2hlYWRfZXZlbnQoaXRlcik7CisKKwlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisJY2FzZSBSSU5HQlVGX1RZUEVfUEFERElORzoKKwkJcmJfaW5jX2l0ZXIoaXRlcik7CisJCWdvdG8gYWdhaW47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKKwkJLyogSW50ZXJuYWwgZGF0YSwgT0sgdG8gYWR2YW5jZSAqLworCQlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7CisJCWdvdG8gYWdhaW47CisKKwljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgorCQkvKiBGSVhNRTogbm90IGltcGxlbWVudGVkICovCisJCXJiX2FkdmFuY2VfaXRlcihpdGVyKTsKKwkJZ290byBhZ2FpbjsKKworCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CisJCWlmICh0cykgeworCQkJKnRzID0gaXRlci0+cmVhZF9zdGFtcCArIGV2ZW50LT50aW1lX2RlbHRhOworCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CisJCX0KKwkJcmV0dXJuIGV2ZW50OworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfY29uc3VtZSAtIHJldHVybiBhbiBldmVudCBhbmQgY29uc3VtZSBpdAorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIGdldCB0aGUgbmV4dCBldmVudCBmcm9tCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBldmVudCBpbiB0aGUgcmluZyBidWZmZXIsIGFuZCB0aGF0IGV2ZW50IGlzIGNvbnN1bWVkLgorICogTWVhbmluZywgdGhhdCBzZXF1ZW50aWFsIHJlYWRzIHdpbGwga2VlcCByZXR1cm5pbmcgYSBkaWZmZXJlbnQgZXZlbnQsCisgKiBhbmQgZXZlbnR1YWxseSBlbXB0eSB0aGUgcmluZyBidWZmZXIgaWYgdGhlIHByb2R1Y2VyIGlzIHNsb3dlci4KKyAqLworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3JpbmdfYnVmZmVyX2NvbnN1bWUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX3BlZWsoYnVmZmVyLCBjcHUsIHRzKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gTlVMTDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKKworCXJldHVybiBldmVudDsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0IC0gc3RhcnQgYSBub24gY29uc3VtaW5nIHJlYWQgb2YgdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHJlYWQgZnJvbQorICogQGNwdTogVGhlIGNwdSBidWZmZXIgdG8gaXRlcmF0ZSBvdmVyCisgKgorICogVGhpcyBzdGFydHMgdXAgYW4gaXRlcmF0aW9uIHRocm91Z2ggdGhlIGJ1ZmZlci4gSXQgYWxzbyBkaXNhYmxlcworICogdGhlIHJlY29yZGluZyB0byB0aGUgYnVmZmVyIHVudGlsIHRoZSByZWFkaW5nIGlzIGZpbmlzaGVkLgorICogVGhpcyBwcmV2ZW50cyB0aGUgcmVhZGluZyBmcm9tIGJlaW5nIGNvcnJ1cHRlZC4gVGhpcyBpcyBub3QKKyAqIGEgY29uc3VtaW5nIHJlYWQsIHNvIGEgcHJvZHVjZXIgaXMgbm90IGV4cGVjdGVkLgorICoKKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggcmluZ19idWZmZXJfZmluaXNoLgorICovCitzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqCityaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiBOVUxMOworCisJaXRlciA9IGttYWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKworCWl0ZXItPmNwdV9idWZmZXIgPSBjcHVfYnVmZmVyOworCisJYXRvbWljX2luYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKKwlyaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KGl0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBpdGVyOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2ZpbmlzaCAtIGZpbmlzaCByZWFkaW5nIHRoZSBpdGVyYXRvciBvZiB0aGUgYnVmZmVyCisgKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHJldHJpZXZlZCBieSByaW5nX2J1ZmZlcl9zdGFydAorICoKKyAqIFRoaXMgcmUtZW5hYmxlcyB0aGUgcmVjb3JkaW5nIHRvIHRoZSBidWZmZXIsIGFuZCBmcmVlcyB0aGUKKyAqIGl0ZXJhdG9yLgorICovCit2b2lkCityaW5nX2J1ZmZlcl9yZWFkX2ZpbmlzaChzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKKwlhdG9taWNfZGVjKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworCWtmcmVlKGl0ZXIpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3JlYWQgLSByZWFkIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHJpbmcgYnVmZmVyIGJ5IHRoZSBpdGVyYXRvcgorICogQGl0ZXI6IFRoZSByaW5nIGJ1ZmZlciBpdGVyYXRvcgorICogQHRzOiBUaGUgdGltZSBzdGFtcCBvZiB0aGUgZXZlbnQgcmVhZC4KKyAqCisgKiBUaGlzIHJlYWRzIHRoZSBuZXh0IGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlciBhbmQgaW5jcmVtZW50cyB0aGUgaXRlcmF0b3IuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCityaW5nX2J1ZmZlcl9yZWFkKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhpdGVyLCB0cyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfc2l6ZSAtIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIgKGluIGJ5dGVzKQorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyLgorICovCit1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX3NpemUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCit7CisJcmV0dXJuIEJVRl9QQUdFX1NJWkUgKiBidWZmZXItPnBhZ2VzOworfQorCitzdGF0aWMgdm9pZAorcmJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCWNwdV9idWZmZXItPmhlYWRfcGFnZQorCQk9IGxpc3RfZW50cnkoY3B1X2J1ZmZlci0+cGFnZXMubmV4dCwgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKKwlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmhlYWRfcGFnZS0+d3JpdGUsIDApOworCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5jb21taXQsIDApOworCisJY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5yZWFkID0gMDsKKworCWNwdV9idWZmZXItPnRhaWxfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwljcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKworCUlOSVRfTElTVF9IRUFEKCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdCk7CisJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+d3JpdGUsIDApOworCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmNvbW1pdCwgMCk7CisJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPSAwOworCisJY3B1X2J1ZmZlci0+b3ZlcnJ1biA9IDA7CisJY3B1X2J1ZmZlci0+ZW50cmllcyA9IDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfcmVzZXRfY3B1IC0gcmVzZXQgYSByaW5nIGJ1ZmZlciBwZXIgQ1BVIGJ1ZmZlcgorICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyIHRvIHJlc2V0IGEgcGVyIGNwdSBidWZmZXIgb2YKKyAqIEBjcHU6IFRoZSBDUFUgYnVmZmVyIHRvIGJlIHJlc2V0CisgKi8KK3ZvaWQgcmluZ19idWZmZXJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKKworCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiByaW5nX2J1ZmZlcl9yZXNldCAtIHJlc2V0IGEgcmluZyBidWZmZXIKKyAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlciB0byByZXNldCBhbGwgY3B1IGJ1ZmZlcnMKKyAqLwordm9pZCByaW5nX2J1ZmZlcl9yZXNldChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkKKwkJcmluZ19idWZmZXJfcmVzZXRfY3B1KGJ1ZmZlciwgY3B1KTsKK30KKworLyoqCisgKiByaW5kX2J1ZmZlcl9lbXB0eSAtIGlzIHRoZSByaW5nIGJ1ZmZlciBlbXB0eT8KKyAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlciB0byB0ZXN0CisgKi8KK2ludCByaW5nX2J1ZmZlcl9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlpbnQgY3B1OworCisJLyogeWVzIHRoaXMgaXMgcmFjeSwgYnV0IGlmIHlvdSBkb24ndCBsaWtlIHRoZSByYWNlLCBsb2NrIHRoZSBidWZmZXIgKi8KKwlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CisJCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKKwkJaWYgKCFyYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2VtcHR5X2NwdSAtIGlzIGEgY3B1IGJ1ZmZlciBvZiBhIHJpbmcgYnVmZmVyIGVtcHR5PworICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyCisgKiBAY3B1OiBUaGUgQ1BVIGJ1ZmZlciB0byB0ZXN0CisgKi8KK2ludCByaW5nX2J1ZmZlcl9lbXB0eV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisKKwlpZiAoIWNwdV9pc3NldChjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiAxOworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOworCXJldHVybiByYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX3N3YXBfY3B1IC0gc3dhcCBhIENQVSBidWZmZXIgYmV0d2VlbiB0d28gcmluZyBidWZmZXJzCisgKiBAYnVmZmVyX2E6IE9uZSBidWZmZXIgdG8gc3dhcCB3aXRoCisgKiBAYnVmZmVyX2I6IFRoZSBvdGhlciBidWZmZXIgdG8gc3dhcCB3aXRoCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHRyYWNlcnMgdGhhdCB3YW50IHRvIHRha2UgYSAic25hcHNob3QiCisgKiBvZiBhIENQVSBidWZmZXIgYW5kIGhhcyBhbm90aGVyIGJhY2sgdXAgYnVmZmVyIGx5aW5nIGFyb3VuZC4KKyAqIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHRyYWNlciBoYW5kbGVzIHRoZSBjcHUgYnVmZmVyIG5vdCBiZWluZworICogdXNlZCBhdCB0aGUgbW9tZW50LgorICovCitpbnQgcmluZ19idWZmZXJfc3dhcF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXJfYSwKKwkJCSBzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcl9iLCBpbnQgY3B1KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyX2E7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXJfYjsKKworCWlmICghY3B1X2lzc2V0KGNwdSwgYnVmZmVyX2EtPmNwdW1hc2spIHx8CisJICAgICFjcHVfaXNzZXQoY3B1LCBidWZmZXJfYi0+Y3B1bWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQXQgbGVhc3QgbWFrZSBzdXJlIHRoZSB0d28gYnVmZmVycyBhcmUgc29tZXdoYXQgdGhlIHNhbWUgKi8KKwlpZiAoYnVmZmVyX2EtPnNpemUgIT0gYnVmZmVyX2ItPnNpemUgfHwKKwkgICAgYnVmZmVyX2EtPnBhZ2VzICE9IGJ1ZmZlcl9iLT5wYWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcHVfYnVmZmVyX2EgPSBidWZmZXJfYS0+YnVmZmVyc1tjcHVdOworCWNwdV9idWZmZXJfYiA9IGJ1ZmZlcl9iLT5idWZmZXJzW2NwdV07CisKKwkvKgorCSAqIFdlIGNhbid0IGRvIGEgc3luY2hyb25pemVfc2NoZWQgaGVyZSBiZWNhdXNlIHRoaXMKKwkgKiBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluIGF0b21pYyBjb250ZXh0LgorCSAqIE5vcm1hbGx5IHRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSBDUFUgYXMgY3B1LgorCSAqIElmIG5vdCBpdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gcHJvdGVjdCB0aGlzLgorCSAqLworCWF0b21pY19pbmMoJmNwdV9idWZmZXJfYS0+cmVjb3JkX2Rpc2FibGVkKTsKKwlhdG9taWNfaW5jKCZjcHVfYnVmZmVyX2ItPnJlY29yZF9kaXNhYmxlZCk7CisKKwlidWZmZXJfYS0+YnVmZmVyc1tjcHVdID0gY3B1X2J1ZmZlcl9iOworCWJ1ZmZlcl9iLT5idWZmZXJzW2NwdV0gPSBjcHVfYnVmZmVyX2E7CisKKwljcHVfYnVmZmVyX2ItPmJ1ZmZlciA9IGJ1ZmZlcl9hOworCWNwdV9idWZmZXJfYS0+YnVmZmVyID0gYnVmZmVyX2I7CisKKwlhdG9taWNfZGVjKCZjcHVfYnVmZmVyX2EtPnJlY29yZF9kaXNhYmxlZCk7CisJYXRvbWljX2RlYygmY3B1X2J1ZmZlcl9iLT5yZWNvcmRfZGlzYWJsZWQpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggOGYzZmIzZC4uZDM0NWQ2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CkBAIC0yMiw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpAQCAtMzEsMjUgKzMzLDM2IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKKyNkZWZpbmUgVFJBQ0VfQlVGRkVSX0ZMQUdTCShSQl9GTF9PVkVSV1JJVEUpCisKIHVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseQl0cmFjaW5nX21heF9sYXRlbmN5ID0gKGN5Y2xlX3QpVUxPTkdfTUFYOwogdW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfdGhyZXNoOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfbnJfYnVmZmVyczsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBmdHJhY2VfY3B1X2Rpc2FibGVkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kaXNhYmxlX2NwdSh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZW5hYmxlX2NwdSh2b2lkKQoreworCWxvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKwogc3RhdGljIGNwdW1hc2tfdCBfX3JlYWRfbW9zdGx5CQl0cmFjaW5nX2J1ZmZlcl9tYXNrOwogCiAjZGVmaW5lIGZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkJXAogCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgdHJhY2luZ19idWZmZXJfbWFzaykKIAotc3RhdGljIGludCB0cmFjZV9hbGxvY19wYWdlKHZvaWQpOwotc3RhdGljIGludCB0cmFjZV9mcmVlX3BhZ2Uodm9pZCk7Ci0KIHN0YXRpYyBpbnQgdHJhY2luZ19kaXNhYmxlZCA9IDE7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYWNpbmdfcGFnZXNfYWxsb2NhdGVkOwotCiBsb25nCiBuczJ1c2VjcyhjeWNsZV90IG5zZWMpCiB7CkBAIC02MCw3ICs3Myw5IEBACiAKIGN5Y2xlX3QgZnRyYWNlX25vdyhpbnQgY3B1KQogewotCXJldHVybiBjcHVfY2xvY2soY3B1KTsKKwl1NjQgdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdSk7CisJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1LCAmdHMpOworCXJldHVybiB0czsKIH0KIAogLyoKQEAgLTEwMCwxMSArMTE1LDE4IEBACiBpbnQJCQkJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQ7CiAKIC8qCi0gKiB0cmFjZV9ucl9lbnRyaWVzIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGlzIGFsbG9jYXRlZAotICogZm9yIGEgYnVmZmVyLiBOb3RlLCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXMgYWx3YXlzIHJvdW5kZWQKLSAqIHRvIEVOVFJJRVNfUEVSX1BBR0UuCisgKiB0cmFjZV9idWZfc2l6ZSBpcyB0aGUgc2l6ZSBpbiBieXRlcyB0aGF0IGlzIGFsbG9jYXRlZAorICogZm9yIGEgYnVmZmVyLiBOb3RlLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlzIGFsd2F5cyByb3VuZGVkCisgKiB0byBwYWdlIHNpemUuCisgKgorICogVGhpcyBudW1iZXIgaXMgcHVycG9zZWx5IHNldCB0byBhIGxvdyBudW1iZXIgb2YgMTYzODQuCisgKiBJZiB0aGUgZHVtcCBvbiBvb3BzIGhhcHBlbnMsIGl0IHdpbGwgYmUgbXVjaCBhcHByZWNpYXRlZAorICogdG8gbm90IGhhdmUgdG8gd2FpdCBmb3IgYWxsIHRoYXQgb3V0cHV0LiBBbnl3YXkgdGhpcyBjYW4gYmUKKyAqIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgY29uZmlndXJhYmxlLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZwkJdHJhY2VfbnJfZW50cmllcyA9IDY1NTM2VUw7CisjZGVmaW5lIFRSQUNFX0JVRl9TSVpFX0RFRkFVTFQJMTQ0MTc5MlVMIC8qIDE2Mzg0ICogODggKHNpemVvZihlbnRyeSkpICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCQl0cmFjZV9idWZfc2l6ZSA9IFRSQUNFX0JVRl9TSVpFX0RFRkFVTFQ7CiAKIC8qIHRyYWNlX3R5cGVzIGhvbGRzIGEgbGluayBsaXN0IG9mIGF2YWlsYWJsZSB0cmFjZXJzLiAqLwogc3RhdGljIHN0cnVjdCB0cmFjZXIJCSp0cmFjZV90eXBlcyBfX3JlYWRfbW9zdGx5OwpAQCAtMTMzLDI0ICsxNTUsNiBAQAogLyogdHJhY2VfZmxhZ3MgaG9sZHMgaXRlcl9jdHJsIG9wdGlvbnMgKi8KIHVuc2lnbmVkIGxvbmcgdHJhY2VfZmxhZ3MgPSBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVDsKIAotc3RhdGljIG5vdHJhY2Ugdm9pZCBub190cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JaW50IGNwdTsKLQotCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMDsKLQlpZih0ci0+Y3RybCkKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCQl0cmFjaW5nX3Jlc2V0KHRyLT5kYXRhW2NwdV0pOwotCXRyYWNlcl9lbmFibGVkID0gMDsKLX0KLQotLyogZHVtbXkgdHJhY2UgdG8gZGlzYWJsZSB0cmFjaW5nICovCi1zdGF0aWMgc3RydWN0IHRyYWNlciBub190cmFjZXIgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAibm9uZSIsCi0JLmluaXQJCT0gbm9fdHJhY2VfaW5pdAotfTsKLQotCiAvKioKICAqIHRyYWNlX3dha2VfdXAgLSB3YWtlIHVwIHRhc2tzIHdhaXRpbmcgZm9yIHRyYWNlIGlucHV0CiAgKgpAQCAtMTY3LDIzICsxNzEsMjEgQEAKIAkJd2FrZV91cCgmdHJhY2Vfd2FpdCk7CiB9CiAKLSNkZWZpbmUgRU5UUklFU19QRVJfUEFHRSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCB0cmFjZV9lbnRyeSkpCi0KLXN0YXRpYyBpbnQgX19pbml0IHNldF9ucl9lbnRyaWVzKGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgX19pbml0IHNldF9idWZfc2l6ZShjaGFyICpzdHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9lbnRyaWVzOworCXVuc2lnbmVkIGxvbmcgYnVmX3NpemU7CiAJaW50IHJldDsKIAogCWlmICghc3RyKQogCQlyZXR1cm4gMDsKLQlyZXQgPSBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZucl9lbnRyaWVzKTsKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZidWZfc2l6ZSk7CiAJLyogbnJfZW50cmllcyBjYW4gbm90IGJlIHplcm8gKi8KLQlpZiAocmV0IDwgMCB8fCBucl9lbnRyaWVzID09IDApCisJaWYgKHJldCA8IDAgfHwgYnVmX3NpemUgPT0gMCkKIAkJcmV0dXJuIDA7Ci0JdHJhY2VfbnJfZW50cmllcyA9IG5yX2VudHJpZXM7CisJdHJhY2VfYnVmX3NpemUgPSBidWZfc2l6ZTsKIAlyZXR1cm4gMTsKIH0KLV9fc2V0dXAoInRyYWNlX2VudHJpZXM9Iiwgc2V0X25yX2VudHJpZXMpOworX19zZXR1cCgidHJhY2VfYnVmX3NpemU9Iiwgc2V0X2J1Zl9zaXplKTsKIAogdW5zaWduZWQgbG9uZyBuc2Vjc190b191c2Vjcyh1bnNpZ25lZCBsb25nIG5zZWNzKQogewpAQCAtMTkxLDIxICsxOTMsNiBAQAogfQogCiAvKgotICogdHJhY2VfZmxhZ190eXBlIGlzIGFuIGVudW1lcmF0aW9uIHRoYXQgaG9sZHMgZGlmZmVyZW50Ci0gKiBzdGF0ZXMgd2hlbiBhIHRyYWNlIG9jY3Vycy4gVGhlc2UgYXJlOgotICogIElSUVNfT0ZGCS0gaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkCi0gKiAgTkVFRF9SRVNDRUQgLSByZXNjaGVkdWxlIGlzIHJlcXVlc3RlZAotICogIEhBUkRJUlEJLSBpbnNpZGUgYW4gaW50ZXJydXB0IGhhbmRsZXIKLSAqICBTT0ZUSVJRCS0gaW5zaWRlIGEgc29mdGlycSBoYW5kbGVyCi0gKi8KLWVudW0gdHJhY2VfZmxhZ190eXBlIHsKLQlUUkFDRV9GTEFHX0lSUVNfT0ZGCQk9IDB4MDEsCi0JVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQJCT0gMHgwMiwKLQlUUkFDRV9GTEFHX0hBUkRJUlEJCT0gMHgwNCwKLQlUUkFDRV9GTEFHX1NPRlRJUlEJCT0gMHgwOCwKLX07Ci0KLS8qCiAgKiBUUkFDRV9JVEVSX1NZTV9NQVNLIG1hc2tzIHRoZSBvcHRpb25zIGluIHRyYWNlX2ZsYWdzIHRoYXQKICAqIGNvbnRyb2wgdGhlIG91dHB1dCBvZiBrZXJuZWwgc3ltYm9scy4KICAqLwpAQCAtMjI0LDYgKzIxMSw3IEBACiAJImJsb2NrIiwKIAkic3RhY2t0cmFjZSIsCiAJInNjaGVkLXRyZWUiLAorCSJmdHJhY2VfcHJpbnRrIiwKIAlOVUxMCiB9OwogCkBAIC0yNjYsNTQgKzI1NCw2IEBACiAJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKIH0KIAotI2RlZmluZSBDSEVDS19DT05EKGNvbmQpCQkJXAotCWlmICh1bmxpa2VseShjb25kKSkgewkJCVwKLQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7CQlcCi0JCVdBUk5fT04oMSk7CQkJXAotCQlyZXR1cm4gLTE7CQkJXAotCX0KLQotLyoqCi0gKiBjaGVja19wYWdlcyAtIGludGVncml0eSBjaGVjayBvZiB0cmFjZSBidWZmZXJzCi0gKgotICogQXMgYSBzYWZ0eSBtZWFzdXJlIHdlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBwYWdlcyBoYXZlIG5vdAotICogYmVlbiBjb3JydXB0ZWQuCi0gKi8KLWludCBjaGVja19wYWdlcyhzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKQotewotCXN0cnVjdCBwYWdlICpwYWdlLCAqdG1wOwotCi0JQ0hFQ0tfQ09ORChkYXRhLT50cmFjZV9wYWdlcy5uZXh0LT5wcmV2ICE9ICZkYXRhLT50cmFjZV9wYWdlcyk7Ci0JQ0hFQ0tfQ09ORChkYXRhLT50cmFjZV9wYWdlcy5wcmV2LT5uZXh0ICE9ICZkYXRhLT50cmFjZV9wYWdlcyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCAmZGF0YS0+dHJhY2VfcGFnZXMsIGxydSkgewotCQlDSEVDS19DT05EKHBhZ2UtPmxydS5uZXh0LT5wcmV2ICE9ICZwYWdlLT5scnUpOwotCQlDSEVDS19DT05EKHBhZ2UtPmxydS5wcmV2LT5uZXh0ICE9ICZwYWdlLT5scnUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGhlYWRfcGFnZSAtIHBhZ2UgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZSBpbiBwZXJfY3B1IGJ1ZmZlci4KLSAqCi0gKiBoZWFkX3BhZ2UgcmV0dXJucyB0aGUgcGFnZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIGluCi0gKiBhIHBlcl9jcHUgYnVmZmVyLiBUaGlzIGFsc28gcHJlZm9ybXMgdmFyaW91cyBjb25zaXN0ZW5jeQotICogY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGhhcyBub3QgYmVlbiBjb3JydXB0ZWQuCi0gKi8KLXZvaWQgKmhlYWRfcGFnZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JaWYgKGxpc3RfZW1wdHkoJmRhdGEtPnRyYWNlX3BhZ2VzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwYWdlID0gbGlzdF9lbnRyeShkYXRhLT50cmFjZV9wYWdlcy5uZXh0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKLQlCVUdfT04oJnBhZ2UtPmxydSA9PSAmZGF0YS0+dHJhY2VfcGFnZXMpOwotCi0JcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKLX0KLQogLyoqCiAgKiB0cmFjZV9zZXFfcHJpbnRmIC0gc2VxdWVuY2UgcHJpbnRpbmcgb2YgdHJhY2UgaW5mb3JtYXRpb24KICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCkBAIC0zOTUsMjggKzMzNSwyMyBAQAogCXJldHVybiBsZW47CiB9CiAKLSNkZWZpbmUgSEVYX0NIQVJTIDE3Ci1zdGF0aWMgY29uc3QgY2hhciBoZXgyYXNjW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisjZGVmaW5lIE1BWF9NRU1IRVhfQllURVMJOAorI2RlZmluZSBIRVhfQ0hBUlMJCShNQVhfTUVNSEVYX0JZVEVTKjIgKyAxKQogCiBzdGF0aWMgaW50CiB0cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB2b2lkICptZW0sIHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgY2hhciBoZXhbSEVYX0NIQVJTXTsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gbWVtOwotCXVuc2lnbmVkIGNoYXIgYnl0ZTsKIAlpbnQgaSwgajsKIAotCUJVR19PTihsZW4gPj0gSEVYX0NIQVJTKTsKLQogI2lmZGVmIF9fQklHX0VORElBTgogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpKyspIHsKICNlbHNlCiAJZm9yIChpID0gbGVuLTEsIGogPSAwOyBpID49IDA7IGktLSkgewogI2VuZGlmCi0JCWJ5dGUgPSBkYXRhW2ldOwotCi0JCWhleFtqKytdID0gaGV4MmFzY1tieXRlICYgMHgwZl07Ci0JCWhleFtqKytdID0gaGV4MmFzY1tieXRlID4+IDRdOworCQloZXhbaisrXSA9IGhleF9hc2NfaGkoZGF0YVtpXSk7CisJCWhleFtqKytdID0gaGV4X2FzY19sbyhkYXRhW2ldKTsKIAl9CiAJaGV4W2orK10gPSAnICc7CiAKQEAgLTQ2MCwzNCArMzk1LDYgQEAKIAl0cmFjZV9zZXFfcmVzZXQocyk7CiB9CiAKLS8qCi0gKiBmbGlwIHRoZSB0cmFjZSBidWZmZXJzIGJldHdlZW4gdHdvIHRyYWNlIGRlc2NyaXB0b3JzLgotICogVGhpcyB1c3VhbGx5IGlzIHRoZSBidWZmZXJzIGJldHdlZW4gdGhlIGdsb2JhbF90cmFjZSBhbmQKLSAqIHRoZSBtYXhfdHIgdG8gcmVjb3JkIGEgc25hcHNob3Qgb2YgYSBjdXJyZW50IHRyYWNlLgotICoKLSAqIFRoZSBmdHJhY2VfbWF4X2xvY2sgbXVzdCBiZSBoZWxkLgotICovCi1zdGF0aWMgdm9pZAotZmxpcF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICp0cjEsIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKnRyMikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXBfcGFnZXM7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZmxpcF9wYWdlcyk7Ci0KLQltZW1jcHkoJnRyMS0+dHJhY2VfaGVhZF9pZHgsICZ0cjItPnRyYWNlX2hlYWRfaWR4LAotCQlzaXplb2Yoc3RydWN0IHRyYWNlX2FycmF5X2NwdSkgLQotCQlvZmZzZXRvZihzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1LCB0cmFjZV9oZWFkX2lkeCkpOwotCi0JY2hlY2tfcGFnZXModHIxKTsKLQljaGVja19wYWdlcyh0cjIpOwotCWxpc3Rfc3BsaWNlX2luaXQoJnRyMS0+dHJhY2VfcGFnZXMsICZmbGlwX3BhZ2VzKTsKLQlsaXN0X3NwbGljZV9pbml0KCZ0cjItPnRyYWNlX3BhZ2VzLCAmdHIxLT50cmFjZV9wYWdlcyk7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmZmxpcF9wYWdlcywgJnRyMi0+dHJhY2VfcGFnZXMpOwotCUJVR19PTighbGlzdF9lbXB0eSgmZmxpcF9wYWdlcykpOwotCWNoZWNrX3BhZ2VzKHRyMSk7Ci0JY2hlY2tfcGFnZXModHIyKTsKLX0KLQogLyoqCiAgKiB1cGRhdGVfbWF4X3RyIC0gc25hcHNob3QgYWxsIHRyYWNlIGJ1ZmZlcnMgZnJvbSBnbG9iYWxfdHJhY2UgdG8gbWF4X3RyCiAgKiBAdHI6IHRyYWNlcgpAQCAtNTAwLDE3ICs0MDcsMTcgQEAKIHZvaWQKIHVwZGF0ZV9tYXhfdHIoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUpCiB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQlpbnQgaTsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZiA9IHRyLT5idWZmZXI7CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJX19yYXdfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwotCS8qIGNsZWFyIG91dCBhbGwgdGhlIHByZXZpb3VzIHRyYWNlcyAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJZGF0YSA9IHRyLT5kYXRhW2ldOwotCQlmbGlwX3RyYWNlKG1heF90ci5kYXRhW2ldLCBkYXRhKTsKLQkJdHJhY2luZ19yZXNldChkYXRhKTsKLQl9CisKKwl0ci0+YnVmZmVyID0gbWF4X3RyLmJ1ZmZlcjsKKwltYXhfdHIuYnVmZmVyID0gYnVmOworCisJZnRyYWNlX2Rpc2FibGVfY3B1KCk7CisJcmluZ19idWZmZXJfcmVzZXQodHItPmJ1ZmZlcik7CisJZnRyYWNlX2VuYWJsZV9jcHUoKTsKIAogCV9fdXBkYXRlX21heF90cih0ciwgdHNrLCBjcHUpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwpAQCAtNTI3LDE2ICs0MzQsMTkgQEAKIHZvaWQKIHVwZGF0ZV9tYXhfdHJfc2luZ2xlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY3B1KQogewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCWludCBpOworCWludCByZXQ7CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJX19yYXdfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpCi0JCXRyYWNpbmdfcmVzZXQobWF4X3RyLmRhdGFbaV0pOwogCi0JZmxpcF90cmFjZShtYXhfdHIuZGF0YVtjcHVdLCBkYXRhKTsKLQl0cmFjaW5nX3Jlc2V0KGRhdGEpOworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCisJcmluZ19idWZmZXJfcmVzZXQobWF4X3RyLmJ1ZmZlcik7CisJcmV0ID0gcmluZ19idWZmZXJfc3dhcF9jcHUobWF4X3RyLmJ1ZmZlciwgdHItPmJ1ZmZlciwgY3B1KTsKKworCWZ0cmFjZV9lbmFibGVfY3B1KCk7CisKKwlXQVJOX09OX09OQ0UocmV0KTsKIAogCV9fdXBkYXRlX21heF90cih0ciwgdHNrLCBjcHUpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwpAQCAtNTczLDcgKzQ4Myw2IEBACiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKIAlpZiAodHlwZS0+c2VsZnRlc3QpIHsKIAkJc3RydWN0IHRyYWNlciAqc2F2ZWRfdHJhY2VyID0gY3VycmVudF90cmFjZTsKLQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAkJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CiAJCWludCBzYXZlZF9jdHJsID0gdHItPmN0cmw7CiAJCWludCBpOwpAQCAtNTg1LDEwICs0OTQsNyBAQAogCQkgKiBJZiB3ZSBmYWlsLCB3ZSBkbyBub3QgcmVnaXN0ZXIgdGhpcyB0cmFjZXIuCiAJCSAqLwogCQlmb3JfZWFjaF90cmFjaW5nX2NwdShpKSB7Ci0JCQlkYXRhID0gdHItPmRhdGFbaV07Ci0JCQlpZiAoIWhlYWRfcGFnZShkYXRhKSkKLQkJCQljb250aW51ZTsKLQkJCXRyYWNpbmdfcmVzZXQoZGF0YSk7CisJCQl0cmFjaW5nX3Jlc2V0KHRyLCBpKTsKIAkJfQogCQljdXJyZW50X3RyYWNlID0gdHlwZTsKIAkJdHItPmN0cmwgPSAwOwpAQCAtNjA0LDEwICs1MTAsNyBAQAogCQl9CiAJCS8qIE9ubHkgcmVzZXQgb24gcGFzc2luZywgdG8gYXZvaWQgdG91Y2hpbmcgY29ycnVwdGVkIGJ1ZmZlcnMgKi8KIAkJZm9yX2VhY2hfdHJhY2luZ19jcHUoaSkgewotCQkJZGF0YSA9IHRyLT5kYXRhW2ldOwotCQkJaWYgKCFoZWFkX3BhZ2UoZGF0YSkpCi0JCQkJY29udGludWU7Ci0JCQl0cmFjaW5nX3Jlc2V0KGRhdGEpOworCQkJdHJhY2luZ19yZXNldCh0ciwgaSk7CiAJCX0KIAkJcHJpbnRrKEtFUk5fQ09OVCAiUEFTU0VEXG4iKTsKIAl9CkBAIC02NTMsMTMgKzU1NiwxMSBAQAogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiB9CiAKLXZvaWQgdHJhY2luZ19yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKQordm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpCiB7Ci0JZGF0YS0+dHJhY2VfaWR4ID0gMDsKLQlkYXRhLT5vdmVycnVuID0gMDsKLQlkYXRhLT50cmFjZV9oZWFkID0gZGF0YS0+dHJhY2VfdGFpbCA9IGhlYWRfcGFnZShkYXRhKTsKLQlkYXRhLT50cmFjZV9oZWFkX2lkeCA9IDA7Ci0JZGF0YS0+dHJhY2VfdGFpbF9pZHggPSAwOworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCXJpbmdfYnVmZmVyX3Jlc2V0X2NwdSh0ci0+YnVmZmVyLCBjcHUpOworCWZ0cmFjZV9lbmFibGVfY3B1KCk7CiB9CiAKICNkZWZpbmUgU0FWRURfQ01ETElORVMgMTI4CkBAIC03NDUsODIgKzY0NiwxNiBAQAogCXRyYWNlX3NhdmVfY21kbGluZSh0c2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKgotdHJhY2VfbmV4dF9saXN0KHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCi17Ci0JLyoKLQkgKiBSb3VuZHJvYmluIC0gYnV0IHNraXAgdGhlIGhlYWQgKHdoaWNoIGlzIG5vdCBhIHJlYWwgcGFnZSk6Ci0JICovCi0JbmV4dCA9IG5leHQtPm5leHQ7Ci0JaWYgKHVubGlrZWx5KG5leHQgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKSkKLQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JQlVHX09OKG5leHQgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKTsKLQotCXJldHVybiBuZXh0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotdHJhY2VfbmV4dF9wYWdlKHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsIHZvaWQgKmFkZHIpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7Ci0KLQluZXh0ID0gdHJhY2VfbmV4dF9saXN0KGRhdGEsICZwYWdlLT5scnUpOwotCXBhZ2UgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCi0JcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHJhY2VfZW50cnkgKgotdHJhY2luZ19nZXRfdHJhY2VfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGlkeCwgaWR4X25leHQ7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQotCWRhdGEtPnRyYWNlX2lkeCsrOwotCWlkeCA9IGRhdGEtPnRyYWNlX2hlYWRfaWR4OwotCWlkeF9uZXh0ID0gaWR4ICsgMTsKLQotCUJVR19PTihpZHggKiBUUkFDRV9FTlRSWV9TSVpFID49IFBBR0VfU0laRSk7Ci0KLQllbnRyeSA9IGRhdGEtPnRyYWNlX2hlYWQgKyBpZHggKiBUUkFDRV9FTlRSWV9TSVpFOwotCi0JaWYgKHVubGlrZWx5KGlkeF9uZXh0ID49IEVOVFJJRVNfUEVSX1BBR0UpKSB7Ci0JCWRhdGEtPnRyYWNlX2hlYWQgPSB0cmFjZV9uZXh0X3BhZ2UoZGF0YSwgZGF0YS0+dHJhY2VfaGVhZCk7Ci0JCWlkeF9uZXh0ID0gMDsKLQl9Ci0KLQlpZiAoZGF0YS0+dHJhY2VfaGVhZCA9PSBkYXRhLT50cmFjZV90YWlsICYmCi0JICAgIGlkeF9uZXh0ID09IGRhdGEtPnRyYWNlX3RhaWxfaWR4KSB7Ci0JCS8qIG92ZXJydW4gKi8KLQkJZGF0YS0+b3ZlcnJ1bisrOwotCQlkYXRhLT50cmFjZV90YWlsX2lkeCsrOwotCQlpZiAoZGF0YS0+dHJhY2VfdGFpbF9pZHggPj0gRU5UUklFU19QRVJfUEFHRSkgewotCQkJZGF0YS0+dHJhY2VfdGFpbCA9Ci0JCQkJdHJhY2VfbmV4dF9wYWdlKGRhdGEsIGRhdGEtPnRyYWNlX3RhaWwpOwotCQkJZGF0YS0+dHJhY2VfdGFpbF9pZHggPSAwOwotCQl9Ci0JfQotCi0JZGF0YS0+dHJhY2VfaGVhZF9pZHggPSBpZHhfbmV4dDsKLQotCXJldHVybiBlbnRyeTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi10cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit2b2lkCit0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgICAgIGludCBwYykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JdW5zaWduZWQgbG9uZyBwYzsKIAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCi0JZW50cnktPnByZWVtcHRfY291bnQJPSBwYyAmIDB4ZmY7Ci0JZW50cnktPnBpZAkJPSAodHNrKSA/IHRzay0+cGlkIDogMDsKLQllbnRyeS0+dAkJPSBmdHJhY2Vfbm93KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCWVudHJ5LT5mbGFncyA9IChpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CisJZW50cnktPnByZWVtcHRfY291bnQJCT0gcGMgJiAweGZmOworCWVudHJ5LT5waWQJCQk9ICh0c2spID8gdHNrLT5waWQgOiAwOworCWVudHJ5LT5mbGFncyA9CisJCShpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CiAJCSgocGMgJiBIQVJESVJRX01BU0spID8gVFJBQ0VfRkxBR19IQVJESVJRIDogMCkgfAogCQkoKHBjICYgU09GVElSUV9NQVNLKSA/IFRSQUNFX0ZMQUdfU09GVElSUSA6IDApIHwKIAkJKG5lZWRfcmVzY2hlZCgpID8gVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQgOiAwKTsKQEAgLTgyOCwxMTkgKzY2MywxMTAgQEAKIAogdm9pZAogdHJhY2VfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJICAgICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCSAgICAgICBpbnQgcGMpCiB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBmdHJhY2VfZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQllbnRyeQkJCT0gdHJhY2luZ19nZXRfdHJhY2VfZW50cnkodHIsIGRhdGEpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksIGZsYWdzKTsKLQllbnRyeS0+dHlwZQkJPSBUUkFDRV9GTjsKLQllbnRyeS0+Zm4uaXAJCT0gaXA7Ci0JZW50cnktPmZuLnBhcmVudF9pcAk9IHBhcmVudF9pcDsKLQlfX3Jhd19zcGluX3VubG9jaygmZGF0YS0+bG9jayk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CisJLyogSWYgd2UgYXJlIHJlYWRpbmcgdGhlIHJpbmcgYnVmZmVyLCBkb24ndCB0cmFjZSAqLworCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCisJCXJldHVybjsKKworCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAorCQkJCQkgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0ZOOworCWVudHJ5LT5pcAkJCT0gaXA7CisJZW50cnktPnBhcmVudF9pcAkJPSBwYXJlbnRfaXA7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKIH0KIAogdm9pZAogZnRyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0gICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisgICAgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisgICAgICAgaW50IHBjKQogewogCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIH0KIAotI2lmZGVmIENPTkZJR19NTUlPVFJBQ0UKLXZvaWQgX190cmFjZV9tbWlvdHJhY2Vfcncoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJCQkJCXN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQorc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkgICAgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJICAgICAgIGludCBza2lwLCBpbnQgcGMpCiB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBzdGFja19lbnRyeSAqZW50cnk7CisJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1RBQ0tUUkFDRSkpCisJCXJldHVybjsKIAotCWVudHJ5CQkJPSB0cmFjaW5nX2dldF90cmFjZV9lbnRyeSh0ciwgZGF0YSk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgMCk7Ci0JZW50cnktPnR5cGUJCT0gVFJBQ0VfTU1JT19SVzsKLQllbnRyeS0+bW1pb3J3CQk9ICpydzsKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICZpcnFfZmxhZ3MpOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7CisJZW50cnktPmVudC50eXBlCQk9IFRSQUNFX1NUQUNLOwogCi0JX19yYXdfc3Bpbl91bmxvY2soJmRhdGEtPmxvY2spOwotCXJhd19sb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworCW1lbXNldCgmZW50cnktPmNhbGxlciwgMCwgc2l6ZW9mKGVudHJ5LT5jYWxsZXIpKTsKIAotCXRyYWNlX3dha2VfdXAoKTsKKwl0cmFjZS5ucl9lbnRyaWVzCT0gMDsKKwl0cmFjZS5tYXhfZW50cmllcwk9IEZUUkFDRV9TVEFDS19FTlRSSUVTOworCXRyYWNlLnNraXAJCT0gc2tpcDsKKwl0cmFjZS5lbnRyaWVzCQk9IGVudHJ5LT5jYWxsZXI7CisKKwlzYXZlX3N0YWNrX3RyYWNlKCZ0cmFjZSk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKIH0KIAotdm9pZCBfX3RyYWNlX21taW90cmFjZV9tYXAoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJCQkJCXN0cnVjdCBtbWlvdHJhY2VfbWFwICptYXApCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQotCXJhd19sb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmZGF0YS0+bG9jayk7Ci0KLQllbnRyeQkJCT0gdHJhY2luZ19nZXRfdHJhY2VfZW50cnkodHIsIGRhdGEpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksIDApOwotCWVudHJ5LT50eXBlCQk9IFRSQUNFX01NSU9fTUFQOwotCWVudHJ5LT5tbWlvbWFwCQk9ICptYXA7Ci0KLQlfX3Jhd19zcGluX3VubG9jaygmZGF0YS0+bG9jayk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCSAgIGludCBza2lwKQogewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOworCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIHNraXAsIHByZWVtcHRfY291bnQoKSk7Cit9CiAKLQlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1RBQ0tUUkFDRSkpCitzdGF0aWMgdm9pZAorZnRyYWNlX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwgdm9pZCAqX19kYXRhLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCisJCSAgICAgaW50IHBjKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSA9IF9fZGF0YTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gX190cjsKKwlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICZpcnFfZmxhZ3MpOworCWlmICghZXZlbnQpCiAJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1NQRUNJQUw7CisJZW50cnktPmFyZzEJCQk9IGFyZzE7CisJZW50cnktPmFyZzIJCQk9IGFyZzI7CisJZW50cnktPmFyZzMJCQk9IGFyZzM7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGRhdGEsIGlycV9mbGFncywgNCwgcGMpOwogCi0JZW50cnkJCQk9IHRyYWNpbmdfZ2V0X3RyYWNlX2VudHJ5KHRyLCBkYXRhKTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudHJ5LCBmbGFncyk7Ci0JZW50cnktPnR5cGUJCT0gVFJBQ0VfU1RBQ0s7Ci0KLQltZW1zZXQoJmVudHJ5LT5zdGFjaywgMCwgc2l6ZW9mKGVudHJ5LT5zdGFjaykpOwotCi0JdHJhY2UubnJfZW50cmllcwk9IDA7Ci0JdHJhY2UubWF4X2VudHJpZXMJPSBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsKLQl0cmFjZS5za2lwCQk9IHNraXA7Ci0JdHJhY2UuZW50cmllcwkJPSBlbnRyeS0+c3RhY2suY2FsbGVyOwotCi0Jc2F2ZV9zdGFja190cmFjZSgmdHJhY2UpOworCXRyYWNlX3dha2VfdXAoKTsKIH0KIAogdm9pZAogX190cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsIHZvaWQgKl9fZGF0YSwKIAkJdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKIHsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhID0gX19kYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBfX3RyOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQlyYXdfbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmRhdGEtPmxvY2spOwotCWVudHJ5CQkJPSB0cmFjaW5nX2dldF90cmFjZV9lbnRyeSh0ciwgZGF0YSk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgMCk7Ci0JZW50cnktPnR5cGUJCT0gVFJBQ0VfU1BFQ0lBTDsKLQllbnRyeS0+c3BlY2lhbC5hcmcxCT0gYXJnMTsKLQllbnRyeS0+c3BlY2lhbC5hcmcyCT0gYXJnMjsKLQllbnRyeS0+c3BlY2lhbC5hcmczCT0gYXJnMzsKLQlfX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBpcnFfZmxhZ3MsIDQpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKKwlmdHJhY2VfdHJhY2Vfc3BlY2lhbChfX3RyLCBfX2RhdGEsIGFyZzEsIGFyZzIsIGFyZzMsIHByZWVtcHRfY291bnQoKSk7CiB9CiAKIHZvaWQKQEAgLTk0OCwyNSArNzc0LDI4IEBACiAJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAotCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQllbnRyeQkJCT0gdHJhY2luZ19nZXRfdHJhY2VfZW50cnkodHIsIGRhdGEpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksIGZsYWdzKTsKLQllbnRyeS0+dHlwZQkJPSBUUkFDRV9DVFg7Ci0JZW50cnktPmN0eC5wcmV2X3BpZAk9IHByZXYtPnBpZDsKLQllbnRyeS0+Y3R4LnByZXZfcHJpbwk9IHByZXYtPnByaW87Ci0JZW50cnktPmN0eC5wcmV2X3N0YXRlCT0gcHJldi0+c3RhdGU7Ci0JZW50cnktPmN0eC5uZXh0X3BpZAk9IG5leHQtPnBpZDsKLQllbnRyeS0+Y3R4Lm5leHRfcHJpbwk9IG5leHQtPnByaW87Ci0JZW50cnktPmN0eC5uZXh0X3N0YXRlCT0gbmV4dC0+c3RhdGU7Ci0JX190cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDUpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICAgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0NUWDsKKwllbnRyeS0+cHJldl9waWQJCQk9IHByZXYtPnBpZDsKKwllbnRyeS0+cHJldl9wcmlvCQk9IHByZXYtPnByaW87CisJZW50cnktPnByZXZfc3RhdGUJCT0gcHJldi0+c3RhdGU7CisJZW50cnktPm5leHRfcGlkCQkJPSBuZXh0LT5waWQ7CisJZW50cnktPm5leHRfcHJpbwkJPSBuZXh0LT5wcmlvOworCWVudHJ5LT5uZXh0X3N0YXRlCQk9IG5leHQtPnN0YXRlOworCWVudHJ5LT5uZXh0X2NwdQk9IHRhc2tfY3B1KG5leHQpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBmbGFncywgNSwgcGMpOwogfQogCiB2b2lkCkBAIC05NzQsMjUgKzgwMywyOCBAQAogCQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlyYXdfbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmRhdGEtPmxvY2spOwotCWVudHJ5CQkJPSB0cmFjaW5nX2dldF90cmFjZV9lbnRyeSh0ciwgZGF0YSk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnRyeSwgZmxhZ3MpOwotCWVudHJ5LT50eXBlCQk9IFRSQUNFX1dBS0U7Ci0JZW50cnktPmN0eC5wcmV2X3BpZAk9IGN1cnItPnBpZDsKLQllbnRyeS0+Y3R4LnByZXZfcHJpbwk9IGN1cnItPnByaW87Ci0JZW50cnktPmN0eC5wcmV2X3N0YXRlCT0gY3Vyci0+c3RhdGU7Ci0JZW50cnktPmN0eC5uZXh0X3BpZAk9IHdha2VlLT5waWQ7Ci0JZW50cnktPmN0eC5uZXh0X3ByaW8JPSB3YWtlZS0+cHJpbzsKLQllbnRyeS0+Y3R4Lm5leHRfc3RhdGUJPSB3YWtlZS0+c3RhdGU7Ci0JX190cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDYpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICAgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1dBS0U7CisJZW50cnktPnByZXZfcGlkCQkJPSBjdXJyLT5waWQ7CisJZW50cnktPnByZXZfcHJpbwkJPSBjdXJyLT5wcmlvOworCWVudHJ5LT5wcmV2X3N0YXRlCQk9IGN1cnItPnN0YXRlOworCWVudHJ5LT5uZXh0X3BpZAkJCT0gd2FrZWUtPnBpZDsKKwllbnRyeS0+bmV4dF9wcmlvCQk9IHdha2VlLT5wcmlvOworCWVudHJ5LT5uZXh0X3N0YXRlCQk9IHdha2VlLT5zdGF0ZTsKKwllbnRyeS0+bmV4dF9jcHUJCQk9IHRhc2tfY3B1KHdha2VlKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDYsIHBjKTsKIAogCXRyYWNlX3dha2VfdXAoKTsKIH0KQEAgLTEwMDIsMjMgKzgzNCwyMSBAQAogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGRpc2FibGVkOwogCWludCBjcHU7CisJaW50IHBjOwogCi0JaWYgKHRyYWNpbmdfZGlzYWJsZWQgfHwgY3VycmVudF90cmFjZSA9PSAmbm9fdHJhY2VyIHx8ICF0ci0+Y3RybCkKKwlpZiAodHJhY2luZ19kaXNhYmxlZCB8fCAhdHItPmN0cmwpCiAJCXJldHVybjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0JZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwogCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJX190cmFjZV9zcGVjaWFsKHRyLCBkYXRhLCBhcmcxLCBhcmcyLCBhcmczKTsKKwlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKKwkJZnRyYWNlX3RyYWNlX3NwZWNpYWwodHIsIGRhdGEsIGFyZzEsIGFyZzIsIGFyZzMsIHBjKTsKIAotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRQpAQCAtMTAyOSw3ICs4NTksOCBAQAogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGRpc2FibGVkOwotCWludCBjcHU7CisJaW50IGNwdSwgcmVzY2hlZDsKKwlpbnQgcGM7CiAKIAlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKIAkJcmV0dXJuOwpAQCAtMTAzNywxNiArODY4LDIyIEBACiAJaWYgKHNraXBfdHJhY2UoaXApKQogCQlyZXR1cm47CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcmVzY2hlZCA9IG5lZWRfcmVzY2hlZCgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlkYXRhID0gdHItPmRhdGFbY3B1XTsKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CiAKIAlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJaWYgKHJlc2NoZWQpCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOworCWVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQpAQCAtMTA3MywxMTEgKzkxMCw5NiBAQAogCVRSQUNFX0ZJTEVfTEFUX0ZNVAk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHRyYWNlX2VudHJ5ICoKLXRyYWNlX2VudHJ5X2lkeChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBjcHUpCitzdGF0aWMgdm9pZCB0cmFjZV9pdGVyYXRvcl9pbmNyZW1lbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgY3B1KQogewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqYXJyYXk7CisJLyogRG9uJ3QgYWxsb3cgZnRyYWNlIHRvIHRyYWNlIGludG8gdGhlIHJpbmcgYnVmZmVycyAqLworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwogCi0JaWYgKGl0ZXItPm5leHRfaWR4W2NwdV0gPj0gdHItPmVudHJpZXMgfHwKLQkgICAgaXRlci0+bmV4dF9pZHhbY3B1XSA+PSBkYXRhLT50cmFjZV9pZHggfHwKLQkgICAgKGRhdGEtPnRyYWNlX2hlYWQgPT0gZGF0YS0+dHJhY2VfdGFpbCAmJgotCSAgICAgZGF0YS0+dHJhY2VfaGVhZF9pZHggPT0gZGF0YS0+dHJhY2VfdGFpbF9pZHgpKQotCQlyZXR1cm4gTlVMTDsKKwlpdGVyLT5pZHgrKzsKKwlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSkKKwkJcmluZ19idWZmZXJfcmVhZChpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdLCBOVUxMKTsKIAotCWlmICghaXRlci0+bmV4dF9wYWdlW2NwdV0pIHsKLQkJLyogSW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IgZm9yIHRoaXMgY3B1IHRyYWNlIGJ1ZmZlciAqLwotCQlXQVJOX09OKCFkYXRhLT50cmFjZV90YWlsKTsKLQkJcGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhLT50cmFjZV90YWlsKTsKLQkJaXRlci0+bmV4dF9wYWdlW2NwdV0gPSAmcGFnZS0+bHJ1OwotCQlpdGVyLT5uZXh0X3BhZ2VfaWR4W2NwdV0gPSBkYXRhLT50cmFjZV90YWlsX2lkeDsKLQl9Ci0KLQlwYWdlID0gbGlzdF9lbnRyeShpdGVyLT5uZXh0X3BhZ2VbY3B1XSwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JQlVHX09OKCZkYXRhLT50cmFjZV9wYWdlcyA9PSAmcGFnZS0+bHJ1KTsKLQotCWFycmF5ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCi0JV0FSTl9PTihpdGVyLT5uZXh0X3BhZ2VfaWR4W2NwdV0gPj0gRU5UUklFU19QRVJfUEFHRSk7Ci0JcmV0dXJuICZhcnJheVtpdGVyLT5uZXh0X3BhZ2VfaWR4W2NwdV1dOworCWZ0cmFjZV9lbmFibGVfY3B1KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZW50cnkgKgotZmluZF9uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50ICplbnRfY3B1KQorcGVla19uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGNwdSwgdTY0ICp0cykKIHsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gaXRlci0+dHI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqYnVmX2l0ZXIgPSBpdGVyLT5idWZmZXJfaXRlcltjcHVdOworCisJLyogRG9uJ3QgYWxsb3cgZnRyYWNlIHRvIHRyYWNlIGludG8gdGhlIHJpbmcgYnVmZmVycyAqLworCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCisJaWYgKGJ1Zl9pdGVyKQorCQlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhidWZfaXRlciwgdHMpOworCWVsc2UKKwkJZXZlbnQgPSByaW5nX2J1ZmZlcl9wZWVrKGl0ZXItPnRyLT5idWZmZXIsIGNwdSwgdHMpOworCisJZnRyYWNlX2VuYWJsZV9jcHUoKTsKKworCXJldHVybiBldmVudCA/IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9lbnRyeSAqCitfX2ZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSBpdGVyLT50ci0+YnVmZmVyOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCAqbmV4dCA9IE5VTEw7CisJdTY0IG5leHRfdHMgPSAwLCB0czsKIAlpbnQgbmV4dF9jcHUgPSAtMTsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0JCWlmICghaGVhZF9wYWdlKHRyLT5kYXRhW2NwdV0pKQorCisJCWlmIChyaW5nX2J1ZmZlcl9lbXB0eV9jcHUoYnVmZmVyLCBjcHUpKQogCQkJY29udGludWU7Ci0JCWVudCA9IHRyYWNlX2VudHJ5X2lkeCh0ciwgdHItPmRhdGFbY3B1XSwgaXRlciwgY3B1KTsKKworCQllbnQgPSBwZWVrX25leHRfZW50cnkoaXRlciwgY3B1LCAmdHMpOworCiAJCS8qCiAJCSAqIFBpY2sgdGhlIGVudHJ5IHdpdGggdGhlIHNtYWxsZXN0IHRpbWVzdGFtcDoKIAkJICovCi0JCWlmIChlbnQgJiYgKCFuZXh0IHx8IGVudC0+dCA8IG5leHQtPnQpKSB7CisJCWlmIChlbnQgJiYgKCFuZXh0IHx8IHRzIDwgbmV4dF90cykpIHsKIAkJCW5leHQgPSBlbnQ7CiAJCQluZXh0X2NwdSA9IGNwdTsKKwkJCW5leHRfdHMgPSB0czsKIAkJfQogCX0KIAogCWlmIChlbnRfY3B1KQogCQkqZW50X2NwdSA9IG5leHRfY3B1OwogCisJaWYgKGVudF90cykKKwkJKmVudF90cyA9IG5leHRfdHM7CisKIAlyZXR1cm4gbmV4dDsKIH0KIAotc3RhdGljIHZvaWQgdHJhY2VfaXRlcmF0b3JfaW5jcmVtZW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKKy8qIEZpbmQgdGhlIG5leHQgcmVhbCBlbnRyeSwgd2l0aG91dCB1cGRhdGluZyB0aGUgaXRlcmF0b3IgaXRzZWxmICovCitzdGF0aWMgc3RydWN0IHRyYWNlX2VudHJ5ICoKK2ZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpCiB7Ci0JaXRlci0+aWR4Kys7Ci0JaXRlci0+bmV4dF9pZHhbaXRlci0+Y3B1XSsrOwotCWl0ZXItPm5leHRfcGFnZV9pZHhbaXRlci0+Y3B1XSsrOworCXJldHVybiBfX2ZpbmRfbmV4dF9lbnRyeShpdGVyLCBlbnRfY3B1LCBlbnRfdHMpOworfQogCi0JaWYgKGl0ZXItPm5leHRfcGFnZV9pZHhbaXRlci0+Y3B1XSA+PSBFTlRSSUVTX1BFUl9QQUdFKSB7Ci0JCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSBpdGVyLT50ci0+ZGF0YVtpdGVyLT5jcHVdOworLyogRmluZCB0aGUgbmV4dCByZWFsIGVudHJ5LCBhbmQgaW5jcmVtZW50IHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBlbnRyeSAqLworc3RhdGljIHZvaWQgKmZpbmRfbmV4dF9lbnRyeV9pbmMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCWl0ZXItPmVudCA9IF9fZmluZF9uZXh0X2VudHJ5KGl0ZXIsICZpdGVyLT5jcHUsICZpdGVyLT50cyk7CiAKLQkJaXRlci0+bmV4dF9wYWdlX2lkeFtpdGVyLT5jcHVdID0gMDsKLQkJaXRlci0+bmV4dF9wYWdlW2l0ZXItPmNwdV0gPQotCQkJdHJhY2VfbmV4dF9saXN0KGRhdGEsIGl0ZXItPm5leHRfcGFnZVtpdGVyLT5jcHVdKTsKLQl9CisJaWYgKGl0ZXItPmVudCkKKwkJdHJhY2VfaXRlcmF0b3JfaW5jcmVtZW50KGl0ZXIsIGl0ZXItPmNwdSk7CisKKwlyZXR1cm4gaXRlci0+ZW50ID8gaXRlciA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHRyYWNlX2NvbnN1bWUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSBpdGVyLT50ci0+ZGF0YVtpdGVyLT5jcHVdOwotCi0JZGF0YS0+dHJhY2VfdGFpbF9pZHgrKzsKLQlpZiAoZGF0YS0+dHJhY2VfdGFpbF9pZHggPj0gRU5UUklFU19QRVJfUEFHRSkgewotCQlkYXRhLT50cmFjZV90YWlsID0gdHJhY2VfbmV4dF9wYWdlKGRhdGEsIGRhdGEtPnRyYWNlX3RhaWwpOwotCQlkYXRhLT50cmFjZV90YWlsX2lkeCA9IDA7Ci0JfQotCi0JLyogQ2hlY2sgaWYgd2UgZW1wdHkgaXQsIHRoZW4gcmVzZXQgdGhlIGluZGV4ICovCi0JaWYgKGRhdGEtPnRyYWNlX2hlYWQgPT0gZGF0YS0+dHJhY2VfdGFpbCAmJgotCSAgICBkYXRhLT50cmFjZV9oZWFkX2lkeCA9PSBkYXRhLT50cmFjZV90YWlsX2lkeCkKLQkJZGF0YS0+dHJhY2VfaWR4ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgKmZpbmRfbmV4dF9lbnRyeV9pbmMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqbmV4dDsKLQlpbnQgbmV4dF9jcHUgPSAtMTsKLQotCW5leHQgPSBmaW5kX25leHRfZW50cnkoaXRlciwgJm5leHRfY3B1KTsKLQotCWl0ZXItPnByZXZfZW50ID0gaXRlci0+ZW50OwotCWl0ZXItPnByZXZfY3B1ID0gaXRlci0+Y3B1OwotCi0JaXRlci0+ZW50ID0gbmV4dDsKLQlpdGVyLT5jcHUgPSBuZXh0X2NwdTsKLQotCWlmIChuZXh0KQotCQl0cmFjZV9pdGVyYXRvcl9pbmNyZW1lbnQoaXRlcik7Ci0KLQlyZXR1cm4gbmV4dCA/IGl0ZXIgOiBOVUxMOworCS8qIERvbid0IGFsbG93IGZ0cmFjZSB0byB0cmFjZSBpbnRvIHRoZSByaW5nIGJ1ZmZlcnMgKi8KKwlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKKwlyaW5nX2J1ZmZlcl9jb25zdW1lKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwgJml0ZXItPnRzKTsKKwlmdHJhY2VfZW5hYmxlX2NwdSgpOwogfQogCiBzdGF0aWMgdm9pZCAqc19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCkBAIC0xMjEwLDcgKzEwMzIsNyBAQAogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CiAJdm9pZCAqcCA9IE5VTEw7CiAJbG9mZl90IGwgPSAwOwotCWludCBpOworCWludCBjcHU7CiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIApAQCAtMTIyOSwxNCArMTA1MSwxNSBAQAogCQlpdGVyLT5lbnQgPSBOVUxMOwogCQlpdGVyLT5jcHUgPSAwOwogCQlpdGVyLT5pZHggPSAtMTsKLQkJaXRlci0+cHJldl9lbnQgPSBOVUxMOwotCQlpdGVyLT5wcmV2X2NwdSA9IC0xOwogCi0JCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJCWl0ZXItPm5leHRfaWR4W2ldID0gMDsKLQkJCWl0ZXItPm5leHRfcGFnZVtpXSA9IE5VTEw7CisJCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOworCisJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQkJcmluZ19idWZmZXJfaXRlcl9yZXNldChpdGVyLT5idWZmZXJfaXRlcltjcHVdKTsKIAkJfQogCisJCWZ0cmFjZV9lbmFibGVfY3B1KCk7CisKIAkJZm9yIChwID0gaXRlcjsgcCAmJiBsIDwgKnBvczsgcCA9IHNfbmV4dChtLCBwLCAmbCkpCiAJCQk7CiAKQEAgLTEzMzAsMjEgKzExNTMsMjEgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfbGF0X2hlbHBfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgICBfLS0tLS0tPT4gQ1BVIyAgICAgICAgICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgICAvIF8tLS0tLT0+IGlycXMtb2ZmICAgICAgICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICB8IC8gXy0tLS09PiBuZWVkLXJlc2NoZWQgICAgXG4iKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgfHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgIHx8fCAvIF8tLT0+IHByZWVtcHQtZGVwdGggICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICB8fHx8IC8gICAgICAgICAgICAgICAgICAgICAgXG4iKTsKLQlzZXFfcHV0cyhtLCAiIyAgICAgICAgICAgICAgfHx8fHwgICAgIGRlbGF5ICAgICAgICAgICAgIFxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgIGNtZCAgICAgcGlkIHx8fHx8IHRpbWUgIHwgICBjYWxsZXIgICAgICBcbiIpOwotCXNlcV9wdXRzKG0sICIjICAgICBcXCAgIC8gICAgfHx8fHwgICBcXCAgIHwgICAvICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgICAgXy0tLS0tLT0+IENQVSMgICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgICAvIF8tLS0tLT0+IGlycXMtb2ZmICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHwgLyBfLS0tLT0+IG5lZWQtcmVzY2hlZCAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8IC8gXy0tLT0+IGhhcmRpcnEvc29mdGlycSBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8fCAvIF8tLT0+IHByZWVtcHQtZGVwdGggICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8fHwgLyAgICAgICAgICAgICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICAgIHx8fHx8ICAgICBkZWxheSAgICAgICAgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICBjbWQgICAgIHBpZCAgIHx8fHx8IHRpbWUgIHwgICBjYWxsZXIgICAgICBcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICBcXCAgIC8gICAgICB8fHx8fCAgIFxcICAgfCAgIC8gICAgICAgICAgIFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmNfaGVscF9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQogewotCXNlcV9wdXRzKG0sICIjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgICAgVElNRVNUQU1QICBGVU5DVElPTlxuIik7Ci0Jc2VxX3B1dHMobSwgIiMgICAgICAgICAgICAgIHwgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHxcbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICBUQVNLLVBJRCAgICBDUFUjICAgIFRJTUVTVEFNUCAgRlVOQ1RJT05cbiIpOworCXNlcV9wdXRzKG0sICIjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfFxuIik7CiB9CiAKIApAQCAtMTM1NSwyMyArMTE3OCwxNiBAQAogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBpdGVyLT50cjsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhID0gdHItPmRhdGFbdHItPmNwdV07CiAJc3RydWN0IHRyYWNlciAqdHlwZSA9IGN1cnJlbnRfdHJhY2U7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbCAgID0gMDsKLQl1bnNpZ25lZCBsb25nIGVudHJpZXMgPSAwOwotCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyB0b3RhbDsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXM7CiAJY29uc3QgY2hhciAqbmFtZSA9ICJwcmVlbXB0aW9uIjsKIAogCWlmICh0eXBlKQogCQluYW1lID0gdHlwZS0+bmFtZTsKIAotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewotCQlpZiAoaGVhZF9wYWdlKHRyLT5kYXRhW2NwdV0pKSB7Ci0JCQl0b3RhbCArPSB0ci0+ZGF0YVtjcHVdLT50cmFjZV9pZHg7Ci0JCQlpZiAodHItPmRhdGFbY3B1XS0+dHJhY2VfaWR4ID4gdHItPmVudHJpZXMpCi0JCQkJZW50cmllcyArPSB0ci0+ZW50cmllczsKLQkJCWVsc2UKLQkJCQllbnRyaWVzICs9IHRyLT5kYXRhW2NwdV0tPnRyYWNlX2lkeDsKLQkJfQotCX0KKwllbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllcyhpdGVyLT50ci0+YnVmZmVyKTsKKwl0b3RhbCA9IGVudHJpZXMgKworCQlyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLT50ci0+YnVmZmVyKTsKIAogCXNlcV9wcmludGYobSwgIiVzIGxhdGVuY3kgdHJhY2UgdjEuMS41IG9uICVzXG4iLAogCQkgICBuYW1lLCBVVFNfUkVMRUFTRSk7CkBAIC0xNDI4LDcgKzEyNDQsNyBAQAogCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCk7CiAKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICIlOC44cy0lLTVkICIsIGNvbW0sIGVudHJ5LT5waWQpOwotCXRyYWNlX3NlcV9wcmludGYocywgIiVkIiwgY3B1KTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlM2QiLCBjcHUpOwogCXRyYWNlX3NlcV9wcmludGYocywgIiVjJWMiLAogCQkJKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSVJRU19PRkYpID8gJ2QnIDogJy4nLAogCQkJKChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX05FRURfUkVTQ0hFRCkgPyAnTicgOiAnLicpKTsKQEAgLTE0NTcsNyArMTI3Myw3IEBACiB1bnNpZ25lZCBsb25nIHByZWVtcHRfbWFya190aHJlc2ggPSAxMDA7CiAKIHN0YXRpYyB2b2lkCi1sYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgbG9uZyBhYnNfdXNlY3MsCitsYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHU2NCBhYnNfdXNlY3MsCiAJCSAgICB1bnNpZ25lZCBsb25nIHJlbF91c2VjcykKIHsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTRsbGR1cyIsIGFic191c2Vjcyk7CkBAIC0xNDcxLDM0ICsxMjg3LDc2IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIHN0YXRlX3RvX2NoYXJbXSA9IFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFI7CiAKLXN0YXRpYyBpbnQKKy8qCisgKiBUaGUgbWVzc2FnZSBpcyBzdXBwb3NlZCB0byBjb250YWluIGFuIGVuZGluZyBuZXdsaW5lLgorICogSWYgdGhlIHByaW50aW5nIHN0b3BzIHByZW1hdHVyZWx5LCB0cnkgdG8gYWRkIGEgbmV3bGluZSBvZiBvdXIgb3duLgorICovCit2b2lkIHRyYWNlX3NlcV9wcmludF9jb250KHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKKwlzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCAqY29udDsKKwlib29sIG9rID0gdHJ1ZTsKKworCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBpdGVyLT5jcHUsIE5VTEwpOworCWlmICghZW50IHx8IGVudC0+dHlwZSAhPSBUUkFDRV9DT05UKSB7CisJCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCQlyZXR1cm47CisJfQorCisJZG8geworCQljb250ID0gKHN0cnVjdCB0cmFjZV9maWVsZF9jb250ICopZW50OworCQlpZiAob2spCisJCQlvayA9ICh0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIGNvbnQtPmJ1ZikgPiAwKTsKKworCQlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKKworCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSkKKwkJCXJpbmdfYnVmZmVyX3JlYWQoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSwgTlVMTCk7CisJCWVsc2UKKwkJCXJpbmdfYnVmZmVyX2NvbnN1bWUoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LCBOVUxMKTsKKworCQlmdHJhY2VfZW5hYmxlX2NwdSgpOworCisJCWVudCA9IHBlZWtfbmV4dF9lbnRyeShpdGVyLCBpdGVyLT5jcHUsIE5VTEwpOworCX0gd2hpbGUgKGVudCAmJiBlbnQtPnR5cGUgPT0gVFJBQ0VfQ09OVCk7CisKKwlpZiAoIW9rKQorCQl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9sYXRfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdW5zaWduZWQgaW50IHRyYWNlX2lkeCwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX01BU0spOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqbmV4dF9lbnRyeSA9IGZpbmRfbmV4dF9lbnRyeShpdGVyLCBOVUxMKTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKm5leHRfZW50cnk7CiAJdW5zaWduZWQgbG9uZyB2ZXJib3NlID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9WRVJCT1NFKTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwogCXVuc2lnbmVkIGxvbmcgYWJzX3VzZWNzOwogCXVuc2lnbmVkIGxvbmcgcmVsX3VzZWNzOworCXU2NCBuZXh0X3RzOwogCWNoYXIgKmNvbW07CiAJaW50IFMsIFQ7CiAJaW50IGk7CiAJdW5zaWduZWQgc3RhdGU7CiAKKwlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworCW5leHRfZW50cnkgPSBmaW5kX25leHRfZW50cnkoaXRlciwgTlVMTCwgJm5leHRfdHMpOwogCWlmICghbmV4dF9lbnRyeSkKLQkJbmV4dF9lbnRyeSA9IGVudHJ5OwotCXJlbF91c2VjcyA9IG5zMnVzZWNzKG5leHRfZW50cnktPnQgLSBlbnRyeS0+dCk7Ci0JYWJzX3VzZWNzID0gbnMydXNlY3MoZW50cnktPnQgLSBpdGVyLT50ci0+dGltZV9zdGFydCk7CisJCW5leHRfdHMgPSBpdGVyLT50czsKKwlyZWxfdXNlY3MgPSBuczJ1c2VjcyhuZXh0X3RzIC0gaXRlci0+dHMpOworCWFic191c2VjcyA9IG5zMnVzZWNzKGl0ZXItPnRzIC0gaXRlci0+dHItPnRpbWVfc3RhcnQpOwogCiAJaWYgKHZlcmJvc2UpIHsKIAkJY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkKTsKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cyAlNWQgJWQgJWQgJTA4eCAlMDh4IFslMDhseF0iCisJCXRyYWNlX3NlcV9wcmludGYocywgIiUxNnMgJTVkICUzZCAlZCAlMDh4ICUwOHggWyUwOGx4XSIKIAkJCQkgIiAlbGQuJTAzbGRtcyAoKyVsZC4lMDNsZG1zKTogIiwKIAkJCQkgY29tbSwKIAkJCQkgZW50cnktPnBpZCwgY3B1LCBlbnRyeS0+ZmxhZ3MsCiAJCQkJIGVudHJ5LT5wcmVlbXB0X2NvdW50LCB0cmFjZV9pZHgsCi0JCQkJIG5zMnVzZWNzKGVudHJ5LT50KSwKKwkJCQkgbnMydXNlY3MoaXRlci0+dHMpLAogCQkJCSBhYnNfdXNlY3MvMTAwMCwKIAkJCQkgYWJzX3VzZWNzICUgMTAwMCwgcmVsX3VzZWNzLzEwMDAsCiAJCQkJIHJlbF91c2VjcyAlIDEwMDApOwpAQCAtMTUwNyw1MiArMTM2NSw4NSBAQAogCQlsYXRfcHJpbnRfdGltZXN0YW1wKHMsIGFic191c2VjcywgcmVsX3VzZWNzKTsKIAl9CiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46Ci0JCXNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPmZuLmlwLCBzeW1fZmxhZ3MpOworCWNhc2UgVFJBQ0VfRk46IHsKKwkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKIAkJdHJhY2Vfc2VxX3B1dHMocywgIiAoIik7Ci0JCWlmIChrcmV0cHJvYmVkKGVudHJ5LT5mbi5wYXJlbnRfaXApKQorCQlpZiAoa3JldHByb2JlZChmaWVsZC0+cGFyZW50X2lwKSkKIAkJCXRyYWNlX3NlcV9wdXRzKHMsIEtSRVRQUk9CRV9NU0cpOwogCQllbHNlCi0JCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGVudHJ5LT5mbi5wYXJlbnRfaXAsIHN5bV9mbGFncyk7CisJCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5wYXJlbnRfaXAsIHN5bV9mbGFncyk7CiAJCXRyYWNlX3NlcV9wdXRzKHMsICIpXG4iKTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRToKLQkJVCA9IGVudHJ5LT5jdHgubmV4dF9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/Ci0JCQlzdGF0ZV90b19jaGFyW2VudHJ5LT5jdHgubmV4dF9zdGF0ZV0gOiAnWCc7CisJY2FzZSBUUkFDRV9XQUtFOiB7CisJCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKIAotCQlzdGF0ZSA9IGVudHJ5LT5jdHgucHJldl9zdGF0ZSA/IF9fZmZzKGVudHJ5LT5jdHgucHJldl9zdGF0ZSkgKyAxIDogMDsKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlUID0gZmllbGQtPm5leHRfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPworCQkJc3RhdGVfdG9fY2hhcltmaWVsZC0+bmV4dF9zdGF0ZV0gOiAnWCc7CisKKwkJc3RhdGUgPSBmaWVsZC0+cHJldl9zdGF0ZSA/CisJCQlfX2ZmcyhmaWVsZC0+cHJldl9zdGF0ZSkgKyAxIDogMDsKIAkJUyA9IHN0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpIC0gMSA/IHN0YXRlX3RvX2NoYXJbc3RhdGVdIDogJ1gnOwotCQljb21tID0gdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5jdHgubmV4dF9waWQpOwotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyAlNWQ6JTNkOiVjICVzXG4iLAotCQkJCSBlbnRyeS0+Y3R4LnByZXZfcGlkLAotCQkJCSBlbnRyeS0+Y3R4LnByZXZfcHJpbywKKwkJY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShmaWVsZC0+bmV4dF9waWQpOworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyBbJTAzZF0gJTVkOiUzZDolYyAlc1xuIiwKKwkJCQkgZmllbGQtPnByZXZfcGlkLAorCQkJCSBmaWVsZC0+cHJldl9wcmlvLAogCQkJCSBTLCBlbnRyeS0+dHlwZSA9PSBUUkFDRV9DVFggPyAiPT0+IiA6ICIgICsiLAotCQkJCSBlbnRyeS0+Y3R4Lm5leHRfcGlkLAotCQkJCSBlbnRyeS0+Y3R4Lm5leHRfcHJpbywKKwkJCQkgZmllbGQtPm5leHRfY3B1LAorCQkJCSBmaWVsZC0+bmV4dF9waWQsCisJCQkJIGZpZWxkLT5uZXh0X3ByaW8sCiAJCQkJIFQsIGNvbW0pOwogCQlicmVhazsKLQljYXNlIFRSQUNFX1NQRUNJQUw6CisJfQorCWNhc2UgVFJBQ0VfU1BFQ0lBTDogeworCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwogCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAotCQkJCSBlbnRyeS0+c3BlY2lhbC5hcmcxLAotCQkJCSBlbnRyeS0+c3BlY2lhbC5hcmcyLAotCQkJCSBlbnRyeS0+c3BlY2lhbC5hcmczKTsKKwkJCQkgZmllbGQtPmFyZzEsCisJCQkJIGZpZWxkLT5hcmcyLAorCQkJCSBmaWVsZC0+YXJnMyk7CiAJCWJyZWFrOwotCWNhc2UgVFJBQ0VfU1RBQ0s6CisJfQorCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKKwkJc3RydWN0IHN0YWNrX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCiAJCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7CiAJCQlpZiAoaSkKIAkJCQl0cmFjZV9zZXFfcHV0cyhzLCAiIDw9ICIpOwotCQkJc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+c3RhY2suY2FsbGVyW2ldLCBzeW1fZmxhZ3MpOworCQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+Y2FsbGVyW2ldLCBzeW1fZmxhZ3MpOwogCQl9CiAJCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOwogCQlicmVhazsKKwl9CisJY2FzZSBUUkFDRV9QUklOVDogeworCQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7CisJCXRyYWNlX3NlcV9wcmludGYocywgIjogJXMiLCBmaWVsZC0+YnVmKTsKKwkJaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKKwkJCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiVW5rbm93biB0eXBlICVkXG4iLCBlbnRyeS0+dHlwZSk7CiAJfQotCXJldHVybiAxOworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfdHJhY2VfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF90cmFjZV9mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fTUFTSyk7CkBAIC0xNTY3LDkwICsxNDU4LDEyNiBAQAogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKKwlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwogCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoaXRlci0+ZW50LT5waWQpOwogCi0JdCA9IG5zMnVzZWNzKGVudHJ5LT50KTsKKwl0ID0gbnMydXNlY3MoaXRlci0+dHMpOwogCXVzZWNfcmVtID0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOwogCXNlY3MgPSAodW5zaWduZWQgbG9uZyl0OwogCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cy0lLTVkICIsIGNvbW0sIGVudHJ5LT5waWQpOwogCWlmICghcmV0KQotCQlyZXR1cm4gMDsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTAyZF0gIiwgaXRlci0+Y3B1KTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslMDNkXSAiLCBpdGVyLT5jcHUpOwogCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU1bHUuJTA2bHU6ICIsIHNlY3MsIHVzZWNfcmVtKTsKIAlpZiAoIXJldCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOgotCQlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGVudHJ5LT5mbi5pcCwgc3ltX2ZsYWdzKTsKKwljYXNlIFRSQUNFX0ZOOiB7CisJCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7CiAJCWlmICghcmV0KQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCWlmICgoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVF9QQVJFTlQpICYmCi0JCQkJCQllbnRyeS0+Zm4ucGFyZW50X2lwKSB7CisJCQkJCQlmaWVsZC0+cGFyZW50X2lwKSB7CiAJCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPC0iKTsKIAkJCWlmICghcmV0KQotCQkJCXJldHVybiAwOwotCQkJaWYgKGtyZXRwcm9iZWQoZW50cnktPmZuLnBhcmVudF9pcCkpCisJCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQkJaWYgKGtyZXRwcm9iZWQoZmllbGQtPnBhcmVudF9pcCkpCiAJCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgS1JFVFBST0JFX01TRyk7CiAJCQllbHNlCi0JCQkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+Zm4ucGFyZW50X2lwLAorCQkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywKKwkJCQkJCSAgICAgICBmaWVsZC0+cGFyZW50X2lwLAogCQkJCQkJICAgICAgIHN5bV9mbGFncyk7CiAJCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCX0KIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKIAkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRToKLQkJUyA9IGVudHJ5LT5jdHgucHJldl9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/Ci0JCQlzdGF0ZV90b19jaGFyW2VudHJ5LT5jdHgucHJldl9zdGF0ZV0gOiAnWCc7Ci0JCVQgPSBlbnRyeS0+Y3R4Lm5leHRfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPwotCQkJc3RhdGVfdG9fY2hhcltlbnRyeS0+Y3R4Lm5leHRfc3RhdGVdIDogJ1gnOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTVkOiUzZDolYyAlcyAlNWQ6JTNkOiVjXG4iLAotCQkJCSAgICAgICBlbnRyeS0+Y3R4LnByZXZfcGlkLAotCQkJCSAgICAgICBlbnRyeS0+Y3R4LnByZXZfcHJpbywKKwljYXNlIFRSQUNFX1dBS0U6IHsKKwkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJUyA9IGZpZWxkLT5wcmV2X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KKwkJCXN0YXRlX3RvX2NoYXJbZmllbGQtPnByZXZfc3RhdGVdIDogJ1gnOworCQlUID0gZmllbGQtPm5leHRfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPworCQkJc3RhdGVfdG9fY2hhcltmaWVsZC0+bmV4dF9zdGF0ZV0gOiAnWCc7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAlNWQ6JTNkOiVjICVzIFslMDNkXSAlNWQ6JTNkOiVjXG4iLAorCQkJCSAgICAgICBmaWVsZC0+cHJldl9waWQsCisJCQkJICAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCiAJCQkJICAgICAgIFMsCiAJCQkJICAgICAgIGVudHJ5LT50eXBlID09IFRSQUNFX0NUWCA/ICI9PT4iIDogIiAgKyIsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9waWQsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9wcmlvLAorCQkJCSAgICAgICBmaWVsZC0+bmV4dF9jcHUsCisJCQkJICAgICAgIGZpZWxkLT5uZXh0X3BpZCwKKwkJCQkgICAgICAgZmllbGQtPm5leHRfcHJpbywKIAkJCQkgICAgICAgVCk7CiAJCWlmICghcmV0KQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCWJyZWFrOwotCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKKwl9CisJY2FzZSBUUkFDRV9TUEVDSUFMOiB7CisJCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzEsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzMpOworCQkJCSBmaWVsZC0+YXJnMSwKKwkJCQkgZmllbGQtPmFyZzIsCisJCQkJIGZpZWxkLT5hcmczKTsKIAkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJYnJlYWs7Ci0JY2FzZSBUUkFDRV9TVEFDSzoKKwl9CisJY2FzZSBUUkFDRV9TVEFDSzogeworCQlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKIAkJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKIAkJCWlmIChpKSB7CiAJCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiA8PSAiKTsKIAkJCQlpZiAoIXJldCkKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJCX0KLQkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPnN0YWNrLmNhbGxlcltpXSwKKwkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmNhbGxlcltpXSwKIAkJCQkJICAgICAgIHN5bV9mbGFncyk7CiAJCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCX0KIAkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CiAJCWlmICghcmV0KQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMTsKKwljYXNlIFRSQUNFX1BSSU5UOiB7CisJCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlcyIsIGZpZWxkLT5idWYpOworCQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQorCQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7CisJCWJyZWFrOworCX0KKwl9CisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwcmludF9yYXdfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9yYXdfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwpAQCAtMTY1OSw0NyArMTU4Niw3NyBAQAogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKKwlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVsbHUgIiwKLQkJZW50cnktPnBpZCwgaXRlci0+Y3B1LCBlbnRyeS0+dCk7CisJCWVudHJ5LT5waWQsIGl0ZXItPmNwdSwgaXRlci0+dHMpOwogCWlmICghcmV0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46CisJY2FzZSBUUkFDRV9GTjogeworCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiV4ICV4XG4iLAotCQkJCQllbnRyeS0+Zm4uaXAsIGVudHJ5LT5mbi5wYXJlbnRfaXApOworCQkJCQlmaWVsZC0+aXAsCisJCQkJCWZpZWxkLT5wYXJlbnRfaXApOwogCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCQlicmVhazsKLQljYXNlIFRSQUNFX0NUWDoKLQljYXNlIFRSQUNFX1dBS0U6Ci0JCVMgPSBlbnRyeS0+Y3R4LnByZXZfc3RhdGUgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgPwotCQkJc3RhdGVfdG9fY2hhcltlbnRyeS0+Y3R4LnByZXZfc3RhdGVdIDogJ1gnOwotCQlUID0gZW50cnktPmN0eC5uZXh0X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KLQkJCXN0YXRlX3RvX2NoYXJbZW50cnktPmN0eC5uZXh0X3N0YXRlXSA6ICdYJzsKLQkJaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX1dBS0UpCi0JCQlTID0gJysnOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlYyAlZCAlZCAlY1xuIiwKLQkJCQkgICAgICAgZW50cnktPmN0eC5wcmV2X3BpZCwKLQkJCQkgICAgICAgZW50cnktPmN0eC5wcmV2X3ByaW8sCi0JCQkJICAgICAgIFMsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9waWQsCi0JCQkJICAgICAgIGVudHJ5LT5jdHgubmV4dF9wcmlvLAotCQkJCSAgICAgICBUKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOgotCWNhc2UgVFJBQ0VfU1RBQ0s6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzEsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzIsCi0JCQkJIGVudHJ5LT5zcGVjaWFsLmFyZzMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDE7CisJY2FzZSBUUkFDRV9DVFg6CisJY2FzZSBUUkFDRV9XQUtFOiB7CisJCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJCVMgPSBmaWVsZC0+cHJldl9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/CisJCQlzdGF0ZV90b19jaGFyW2ZpZWxkLT5wcmV2X3N0YXRlXSA6ICdYJzsKKwkJVCA9IGZpZWxkLT5uZXh0X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KKwkJCXN0YXRlX3RvX2NoYXJbZmllbGQtPm5leHRfc3RhdGVdIDogJ1gnOworCQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfV0FLRSkKKwkJCVMgPSAnKyc7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVjICVkICVkICVkICVjXG4iLAorCQkJCSAgICAgICBmaWVsZC0+cHJldl9waWQsCisJCQkJICAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCisJCQkJICAgICAgIFMsCisJCQkJICAgICAgIGZpZWxkLT5uZXh0X2NwdSwKKwkJCQkgICAgICAgZmllbGQtPm5leHRfcGlkLAorCQkJCSAgICAgICBmaWVsZC0+bmV4dF9wcmlvLAorCQkJCSAgICAgICBUKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCWJyZWFrOworCX0KKwljYXNlIFRSQUNFX1NQRUNJQUw6CisJY2FzZSBUUkFDRV9TVEFDSzogeworCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAorCQkJCSBmaWVsZC0+YXJnMSwKKwkJCQkgZmllbGQtPmFyZzIsCisJCQkJIGZpZWxkLT5hcmczKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCWJyZWFrOworCX0KKwljYXNlIFRSQUNFX1BSSU5UOiB7CisJCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVseCAlcyIsIGZpZWxkLT5pcCwgZmllbGQtPmJ1Zik7CisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCisJCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKKwkJYnJlYWs7CisJfQorCX0KKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCiAjZGVmaW5lIFNFUV9QVVRfRklFTERfUkVUKHMsIHgpCQkJCVwKQEAgLTE3MTAsMTEgKzE2NjcsMTIgQEAKIAogI2RlZmluZSBTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgeCkJCQlcCiBkbyB7CQkJCQkJCVwKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHgpID4gTUFYX01FTUhFWF9CWVRFUyk7CVwKIAlpZiAoIXRyYWNlX3NlcV9wdXRtZW1faGV4KHMsICYoeCksIHNpemVvZih4KSkpCVwKIAkJcmV0dXJuIDA7CQkJCVwKIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbnQgcHJpbnRfaGV4X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfaGV4X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJdW5zaWduZWQgY2hhciBuZXdsaW5lID0gJ1xuJzsKQEAgLTE3MjMsOTcgKzE2ODEsMTM5IEBACiAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAorCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCiAJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOwogCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBpdGVyLT5jcHUpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+dCk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOgotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPmZuLmlwKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5mbi5wYXJlbnRfaXApOworCWNhc2UgVFJBQ0VfRk46IHsKKwkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisKKwkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOwogCQlicmVhazsKKwl9CiAJY2FzZSBUUkFDRV9DVFg6Ci0JY2FzZSBUUkFDRV9XQUtFOgotCQlTID0gZW50cnktPmN0eC5wcmV2X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KLQkJCXN0YXRlX3RvX2NoYXJbZW50cnktPmN0eC5wcmV2X3N0YXRlXSA6ICdYJzsKLQkJVCA9IGVudHJ5LT5jdHgubmV4dF9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/Ci0JCQlzdGF0ZV90b19jaGFyW2VudHJ5LT5jdHgubmV4dF9zdGF0ZV0gOiAnWCc7CisJY2FzZSBUUkFDRV9XQUtFOiB7CisJCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJCVMgPSBmaWVsZC0+cHJldl9zdGF0ZSA8IHNpemVvZihzdGF0ZV90b19jaGFyKSA/CisJCQlzdGF0ZV90b19jaGFyW2ZpZWxkLT5wcmV2X3N0YXRlXSA6ICdYJzsKKwkJVCA9IGZpZWxkLT5uZXh0X3N0YXRlIDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpID8KKwkJCXN0YXRlX3RvX2NoYXJbZmllbGQtPm5leHRfc3RhdGVdIDogJ1gnOwogCQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfV0FLRSkKIAkJCVMgPSAnKyc7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3R4LnByZXZfcGlkKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5jdHgucHJldl9wcmlvKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9wcmlvKTsKIAkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFMpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5uZXh0X3BpZCk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3R4Lm5leHRfcHJpbyk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+Zm4ucGFyZW50X2lwKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X2NwdSk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7CiAJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBUKTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1NUQUNLOgotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPnNwZWNpYWwuYXJnMSk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+c3BlY2lhbC5hcmcyKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5zcGVjaWFsLmFyZzMpOworCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKKwkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKIAkJYnJlYWs7CiAJfQorCX0KIAlTRVFfUFVUX0ZJRUxEX1JFVChzLCBuZXdsaW5lKTsKIAotCXJldHVybiAxOworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfYmluX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfYmluX2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCisJaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKIAlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+cGlkKTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3B1KTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+dCk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgaXRlci0+Y3B1KTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjoKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmZuLmlwKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmZuLnBhcmVudF9pcCk7CisJY2FzZSBUUkFDRV9GTjogeworCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOwogCQlicmVhazsKLQljYXNlIFRSQUNFX0NUWDoKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5wcmV2X3BpZCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5jdHgucHJldl9wcmlvKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5wcmV2X3N0YXRlKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5uZXh0X3BpZCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5jdHgubmV4dF9wcmlvKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmN0eC5uZXh0X3N0YXRlKTsKKwl9CisJY2FzZSBUUkFDRV9DVFg6IHsKKwkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3N0YXRlKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcGlkKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3N0YXRlKTsKIAkJYnJlYWs7CisJfQogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1NUQUNLOgotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+c3BlY2lhbC5hcmcxKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPnNwZWNpYWwuYXJnMik7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGVudHJ5LT5zcGVjaWFsLmFyZzMpOworCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKKwkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOworCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKIAkJYnJlYWs7CiAJfQorCX0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCB0cmFjZV9lbXB0eShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0JCWRhdGEgPSBpdGVyLT50ci0+ZGF0YVtjcHVdOwotCi0JCWlmIChoZWFkX3BhZ2UoZGF0YSkgJiYgZGF0YS0+dHJhY2VfaWR4ICYmCi0JCSAgICAoZGF0YS0+dHJhY2VfdGFpbCAhPSBkYXRhLT50cmFjZV9oZWFkIHx8Ci0JCSAgICAgZGF0YS0+dHJhY2VfdGFpbF9pZHggIT0gZGF0YS0+dHJhY2VfaGVhZF9pZHgpKQotCQkJcmV0dXJuIDA7CisJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKSB7CisJCQlpZiAoIXJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoIXJpbmdfYnVmZmVyX2VtcHR5X2NwdShpdGVyLT50ci0+YnVmZmVyLCBjcHUpKQorCQkJCXJldHVybiAwOworCQl9CiAJfQorCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5wcmludF9saW5lKQotCQlyZXR1cm4gaXRlci0+dHJhY2UtPnByaW50X2xpbmUoaXRlcik7CisJZW51bSBwcmludF9saW5lX3QgcmV0OworCisJaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5wcmludF9saW5lKSB7CisJCXJldCA9IGl0ZXItPnRyYWNlLT5wcmludF9saW5lKGl0ZXIpOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfVU5IQU5ETEVEKQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0JJTikKIAkJcmV0dXJuIHByaW50X2Jpbl9mbXQoaXRlcik7CkBAIC0xODY5LDYgKzE4NjksOCBAQAogX190cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqcmV0KQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm07CisJaW50IGNwdTsKIAogCWlmICh0cmFjaW5nX2Rpc2FibGVkKSB7CiAJCSpyZXQgPSAtRU5PREVWOwpAQCAtMTg4OSwyOCArMTg5MSw0NSBAQAogCWl0ZXItPnRyYWNlID0gY3VycmVudF90cmFjZTsKIAlpdGVyLT5wb3MgPSAtMTsKIAorCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCisJCWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0gPQorCQkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLT50ci0+YnVmZmVyLCBjcHUpOworCisJCWlmICghaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKKwkJCWdvdG8gZmFpbF9idWZmZXI7CisJfQorCiAJLyogVE9ETyBzdG9wIHRyYWNlciAqLwogCSpyZXQgPSBzZXFfb3BlbihmaWxlLCAmdHJhY2VyX3NlcV9vcHMpOwotCWlmICghKnJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSBpdGVyOworCWlmICgqcmV0KQorCQlnb3RvIGZhaWxfYnVmZmVyOwogCi0JCS8qIHN0b3AgdGhlIHRyYWNlIHdoaWxlIGR1bXBpbmcgKi8KLQkJaWYgKGl0ZXItPnRyLT5jdHJsKSB7Ci0JCQl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0JCQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDA7Ci0JCX0KKwltID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCW0tPnByaXZhdGUgPSBpdGVyOwogCi0JCWlmIChpdGVyLT50cmFjZSAmJiBpdGVyLT50cmFjZS0+b3BlbikKLQkJCWl0ZXItPnRyYWNlLT5vcGVuKGl0ZXIpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKGl0ZXIpOwotCQlpdGVyID0gTlVMTDsKKwkvKiBzdG9wIHRoZSB0cmFjZSB3aGlsZSBkdW1waW5nICovCisJaWYgKGl0ZXItPnRyLT5jdHJsKSB7CisJCXRyYWNlcl9lbmFibGVkID0gMDsKKwkJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAwOwogCX0KKworCWlmIChpdGVyLT50cmFjZSAmJiBpdGVyLT50cmFjZS0+b3BlbikKKwkJCWl0ZXItPnRyYWNlLT5vcGVuKGl0ZXIpOworCiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAogIG91dDoKIAlyZXR1cm4gaXRlcjsKKworIGZhaWxfYnVmZmVyOgorCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKKwkJCXJpbmdfYnVmZmVyX3JlYWRfZmluaXNoKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pOworCX0KKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIGludCB0cmFjaW5nX29wZW5fZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTE5MjYsOCArMTk0NSwxNCBAQAogewogCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwlpbnQgY3B1OwogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CisJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKQorCQkJcmluZ19idWZmZXJfcmVhZF9maW5pc2goaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSk7CisJfQorCiAJaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5jbG9zZSkKIAkJaXRlci0+dHJhY2UtPmNsb3NlKGl0ZXIpOwogCkBAIC0yMzUyLDkgKzIzNzcsMTEgQEAKIAlzdHJ1Y3QgdHJhY2VyICp0OwogCWNoYXIgYnVmW21heF90cmFjZXJfdHlwZV9sZW4rMV07CiAJaW50IGk7CisJc2l6ZV90IHJldDsKIAogCWlmIChjbnQgPiBtYXhfdHJhY2VyX3R5cGVfbGVuKQogCQljbnQgPSBtYXhfdHJhY2VyX3R5cGVfbGVuOworCXJldCA9IGNudDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIzNzAsNyArMjM5NywxMSBAQAogCQlpZiAoc3RyY21wKHQtPm5hbWUsIGJ1ZikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXQgfHwgdCA9PSBjdXJyZW50X3RyYWNlKQorCWlmICghdCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHQgPT0gY3VycmVudF90cmFjZSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlLT5yZXNldCkKQEAgLTIzODMsOSArMjQxNCwxMCBAQAogIG91dDoKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCWlmIChyZXQgPT0gY250KQorCQlmaWxwLT5mX3BvcyArPSBjbnQ7CiAKLQlyZXR1cm4gY250OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNTAwLDIwICsyNTMyLDEyIEBACiAJCSAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXN0YXRpYyBjcHVtYXNrX3QgbWFzazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmZGVmIENPTkZJR19GVFJBQ0UKLQlpbnQgZnRyYWNlX3NhdmU7Ci0jZW5kaWYKLQlpbnQgY3B1OwogCXNzaXplX3Qgc3JldDsKIAogCS8qIHJldHVybiBhbnkgbGVmdG92ZXIgZGF0YSAqLwogCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwogCWlmIChzcmV0ICE9IC1FQlVTWSkKIAkJcmV0dXJuIHNyZXQ7Ci0Jc3JldCA9IDA7CiAKIAl0cmFjZV9zZXFfcmVzZXQoJml0ZXItPnNlcSk7CiAKQEAgLTI1MjQsNiArMjU0OCw4IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKK3dhaXRhZ2FpbjoKKwlzcmV0ID0gMDsKIAl3aGlsZSAodHJhY2VfZW1wdHkoaXRlcikpIHsKIAogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewpAQCAtMjU4OCw0NiArMjYxNCwxMiBAQAogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IsIHNlcSkpOwogCWl0ZXItPnBvcyA9IC0xOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIHN0b3AgYWxsIHRyYWNpbmcgb24gYWxsIENQVVMgdG8gcmVhZCB0aGUKLQkgKiB0aGUgbmV4dCBidWZmZXIuIFRoaXMgaXMgYSBiaXQgZXhwZW5zaXZlLCBidXQgaXMKLQkgKiBub3QgZG9uZSBvZnRlbi4gV2UgZmlsbCBhbGwgd2hhdCB3ZSBjYW4gcmVhZCwKLQkgKiBhbmQgdGhlbiByZWxlYXNlIHRoZSBsb2NrcyBhZ2Fpbi4KLQkgKi8KLQotCWNwdXNfY2xlYXIobWFzayk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotI2lmZGVmIENPTkZJR19GVFJBQ0UKLQlmdHJhY2Vfc2F2ZSA9IGZ0cmFjZV9lbmFibGVkOwotCWZ0cmFjZV9lbmFibGVkID0gMDsKLSNlbmRpZgotCXNtcF93bWIoKTsKLQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKLQkJZGF0YSA9IGl0ZXItPnRyLT5kYXRhW2NwdV07Ci0KLQkJaWYgKCFoZWFkX3BhZ2UoZGF0YSkgfHwgIWRhdGEtPnRyYWNlX2lkeCkKLQkJCWNvbnRpbnVlOwotCi0JCWF0b21pY19pbmMoJmRhdGEtPmRpc2FibGVkKTsKLQkJY3B1X3NldChjcHUsIG1hc2spOwotCX0KLQotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgewotCQlkYXRhID0gaXRlci0+dHItPmRhdGFbY3B1XTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQotCQlpZiAoZGF0YS0+b3ZlcnJ1biA+IGl0ZXItPmxhc3Rfb3ZlcnJ1bltjcHVdKQotCQkJaXRlci0+b3ZlcnJ1bltjcHVdICs9Ci0JCQkJZGF0YS0+b3ZlcnJ1biAtIGl0ZXItPmxhc3Rfb3ZlcnJ1bltjcHVdOwotCQlpdGVyLT5sYXN0X292ZXJydW5bY3B1XSA9IGRhdGEtPm92ZXJydW47Ci0JfQotCiAJd2hpbGUgKGZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikgIT0gTlVMTCkgewotCQlpbnQgcmV0OworCQllbnVtIHByaW50X2xpbmVfdCByZXQ7CiAJCWludCBsZW4gPSBpdGVyLT5zZXEubGVuOwogCiAJCXJldCA9IHByaW50X3RyYWNlX2xpbmUoaXRlcik7Ci0JCWlmICghcmV0KSB7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpIHsKIAkJCS8qIGRvbid0IHByaW50IHBhcnRpYWwgbGluZXMgKi8KIAkJCWl0ZXItPnNlcS5sZW4gPSBsZW47CiAJCQlicmVhazsKQEAgLTI2MzksMjYgKzI2MzEsMTcgQEAKIAkJCWJyZWFrOwogCX0KIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgewotCQlkYXRhID0gaXRlci0+dHItPmRhdGFbY3B1XTsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmRhdGEtPmxvY2spOwotCX0KLQotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgewotCQlkYXRhID0gaXRlci0+dHItPmRhdGFbY3B1XTsKLQkJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwotCX0KLSNpZmRlZiBDT05GSUdfRlRSQUNFCi0JZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2Vfc2F2ZTsKLSNlbmRpZgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQogCS8qIE5vdyBjb3B5IHdoYXQgd2UgaGF2ZSB0byB0aGUgdXNlciAqLwogCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOwogCWlmIChpdGVyLT5zZXEucmVhZHBvcyA+PSBpdGVyLT5zZXEubGVuKQogCQl0cmFjZV9zZXFfcmVzZXQoJml0ZXItPnNlcSk7CisKKwkvKgorCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHNlbmQgdG8gdXNlciwgaW5zcGl0ZSBvZiBjb25zdW1pbmcgdHJhY2UKKwkgKiBlbnRyaWVzLCBnbyBiYWNrIHRvIHdhaXQgZm9yIG1vcmUgZW50cmllcy4KKwkgKi8KIAlpZiAoc3JldCA9PSAtRUJVU1kpCi0JCXNyZXQgPSAwOworCQlnb3RvIHdhaXRhZ2FpbjsKIAogb3V0OgogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CkBAIC0yNjg0LDcgKzI2NjcsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWNoYXIgYnVmWzY0XTsKLQlpbnQgaSwgcmV0OworCWludCByZXQ7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjcwNCw1OSArMjY4OCwzOCBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQlpZiAoY3VycmVudF90cmFjZSAhPSAmbm9fdHJhY2VyKSB7CisJaWYgKHRyLT5jdHJsKSB7CiAJCWNudCA9IC1FQlVTWTsKLQkJcHJfaW5mbygiZnRyYWNlOiBzZXQgY3VycmVudF90cmFjZXIgdG8gbm9uZSIKKwkJcHJfaW5mbygiZnRyYWNlOiBwbGVhc2UgZGlzYWJsZSB0cmFjaW5nIgogCQkJIiBiZWZvcmUgbW9kaWZ5aW5nIGJ1ZmZlciBzaXplXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHZhbCA+IGdsb2JhbF90cmFjZS5lbnRyaWVzKSB7Ci0JCWxvbmcgcGFnZXNfcmVxdWVzdGVkOwotCQl1bnNpZ25lZCBsb25nIGZyZWVhYmxlX3BhZ2VzOwotCi0JCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgYmVmb3JlIG1hcHBpbmcgKi8KLQkJcGFnZXNfcmVxdWVzdGVkID0KLQkJCSh2YWwgKyAoRU5UUklFU19QRVJfUEFHRS0xKSkgLyBFTlRSSUVTX1BFUl9QQUdFOwotCi0JCS8qIGFjY291bnQgZm9yIGVhY2ggYnVmZmVyIChhbmQgbWF4X3RyKSAqLwotCQlwYWdlc19yZXF1ZXN0ZWQgKj0gdHJhY2luZ19ucl9idWZmZXJzICogMjsKLQotCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KLQkJaWYgKHBhZ2VzX3JlcXVlc3RlZCA8IDApIHsKLQkJCWNudCA9IC1FTk9NRU07CisJaWYgKHZhbCAhPSBnbG9iYWxfdHJhY2UuZW50cmllcykgeworCQlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgdmFsKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWNudCA9IHJldDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJZnJlZWFibGVfcGFnZXMgPSBkZXRlcm1pbmVfZGlydHlhYmxlX21lbW9yeSgpOwotCi0JCS8qIHdlIG9ubHkgYWxsb3cgdG8gcmVxdWVzdCAxLzQgb2YgdXNlYWJsZSBtZW1vcnkgKi8KLQkJaWYgKHBhZ2VzX3JlcXVlc3RlZCA+Ci0JCSAgICAoKGZyZWVhYmxlX3BhZ2VzICsgdHJhY2luZ19wYWdlc19hbGxvY2F0ZWQpIC8gNCkpIHsKLQkJCWNudCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXdoaWxlIChnbG9iYWxfdHJhY2UuZW50cmllcyA8IHZhbCkgewotCQkJaWYgKHRyYWNlX2FsbG9jX3BhZ2UoKSkgewotCQkJCWNudCA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXQ7CisJCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShtYXhfdHIuYnVmZmVyLCB2YWwpOworCQlpZiAocmV0IDwgMCkgeworCQkJaW50IHI7CisJCQljbnQgPSByZXQ7CisJCQlyID0gcmluZ19idWZmZXJfcmVzaXplKGdsb2JhbF90cmFjZS5idWZmZXIsCisJCQkJCSAgICAgICBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisJCQlpZiAociA8IDApIHsKKwkJCQkvKiBBQVJHSCEgV2UgYXJlIGxlZnQgd2l0aCBkaWZmZXJlbnQKKwkJCQkgKiBzaXplIG1heCBidWZmZXIhISEhICovCisJCQkJV0FSTl9PTigxKTsKKwkJCQl0cmFjaW5nX2Rpc2FibGVkID0gMTsKIAkJCX0KLQkJCS8qIGRvdWJsZSBjaGVjayB0aGF0IHdlIGRvbid0IGdvIG92ZXIgdGhlIGtub3duIHBhZ2VzICovCi0JCQlpZiAodHJhY2luZ19wYWdlc19hbGxvY2F0ZWQgPiBwYWdlc19yZXF1ZXN0ZWQpCi0JCQkJYnJlYWs7CisJCQlnb3RvIG91dDsKIAkJfQogCi0JfSBlbHNlIHsKLQkJLyogaW5jbHVkZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdmFsIChpbmMgb2YgcGFnZSBlbnRyaWVzKSAqLwotCQl3aGlsZSAoZ2xvYmFsX3RyYWNlLmVudHJpZXMgPiB2YWwgKyAoRU5UUklFU19QRVJfUEFHRSAtIDEpKQotCQkJdHJhY2VfZnJlZV9wYWdlKCk7CisJCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gdmFsOwogCX0KIAotCS8qIGNoZWNrIGludGVncml0eSAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpCi0JCWNoZWNrX3BhZ2VzKGdsb2JhbF90cmFjZS5kYXRhW2ldKTsKLQogCWZpbHAtPmZfcG9zICs9IGNudDsKIAogCS8qIElmIGNoZWNrIHBhZ2VzIGZhaWxlZCwgcmV0dXJuIEVOT01FTSAqLwpAQCAtMjc2OSw2ICsyNzMyLDUyIEBACiAJcmV0dXJuIGNudDsKIH0KIAorc3RhdGljIGludCBtYXJrX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXJldCA9IHRyYWNlX3ZwcmludGsoMCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK3RyYWNpbmdfbWFya193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJCXNpemVfdCBjbnQsIGxvZmZfdCAqZnBvcykKK3sKKwljaGFyICpidWY7CisJY2hhciAqZW5kOworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOworCisJaWYgKCF0ci0+Y3RybCB8fCB0cmFjaW5nX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbnQgPiBUUkFDRV9CVUZfU0laRSkKKwkJY250ID0gVFJBQ0VfQlVGX1NJWkU7CisKKwlidWYgPSBrbWFsbG9jKGNudCArIDEsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjbnQpKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIEN1dCBmcm9tIHRoZSBmaXJzdCBuaWwgb3IgbmV3bGluZS4gKi8KKwlidWZbY250XSA9ICdcMCc7CisJZW5kID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJaWYgKGVuZCkKKwkJKmVuZCA9ICdcMCc7CisKKwljbnQgPSBtYXJrX3ByaW50aygiJXNcbiIsIGJ1Zik7CisJa2ZyZWUoYnVmKTsKKwkqZnBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21heF9sYXRfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX21heF9sYXRfcmVhZCwKQEAgLTI4MDAsNiArMjgwOSwxMSBAQAogCS53cml0ZQkJPSB0cmFjaW5nX2VudHJpZXNfd3JpdGUsCiB9OwogCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21hcmtfZm9wcyA9IHsKKwkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkud3JpdGUJCT0gdHJhY2luZ19tYXJrX3dyaXRlLAorfTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCiBzdGF0aWMgc3NpemVfdApAQCAtMjg0Niw3ICsyODYwLDcgQEAKICNpbmNsdWRlICJ0cmFjZV9zZWxmdGVzdC5jIgogI2VuZGlmCiAKLXN0YXRpYyBfX2luaXQgdm9pZCB0cmFjZXJfaW5pdF9kZWJ1Z2ZzKHZvaWQpCitzdGF0aWMgX19pbml0IGludCB0cmFjZXJfaW5pdF9kZWJ1Z2ZzKHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAJc3RydWN0IGRlbnRyeSAqZW50cnk7CkBAIC0yODgxLDEyICsyODk1LDEyIEBACiAJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhdmFpbGFibGVfdHJhY2VycyIsIDA0NDQsIGRfdHJhY2VyLAogCQkJCSAgICAmZ2xvYmFsX3RyYWNlLCAmc2hvd190cmFjZXNfZm9wcyk7CiAJaWYgKCFlbnRyeSkKLQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZScgZW50cnlcbiIpOworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ2F2YWlsYWJsZV90cmFjZXJzJyBlbnRyeVxuIik7CiAKIAllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImN1cnJlbnRfdHJhY2VyIiwgMDQ0NCwgZF90cmFjZXIsCiAJCQkJICAgICZnbG9iYWxfdHJhY2UsICZzZXRfdHJhY2VyX2ZvcHMpOwogCWlmICghZW50cnkpCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2UnIGVudHJ5XG4iKTsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICdjdXJyZW50X3RyYWNlcicgZW50cnlcbiIpOwogCiAJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjaW5nX21heF9sYXRlbmN5IiwgMDY0NCwgZF90cmFjZXIsCiAJCQkJICAgICZ0cmFjaW5nX21heF9sYXRlbmN5LApAQCAtMjg5OSw3ICsyOTEzLDcgQEAKIAkJCQkgICAgJnRyYWNpbmdfdGhyZXNoLCAmdHJhY2luZ19tYXhfbGF0X2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCi0JCQkgICAiJ3RyYWNpbmdfdGhyZWFzaCcgZW50cnlcbiIpOworCQkJICAgIid0cmFjaW5nX3RocmVzaCcgZW50cnlcbiIpOwogCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiUkVBRE1FIiwgMDY0NCwgZF90cmFjZXIsCiAJCQkJICAgIE5VTEwsICZ0cmFjaW5nX3JlYWRtZV9mb3BzKTsKIAlpZiAoIWVudHJ5KQpAQCAtMjkwOSwxMyArMjkyMywxOSBAQAogCQkJCSAgICBOVUxMLCAmdHJhY2luZ19waXBlX2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCi0JCQkgICAiJ3RyYWNpbmdfdGhyZWFzaCcgZW50cnlcbiIpOworCQkJICAgIid0cmFjZV9waXBlJyBlbnRyeVxuIik7CiAKIAllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlX2VudHJpZXMiLCAwNjQ0LCBkX3RyYWNlciwKIAkJCQkgICAgJmdsb2JhbF90cmFjZSwgJnRyYWNpbmdfZW50cmllc19mb3BzKTsKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgotCQkJICAgIid0cmFjaW5nX3RocmVhc2gnIGVudHJ5XG4iKTsKKwkJCSAgICIndHJhY2VfZW50cmllcycgZW50cnlcbiIpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZV9tYXJrZXIiLCAwMjIwLCBkX3RyYWNlciwKKwkJCQkgICAgTlVMTCwgJnRyYWNpbmdfbWFya19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIid0cmFjZV9tYXJrZXInIGVudHJ5XG4iKTsKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZHluX2Z0cmFjZV90b3RhbF9pbmZvIiwgMDQ0NCwgZF90cmFjZXIsCkBAIC0yOTI4LDIzMCArMjk0OCwyNjMgQEAKICNpZmRlZiBDT05GSUdfU1lTUFJPRl9UUkFDRVIKIAlpbml0X3RyYWNlcl9zeXNwcm9mX2RlYnVnZnMoZF90cmFjZXIpOwogI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgdHJhY2VfYWxsb2NfcGFnZSh2b2lkKQotewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UsICp0bXA7Ci0JTElTVF9IRUFEKHBhZ2VzKTsKLQl2b2lkICphcnJheTsKLQl1bnNpZ25lZCBwYWdlc19hbGxvY2F0ZWQgPSAwOwotCWludCBpOwotCi0JLyogZmlyc3QgYWxsb2NhdGUgYSBwYWdlIGZvciBlYWNoIENQVSAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJYXJyYXkgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKGFycmF5ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZSIKLQkJCSAgICAgICAiZm9yIHRyYWNlIGJ1ZmZlciFcbiIpOwotCQkJZ290byBmcmVlX3BhZ2VzOwotCQl9Ci0KLQkJcGFnZXNfYWxsb2NhdGVkKys7Ci0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYXJyYXkpOwotCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmcGFnZXMpOwotCi0vKiBPbmx5IGFsbG9jYXRlIGlmIHdlIGFyZSBhY3R1YWxseSB1c2luZyB0aGUgbWF4IHRyYWNlICovCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJYXJyYXkgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKGFycmF5ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZSIKLQkJCSAgICAgICAiZm9yIHRyYWNlIGJ1ZmZlciFcbiIpOwotCQkJZ290byBmcmVlX3BhZ2VzOwotCQl9Ci0JCXBhZ2VzX2FsbG9jYXRlZCsrOwotCQlwYWdlID0gdmlydF90b19wYWdlKGFycmF5KTsKLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnBhZ2VzKTsKLSNlbmRpZgotCX0KLQotCS8qIE5vdyB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSBhIHBhZ2UgcGVyIENQVSwgYWRkIHRoZW0gKi8KLQlmb3JfZWFjaF90cmFjaW5nX2NwdShpKSB7Ci0JCWRhdGEgPSBnbG9iYWxfdHJhY2UuZGF0YVtpXTsKLQkJcGFnZSA9IGxpc3RfZW50cnkocGFnZXMubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7Ci0JCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJmRhdGEtPnRyYWNlX3BhZ2VzKTsKLQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOwotCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJZGF0YSA9IG1heF90ci5kYXRhW2ldOwotCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlcy5uZXh0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKLQkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bHJ1KTsKLQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmZGF0YS0+dHJhY2VfcGFnZXMpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwotI2VuZGlmCi0JfQotCXRyYWNpbmdfcGFnZXNfYWxsb2NhdGVkICs9IHBhZ2VzX2FsbG9jYXRlZDsKLQlnbG9iYWxfdHJhY2UuZW50cmllcyArPSBFTlRSSUVTX1BFUl9QQUdFOwotCiAJcmV0dXJuIDA7Ci0KLSBmcmVlX3BhZ2VzOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsICZwYWdlcywgbHJ1KSB7Ci0JCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7Ci0JCV9fZnJlZV9wYWdlKHBhZ2UpOwotCX0KLQlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludCB0cmFjZV9mcmVlX3BhZ2Uodm9pZCkKK2ludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogeworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2VfYnVmX2xvY2spOworCXN0YXRpYyBjaGFyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07CisKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQlpbnQgaTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcHJpbnRfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGlycV9mbGFnczsKKwlpbnQgY3B1LCBsZW4gPSAwLCBzaXplLCBwYzsKIAotCS8qIGZyZWUgb25lIHBhZ2UgZnJvbSBlYWNoIGJ1ZmZlciAqLwotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldOwotCQlwID0gZGF0YS0+dHJhY2VfcGFnZXMubmV4dDsKLQkJaWYgKHAgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKSB7Ci0JCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCQlXQVJOX09OKDEpOwotCQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7Ci0JCQlyZXQgPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0JCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQl0cmFjaW5nX3BhZ2VzX2FsbG9jYXRlZC0tOwotCQl0cmFjaW5nX3BhZ2VzX2FsbG9jYXRlZC0tOwotCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwlpZiAoIXRyLT5jdHJsIHx8IHRyYWNpbmdfZGlzYWJsZWQpCisJCXJldHVybiAwOwogCi0JCXRyYWNpbmdfcmVzZXQoZGF0YSk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwogCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJZGF0YSA9IG1heF90ci5kYXRhW2ldOwotCQlwID0gZGF0YS0+dHJhY2VfcGFnZXMubmV4dDsKLQkJaWYgKHAgPT0gJmRhdGEtPnRyYWNlX3BhZ2VzKSB7Ci0JCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCQlXQVJOX09OKDEpOwotCQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7Ci0JCQlyZXQgPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0JCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCisJCWdvdG8gb3V0OwogCi0JCXRyYWNpbmdfcmVzZXQoZGF0YSk7Ci0jZW5kaWYKLQl9Ci0JZ2xvYmFsX3RyYWNlLmVudHJpZXMgLT0gRU5UUklFU19QRVJfUEFHRTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhY2VfYnVmX2xvY2ssIGZsYWdzKTsKKwlsZW4gPSB2c25wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKIAorCWxlbiA9IG1pbihsZW4sIFRSQUNFX0JVRl9TSVpFLTEpOworCXRyYWNlX2J1ZltsZW5dID0gMDsKKworCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIGxlbiArIDE7CisJZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZSwgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXRfdW5sb2NrOworCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1BSSU5UOworCWVudHJ5LT5pcAkJCT0gaXA7CisKKwltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKKwllbnRyeS0+YnVmW2xlbl0gPSAwOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisKKyBvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyYWNlX2J1Zl9sb2NrLCBmbGFncyk7CisKKyBvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOworCisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZwcmludGspOworCitpbnQgX19mdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHRyYWNlX3ZwcmludGsoaXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZnRyYWNlX3ByaW50ayk7CisKK3N0YXRpYyBpbnQgdHJhY2VfcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqdW51c2VkKQoreworCWZ0cmFjZV9kdW1wKCk7CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0cmFjZV9wYW5pY19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCAgPSB0cmFjZV9wYW5pY19oYW5kbGVyLAorCS5uZXh0ICAgICAgICAgICA9IE5VTEwsCisJLnByaW9yaXR5ICAgICAgID0gMTUwICAgLyogcHJpb3JpdHk6IElOVF9NQVggPj0geCA+PSAwICovCit9OworCitzdGF0aWMgaW50IHRyYWNlX2RpZV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIERJRV9PT1BTOgorCQlmdHJhY2VfZHVtcCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0cmFjZV9kaWVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB0cmFjZV9kaWVfaGFuZGxlciwKKwkucHJpb3JpdHkgPSAyMDAKK307CisKKy8qCisgKiBwcmludGsgaXMgc2V0IHRvIG1heCBvZiAxMDI0LCB3ZSByZWFsbHkgZG9uJ3QgbmVlZCBpdCB0aGF0IGJpZy4KKyAqIE5vdGhpbmcgc2hvdWxkIGJlIHByaW50aW5nIDEwMDAgY2hhcmFjdGVycyBhbnl3YXkuCisgKi8KKyNkZWZpbmUgVFJBQ0VfTUFYX1BSSU5UCQkxMDAwCisKKy8qCisgKiBEZWZpbmUgaGVyZSBLRVJOX1RSQUNFIHNvIHRoYXQgd2UgaGF2ZSBvbmUgcGxhY2UgdG8gbW9kaWZ5CisgKiBpdCBpZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIHdoYXQgbG9nIGxldmVsIHRoZSBmdHJhY2UgZHVtcAorICogc2hvdWxkIGJlIGF0LgorICovCisjZGVmaW5lIEtFUk5fVFJBQ0UJCUtFUk5fSU5GTworCitzdGF0aWMgdm9pZAordHJhY2VfcHJpbnRrX3NlcShzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCS8qIFByb2JhYmx5IHNob3VsZCBwcmludCBhIHdhcm5pbmcgaGVyZS4gKi8KKwlpZiAocy0+bGVuID49IDEwMDApCisJCXMtPmxlbiA9IDEwMDA7CisKKwkvKiBzaG91bGQgYmUgemVybyBlbmRlZCwgYnV0IHdlIGFyZSBwYXJhbm9pZC4gKi8KKwlzLT5idWZmZXJbcy0+bGVuXSA9IDA7CisKKwlwcmludGsoS0VSTl9UUkFDRSAiJXMiLCBzLT5idWZmZXIpOworCisJdHJhY2Vfc2VxX3Jlc2V0KHMpOworfQorCisKK3ZvaWQgZnRyYWNlX2R1bXAodm9pZCkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZ0cmFjZV9kdW1wX2xvY2spOworCS8qIHVzZSBzdGF0aWMgYmVjYXVzZSBpdGVyIGNhbiBiZSBhIGJpdCBiaWcgZm9yIHRoZSBzdGFjayAqLworCXN0YXRpYyBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgaXRlcjsKKwlzdGF0aWMgY3B1bWFza190IG1hc2s7CisJc3RhdGljIGludCBkdW1wX3JhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjbnQgPSAwLCBjcHU7CisKKwkvKiBvbmx5IG9uZSBkdW1wICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZ0cmFjZV9kdW1wX2xvY2ssIGZsYWdzKTsKKwlpZiAoZHVtcF9yYW4pCisJCWdvdG8gb3V0OworCisJZHVtcF9yYW4gPSAxOworCisJLyogTm8gdHVybmluZyBiYWNrISAqLworCWZ0cmFjZV9raWxsX2F0b21pYygpOworCisJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CisJCWF0b21pY19pbmMoJmdsb2JhbF90cmFjZS5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwl9CisKKwlwcmludGsoS0VSTl9UUkFDRSAiRHVtcGluZyBmdHJhY2UgYnVmZmVyOlxuIik7CisKKwlpdGVyLnRyID0gJmdsb2JhbF90cmFjZTsKKwlpdGVyLnRyYWNlID0gY3VycmVudF90cmFjZTsKKworCS8qCisJICogV2UgbmVlZCB0byBzdG9wIGFsbCB0cmFjaW5nIG9uIGFsbCBDUFVTIHRvIHJlYWQgdGhlCisJICogdGhlIG5leHQgYnVmZmVyLiBUaGlzIGlzIGEgYml0IGV4cGVuc2l2ZSwgYnV0IGlzCisJICogbm90IGRvbmUgb2Z0ZW4uIFdlIGZpbGwgYWxsIHdoYXQgd2UgY2FuIHJlYWQsCisJICogYW5kIHRoZW4gcmVsZWFzZSB0aGUgbG9ja3MgYWdhaW4uCisJICovCisKKwljcHVzX2NsZWFyKG1hc2spOworCisJd2hpbGUgKCF0cmFjZV9lbXB0eSgmaXRlcikpIHsKKworCQlpZiAoIWNudCkKKwkJCXByaW50ayhLRVJOX1RSQUNFICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisJCWNudCsrOworCisJCS8qIHJlc2V0IGFsbCBidXQgdHIsIHRyYWNlLCBhbmQgb3ZlcnJ1bnMgKi8KKwkJbWVtc2V0KCZpdGVyLnNlcSwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IpIC0KKwkJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFjZV9pdGVyYXRvciwgc2VxKSk7CisJCWl0ZXIuaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0xBVF9GTVQ7CisJCWl0ZXIucG9zID0gLTE7CisKKwkJaWYgKGZpbmRfbmV4dF9lbnRyeV9pbmMoJml0ZXIpICE9IE5VTEwpIHsKKwkJCXByaW50X3RyYWNlX2xpbmUoJml0ZXIpOworCQkJdHJhY2VfY29uc3VtZSgmaXRlcik7CisJCX0KKworCQl0cmFjZV9wcmludGtfc2VxKCZpdGVyLnNlcSk7CisJfQorCisJaWYgKCFjbnQpCisJCXByaW50ayhLRVJOX1RSQUNFICIgICAoZnRyYWNlIGJ1ZmZlciBlbXB0eSlcbiIpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fVFJBQ0UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnRyYWNlX2R1bXBfbG9jaywgZmxhZ3MpOworfQogCiBfX2luaXQgc3RhdGljIGludCB0cmFjZXJfYWxsb2NfYnVmZmVycyh2b2lkKQogewogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0Jdm9pZCAqYXJyYXk7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IHBhZ2VzID0gMDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKIAogCS8qIFRPRE86IG1ha2UgdGhlIG51bWJlciBvZiBidWZmZXJzIGhvdCBwbHVnZ2FibGUgd2l0aCBDUFVTICovCi0JdHJhY2luZ19ucl9idWZmZXJzID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKIAl0cmFjaW5nX2J1ZmZlcl9tYXNrID0gY3B1X3Bvc3NpYmxlX21hcDsKIAorCWdsb2JhbF90cmFjZS5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyh0cmFjZV9idWZfc2l6ZSwKKwkJCQkJCSAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CisJaWYgKCFnbG9iYWxfdHJhY2UuYnVmZmVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcmluZyBidWZmZXIhXG4iKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIDA7CisJfQorCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gcmluZ19idWZmZXJfc2l6ZShnbG9iYWxfdHJhY2UuYnVmZmVyKTsKKworI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCisJbWF4X3RyLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHRyYWNlX2J1Zl9zaXplLAorCQkJCQkgICAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CisJaWYgKCFtYXhfdHIuYnVmZmVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWF4IHJpbmcgYnVmZmVyIVxuIik7CisJCVdBUk5fT04oMSk7CisJCXJpbmdfYnVmZmVyX2ZyZWUoZ2xvYmFsX3RyYWNlLmJ1ZmZlcik7CisJCXJldHVybiAwOworCX0KKwltYXhfdHIuZW50cmllcyA9IHJpbmdfYnVmZmVyX3NpemUobWF4X3RyLmJ1ZmZlcik7CisJV0FSTl9PTihtYXhfdHIuZW50cmllcyAhPSBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisjZW5kaWYKKwogCS8qIEFsbG9jYXRlIHRoZSBmaXJzdCBwYWdlIGZvciBhbGwgYnVmZmVycyAqLwogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKIAkJZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldID0gJnBlcl9jcHUoZ2xvYmFsX3RyYWNlX2NwdSwgaSk7CiAJCW1heF90ci5kYXRhW2ldID0gJnBlcl9jcHUobWF4X2RhdGEsIGkpOwotCi0JCWFycmF5ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmIChhcnJheSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRyYWNlcjogZmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2UiCi0JCQkgICAgICAgImZvciB0cmFjZSBidWZmZXIhXG4iKTsKLQkJCWdvdG8gZnJlZV9idWZmZXJzOwotCQl9Ci0KLQkJLyogc2V0IHRoZSBhcnJheSB0byB0aGUgbGlzdCAqLwotCQlJTklUX0xJU1RfSEVBRCgmZGF0YS0+dHJhY2VfcGFnZXMpOwotCQlwYWdlID0gdmlydF90b19wYWdlKGFycmF5KTsKLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmRhdGEtPnRyYWNlX3BhZ2VzKTsKLQkJLyogdXNlIHRoZSBMUlUgZmxhZyB0byBkaWZmZXJlbnRpYXRlIHRoZSB0d28gYnVmZmVycyAqLwotCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0KLQkJZGF0YS0+bG9jayA9IChyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7Ci0JCW1heF90ci5kYXRhW2ldLT5sb2NrID0gKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKLQotLyogT25seSBhbGxvY2F0ZSBpZiB3ZSBhcmUgYWN0dWFsbHkgdXNpbmcgdGhlIG1heCB0cmFjZSAqLwotI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCi0JCWFycmF5ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmIChhcnJheSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRyYWNlcjogZmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2UiCi0JCQkgICAgICAgImZvciB0cmFjZSBidWZmZXIhXG4iKTsKLQkJCWdvdG8gZnJlZV9idWZmZXJzOwotCQl9Ci0KLQkJSU5JVF9MSVNUX0hFQUQoJm1heF90ci5kYXRhW2ldLT50cmFjZV9wYWdlcyk7Ci0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYXJyYXkpOwotCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbWF4X3RyLmRhdGFbaV0tPnRyYWNlX3BhZ2VzKTsKLQkJU2V0UGFnZUxSVShwYWdlKTsKLSNlbmRpZgogCX0KIAotCS8qCi0JICogU2luY2Ugd2UgYWxsb2NhdGUgYnkgb3JkZXJzIG9mIHBhZ2VzLCB3ZSBtYXkgYmUgYWJsZSB0bwotCSAqIHJvdW5kIHVwIGEgYml0LgotCSAqLwotCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gRU5UUklFU19QRVJfUEFHRTsKLQlwYWdlcysrOwotCi0Jd2hpbGUgKGdsb2JhbF90cmFjZS5lbnRyaWVzIDwgdHJhY2VfbnJfZW50cmllcykgewotCQlpZiAodHJhY2VfYWxsb2NfcGFnZSgpKQotCQkJYnJlYWs7Ci0JCXBhZ2VzKys7Ci0JfQotCW1heF90ci5lbnRyaWVzID0gZ2xvYmFsX3RyYWNlLmVudHJpZXM7Ci0KLQlwcl9pbmZvKCJ0cmFjZXI6ICVkIHBhZ2VzIGFsbG9jYXRlZCBmb3IgJWxkIGVudHJpZXMgb2YgJWxkIGJ5dGVzXG4iLAotCQlwYWdlcywgdHJhY2VfbnJfZW50cmllcywgKGxvbmcpVFJBQ0VfRU5UUllfU0laRSk7Ci0JcHJfaW5mbygiICAgYWN0dWFsIGVudHJpZXMgJWxkXG4iLCBnbG9iYWxfdHJhY2UuZW50cmllcyk7Ci0KLQl0cmFjZXJfaW5pdF9kZWJ1Z2ZzKCk7Ci0KIAl0cmFjZV9pbml0X2NtZGxpbmVzKCk7CiAKLQlyZWdpc3Rlcl90cmFjZXIoJm5vX3RyYWNlcik7Ci0JY3VycmVudF90cmFjZSA9ICZub190cmFjZXI7CisJcmVnaXN0ZXJfdHJhY2VyKCZub3BfdHJhY2UpOworI2lmZGVmIENPTkZJR19CT09UX1RSQUNFUgorCXJlZ2lzdGVyX3RyYWNlcigmYm9vdF90cmFjZXIpOworCWN1cnJlbnRfdHJhY2UgPSAmYm9vdF90cmFjZXI7CisJY3VycmVudF90cmFjZS0+aW5pdCgmZ2xvYmFsX3RyYWNlKTsKKyNlbHNlCisJY3VycmVudF90cmFjZSA9ICZub3BfdHJhY2U7CisjZW5kaWYKIAogCS8qIEFsbCBzZWVtcyBPSywgZW5hYmxlIHRyYWNpbmcgKi8KIAlnbG9iYWxfdHJhY2UuY3RybCA9IHRyYWNlcl9lbmFibGVkOwogCXRyYWNpbmdfZGlzYWJsZWQgPSAwOwogCisJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCSAgICAgICAmdHJhY2VfcGFuaWNfbm90aWZpZXIpOworCisJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZ0cmFjZV9kaWVfbm90aWZpZXIpOworCiAJcmV0dXJuIDA7Ci0KLSBmcmVlX2J1ZmZlcnM6Ci0JZm9yIChpLS0gOyBpID49IDA7IGktLSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKnRtcDsKLQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldOwotCi0JCWlmIChkYXRhKSB7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLAotCQkJCQkJICZkYXRhLT50cmFjZV9wYWdlcywgbHJ1KSB7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmcGFnZS0+bHJ1KTsKLQkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJCX0KLQkJfQotCi0jaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQkJZGF0YSA9IG1heF90ci5kYXRhW2ldOwotCQlpZiAoZGF0YSkgewotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHRtcCwKLQkJCQkJCSAmZGF0YS0+dHJhY2VfcGFnZXMsIGxydSkgewotCQkJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7Ci0JCQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLQlyZXR1cm4gcmV0OwogfQotZnNfaW5pdGNhbGwodHJhY2VyX2FsbG9jX2J1ZmZlcnMpOworZWFybHlfaW5pdGNhbGwodHJhY2VyX2FsbG9jX2J1ZmZlcnMpOworZnNfaW5pdGNhbGwodHJhY2VyX2luaXRfZGVidWdmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IGY2OWY4NjcuLmYxZjk5NTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC01LDcgKzUsOSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogZW51bSB0cmFjZV90eXBlIHsKIAlfX1RSQUNFX0ZJUlNUX1RZUEUgPSAwLApAQCAtMTMsMzggKzE1LDYwIEBACiAJVFJBQ0VfRk4sCiAJVFJBQ0VfQ1RYLAogCVRSQUNFX1dBS0UsCisJVFJBQ0VfQ09OVCwKIAlUUkFDRV9TVEFDSywKKwlUUkFDRV9QUklOVCwKIAlUUkFDRV9TUEVDSUFMLAogCVRSQUNFX01NSU9fUlcsCiAJVFJBQ0VfTU1JT19NQVAsCisJVFJBQ0VfQk9PVCwKIAogCV9fVFJBQ0VfTEFTVF9UWVBFCiB9OwogCiAvKgorICogVGhlIHRyYWNlIGVudHJ5IC0gdGhlIG1vc3QgYmFzaWMgdW5pdCBvZiB0cmFjaW5nLiBUaGlzIGlzIHdoYXQKKyAqIGlzIHByaW50ZWQgaW4gdGhlIGVuZCBhcyBhIHNpbmdsZSBsaW5lIGluIHRoZSB0cmFjZSBvdXRwdXQsIHN1Y2ggYXM6CisgKgorICogICAgIGJhc2gtMTU4MTYgWzAxXSAgIDIzNS4xOTc1ODU6IGlkbGVfY3B1IDwtIGlycV9lbnRlcgorICovCitzdHJ1Y3QgdHJhY2VfZW50cnkgeworCXVuc2lnbmVkIGNoYXIJCXR5cGU7CisJdW5zaWduZWQgY2hhcgkJY3B1OworCXVuc2lnbmVkIGNoYXIJCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJCXByZWVtcHRfY291bnQ7CisJaW50CQkJcGlkOworfTsKKworLyoKICAqIEZ1bmN0aW9uIHRyYWNlIGVudHJ5IC0gZnVuY3Rpb24gYWRkcmVzcyBhbmQgcGFyZW50IGZ1bmN0aW9uIGFkZHJlczoKICAqLwogc3RydWN0IGZ0cmFjZV9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQlpcDsKIAl1bnNpZ25lZCBsb25nCQlwYXJlbnRfaXA7CiB9OworZXh0ZXJuIHN0cnVjdCB0cmFjZXIgYm9vdF90cmFjZXI7CiAKIC8qCiAgKiBDb250ZXh0IHN3aXRjaCB0cmFjZSBlbnRyeSAtIHdoaWNoIHRhc2sgKGFuZCBwcmlvKSB3ZSBzd2l0Y2hlZCBmcm9tL3RvOgogICovCiBzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBpbnQJCXByZXZfcGlkOwogCXVuc2lnbmVkIGNoYXIJCXByZXZfcHJpbzsKIAl1bnNpZ25lZCBjaGFyCQlwcmV2X3N0YXRlOwogCXVuc2lnbmVkIGludAkJbmV4dF9waWQ7CiAJdW5zaWduZWQgY2hhcgkJbmV4dF9wcmlvOwogCXVuc2lnbmVkIGNoYXIJCW5leHRfc3RhdGU7CisJdW5zaWduZWQgaW50CQluZXh0X2NwdTsKIH07CiAKIC8qCiAgKiBTcGVjaWFsIChmcmVlLWZvcm0pIHRyYWNlIGVudHJ5OgogICovCiBzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQlhcmcxOwogCXVuc2lnbmVkIGxvbmcJCWFyZzI7CiAJdW5zaWduZWQgbG9uZwkJYXJnMzsKQEAgLTU3LDMzICs4MSw2MCBAQAogI2RlZmluZSBGVFJBQ0VfU1RBQ0tfRU5UUklFUwk4CiAKIHN0cnVjdCBzdGFja19lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQljYWxsZXJbRlRSQUNFX1NUQUNLX0VOVFJJRVNdOwogfTsKIAogLyoKLSAqIFRoZSB0cmFjZSBlbnRyeSAtIHRoZSBtb3N0IGJhc2ljIHVuaXQgb2YgdHJhY2luZy4gVGhpcyBpcyB3aGF0Ci0gKiBpcyBwcmludGVkIGluIHRoZSBlbmQgYXMgYSBzaW5nbGUgbGluZSBpbiB0aGUgdHJhY2Ugb3V0cHV0LCBzdWNoIGFzOgotICoKLSAqICAgICBiYXNoLTE1ODE2IFswMV0gICAyMzUuMTk3NTg1OiBpZGxlX2NwdSA8LSBpcnFfZW50ZXIKKyAqIGZ0cmFjZV9wcmludGsgZW50cnk6CiAgKi8KLXN0cnVjdCB0cmFjZV9lbnRyeSB7Ci0JY2hhcgkJCXR5cGU7Ci0JY2hhcgkJCWNwdTsKLQljaGFyCQkJZmxhZ3M7Ci0JY2hhcgkJCXByZWVtcHRfY291bnQ7Ci0JaW50CQkJcGlkOwotCWN5Y2xlX3QJCQl0OwotCXVuaW9uIHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeQkJZm47Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5CQljdHg7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5CQlzcGVjaWFsOwotCQlzdHJ1Y3Qgc3RhY2tfZW50cnkJCXN0YWNrOwotCQlzdHJ1Y3QgbW1pb3RyYWNlX3J3CQltbWlvcnc7Ci0JCXN0cnVjdCBtbWlvdHJhY2VfbWFwCQltbWlvbWFwOwotCX07CitzdHJ1Y3QgcHJpbnRfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJdW5zaWduZWQgbG9uZwkJaXA7CisJY2hhcgkJCWJ1ZltdOwogfTsKIAotI2RlZmluZSBUUkFDRV9FTlRSWV9TSVpFCXNpemVvZihzdHJ1Y3QgdHJhY2VfZW50cnkpCisjZGVmaW5lIFRSQUNFX09MRF9TSVpFCQk4OAorCitzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCB7CisJdW5zaWduZWQgY2hhcgkJdHlwZTsKKwkvKiBUZW1wb3JhcnkgdGlsbCB3ZSBnZXQgcmlkIG9mIHRoaXMgY29tcGxldGVseSAqLworCWNoYXIJCQlidWZbVFJBQ0VfT0xEX1NJWkUgLSAxXTsKK307CisKK3N0cnVjdCB0cmFjZV9tbWlvdHJhY2VfcncgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJc3RydWN0IG1taW90cmFjZV9ydwlydzsKK307CisKK3N0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwIHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCXN0cnVjdCBtbWlvdHJhY2VfbWFwCW1hcDsKK307CisKK3N0cnVjdCB0cmFjZV9ib290IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCXN0cnVjdCBib290X3RyYWNlCWluaXRjYWxsOworfTsKKworLyoKKyAqIHRyYWNlX2ZsYWdfdHlwZSBpcyBhbiBlbnVtZXJhdGlvbiB0aGF0IGhvbGRzIGRpZmZlcmVudAorICogc3RhdGVzIHdoZW4gYSB0cmFjZSBvY2N1cnMuIFRoZXNlIGFyZToKKyAqICBJUlFTX09GRgktIGludGVycnVwdHMgd2VyZSBkaXNhYmxlZAorICogIE5FRURfUkVTQ0VEIC0gcmVzY2hlZHVsZSBpcyByZXF1ZXN0ZWQKKyAqICBIQVJESVJRCS0gaW5zaWRlIGFuIGludGVycnVwdCBoYW5kbGVyCisgKiAgU09GVElSUQktIGluc2lkZSBhIHNvZnRpcnEgaGFuZGxlcgorICogIENPTlQJLSBtdWx0aXBsZSBlbnRyaWVzIGhvbGQgdGhlIHRyYWNlIGl0ZW0KKyAqLworZW51bSB0cmFjZV9mbGFnX3R5cGUgeworCVRSQUNFX0ZMQUdfSVJRU19PRkYJCT0gMHgwMSwKKwlUUkFDRV9GTEFHX05FRURfUkVTQ0hFRAkJPSAweDAyLAorCVRSQUNFX0ZMQUdfSEFSRElSUQkJPSAweDA0LAorCVRSQUNFX0ZMQUdfU09GVElSUQkJPSAweDA4LAorCVRSQUNFX0ZMQUdfQ09OVAkJCT0gMHgxMCwKK307CisKKyNkZWZpbmUgVFJBQ0VfQlVGX1NJWkUJCTEwMjQKIAogLyoKICAqIFRoZSBDUFUgdHJhY2UgYXJyYXkgLSBpdCBjb25zaXN0cyBvZiB0aG91c2FuZHMgb2YgdHJhY2UgZW50cmllcwpAQCAtOTEsMTYgKzE0Miw5IEBACiAgKiB0aGUgdHJhY2UsIGV0Yy4pCiAgKi8KIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgewotCXN0cnVjdCBsaXN0X2hlYWQJdHJhY2VfcGFnZXM7CiAJYXRvbWljX3QJCWRpc2FibGVkOwotCXJhd19zcGlubG9ja190CQlsb2NrOwotCXN0cnVjdCBsb2NrX2NsYXNzX2tleQlsb2NrX2tleTsKIAogCS8qIHRoZXNlIGZpZWxkcyBnZXQgY29waWVkIGludG8gbWF4LXRyYWNlOiAqLwotCXVuc2lnbmVkCQl0cmFjZV9oZWFkX2lkeDsKLQl1bnNpZ25lZAkJdHJhY2VfdGFpbF9pZHg7Ci0Jdm9pZAkJCSp0cmFjZV9oZWFkOyAvKiBwcm9kdWNlciAqLwotCXZvaWQJCQkqdHJhY2VfdGFpbDsgLyogY29uc3VtZXIgKi8KIAl1bnNpZ25lZCBsb25nCQl0cmFjZV9pZHg7CiAJdW5zaWduZWQgbG9uZwkJb3ZlcnJ1bjsKIAl1bnNpZ25lZCBsb25nCQlzYXZlZF9sYXRlbmN5OwpAQCAtMTI0LDYgKzE2OCw3IEBACiAgKiBUaGV5IGhhdmUgb24vb2ZmIHN0YXRlIGFzIHdlbGw6CiAgKi8KIHN0cnVjdCB0cmFjZV9hcnJheSB7CisJc3RydWN0IHJpbmdfYnVmZmVyCSpidWZmZXI7CiAJdW5zaWduZWQgbG9uZwkJZW50cmllczsKIAlsb25nCQkJY3RybDsKIAlpbnQJCQljcHU7CkBAIC0xMzIsNiArMTc3LDU2IEBACiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdQkqZGF0YVtOUl9DUFVTXTsKIH07CiAKKyNkZWZpbmUgRlRSQUNFX0NNUF9UWVBFKHZhciwgdHlwZSkgXAorCV9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKHZhciksIHR5cGUgKikKKworI3VuZGVmIElGX0FTU0lHTgorI2RlZmluZSBJRl9BU1NJR04odmFyLCBlbnRyeSwgZXR5cGUsIGlkKQkJXAorCWlmIChGVFJBQ0VfQ01QX1RZUEUodmFyLCBldHlwZSkpIHsJCVwKKwkJdmFyID0gKHR5cGVvZih2YXIpKShlbnRyeSk7CQlcCisJCVdBUk5fT04oaWQgJiYgKGVudHJ5KS0+dHlwZSAhPSBpZCk7CVwKKwkJYnJlYWs7CQkJCQlcCisJfQorCisvKiBXaWxsIGNhdXNlIGNvbXBpbGUgZXJyb3JzIGlmIHR5cGUgaXMgbm90IGZvdW5kLiAqLworZXh0ZXJuIHZvaWQgX19mdHJhY2VfYmFkX3R5cGUodm9pZCk7CisKKy8qCisgKiBUaGUgdHJhY2VfYXNzaWduX3R5cGUgaXMgYSB2ZXJpZmllciB0aGF0IHRoZSBlbnRyeSB0eXBlIGlzCisgKiB0aGUgc2FtZSBhcyB0aGUgdHlwZSBiZWluZyBhc3NpZ25lZC4gVG8gYWRkIG5ldyB0eXBlcyBzaW1wbHkKKyAqIGFkZCBhIGxpbmUgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAqCisgKiBJRl9BU1NJR04odmFyLCBlbnQsIHR5cGUsIGlkKTsKKyAqCisgKiAgV2hlcmUgInR5cGUiIGlzIHRoZSB0cmFjZSB0eXBlIHRoYXQgaW5jbHVkZXMgdGhlIHRyYWNlX2VudHJ5CisgKiAgYXMgdGhlICJlbnQiIGl0ZW0uIEFuZCAiaWQiIGlzIHRoZSB0cmFjZSBpZGVudGlmaWVyIHRoYXQgaXMKKyAqICB1c2VkIGluIHRoZSB0cmFjZV90eXBlIGVudW0uCisgKgorICogIElmIHRoZSB0eXBlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgaWQsIHRoZW4gdXNlIHplcm8uCisgKi8KKyNkZWZpbmUgdHJhY2VfYXNzaWduX3R5cGUodmFyLCBlbnQpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZW50cnksIFRSQUNFX0ZOKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5LCAwKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9maWVsZF9jb250LCBUUkFDRV9DT05UKTsgXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzdGFja19lbnRyeSwgVFJBQ0VfU1RBQ0spOwlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHByaW50X2VudHJ5LCBUUkFDRV9QUklOVCk7CVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSwgMCk7CQlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX21taW90cmFjZV9ydywJCVwKKwkJCSAgVFJBQ0VfTU1JT19SVyk7CQkJCVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX21hcCwJCVwKKwkJCSAgVFJBQ0VfTU1JT19NQVApOwkJCQlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX2Jvb3QsIFRSQUNFX0JPT1QpOwlcCisJCV9fZnRyYWNlX2JhZF90eXBlKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgcHJpbnRfbGluZSBjYWxsYmFjayAqLworZW51bSBwcmludF9saW5lX3QgeworCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FCT0gMCwJLyogUmV0cnkgYWZ0ZXIgZmx1c2hpbmcgdGhlIHNlcSAqLworCVRSQUNFX1RZUEVfSEFORExFRAk9IDEsCisJVFJBQ0VfVFlQRV9VTkhBTkRMRUQJPSAyCS8qIFJlbGF5IHRvIG90aGVyIG91dHB1dCBmdW5jdGlvbnMgKi8KK307CisKIC8qCiAgKiBBIHNwZWNpZmljIHRyYWNlciwgcmVwcmVzZW50ZWQgYnkgbWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gYSB0cmFjZSBhcnJheToKICAqLwpAQCAtMTUyLDcgKzI0Nyw3IEBACiAJaW50CQkJKCpzZWxmdGVzdCkoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKICNlbmRpZgotCWludAkJCSgqcHJpbnRfbGluZSkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKwllbnVtIHByaW50X2xpbmVfdAkoKnByaW50X2xpbmUpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJc3RydWN0IHRyYWNlcgkJKm5leHQ7CiAJaW50CQkJcHJpbnRfbWF4OwogfTsKQEAgLTE3MSw1NyArMjY2LDU4IEBACiAJc3RydWN0IHRyYWNlX2FycmF5CSp0cjsKIAlzdHJ1Y3QgdHJhY2VyCQkqdHJhY2U7CiAJdm9pZAkJCSpwcml2YXRlOwotCWxvbmcJCQlsYXN0X292ZXJydW5bTlJfQ1BVU107Ci0JbG9uZwkJCW92ZXJydW5bTlJfQ1BVU107CisJc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIJKmJ1ZmZlcl9pdGVyW05SX0NQVVNdOwogCiAJLyogVGhlIGJlbG93IGlzIHplcm9lZCBvdXQgaW4gcGlwZV9yZWFkICovCiAJc3RydWN0IHRyYWNlX3NlcQlzZXE7CiAJc3RydWN0IHRyYWNlX2VudHJ5CSplbnQ7CiAJaW50CQkJY3B1OwotCi0Jc3RydWN0IHRyYWNlX2VudHJ5CSpwcmV2X2VudDsKLQlpbnQJCQlwcmV2X2NwdTsKKwl1NjQJCQl0czsKIAogCXVuc2lnbmVkIGxvbmcJCWl0ZXJfZmxhZ3M7CiAJbG9mZl90CQkJcG9zOwotCXVuc2lnbmVkIGxvbmcJCW5leHRfaWR4W05SX0NQVVNdOwotCXN0cnVjdCBsaXN0X2hlYWQJKm5leHRfcGFnZVtOUl9DUFVTXTsKLQl1bnNpZ25lZAkJbmV4dF9wYWdlX2lkeFtOUl9DUFVTXTsKIAlsb25nCQkJaWR4OwogfTsKIAotdm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwordm9pZCB0cmFjZV93YWtlX3VwKHZvaWQpOwordm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpOwogaW50IHRyYWNpbmdfb3Blbl9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0cnVjdCBkZW50cnkgKnRyYWNpbmdfaW5pdF9kZW50cnkodm9pZCk7CiB2b2lkIGluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcik7CiAKK3N0cnVjdCB0cmFjZV9lbnRyeSAqdHJhY2luZ19nZXRfdHJhY2VfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwordm9pZCB0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgaW50IHBjKTsKKwogdm9pZCBmdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgaXAsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2luZ19yZWNvcmRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKIHZvaWQgdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIsCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2Vfc3BlY2lhbChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCiAJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJICAgdW5zaWduZWQgbG9uZyBhcmczKTsKKwkJICAgdW5zaWduZWQgbG9uZyBhcmczLCBpbnQgcGMpOwogdm9pZCB0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJICAgIHVuc2lnbmVkIGxvbmcgaXAsCiAJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwKLQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIAogdm9pZCB0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKHZvaWQpOwogdm9pZCB0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQodm9pZCk7CkBAIC0yNjgsNTEgKzM2NCwzMyBAQAogZXh0ZXJuIGludCBEWU5fRlRSQUNFX1RFU1RfTkFNRSh2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01NSU9UUkFDRQotZXh0ZXJuIHZvaWQgX190cmFjZV9tbWlvdHJhY2Vfcncoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkJCXN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KTsKLWV4dGVybiB2b2lkIF9fdHJhY2VfbW1pb3RyYWNlX21hcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0JCQkJc3RydWN0IG1taW90cmFjZV9tYXAgKm1hcCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCi0jaWZkZWYgQ09ORklHX0ZUUkFDRQogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2lycXNvZmYoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJFRU1QVF9UUkFDRVIKIGV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9wcmVlbXB0b2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSVJRU09GRl9UUkFDRVIpICYmIGRlZmluZWQoQ09ORklHX1BSRUVNUFRfVFJBQ0VSKQogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3ByZWVtcHRpcnFzb2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NDSEVEX1RSQUNFUgogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3dha2V1cChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUgorZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX25vcChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKKwkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3NjaGVkX3N3aXRjaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU1BST0ZfVFJBQ0VSCiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc3lzcHJvZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwotI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgKi8KIAogZXh0ZXJuIHZvaWQgKmhlYWRfcGFnZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKTsKIGV4dGVybiBpbnQgdHJhY2Vfc2VxX3ByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCB0cmFjZV9zZXFfcHJpbnRfY29udChzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkJCSBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwogZXh0ZXJuIHNzaXplX3QgdHJhY2Vfc2VxX3RvX3VzZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJIHNpemVfdCBjbnQpOwogZXh0ZXJuIGxvbmcgbnMydXNlY3MoY3ljbGVfdCBuc2VjKTsKK2V4dGVybiBpbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWdzOwogCkBAIC0zMzQsNiArNDEyLDkgQEAKIAlUUkFDRV9JVEVSX0JMT0NLCQk9IDB4ODAsCiAJVFJBQ0VfSVRFUl9TVEFDS1RSQUNFCQk9IDB4MTAwLAogCVRSQUNFX0lURVJfU0NIRURfVFJFRQkJPSAweDIwMCwKKwlUUkFDRV9JVEVSX1BSSU5USwkJPSAweDQwMCwKIH07CiAKK2V4dGVybiBzdHJ1Y3QgdHJhY2VyIG5vcF90cmFjZTsKKwogI2VuZGlmIC8qIF9MSU5VWF9LRVJORUxfVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhNWU1MAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiByaW5nIGJ1ZmZlciBiYXNlZCBpbml0Y2FsbHMgdHJhY2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworI2luY2x1ZGUgInRyYWNlLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmJvb3RfdHJhY2U7CitzdGF0aWMgaW50IHRyYWNlX2Jvb3RfZW5hYmxlZDsKKworCisvKiBTaG91bGQgYmUgc3RhcnRlZCBhZnRlciBkb19wcmVfc21wX2luaXRjYWxscygpIGluIGluaXQvbWFpbi5jICovCit2b2lkIHN0YXJ0X2Jvb3RfdHJhY2Uodm9pZCkKK3sKKwl0cmFjZV9ib290X2VuYWJsZWQgPSAxOworfQorCit2b2lkIHN0b3BfYm9vdF90cmFjZSh2b2lkKQoreworCXRyYWNlX2Jvb3RfZW5hYmxlZCA9IDA7Cit9CisKK3ZvaWQgcmVzZXRfYm9vdF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXN0b3BfYm9vdF90cmFjZSgpOworfQorCitzdGF0aWMgdm9pZCBib290X3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpbnQgY3B1OworCWJvb3RfdHJhY2UgPSB0cjsKKworCXRyYWNlX2Jvb3RfZW5hYmxlZCA9IDA7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNwdV9wb3NzaWJsZV9tYXApCisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIGJvb3RfdHJhY2VfY3RybF91cGRhdGUoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpZiAodHItPmN0cmwpCisJCXN0YXJ0X2Jvb3RfdHJhY2UoKTsKKwllbHNlCisJCXN0b3BfYm9vdF90cmFjZSgpOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgaW5pdGNhbGxfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXN0cnVjdCB0cmFjZV9ib290ICpmaWVsZCA9IChzdHJ1Y3QgdHJhY2VfYm9vdCAqKWVudHJ5OworCXN0cnVjdCBib290X3RyYWNlICppdCA9ICZmaWVsZC0+aW5pdGNhbGw7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRpbWVzcGVjIGNhbGx0aW1lID0ga3RpbWVfdG9fdGltZXNwZWMoaXQtPmNhbGx0aW1lKTsKKwlzdHJ1Y3QgdGltZXNwZWMgcmV0dGltZSA9IGt0aW1lX3RvX3RpbWVzcGVjKGl0LT5yZXR0aW1lKTsKKworCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9CT09UKSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslNWxkLiUwOWxkXSBjYWxsaW5nICAlcyBAICVpXG4iLAorCQkJCQkgIGNhbGx0aW1lLnR2X3NlYywKKwkJCQkJICBjYWxsdGltZS50dl9uc2VjLAorCQkJCQkgIGl0LT5mdW5jLCBpdC0+Y2FsbGVyKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyU1bGQuJTA5bGRdIGluaXRjYWxsICVzICIKKwkJCQkJICAicmV0dXJuZWQgJWQgYWZ0ZXIgJWxsZCBtc2Vjc1xuIiwKKwkJCQkJICByZXR0aW1lLnR2X3NlYywKKwkJCQkJICByZXR0aW1lLnR2X25zZWMsCisJCQkJCSAgaXQtPmZ1bmMsIGl0LT5yZXN1bHQsIGl0LT5kdXJhdGlvbik7CisKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJfQorCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKK30KKworc3RydWN0IHRyYWNlciBib290X3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KK3sKKwkubmFtZQkJPSAiaW5pdGNhbGwiLAorCS5pbml0CQk9IGJvb3RfdHJhY2VfaW5pdCwKKwkucmVzZXQJCT0gcmVzZXRfYm9vdF90cmFjZSwKKwkuY3RybF91cGRhdGUJPSBib290X3RyYWNlX2N0cmxfdXBkYXRlLAorCS5wcmludF9saW5lCT0gaW5pdGNhbGxfcHJpbnRfbGluZSwKK307CisKK3ZvaWQgdHJhY2VfYm9vdChzdHJ1Y3QgYm9vdF90cmFjZSAqaXQsIGluaXRjYWxsX3QgZm4pCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfYm9vdCAqZW50cnk7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKKworCWlmICghdHJhY2VfYm9vdF9lbmFibGVkKQorCQlyZXR1cm47CisKKwkvKiBHZXQgaXRzIG5hbWUgbm93IHNpbmNlIHRoaXMgZnVuY3Rpb24gY291bGQKKwkgKiBkaXNhcHBlYXIgYmVjYXVzZSBpdCBpcyBpbiB0aGUgLmluaXQgc2VjdGlvbi4KKwkgKi8KKwlzcHJpbnRfc3ltYm9sKGl0LT5mdW5jLCAodW5zaWduZWQgbG9uZylmbik7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICZpcnFfZmxhZ3MpOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0OworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7CisJZW50cnktPmVudC50eXBlID0gVFJBQ0VfQk9PVDsKKwllbnRyeS0+aW5pdGNhbGwgPSAqaXQ7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKworCXRyYWNlX3dha2VfdXAoKTsKKworIG91dDoKKwlwcmVlbXB0X2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCmluZGV4IDMxMjE0NDguLmU5MGViMGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAl0ci0+dGltZV9zdGFydCA9IGZ0cmFjZV9ub3codHItPmNwdSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ci0+ZGF0YVtjcHVdKTsKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfZnVuY3Rpb25fdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IGVjZTZjZmIuLmE3ZGI3ZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwpAQCAtOTUsNyArOTUsNyBAQAogCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKIAogCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpCi0JCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncyk7CisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIH0KQEAgLTEzMCw2ICsxMzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGF0ZW5jeSwgdDAsIHQxOwogCWN5Y2xlX3QgVDAsIFQxLCBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwYzsKIAogCS8qCiAJICogdXNlY3MgY29udmVyc2lvbiBpcyBzbG93IHNvIHdlIHRyeSB0byBkZWxheSB0aGUgY29udmVyc2lvbgpAQCAtMTQxLDYgKzE0Miw4IEBACiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAorCXBjID0gcHJlZW1wdF9jb3VudCgpOworCiAJaWYgKCFyZXBvcnRfbGF0ZW5jeShkZWx0YSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xNTAsNyArMTUzLDcgQEAKIAlpZiAoIXJlcG9ydF9sYXRlbmN5KGRlbHRhKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogCiAJbGF0ZW5jeSA9IG5zZWNzX3RvX3VzZWNzKGRlbHRhKTsKIApAQCAtMTczLDggKzE3Niw4IEBACiBvdXQ6CiAJZGF0YS0+Y3JpdGljYWxfc2VxdWVuY2UgPSBtYXhfc2VxdWVuY2U7CiAJZGF0YS0+cHJlZW1wdF90aW1lc3RhbXAgPSBmdHJhY2Vfbm93KGNwdSk7Ci0JdHJhY2luZ19yZXNldChkYXRhKTsKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzKTsKKwl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBDQUxMRVJfQUREUjAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yMDMsMTEgKzIwNiwxMSBAQAogCWRhdGEtPmNyaXRpY2FsX3NlcXVlbmNlID0gbWF4X3NlcXVlbmNlOwogCWRhdGEtPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwogCWRhdGEtPmNyaXRpY2FsX3N0YXJ0ID0gcGFyZW50X2lwID8gOiBpcDsKLQl0cmFjaW5nX3Jlc2V0KGRhdGEpOworCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOwogCiAJcGVyX2NwdSh0cmFjaW5nX2NwdSwgY3B1KSA9IDE7CiAKQEAgLTIzNCwxNCArMjM3LDE0IEBACiAKIAlkYXRhID0gdHItPmRhdGFbY3B1XTsKIAotCWlmICh1bmxpa2VseSghZGF0YSkgfHwgdW5saWtlbHkoIWhlYWRfcGFnZShkYXRhKSkgfHwKKwlpZiAodW5saWtlbHkoIWRhdGEpIHx8CiAJICAgICFkYXRhLT5jcml0aWNhbF9zdGFydCB8fCBhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKIAlhdG9taWNfaW5jKCZkYXRhLT5kaXNhYmxlZCk7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAljaGVja19jcml0aWNhbF90aW1pbmcodHIsIGRhdGEsIHBhcmVudF9pcCA/IDogaXAsIGNwdSk7CiAJZGF0YS0+Y3JpdGljYWxfc3RhcnQgPSAwOwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYwppbmRleCBiMTNkYzE5Li5mMjg0ODQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAJdHItPnRpbWVfc3RhcnQgPSBmdHJhY2Vfbm93KHRyLT5jcHUpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXRyYWNpbmdfcmVzZXQodHItPmRhdGFbY3B1XSk7CisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1taW9fdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQpAQCAtMTMwLDEwICsxMzAsMTQgQEAKIHsKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgY250ID0gMDsKKy8qIEZJWE1FOiAqLworI2lmIDAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQljbnQgKz0gaXRlci0+b3ZlcnJ1bltjcHVdOwogCQlpdGVyLT5vdmVycnVuW2NwdV0gPSAwOwogCX0KKyNlbmRpZgorCSh2b2lkKWNwdTsKIAlyZXR1cm4gY250OwogfQogCkBAIC0xNzEsMTcgKzE3NSwyMSBAQAogCXJldHVybiAocmV0ID09IC1FQlVTWSkgPyAwIDogcmV0OwogfQogCi1zdGF0aWMgaW50IG1taW9fcHJpbnRfcncoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQorc3RhdGljIGVudW0gcHJpbnRfbGluZV90IG1taW9fcHJpbnRfcncoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IG1taW90cmFjZV9ydyAqcncJPSAmZW50cnktPm1taW9ydzsKKwlzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX3J3ICpmaWVsZDsKKwlzdHJ1Y3QgbW1pb3RyYWNlX3J3ICpydzsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzCT0gJml0ZXItPnNlcTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGVudHJ5LT50KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKIAl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOwogCXVuc2lnbmVkIHNlY3MJCT0gKHVuc2lnbmVkIGxvbmcpdDsKIAlpbnQgcmV0ID0gMTsKIAotCXN3aXRjaCAoZW50cnktPm1taW9ydy5vcGNvZGUpIHsKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCXJ3ID0gJmZpZWxkLT5ydzsKKworCXN3aXRjaCAocnctPm9wY29kZSkgewogCWNhc2UgTU1JT19SRUFEOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCiAJCQkiUiAlZCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4ICVkXG4iLApAQCAtMjA5LDIxICsyMTcsMjUgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChyZXQpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIH0KIAotc3RhdGljIGludCBtbWlvX3ByaW50X21hcChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgbW1pb19wcmludF9tYXAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IG1taW90cmFjZV9tYXAgKm0JPSAmZW50cnktPm1taW9tYXA7CisJc3RydWN0IHRyYWNlX21taW90cmFjZV9tYXAgKmZpZWxkOworCXN0cnVjdCBtbWlvdHJhY2VfbWFwICptOwogCXN0cnVjdCB0cmFjZV9zZXEgKnMJPSAmaXRlci0+c2VxOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0CT0gbnMydXNlY3MoZW50cnktPnQpOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0CT0gbnMydXNlY3MoaXRlci0+dHMpOwogCXVuc2lnbmVkIGxvbmcgdXNlY19yZW0JPSBkb19kaXYodCwgMTAwMDAwMFVMTCk7CiAJdW5zaWduZWQgc2VjcwkJPSAodW5zaWduZWQgbG9uZyl0OwotCWludCByZXQgPSAxOworCWludCByZXQ7CiAKLQlzd2l0Y2ggKGVudHJ5LT5tbWlvcncub3Bjb2RlKSB7CisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwltID0gJmZpZWxkLT5tYXA7CisKKwlzd2l0Y2ggKG0tPm9wY29kZSkgewogCWNhc2UgTU1JT19QUk9CRToKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAogCQkJIk1BUCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4IDB4JWx4ICVkXG4iLApAQCAtMjQxLDIwICsyNTMsNDMgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChyZXQpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIH0KIAotLyogcmV0dXJuIDAgdG8gYWJvcnQgcHJpbnRpbmcgd2l0aG91dCBjb25zdW1pbmcgY3VycmVudCBlbnRyeSBpbiBwaXBlIG1vZGUgKi8KLXN0YXRpYyBpbnQgbW1pb19wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBtbWlvX3ByaW50X21hcmsoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHByaW50X2VudHJ5ICpwcmludCA9IChzdHJ1Y3QgcHJpbnRfZW50cnkgKillbnRyeTsKKwljb25zdCBjaGFyICptc2cJCT0gcHJpbnQtPmJ1ZjsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzCT0gJml0ZXItPnNlcTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKKwl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOworCXVuc2lnbmVkIHNlY3MJCT0gKHVuc2lnbmVkIGxvbmcpdDsKKwlpbnQgcmV0OworCisJLyogVGhlIHRyYWlsaW5nIG5ld2xpbmUgbXVzdCBiZSBpbiB0aGUgbWVzc2FnZS4gKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJNQVJLICVsdS4lMDZsdSAlcyIsIHNlY3MsIHVzZWNfcmVtLCBtc2cpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQorCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBtbWlvX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN3aXRjaCAoaXRlci0+ZW50LT50eXBlKSB7CiAJY2FzZSBUUkFDRV9NTUlPX1JXOgogCQlyZXR1cm4gbW1pb19wcmludF9ydyhpdGVyKTsKIAljYXNlIFRSQUNFX01NSU9fTUFQOgogCQlyZXR1cm4gbW1pb19wcmludF9tYXAoaXRlcik7CisJY2FzZSBUUkFDRV9QUklOVDoKKwkJcmV0dXJuIG1taW9fcHJpbnRfbWFyayhpdGVyKTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsgLyogaWdub3JlIHVua25vd24gZW50cmllcyAqLworCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOyAvKiBpZ25vcmUgdW5rbm93biBlbnRyaWVzICovCiAJfQogfQogCkBAIC0yNzYsNiArMzExLDI3IEBACiB9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9tbWlvX3RyYWNlKTsKIAorc3RhdGljIHZvaWQgX190cmFjZV9tbWlvdHJhY2Vfcncoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAorCQkJCXN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX21taW90cmFjZV9ydyAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlldmVudAk9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICAgJmlycV9mbGFncyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcHJlZW1wdF9jb3VudCgpKTsKKwllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX01NSU9fUlc7CisJZW50cnktPnJ3CQkJPSAqcnc7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKworCXRyYWNlX3dha2VfdXAoKTsKK30KKwogdm9pZCBtbWlvX3RyYWNlX3J3KHN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBtbWlvX3RyYWNlX2FycmF5OwpAQCAtMjgzLDYgKzMzOSwyNyBAQAogCV9fdHJhY2VfbW1pb3RyYWNlX3J3KHRyLCBkYXRhLCBydyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fdHJhY2VfbW1pb3RyYWNlX21hcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCisJCQkJc3RydWN0IG1taW90cmFjZV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWV2ZW50CT0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAorCQkJCQkgICAmaXJxX2ZsYWdzKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCBwcmVlbXB0X2NvdW50KCkpOworCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfTU1JT19NQVA7CisJZW50cnktPm1hcAkJCT0gKm1hcDsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCisJdHJhY2Vfd2FrZV91cCgpOworfQorCiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBtbWlvX3RyYWNlX2FycmF5OwpAQCAtMjkzLDMgKzM3MCw4IEBACiAJX190cmFjZV9tbWlvdHJhY2VfbWFwKHRyLCBkYXRhLCBtYXApOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CisKK2ludCBtbWlvX3RyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlyZXR1cm4gdHJhY2VfdnByaW50aygwLCBmbXQsIGFyZ3MpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTJiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIG5vcCB0cmFjZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU3RldmVuIE5vb25hbiA8c3RldmVuQHVwbGlua2xhYnMubmV0PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlICJ0cmFjZS5oIgorCitzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5CSpjdHhfdHJhY2U7CisKK3N0YXRpYyB2b2lkIHN0YXJ0X25vcF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCS8qIE5vdGhpbmcgdG8gZG8hICovCit9CisKK3N0YXRpYyB2b2lkIHN0b3Bfbm9wX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJLyogTm90aGluZyB0byBkbyEgKi8KK30KKworc3RhdGljIHZvaWQgbm9wX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpbnQgY3B1OworCWN0eF90cmFjZSA9IHRyOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisKKwlpZiAodHItPmN0cmwpCisJCXN0YXJ0X25vcF90cmFjZSh0cik7Cit9CisKK3N0YXRpYyB2b2lkIG5vcF90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWlmICh0ci0+Y3RybCkKKwkJc3RvcF9ub3BfdHJhY2UodHIpOworfQorCitzdGF0aWMgdm9pZCBub3BfdHJhY2VfY3RybF91cGRhdGUoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwkvKiBXaGVuIHN0YXJ0aW5nIGEgbmV3IHRyYWNlLCByZXNldCB0aGUgYnVmZmVycyAqLworCWlmICh0ci0+Y3RybCkKKwkJc3RhcnRfbm9wX3RyYWNlKHRyKTsKKwllbHNlCisJCXN0b3Bfbm9wX3RyYWNlKHRyKTsKK30KKworc3RydWN0IHRyYWNlciBub3BfdHJhY2UgX19yZWFkX21vc3RseSA9Cit7CisJLm5hbWUJCT0gIm5vcCIsCisJLmluaXQJCT0gbm9wX3RyYWNlX2luaXQsCisJLnJlc2V0CQk9IG5vcF90cmFjZV9yZXNldCwKKwkuY3RybF91cGRhdGUJPSBub3BfdHJhY2VfY3RybF91cGRhdGUsCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAorCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfbm9wLAorI2VuZGlmCit9OworCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKaW5kZXggY2I4MTdhMi4uYjhmNTZiZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKQEAgLTE5LDE1ICsxOSwxNiBAQAogc3RhdGljIGF0b21pY190CQkJc2NoZWRfcmVmOwogCiBzdGF0aWMgdm9pZAotc2NoZWRfc3dpdGNoX2Z1bmModm9pZCAqcHJpdmF0ZSwgdm9pZCAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorcHJvYmVfc2NoZWRfc3dpdGNoKHN0cnVjdCBycSAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewotCXN0cnVjdCB0cmFjZV9hcnJheSAqKnB0ciA9IHByaXZhdGU7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICpwdHI7CiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7CiAJaW50IGNwdTsKKwlpbnQgcGM7CisKKwlpZiAoIWF0b21pY19yZWFkKCZzY2hlZF9yZWYpKQorCQlyZXR1cm47CiAKIAl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHByZXYpOwogCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUobmV4dCk7CkBAIC0zNSw5NyArMzYsNDEgQEAKIAlpZiAoIXRyYWNlcl9lbmFibGVkKQogCQlyZXR1cm47CiAKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisJZGF0YSA9IGN0eF90cmFjZS0+ZGF0YVtjcHVdOwogCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2UodHIsIGRhdGEsIHByZXYsIG5leHQsIGZsYWdzKTsKKwlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKKwkJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2UoY3R4X3RyYWNlLCBkYXRhLCBwcmV2LCBuZXh0LCBmbGFncywgcGMpOwogCi0JYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIG5vdHJhY2Ugdm9pZAotc2NoZWRfc3dpdGNoX2NhbGxiYWNrKHZvaWQgKnByb2JlX2RhdGEsIHZvaWQgKmNhbGxfZGF0YSwKLQkJICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0ICphcmdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQ7Ci0Jc3RydWN0IHJxICpfX3JxOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmc2NoZWRfcmVmKSkKLQkJcmV0dXJuOwotCi0JLyogc2tpcCBwcmV2X3BpZCAlZCBuZXh0X3BpZCAlZCBwcmV2X3N0YXRlICVsZCAqLwotCSh2b2lkKXZhX2FyZygqYXJncywgaW50KTsKLQkodm9pZCl2YV9hcmcoKmFyZ3MsIGludCk7Ci0JKHZvaWQpdmFfYXJnKCphcmdzLCBsb25nKTsKLQlfX3JxID0gdmFfYXJnKCphcmdzLCB0eXBlb2YoX19ycSkpOwotCXByZXYgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZihwcmV2KSk7Ci0JbmV4dCA9IHZhX2FyZygqYXJncywgdHlwZW9mKG5leHQpKTsKLQotCS8qCi0JICogSWYgdHJhY2VyX3N3aXRjaF9mdW5jIG9ubHkgcG9pbnRzIHRvIHRoZSBsb2NhbAotCSAqIHN3aXRjaCBmdW5jLCBpdCBzdGlsbCBuZWVkcyB0aGUgcHRyIHBhc3NlZCB0byBpdC4KLQkgKi8KLQlzY2hlZF9zd2l0Y2hfZnVuYyhwcm9iZV9kYXRhLCBfX3JxLCBwcmV2LCBuZXh0KTsKLX0KLQogc3RhdGljIHZvaWQKLXdha2V1cF9mdW5jKHZvaWQgKnByaXZhdGUsIHZvaWQgKl9fcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsIHN0cnVjdAotCQkJdGFza19zdHJ1Y3QgKmN1cnIpCitwcm9iZV9zY2hlZF93YWtldXAoc3RydWN0IHJxICpfX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VlKQogewotCXN0cnVjdCB0cmFjZV9hcnJheSAqKnB0ciA9IHByaXZhdGU7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICpwdHI7CiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IGNwdTsKKwlpbnQgY3B1LCBwYzsKIAotCWlmICghdHJhY2VyX2VuYWJsZWQpCisJaWYgKCFsaWtlbHkodHJhY2VyX2VuYWJsZWQpKQogCQlyZXR1cm47CiAKLQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnIpOworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisJZGF0YSA9IGN0eF90cmFjZS0+ZGF0YVtjcHVdOwogCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKLQkJdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2UodHIsIGRhdGEsIHdha2VlLCBjdXJyLCBmbGFncyk7CisJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCisJCXRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKGN0eF90cmFjZSwgZGF0YSwgd2FrZWUsIGN1cnJlbnQsCisJCQkJCSAgIGZsYWdzLCBwYyk7CiAKLQlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgbm90cmFjZSB2b2lkCi13YWtlX3VwX2NhbGxiYWNrKHZvaWQgKnByb2JlX2RhdGEsIHZvaWQgKmNhbGxfZGF0YSwKLQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnI7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBycSAqX19ycTsKLQotCWlmIChsaWtlbHkoIXRyYWNlcl9lbmFibGVkKSkKLQkJcmV0dXJuOwotCi0JLyogU2tpcCBwaWQgJWQgc3RhdGUgJWxkICovCi0JKHZvaWQpdmFfYXJnKCphcmdzLCBpbnQpOwotCSh2b2lkKXZhX2FyZygqYXJncywgbG9uZyk7Ci0JLyogbm93IGdldCB0aGUgbWVhdDogInJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiICovCi0JX19ycSA9IHZhX2FyZygqYXJncywgdHlwZW9mKF9fcnEpKTsKLQl0YXNrID0gdmFfYXJnKCphcmdzLCB0eXBlb2YodGFzaykpOwotCWN1cnIgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZihjdXJyKSk7Ci0KLQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHRhc2spOwotCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3Vycik7Ci0KLQl3YWtldXBfZnVuYyhwcm9iZV9kYXRhLCBfX3JxLCB0YXNrLCBjdXJyKTsKLX0KLQogc3RhdGljIHZvaWQgc2NoZWRfc3dpdGNoX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJaW50IGNwdTsKQEAgLTEzMyw2NyArNzgsNDcgQEAKIAl0ci0+dGltZV9zdGFydCA9IGZ0cmFjZV9ub3codHItPmNwdSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ci0+ZGF0YVtjcHVdKTsKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIH0KIAogc3RhdGljIGludCB0cmFjaW5nX3NjaGVkX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkicGlkICVkIHN0YXRlICVsZCAjIyBycSAlcCB0YXNrICVwIHJxLT5jdXJyICVwIiwKLQkJCXdha2VfdXBfY2FsbGJhY2ssCi0JCQkmY3R4X3RyYWNlKTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9zY2hlZF93YWtldXAocHJvYmVfc2NoZWRfd2FrZXVwKTsKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygid2FrZXVwIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfd2FrZXVwXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXBfbmV3IiwKLQkJCSJwaWQgJWQgc3RhdGUgJWxkICMjIHJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiLAotCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCSZjdHhfdHJhY2UpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfc2NoZWRfd2FrZXVwKTsKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygid2FrZXVwIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfd2FrZXVwX25ld1xuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlOwogCX0KIAotCXJldCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcigia2VybmVsX3NjaGVkX3NjaGVkdWxlIiwKLQkJInByZXZfcGlkICVkIG5leHRfcGlkICVkIHByZXZfc3RhdGUgJWxkICIKLQkJIiMjIHJxICVwIHByZXYgJXAgbmV4dCAlcCIsCi0JCXNjaGVkX3N3aXRjaF9jYWxsYmFjaywKLQkJJmN0eF90cmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3NjaGVkX3N3aXRjaCk7CiAJaWYgKHJldCkgewotCQlwcl9pbmZvKCJzY2hlZCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygic2NoZWQgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCiAJCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zY2hlZHVsZVxuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlX3dha2VfbmV3OwogCX0KIAogCXJldHVybiByZXQ7CiBmYWlsX2RlcHJvYmVfd2FrZV9uZXc6Ci0JbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXBfbmV3IiwKLQkJCQl3YWtlX3VwX2NhbGxiYWNrLAotCQkJCSZjdHhfdHJhY2UpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwX25ldyhwcm9iZV9zY2hlZF93YWtldXApOwogZmFpbF9kZXByb2JlOgotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwIiwKLQkJCQl3YWtlX3VwX2NhbGxiYWNrLAotCQkJCSZjdHhfdHJhY2UpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3NjaGVkX3dha2V1cCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdHJhY2luZ19zY2hlZF91bnJlZ2lzdGVyKHZvaWQpCiB7Ci0JbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoImtlcm5lbF9zY2hlZF9zY2hlZHVsZSIsCi0JCQkJc2NoZWRfc3dpdGNoX2NhbGxiYWNrLAotCQkJCSZjdHhfdHJhY2UpOwotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwX25ldyIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmY3R4X3RyYWNlKTsKLQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmY3R4X3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV9zY2hlZF9zd2l0Y2gpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwX25ldyhwcm9iZV9zY2hlZF93YWtldXApOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3NjaGVkX3dha2V1cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggZTMwM2NjYi4uZmU0YTI1MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCkBAIC00NCwxMCArNDQsMTIgQEAKIAlsb25nIGRpc2FibGVkOwogCWludCByZXNjaGVkOwogCWludCBjcHU7CisJaW50IHBjOwogCiAJaWYgKGxpa2VseSghd2FrZXVwX3Rhc2spKQogCQlyZXR1cm47CiAKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKIAlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7CiAJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIApAQCAtNzAsNyArNzIsNyBAQAogCWlmICh0YXNrX2NwdSh3YWtldXBfdGFzaykgIT0gY3B1KQogCQlnb3RvIHVubG9jazsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiAKICB1bmxvY2s6CiAJX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKQEAgLTExMiwxNyArMTE0LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIG5vdHJhY2UKLXdha2V1cF9zY2hlZF9zd2l0Y2godm9pZCAqcHJpdmF0ZSwgdm9pZCAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKK3Byb2JlX3dha2V1cF9zY2hlZF9zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKIAl1bnNpZ25lZCBsb25nIGxhdGVuY3kgPSAwLCB0MCA9IDAsIHQxID0gMDsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKipwdHIgPSBwcml2YXRlOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAqcHRyOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJY3ljbGVfdCBUMCwgVDEsIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBkaXNhYmxlZDsKIAlpbnQgY3B1OworCWludCBwYzsKKworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUocHJldik7CiAKIAlpZiAodW5saWtlbHkoIXRyYWNlcl9lbmFibGVkKSkKIAkJcmV0dXJuOwpAQCAtMTM5LDEyICsxNDIsMTQgQEAKIAlpZiAobmV4dCAhPSB3YWtldXBfdGFzaykKIAkJcmV0dXJuOwogCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKIAkvKiBUaGUgdGFzayB3ZSBhcmUgd2FpdGluZyBmb3IgaXMgd2FraW5nIHVwICovCi0JZGF0YSA9IHRyLT5kYXRhW3dha2V1cF9jcHVdOworCWRhdGEgPSB3YWtldXBfdHJhY2UtPmRhdGFbd2FrZXVwX2NwdV07CiAKIAkvKiBkaXNhYmxlIGxvY2FsIGRhdGEsIG5vdCB3YWtldXBfY3B1IGRhdGEgKi8KIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZ3YWtldXBfdHJhY2UtPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwogCWlmIChsaWtlbHkoZGlzYWJsZWQgIT0gMSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xNTUsNyArMTYwLDcgQEAKIAlpZiAodW5saWtlbHkoIXRyYWNlcl9lbmFibGVkIHx8IG5leHQgIT0gd2FrZXVwX3Rhc2spKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgQ0FMTEVSX0FERFIxLCBDQUxMRVJfQUREUjIsIGZsYWdzKTsKKwl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIGRhdGEsIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOwogCiAJLyoKIAkgKiB1c2VjcyBjb252ZXJzaW9uIGlzIHNsb3cgc28gd2UgdHJ5IHRvIGRlbGF5IHRoZSBjb252ZXJzaW9uCkBAIC0xNzQsMzkgKzE3OSwxNCBAQAogCXQwID0gbnNlY3NfdG9fdXNlY3MoVDApOwogCXQxID0gbnNlY3NfdG9fdXNlY3MoVDEpOwogCi0JdXBkYXRlX21heF90cih0ciwgd2FrZXVwX3Rhc2ssIHdha2V1cF9jcHUpOworCXVwZGF0ZV9tYXhfdHIod2FrZXVwX3RyYWNlLCB3YWtldXBfdGFzaywgd2FrZXVwX2NwdSk7CiAKIG91dF91bmxvY2s6Ci0JX193YWtldXBfcmVzZXQodHIpOworCV9fd2FrZXVwX3Jlc2V0KHdha2V1cF90cmFjZSk7CiAJX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiBvdXQ6Ci0JYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwotfQotCi1zdGF0aWMgbm90cmFjZSB2b2lkCi1zY2hlZF9zd2l0Y2hfY2FsbGJhY2sodm9pZCAqcHJvYmVfZGF0YSwgdm9pZCAqY2FsbF9kYXRhLAotCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgKmFyZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dDsKLQlzdHJ1Y3QgcnEgKl9fcnE7Ci0KLQkvKiBza2lwIHByZXZfcGlkICVkIG5leHRfcGlkICVkIHByZXZfc3RhdGUgJWxkICovCi0JKHZvaWQpdmFfYXJnKCphcmdzLCBpbnQpOwotCSh2b2lkKXZhX2FyZygqYXJncywgaW50KTsKLQkodm9pZCl2YV9hcmcoKmFyZ3MsIGxvbmcpOwotCV9fcnEgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZihfX3JxKSk7Ci0JcHJldiA9IHZhX2FyZygqYXJncywgdHlwZW9mKHByZXYpKTsKLQluZXh0ID0gdmFfYXJnKCphcmdzLCB0eXBlb2YobmV4dCkpOwotCi0JdHJhY2luZ19yZWNvcmRfY21kbGluZShwcmV2KTsKLQotCS8qCi0JICogSWYgdHJhY2VyX3N3aXRjaF9mdW5jIG9ubHkgcG9pbnRzIHRvIHRoZSBsb2NhbAotCSAqIHN3aXRjaCBmdW5jLCBpdCBzdGlsbCBuZWVkcyB0aGUgcHRyIHBhc3NlZCB0byBpdC4KLQkgKi8KLQl3YWtldXBfc2NoZWRfc3dpdGNoKHByb2JlX2RhdGEsIF9fcnEsIHByZXYsIG5leHQpOworCWF0b21pY19kZWMoJndha2V1cF90cmFjZS0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fd2FrZXVwX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCkBAIC0yMTYsNyArMTk2LDcgQEAKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0JCXRyYWNpbmdfcmVzZXQoZGF0YSk7CisJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiAJfQogCiAJd2FrZXVwX2NwdSA9IC0xOwpAQCAtMjQwLDE5ICsyMjAsMjYgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdha2V1cF9jaGVja19zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3Byb2JlX3dha2V1cChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7CisJaW50IHBjOworCisJaWYgKGxpa2VseSghdHJhY2VyX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHApOworCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CiAKIAlpZiAobGlrZWx5KCFydF90YXNrKHApKSB8fAogCQkJcC0+cHJpbyA+PSB3YWtldXBfcHJpbyB8fAotCQkJcC0+cHJpbyA+PSBjdXJyLT5wcmlvKQorCQkJcC0+cHJpbyA+PSBjdXJyZW50LT5wcmlvKQogCQlyZXR1cm47CiAKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmd2FrZXVwX3RyYWNlLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIAlpZiAodW5saWtlbHkoZGlzYWJsZWQgIT0gMSkpCiAJCWdvdG8gb3V0OwogCkBAIC0yNjQsNyArMjUxLDcgQEAKIAkJZ290byBvdXRfbG9ja2VkOwogCiAJLyogcmVzZXQgdGhlIHRyYWNlICovCi0JX193YWtldXBfcmVzZXQodHIpOworCV9fd2FrZXVwX3Jlc2V0KHdha2V1cF90cmFjZSk7CiAKIAl3YWtldXBfY3B1ID0gdGFza19jcHUocCk7CiAJd2FrZXVwX3ByaW8gPSBwLT5wcmlvOwpAQCAtMjc0LDc0ICsyNjEsMzcgQEAKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCi0JdHItPmRhdGFbd2FrZXVwX2NwdV0tPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwotCXRyYWNlX2Z1bmN0aW9uKHRyLCB0ci0+ZGF0YVt3YWtldXBfY3B1XSwKLQkJICAgICAgIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncyk7CisJd2FrZXVwX3RyYWNlLT5kYXRhW3dha2V1cF9jcHVdLT5wcmVlbXB0X3RpbWVzdGFtcCA9IGZ0cmFjZV9ub3coY3B1KTsKKwl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIHdha2V1cF90cmFjZS0+ZGF0YVt3YWtldXBfY3B1XSwKKwkJICAgICAgIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOwogCiBvdXRfbG9ja2VkOgogCV9fcmF3X3NwaW5fdW5sb2NrKCZ3YWtldXBfbG9jayk7CiBvdXQ6Ci0JYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwotfQotCi1zdGF0aWMgbm90cmFjZSB2b2lkCi13YWtlX3VwX2NhbGxiYWNrKHZvaWQgKnByb2JlX2RhdGEsIHZvaWQgKmNhbGxfZGF0YSwKLQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKipwdHIgPSBwcm9iZV9kYXRhOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAqcHRyOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0Jc3RydWN0IHJxICpfX3JxOwotCi0JaWYgKGxpa2VseSghdHJhY2VyX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0KLQkvKiBTa2lwIHBpZCAlZCBzdGF0ZSAlbGQgKi8KLQkodm9pZCl2YV9hcmcoKmFyZ3MsIGludCk7Ci0JKHZvaWQpdmFfYXJnKCphcmdzLCBsb25nKTsKLQkvKiBub3cgZ2V0IHRoZSBtZWF0OiAicnEgJXAgdGFzayAlcCBycS0+Y3VyciAlcCIgKi8KLQlfX3JxID0gdmFfYXJnKCphcmdzLCB0eXBlb2YoX19ycSkpOwotCXRhc2sgPSB2YV9hcmcoKmFyZ3MsIHR5cGVvZih0YXNrKSk7Ci0JY3VyciA9IHZhX2FyZygqYXJncywgdHlwZW9mKGN1cnIpKTsKLQotCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUodGFzayk7Ci0JdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyKTsKLQotCXdha2V1cF9jaGVja19zdGFydCh0ciwgdGFzaywgY3Vycik7CisJYXRvbWljX2RlYygmd2FrZXVwX3RyYWNlLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfd2FrZXVwX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXAiLAotCQkJInBpZCAlZCBzdGF0ZSAlbGQgIyMgcnEgJXAgdGFzayAlcCBycS0+Y3VyciAlcCIsCi0JCQl3YWtlX3VwX2NhbGxiYWNrLAotCQkJJndha2V1cF90cmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3dha2V1cCk7CiAJaWYgKHJldCkgewotCQlwcl9pbmZvKCJ3YWtldXAgdHJhY2U6IENvdWxkbid0IGFkZCBtYXJrZXIiCisJCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKIAkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3dha2V1cFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIoImtlcm5lbF9zY2hlZF93YWtldXBfbmV3IiwKLQkJCSJwaWQgJWQgc3RhdGUgJWxkICMjIHJxICVwIHRhc2sgJXAgcnEtPmN1cnIgJXAiLAotCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCSZ3YWtldXBfdHJhY2UpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKIAlpZiAocmV0KSB7Ci0JCXByX2luZm8oIndha2V1cCB0cmFjZTogQ291bGRuJ3QgYWRkIG1hcmtlciIKKwkJcHJfaW5mbygid2FrZXVwIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfd2FrZXVwX25ld1xuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlOwogCX0KIAotCXJldCA9IG1hcmtlcl9wcm9iZV9yZWdpc3Rlcigia2VybmVsX3NjaGVkX3NjaGVkdWxlIiwKLQkJInByZXZfcGlkICVkIG5leHRfcGlkICVkIHByZXZfc3RhdGUgJWxkICIKLQkJIiMjIHJxICVwIHByZXYgJXAgbmV4dCAlcCIsCi0JCXNjaGVkX3N3aXRjaF9jYWxsYmFjaywKLQkJJndha2V1cF90cmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3dha2V1cF9zY2hlZF9zd2l0Y2gpOwogCWlmIChyZXQpIHsKLQkJcHJfaW5mbygic2NoZWQgdHJhY2U6IENvdWxkbid0IGFkZCBtYXJrZXIiCisJCXByX2luZm8oInNjaGVkIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgogCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc2NoZWR1bGVcbiIpOwogCQlnb3RvIGZhaWxfZGVwcm9iZV93YWtlX25ldzsKIAl9CkBAIC0zNjMsMjggKzMxMywxOCBAQAogCiAJcmV0dXJuOwogZmFpbF9kZXByb2JlX3dha2VfbmV3OgotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwX25ldyIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKIGZhaWxfZGVwcm9iZToKLQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChwcm9iZV93YWtldXApOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX3dha2V1cF90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDA7CiAJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7Ci0JbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoImtlcm5lbF9zY2hlZF9zY2hlZHVsZSIsCi0JCQkJc2NoZWRfc3dpdGNoX2NhbGxiYWNrLAotCQkJCSZ3YWtldXBfdHJhY2UpOwotCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKCJrZXJuZWxfc2NoZWRfd2FrZXVwX25ldyIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKLQltYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcigia2VybmVsX3NjaGVkX3dha2V1cCIsCi0JCQkJd2FrZV91cF9jYWxsYmFjaywKLQkJCQkmd2FrZXVwX3RyYWNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV93YWtldXBfc2NoZWRfc3dpdGNoKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChwcm9iZV93YWtldXApOwogfQogCiBzdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKaW5kZXggMDkxMWI3ZS4uMDljZjIzMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKQEAgLTksNjUgKzksMjkgQEAKIAljYXNlIFRSQUNFX0ZOOgogCWNhc2UgVFJBQ0VfQ1RYOgogCWNhc2UgVFJBQ0VfV0FLRToKKwljYXNlIFRSQUNFX0NPTlQ6CiAJY2FzZSBUUkFDRV9TVEFDSzoKKwljYXNlIFRSQUNFX1BSSU5UOgogCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci10cmFjZV90ZXN0X2J1ZmZlcl9jcHUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSkKK3N0YXRpYyBpbnQgdHJhY2VfdGVzdF9idWZmZXJfY3B1KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpCiB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyaWVzOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBpZHggPSAwOwotCWludCBpOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKIAotCUJVR19PTihsaXN0X2VtcHR5KCZkYXRhLT50cmFjZV9wYWdlcykpOwotCXBhZ2UgPSBsaXN0X2VudHJ5KGRhdGEtPnRyYWNlX3BhZ2VzLm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCWVudHJpZXMgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJd2hpbGUgKChldmVudCA9IHJpbmdfYnVmZmVyX2NvbnN1bWUodHItPmJ1ZmZlciwgY3B1LCBOVUxMKSkpIHsKKwkJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAotCWNoZWNrX3BhZ2VzKGRhdGEpOwotCWlmIChoZWFkX3BhZ2UoZGF0YSkgIT0gZW50cmllcykKLQkJZ290byBmYWlsZWQ7Ci0KLQkvKgotCSAqIFRoZSBzdGFydGluZyB0cmFjZSBidWZmZXIgYWx3YXlzIGhhcyB2YWxpZCBlbGVtZW50cywKLQkgKiBpZiBhbnkgZWxlbWVudCBleGlzdHMuCi0JICovCi0JZW50cmllcyA9IGhlYWRfcGFnZShkYXRhKTsKLQotCWZvciAoaSA9IDA7IGkgPCB0ci0+ZW50cmllczsgaSsrKSB7Ci0KLQkJaWYgKGkgPCBkYXRhLT50cmFjZV9pZHggJiYgIXRyYWNlX3ZhbGlkX2VudHJ5KCZlbnRyaWVzW2lkeF0pKSB7CisJCWlmICghdHJhY2VfdmFsaWRfZW50cnkoZW50cnkpKSB7CiAJCQlwcmludGsoS0VSTl9DT05UICIuLiBpbnZhbGlkIGVudHJ5ICVkICIsCi0JCQkJZW50cmllc1tpZHhdLnR5cGUpOworCQkJCWVudHJ5LT50eXBlKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9Ci0KLQkJaWR4Kys7Ci0JCWlmIChpZHggPj0gRU5UUklFU19QRVJfUEFHRSkgewotCQkJcGFnZSA9IHZpcnRfdG9fcGFnZShlbnRyaWVzKTsKLQkJCWlmIChwYWdlLT5scnUubmV4dCA9PSAmZGF0YS0+dHJhY2VfcGFnZXMpIHsKLQkJCQlpZiAoaSAhPSB0ci0+ZW50cmllcyAtIDEpIHsKLQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gZW50cmllcyBidWZmZXIgbWlzbWF0Y2giKTsKLQkJCQkJZ290byBmYWlsZWQ7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlLT5scnUubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7Ci0JCQkJZW50cmllcyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQkJCX0KLQkJCWlkeCA9IDA7Ci0JCX0KIAl9Ci0KLQlwYWdlID0gdmlydF90b19wYWdlKGVudHJpZXMpOwotCWlmIChwYWdlLT5scnUubmV4dCAhPSAmZGF0YS0+dHJhY2VfcGFnZXMpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gdG9vIG1hbnkgZW50cmllcyIpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogIGZhaWxlZDoKQEAgLTg5LDEzICs1MywxMSBAQAogCS8qIERvbid0IGFsbG93IGZsaXBwaW5nIG9mIG1heCB0cmFjZXMgbm93ICovCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX3Jhd19zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CisKKwljbnQgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKHRyLT5idWZmZXIpOworCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpZiAoIWhlYWRfcGFnZSh0ci0+ZGF0YVtjcHVdKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNudCArPSB0ci0+ZGF0YVtjcHVdLT50cmFjZV9pZHg7Ci0KLQkJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXJfY3B1KHRyLCB0ci0+ZGF0YVtjcHVdKTsKKwkJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXJfY3B1KHRyLCBjcHUpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJfQpAQCAtMTIwLDExICs4MiwxMSBAQAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkJCQkgICBpbnQgKCpmdW5jKSh2b2lkKSkKIHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7CiAJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZDsKIAlpbnQgc2F2ZV90cmFjZXJfZW5hYmxlZCA9IHRyYWNlcl9lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJY2hhciAqZnVuY19uYW1lOworCWludCByZXQ7CiAKIAkvKiBUaGUgZnRyYWNlIHRlc3QgUEFTU0VEICovCiAJcHJpbnRrKEtFUk5fQ09OVCAiUEFTU0VEXG4iKTsKQEAgLTE1Nyw2ICsxMTksNyBAQAogCS8qIGVuYWJsZSB0cmFjaW5nICovCiAJdHItPmN0cmwgPSAxOwogCXRyYWNlLT5pbml0KHRyKTsKKwogCS8qIFNsZWVwIGZvciBhIDEvMTAgb2YgYSBzZWNvbmQgKi8KIAltc2xlZXAoMTAwKTsKIApAQCAtMjEyLDEwICsxNzUsMTAgQEAKIGludAogdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7CiAJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZDsKIAlpbnQgc2F2ZV90cmFjZXJfZW5hYmxlZCA9IHRyYWNlcl9lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJaW50IHJldDsKIAogCS8qIG1ha2Ugc3VyZSBtc2xlZXAgaGFzIGJlZW4gcmVjb3JkZWQgKi8KIAltc2xlZXAoMSk7CkBAIC00MTUsNiArMzc4LDE1IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0lSUVNPRkZfVFJBQ0VSICYmIENPTkZJR19QUkVFTVBUX1RSQUNFUiAqLwogCisjaWZkZWYgQ09ORklHX05PUF9UUkFDRVIKK2ludAordHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9ub3Aoc3RydWN0IHRyYWNlciAqdHJhY2UsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJLyogV2hhdCBjb3VsZCBwb3NzaWJseSBnbyB3cm9uZz8gKi8KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NDSEVEX1RSQUNFUgogc3RhdGljIGludCB0cmFjZV93YWtldXBfdGVzdF90aHJlYWQodm9pZCAqZGF0YSkKIHsKQEAgLTQ4Niw2ICs0NTgsOSBAQAogCiAJd2FrZV91cF9wcm9jZXNzKHApOwogCisJLyogZ2l2ZSBhIGxpdHRsZSB0aW1lIHRvIGxldCB0aGUgdGhyZWFkIHdha2UgdXAgKi8KKwltc2xlZXAoMTAwKTsKKwogCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCiAJdHItPmN0cmwgPSAwOwogCXRyYWNlLT5jdHJsX3VwZGF0ZSh0cik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzVkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlICJ0cmFjZS5oIgorCisjZGVmaW5lIFNUQUNLX1RSQUNFX0VOVFJJRVMgNTAwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWNrX2R1bXBfdHJhY2VbU1RBQ0tfVFJBQ0VfRU5UUklFUysxXSA9CisJIHsgWzAgLi4uIChTVEFDS19UUkFDRV9FTlRSSUVTKV0gPSBVTE9OR19NQVggfTsKK3N0YXRpYyB1bnNpZ25lZCBzdGFja19kdW1wX2luZGV4W1NUQUNLX1RSQUNFX0VOVFJJRVNdOworCitzdGF0aWMgc3RydWN0IHN0YWNrX3RyYWNlIG1heF9zdGFja190cmFjZSA9IHsKKwkubWF4X2VudHJpZXMJCT0gU1RBQ0tfVFJBQ0VfRU5UUklFUywKKwkuZW50cmllcwkJPSBzdGFja19kdW1wX3RyYWNlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3N0YWNrX3NpemU7CitzdGF0aWMgcmF3X3NwaW5sb2NrX3QgbWF4X3N0YWNrX2xvY2sgPQorCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0YXRpYyBpbnQgc3RhY2tfdHJhY2VfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHRyYWNlX2FjdGl2ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19zdGFjayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGhpc19zaXplLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nICpwLCAqdG9wLCAqc3RhcnQ7CisJaW50IGk7CisKKwl0aGlzX3NpemUgPSAoKHVuc2lnbmVkIGxvbmcpJnRoaXNfc2l6ZSkgJiAoVEhSRUFEX1NJWkUtMSk7CisJdGhpc19zaXplID0gVEhSRUFEX1NJWkUgLSB0aGlzX3NpemU7CisKKwlpZiAodGhpc19zaXplIDw9IG1heF9zdGFja19zaXplKQorCQlyZXR1cm47CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOworCisJLyogYSByYWNlIGNvdWxkIGhhdmUgYWxyZWFkeSB1cGRhdGVkIGl0ICovCisJaWYgKHRoaXNfc2l6ZSA8PSBtYXhfc3RhY2tfc2l6ZSkKKwkJZ290byBvdXQ7CisKKwltYXhfc3RhY2tfc2l6ZSA9IHRoaXNfc2l6ZTsKKworCW1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzCT0gMDsKKwltYXhfc3RhY2tfdHJhY2Uuc2tpcAkJPSAzOworCisJc2F2ZV9zdGFja190cmFjZSgmbWF4X3N0YWNrX3RyYWNlKTsKKworCS8qCisJICogTm93IGZpbmQgd2hlcmUgaW4gdGhlIHN0YWNrIHRoZXNlIGFyZS4KKwkgKi8KKwlpID0gMDsKKwlzdGFydCA9ICZ0aGlzX3NpemU7CisJdG9wID0gKHVuc2lnbmVkIGxvbmcgKikKKwkJKCgodW5zaWduZWQgbG9uZylzdGFydCAmIH4oVEhSRUFEX1NJWkUtMSkpICsgVEhSRUFEX1NJWkUpOworCisJLyoKKwkgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBlbnRyaWVzLiBPbmUgb2YgdGhlIGVudHJpZXMgbWF5CisJICogZm9yIHNvbWUgcmVhc29uIGJlIG1pc3NlZCBvbiB0aGUgc3RhY2ssIHNvIHdlIG1heQorCSAqIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhlbS4gSWYgdGhleSBhcmUgYWxsIHRoZXJlLCB0aGlzCisJICogbG9vcCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UuIFRoaXMgY29kZSBvbmx5IHRha2VzIHBsYWNlCisJICogb24gYSBuZXcgbWF4LCBzbyBpdCBpcyBmYXIgZnJvbSBhIGZhc3QgcGF0aC4KKwkgKi8KKwl3aGlsZSAoaSA8IG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzKSB7CisKKwkJc3RhY2tfZHVtcF9pbmRleFtpXSA9IHRoaXNfc2l6ZTsKKwkJcCA9IHN0YXJ0OworCisJCWZvciAoOyBwIDwgdG9wICYmIGkgPCBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllczsgcCsrKSB7CisJCQlpZiAoKnAgPT0gc3RhY2tfZHVtcF90cmFjZVtpXSkgeworCQkJCXRoaXNfc2l6ZSA9IHN0YWNrX2R1bXBfaW5kZXhbaSsrXSA9CisJCQkJCSh0b3AgLSBwKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJCQkvKiBTdGFydCB0aGUgc2VhcmNoIGZyb20gaGVyZSAqLworCQkJCXN0YXJ0ID0gcCArIDE7CisJCQl9CisJCX0KKworCQlpKys7CisJfQorCisgb3V0OgorCV9fcmF3X3NwaW5fdW5sb2NrKCZtYXhfc3RhY2tfbG9jayk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3N0YWNrX3RyYWNlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCit7CisJaW50IGNwdSwgcmVzY2hlZDsKKworCWlmICh1bmxpa2VseSghZnRyYWNlX2VuYWJsZWQgfHwgc3RhY2tfdHJhY2VfZGlzYWJsZWQpKQorCQlyZXR1cm47CisKKwlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJLyogbm8gYXRvbWljIG5lZWRlZCwgd2Ugb25seSBtb2RpZnkgdGhpcyB2YXJpYWJsZSBieSB0aGlzIGNwdSAqLworCWlmIChwZXJfY3B1KHRyYWNlX2FjdGl2ZSwgY3B1KSsrICE9IDApCisJCWdvdG8gb3V0OworCisJY2hlY2tfc3RhY2soKTsKKworIG91dDoKKwlwZXJfY3B1KHRyYWNlX2FjdGl2ZSwgY3B1KS0tOworCS8qIHByZXZlbnQgcmVjdXJzaW9uIGluIHNjaGVkdWxlICovCisJaWYgKHJlc2NoZWQpCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOworCWVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQoreworCS5mdW5jID0gc3RhY2tfdHJhY2VfY2FsbCwKK307CisKK3N0YXRpYyBzc2l6ZV90CitzdGFja19tYXhfc2l6ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls2NF07CisJaW50IHI7CisKKwlyID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVsZFxuIiwgKnB0cik7CisJaWYgKHIgPiBzaXplb2YoYnVmKSkKKwkJciA9IHNpemVvZihidWYpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgYnVmLCByKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0YWNrX21heF9zaXplX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlsb25nICpwdHIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOworCWNoYXIgYnVmWzY0XTsKKwlpbnQgcmV0OworCisJaWYgKGNvdW50ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NvdW50XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfc3Bpbl9sb2NrKCZtYXhfc3RhY2tfbG9jayk7CisJKnB0ciA9IHZhbDsKKwlfX3Jhd19zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX21heF9zaXplX2ZvcHMgPSB7CisJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQJCT0gc3RhY2tfbWF4X3NpemVfcmVhZCwKKwkud3JpdGUJCT0gc3RhY2tfbWF4X3NpemVfd3JpdGUsCit9OworCitzdGF0aWMgdm9pZCAqCit0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlsb25nIGkgPSAobG9uZyltLT5wcml2YXRlOworCisJKCpwb3MpKys7CisKKwlpKys7CisKKwlpZiAoaSA+PSBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllcyB8fAorCSAgICBzdGFja19kdW1wX3RyYWNlW2ldID09IFVMT05HX01BWCkKKwkJcmV0dXJuIE5VTEw7CisKKwltLT5wcml2YXRlID0gKHZvaWQgKilpOworCisJcmV0dXJuICZtLT5wcml2YXRlOworfQorCitzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXZvaWQgKnQgPSAmbS0+cHJpdmF0ZTsKKwlsb2ZmX3QgbCA9IDA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCV9fcmF3X3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOworCisJZm9yICg7IHQgJiYgbCA8ICpwb3M7IHQgPSB0X25leHQobSwgdCwgJmwpKQorCQk7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKKwlfX3Jhd19zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGludCB0cmFjZV9sb29rdXBfc3RhY2soc3RydWN0IHNlcV9maWxlICptLCBsb25nIGkpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhY2tfZHVtcF90cmFjZVtpXTsKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCisJc3ByaW50X3N5bWJvbChzdHIsIGFkZHIpOworCisJcmV0dXJuIHNlcV9wcmludGYobSwgIiVzXG4iLCBzdHIpOworI2Vsc2UKKwlyZXR1cm4gc2VxX3ByaW50ZihtLCAiJXBcbiIsICh2b2lkKilhZGRyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJbG9uZyBpID0gKihsb25nICopdjsKKwlpbnQgc2l6ZTsKKworCWlmIChpIDwgMCkgeworCQlzZXFfcHJpbnRmKG0sICIgICAgICAgIERlcHRoICAgU2l6ZSAgICAgIExvY2F0aW9uIgorCQkJICAgIiAgICAoJWQgZW50cmllcylcbiIKKwkJCSAgICIgICAgICAgIC0tLS0tICAgLS0tLSAgICAgIC0tLS0tLS0tXG4iLAorCQkJICAgbWF4X3N0YWNrX3RyYWNlLm5yX2VudHJpZXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaSA+PSBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllcyB8fAorCSAgICBzdGFja19kdW1wX3RyYWNlW2ldID09IFVMT05HX01BWCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaSsxID09IG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzIHx8CisJICAgIHN0YWNrX2R1bXBfdHJhY2VbaSsxXSA9PSBVTE9OR19NQVgpCisJCXNpemUgPSBzdGFja19kdW1wX2luZGV4W2ldOworCWVsc2UKKwkJc2l6ZSA9IHN0YWNrX2R1bXBfaW5kZXhbaV0gLSBzdGFja19kdW1wX2luZGV4W2krMV07CisKKwlzZXFfcHJpbnRmKG0sICIlM2xkKSAlOGQgICAlNWQgICAiLCBpLCBzdGFja19kdW1wX2luZGV4W2ldLCBzaXplKTsKKworCXRyYWNlX2xvb2t1cF9zdGFjayhtLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX3RyYWNlX3NlcV9vcHMgPSB7CisJLnN0YXJ0CQk9IHRfc3RhcnQsCisJLm5leHQJCT0gdF9uZXh0LAorCS5zdG9wCQk9IHRfc3RvcCwKKwkuc2hvdwkJPSB0X3Nob3csCit9OworCitzdGF0aWMgaW50IHN0YWNrX3RyYWNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZzdGFja190cmFjZV9zZXFfb3BzKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCW0tPnByaXZhdGUgPSAodm9pZCAqKS0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX3RyYWNlX2ZvcHMgPSB7CisJLm9wZW4JCT0gc3RhY2tfdHJhY2Vfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKK307CisKK3N0YXRpYyBfX2luaXQgaW50IHN0YWNrX3RyYWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGFja19tYXhfc2l6ZSIsIDA2NDQsIGRfdHJhY2VyLAorCQkJCSAgICAmbWF4X3N0YWNrX3NpemUsICZzdGFja19tYXhfc2l6ZV9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3N0YWNrX21heF9zaXplJyBlbnRyeVxuIik7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YWNrX3RyYWNlIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkJICAgIE5VTEwsICZzdGFja190cmFjZV9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3N0YWNrX3RyYWNlJyBlbnRyeVxuIik7CisKKwlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHN0YWNrX3RyYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKaW5kZXggZGI1OGZiNi4uOTU4N2QzYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl0ci0+dGltZV9zdGFydCA9IGZ0cmFjZV9ub3codHItPmNwdSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ci0+ZGF0YVtjcHVdKTsKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfc3RhY2tfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjdjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdGhpZXUgRGVzbm95ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0YXJ0X19fdHJhY2Vwb2ludHNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0b3BfX190cmFjZXBvaW50c1tdOworCisvKiBTZXQgdG8gMSB0byBlbmFibGUgdHJhY2Vwb2ludCBkZWJ1ZyBvdXRwdXQgKi8KK3N0YXRpYyBjb25zdCBpbnQgdHJhY2Vwb2ludF9kZWJ1ZzsKKworLyoKKyAqIHRyYWNlcG9pbnRzX211dGV4IG5lc3RzIGluc2lkZSBtb2R1bGVfbXV0ZXguIFRyYWNlcG9pbnRzIG11dGV4IHByb3RlY3RzIHRoZQorICogYnVpbHRpbiBhbmQgbW9kdWxlIHRyYWNlcG9pbnRzIGFuZCB0aGUgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIERFRklORV9NVVRFWCh0cmFjZXBvaW50c19tdXRleCk7CisKKy8qCisgKiBUcmFjZXBvaW50IGhhc2ggdGFibGUsIGNvbnRhaW5pbmcgdGhlIGFjdGl2ZSB0cmFjZXBvaW50cy4KKyAqIFByb3RlY3RlZCBieSB0cmFjZXBvaW50c19tdXRleC4KKyAqLworI2RlZmluZSBUUkFDRVBPSU5UX0hBU0hfQklUUyA2CisjZGVmaW5lIFRSQUNFUE9JTlRfVEFCTEVfU0laRSAoMSA8PCBUUkFDRVBPSU5UX0hBU0hfQklUUykKKworLyoKKyAqIE5vdGUgYWJvdXQgUkNVIDoKKyAqIEl0IGlzIHVzZWQgdG8gdG8gZGVsYXkgdGhlIGZyZWUgb2YgbXVsdGlwbGUgcHJvYmVzIGFycmF5IHVudGlsIGEgcXVpZXNjZW50CisgKiBzdGF0ZSBpcyByZWFjaGVkLgorICogVHJhY2Vwb2ludCBlbnRyaWVzIG1vZGlmaWNhdGlvbnMgYXJlIHByb3RlY3RlZCBieSB0aGUgdHJhY2Vwb2ludHNfbXV0ZXguCisgKi8KK3N0cnVjdCB0cmFjZXBvaW50X2VudHJ5IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKKwl2b2lkICoqZnVuY3M7CisJaW50IHJlZmNvdW50OwkvKiBOdW1iZXIgb2YgdGltZXMgYXJtZWQuIDAgaWYgZGlzYXJtZWQuICovCisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwl2b2lkICpvbGRwdHI7CisJdW5zaWduZWQgY2hhciByY3VfcGVuZGluZzoxOworCWNoYXIgbmFtZVswXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFjZXBvaW50X3RhYmxlW1RSQUNFUE9JTlRfVEFCTEVfU0laRV07CisKK3N0YXRpYyB2b2lkIGZyZWVfb2xkX2Nsb3N1cmUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihoZWFkLAorCQlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSwgcmN1KTsKKwlrZnJlZShlbnRyeS0+b2xkcHRyKTsKKwkvKiBNYWtlIHN1cmUgd2UgZnJlZSB0aGUgZGF0YSBiZWZvcmUgc2V0dGluZyB0aGUgcGVuZGluZyBmbGFnIHRvIDAgKi8KKwlzbXBfd21iKCk7CisJZW50cnktPnJjdV9wZW5kaW5nID0gMDsKK30KKworc3RhdGljIHZvaWQgdHJhY2Vwb2ludF9lbnRyeV9mcmVlX29sZChzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZW50cnksIHZvaWQgKm9sZCkKK3sKKwlpZiAoIW9sZCkKKwkJcmV0dXJuOworCWVudHJ5LT5vbGRwdHIgPSBvbGQ7CisJZW50cnktPnJjdV9wZW5kaW5nID0gMTsKKwkvKiB3cml0ZSByY3VfcGVuZGluZyBiZWZvcmUgY2FsbGluZyB0aGUgUkNVIGNhbGxiYWNrICovCisJc21wX3dtYigpOworCWNhbGxfcmN1X3NjaGVkKCZlbnRyeS0+cmN1LCBmcmVlX29sZF9jbG9zdXJlKTsKK30KKworc3RhdGljIHZvaWQgZGVidWdfcHJpbnRfcHJvYmVzKHN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeSkKK3sKKwlpbnQgaTsKKworCWlmICghdHJhY2Vwb2ludF9kZWJ1ZykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgZW50cnktPmZ1bmNzW2ldOyBpKyspCisJCXByaW50ayhLRVJOX0RFQlVHICJQcm9iZSAlZCA6ICVwXG4iLCBpLCBlbnRyeS0+ZnVuY3NbaV0pOworfQorCitzdGF0aWMgdm9pZCAqCit0cmFjZXBvaW50X2VudHJ5X2FkZF9wcm9iZShzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZW50cnksIHZvaWQgKnByb2JlKQoreworCWludCBucl9wcm9iZXMgPSAwOworCXZvaWQgKipvbGQsICoqbmV3OworCisJV0FSTl9PTighcHJvYmUpOworCisJZGVidWdfcHJpbnRfcHJvYmVzKGVudHJ5KTsKKwlvbGQgPSBlbnRyeS0+ZnVuY3M7CisJaWYgKG9sZCkgeworCQkvKiAoTiAtPiBOKzEpLCAoTiAhPSAwLCAxKSBwcm9iZXMgKi8KKwkJZm9yIChucl9wcm9iZXMgPSAwOyBvbGRbbnJfcHJvYmVzXTsgbnJfcHJvYmVzKyspCisJCQlpZiAob2xkW25yX3Byb2Jlc10gPT0gcHJvYmUpCisJCQkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7CisJfQorCS8qICsgMiA6IG9uZSBmb3IgbmV3IHByb2JlLCBvbmUgZm9yIE5VTEwgZnVuYyAqLworCW5ldyA9IGt6YWxsb2MoKG5yX3Byb2JlcyArIDIpICogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOworCWlmIChuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKG9sZCkKKwkJbWVtY3B5KG5ldywgb2xkLCBucl9wcm9iZXMgKiBzaXplb2Yodm9pZCAqKSk7CisJbmV3W25yX3Byb2Jlc10gPSBwcm9iZTsKKwllbnRyeS0+cmVmY291bnQgPSBucl9wcm9iZXMgKyAxOworCWVudHJ5LT5mdW5jcyA9IG5ldzsKKwlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyB2b2lkICoKK3RyYWNlcG9pbnRfZW50cnlfcmVtb3ZlX3Byb2JlKHN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeSwgdm9pZCAqcHJvYmUpCit7CisJaW50IG5yX3Byb2JlcyA9IDAsIG5yX2RlbCA9IDAsIGk7CisJdm9pZCAqKm9sZCwgKipuZXc7CisKKwlvbGQgPSBlbnRyeS0+ZnVuY3M7CisKKwlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCS8qIChOIC0+IE0pLCAoTiA+IDEsIE0gPj0gMCkgcHJvYmVzICovCisJZm9yIChucl9wcm9iZXMgPSAwOyBvbGRbbnJfcHJvYmVzXTsgbnJfcHJvYmVzKyspIHsKKwkJaWYgKCghcHJvYmUgfHwgb2xkW25yX3Byb2Jlc10gPT0gcHJvYmUpKQorCQkJbnJfZGVsKys7CisJfQorCisJaWYgKG5yX3Byb2JlcyAtIG5yX2RlbCA9PSAwKSB7CisJCS8qIE4gLT4gMCwgKE4gPiAxKSAqLworCQllbnRyeS0+ZnVuY3MgPSBOVUxMOworCQllbnRyeS0+cmVmY291bnQgPSAwOworCQlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCQlyZXR1cm4gb2xkOworCX0gZWxzZSB7CisJCWludCBqID0gMDsKKwkJLyogTiAtPiBNLCAoTiA+IDEsIE0gPiAwKSAqLworCQkvKiArIDEgZm9yIE5VTEwgKi8KKwkJbmV3ID0ga3phbGxvYygobnJfcHJvYmVzIC0gbnJfZGVsICsgMSkKKwkJCSogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOworCQlpZiAobmV3ID09IE5VTEwpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZm9yIChpID0gMDsgb2xkW2ldOyBpKyspCisJCQlpZiAoKHByb2JlICYmIG9sZFtpXSAhPSBwcm9iZSkpCisJCQkJbmV3W2orK10gPSBvbGRbaV07CisJCWVudHJ5LT5yZWZjb3VudCA9IG5yX3Byb2JlcyAtIG5yX2RlbDsKKwkJZW50cnktPmZ1bmNzID0gbmV3OworCX0KKwlkZWJ1Z19wcmludF9wcm9iZXMoZW50cnkpOworCXJldHVybiBvbGQ7Cit9CisKKy8qCisgKiBHZXQgdHJhY2Vwb2ludCBpZiB0aGUgdHJhY2Vwb2ludCBpcyBwcmVzZW50IGluIHRoZSB0cmFjZXBvaW50IGhhc2ggdGFibGUuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRyYWNlcG9pbnRzX211dGV4IGhlbGQuCisgKiBSZXR1cm5zIE5VTEwgaWYgbm90IHByZXNlbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZ2V0X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZTsKKwl1MzIgaGFzaCA9IGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgMCk7CisKKwloZWFkID0gJnRyYWNlcG9pbnRfdGFibGVbaGFzaCAmIChUUkFDRVBPSU5UX1RBQkxFX1NJWkUgLSAxKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpCisJCQlyZXR1cm4gZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBBZGQgdGhlIHRyYWNlcG9pbnQgdG8gdGhlIHRyYWNlcG9pbnQgaGFzaCB0YWJsZS4gTXVzdCBiZSBjYWxsZWQgd2l0aAorICogdHJhY2Vwb2ludHNfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICphZGRfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplOworCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKKworCWhlYWQgPSAmdHJhY2Vwb2ludF90YWJsZVtoYXNoICYgKFRSQUNFUE9JTlRfVEFCTEVfU0laRSAtIDEpXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCBoZWFkLCBobGlzdCkgeworCQlpZiAoIXN0cmNtcChuYW1lLCBlLT5uYW1lKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJInRyYWNlcG9pbnQgJXMgYnVzeVxuIiwgbmFtZSk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsJLyogQWxyZWFkeSB0aGVyZSAqLworCQl9CisJfQorCS8qCisJICogVXNpbmcga21hbGxvYyBoZXJlIHRvIGFsbG9jYXRlIGEgdmFyaWFibGUgbGVuZ3RoIGVsZW1lbnQuIENvdWxkCisJICogY2F1c2Ugc29tZSBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpZiBvdmVydXNlZC4KKwkgKi8KKwllID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNlcG9pbnRfZW50cnkpICsgbmFtZV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJbWVtY3B5KCZlLT5uYW1lWzBdLCBuYW1lLCBuYW1lX2xlbik7CisJZS0+ZnVuY3MgPSBOVUxMOworCWUtPnJlZmNvdW50ID0gMDsKKwllLT5yY3VfcGVuZGluZyA9IDA7CisJaGxpc3RfYWRkX2hlYWQoJmUtPmhsaXN0LCBoZWFkKTsKKwlyZXR1cm4gZTsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgdHJhY2Vwb2ludCBmcm9tIHRoZSB0cmFjZXBvaW50IGhhc2ggdGFibGUuIE11c3QgYmUgY2FsbGVkIHdpdGgKKyAqIG11dGV4X2xvY2sgaGVsZC4KKyAqLworc3RhdGljIGludCByZW1vdmVfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplOworCWludCBmb3VuZCA9IDA7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBsZW4tMSwgMCk7CisKKwloZWFkID0gJnRyYWNlcG9pbnRfdGFibGVbaGFzaCAmIChUUkFDRVBPSU5UX1RBQkxFX1NJWkUgLSAxKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQpCisJCXJldHVybiAtRU5PRU5UOworCWlmIChlLT5yZWZjb3VudCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlobGlzdF9kZWwoJmUtPmhsaXN0KTsKKwkvKiBNYWtlIHN1cmUgdGhlIGNhbGxfcmN1X3NjaGVkIGhhcyBiZWVuIGV4ZWN1dGVkICovCisJaWYgKGUtPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCWtmcmVlKGUpOworCXJldHVybiAwOworfQorCisvKgorICogU2V0cyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBvbmUgdHJhY2Vwb2ludC4KKyAqLworc3RhdGljIHZvaWQgc2V0X3RyYWNlcG9pbnQoc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKiplbnRyeSwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqZWxlbSwgaW50IGFjdGl2ZSkKK3sKKwlXQVJOX09OKHN0cmNtcCgoKmVudHJ5KS0+bmFtZSwgZWxlbS0+bmFtZSkgIT0gMCk7CisKKwkvKgorCSAqIHJjdV9hc3NpZ25fcG9pbnRlciBoYXMgYSBzbXBfd21iKCkgd2hpY2ggbWFrZXMgc3VyZSB0aGF0IHRoZSBuZXcKKwkgKiBwcm9iZSBjYWxsYmFja3MgYXJyYXkgaXMgY29uc2lzdGVudCBiZWZvcmUgc2V0dGluZyBhIHBvaW50ZXIgdG8gaXQuCisJICogVGhpcyBhcnJheSBpcyByZWZlcmVuY2VkIGJ5IF9fRE9fVFJBQ0UgZnJvbQorCSAqIGluY2x1ZGUvbGludXgvdHJhY2Vwb2ludHMuaC4gQSBtYXRjaGluZyBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorCSAqIGlzIHVzZWQuCisJICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKGVsZW0tPmZ1bmNzLCAoKmVudHJ5KS0+ZnVuY3MpOworCWVsZW0tPnN0YXRlID0gYWN0aXZlOworfQorCisvKgorICogRGlzYWJsZSBhIHRyYWNlcG9pbnQgYW5kIGl0cyBwcm9iZSBjYWxsYmFjay4KKyAqIE5vdGU6IG9ubHkgd2FpdGluZyBhbiBSQ1UgcGVyaW9kIGFmdGVyIHNldHRpbmcgZWxlbS0+Y2FsbCB0byB0aGUgZW1wdHkKKyAqIGZ1bmN0aW9uIGluc3VyZXMgdGhhdCB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgaXMgbm90IHVzZWQgYW55bW9yZS4gVGhpcyBpbnN1cmVkCisgKiBieSBwcmVlbXB0X2Rpc2FibGUgYXJvdW5kIHRoZSBjYWxsIHNpdGUuCisgKi8KK3N0YXRpYyB2b2lkIGRpc2FibGVfdHJhY2Vwb2ludChzdHJ1Y3QgdHJhY2Vwb2ludCAqZWxlbSkKK3sKKwllbGVtLT5zdGF0ZSA9IDA7Cit9CisKKy8qKgorICogdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UgLSBVcGRhdGUgYSBwcm9iZSByYW5nZQorICogQGJlZ2luOiBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlCisgKiBAZW5kOiBlbmQgb2YgdGhlIHJhbmdlCisgKgorICogVXBkYXRlcyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBhIHJhbmdlIG9mIHRyYWNlcG9pbnRzLgorICovCit2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQoreworCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICptYXJrX2VudHJ5OworCisJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCWZvciAoaXRlciA9IGJlZ2luOyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKKwkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KGl0ZXItPm5hbWUpOworCQlpZiAobWFya19lbnRyeSkgeworCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksIGl0ZXIsCisJCQkJCSEhbWFya19lbnRyeS0+cmVmY291bnQpOworCQl9IGVsc2UgeworCQkJZGlzYWJsZV90cmFjZXBvaW50KGl0ZXIpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworfQorCisvKgorICogVXBkYXRlIHByb2JlcywgcmVtb3ZpbmcgdGhlIGZhdWx0eSBwcm9iZXMuCisgKi8KK3N0YXRpYyB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2Jlcyh2b2lkKQoreworCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCisJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UoX19zdGFydF9fX3RyYWNlcG9pbnRzLAorCQlfX3N0b3BfX190cmFjZXBvaW50cyk7CisJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KKwltb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKCk7Cit9CisKKy8qKgorICogdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3RlciAtICBDb25uZWN0IGEgcHJvYmUgdG8gYSB0cmFjZXBvaW50CisgKiBAbmFtZTogdHJhY2Vwb2ludCBuYW1lCisgKiBAcHJvYmU6IHByb2JlIGhhbmRsZXIKKyAqCisgKiBSZXR1cm5zIDAgaWYgb2ssIGVycm9yIHZhbHVlIG9uIGVycm9yLgorICogVGhlIHByb2JlIGFkZHJlc3MgbXVzdCBhdCBsZWFzdCBiZSBhbGlnbmVkIG9uIHRoZSBhcmNoaXRlY3R1cmUgcG9pbnRlciBzaXplLgorICovCitpbnQgdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwcm9iZSkKK3sKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqZW50cnk7CisJaW50IHJldCA9IDA7CisJdm9pZCAqb2xkOworCisJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCWVudHJ5ID0gZ2V0X3RyYWNlcG9pbnQobmFtZSk7CisJaWYgKCFlbnRyeSkgeworCQllbnRyeSA9IGFkZF90cmFjZXBvaW50KG5hbWUpOworCQlpZiAoSVNfRVJSKGVudHJ5KSkgeworCQkJcmV0ID0gUFRSX0VSUihlbnRyeSk7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKwkvKgorCSAqIElmIHdlIGRldGVjdCB0aGF0IGEgY2FsbF9yY3Vfc2NoZWQgaXMgcGVuZGluZyBmb3IgdGhpcyB0cmFjZXBvaW50LAorCSAqIG1ha2Ugc3VyZSBpdCdzIGV4ZWN1dGVkIG5vdy4KKwkgKi8KKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCW9sZCA9IHRyYWNlcG9pbnRfZW50cnlfYWRkX3Byb2JlKGVudHJ5LCBwcm9iZSk7CisJaWYgKElTX0VSUihvbGQpKSB7CisJCXJldCA9IFBUUl9FUlIob2xkKTsKKwkJZ290byBlbmQ7CisJfQorCW11dGV4X3VubG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlcygpOwkJLyogbWF5IHVwZGF0ZSBlbnRyeSAqLworCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKKwllbnRyeSA9IGdldF90cmFjZXBvaW50KG5hbWUpOworCVdBUk5fT04oIWVudHJ5KTsKKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCXRyYWNlcG9pbnRfZW50cnlfZnJlZV9vbGQoZW50cnksIG9sZCk7CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXIpOworCisvKioKKyAqIHRyYWNlcG9pbnRfcHJvYmVfdW5yZWdpc3RlciAtICBEaXNjb25uZWN0IGEgcHJvYmUgZnJvbSBhIHRyYWNlcG9pbnQKKyAqIEBuYW1lOiB0cmFjZXBvaW50IG5hbWUKKyAqIEBwcm9iZTogcHJvYmUgZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIFdlIGRvIG5vdCBuZWVkIHRvIGNhbGwgYSBzeW5jaHJvbml6ZV9zY2hlZCB0byBtYWtlIHN1cmUgdGhlIHByb2JlcyBoYXZlCisgKiBmaW5pc2hlZCBydW5uaW5nIGJlZm9yZSBkb2luZyBhIG1vZHVsZSB1bmxvYWQsIGJlY2F1c2UgdGhlIG1vZHVsZSB1bmxvYWQKKyAqIGl0c2VsZiB1c2VzIHN0b3BfbWFjaGluZSgpLCB3aGljaCBpbnN1cmVzIHRoYXQgZXZlcnkgcHJlZW1wdCBkaXNhYmxlZCBzZWN0aW9uCisgKiBoYXZlIGZpbmlzaGVkLgorICovCitpbnQgdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnByb2JlKQoreworCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICplbnRyeTsKKwl2b2lkICpvbGQ7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwltdXRleF9sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CisJZW50cnkgPSBnZXRfdHJhY2Vwb2ludChuYW1lKTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGVuZDsKKwlpZiAoZW50cnktPnJjdV9wZW5kaW5nKQorCQlyY3VfYmFycmllcl9zY2hlZCgpOworCW9sZCA9IHRyYWNlcG9pbnRfZW50cnlfcmVtb3ZlX3Byb2JlKGVudHJ5LCBwcm9iZSk7CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZXBvaW50c19tdXRleCk7CisJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVzKCk7CQkvKiBtYXkgdXBkYXRlIGVudHJ5ICovCisJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOworCWVudHJ5ID0gZ2V0X3RyYWNlcG9pbnQobmFtZSk7CisJaWYgKCFlbnRyeSkKKwkJZ290byBlbmQ7CisJaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKKwkJcmN1X2JhcnJpZXJfc2NoZWQoKTsKKwl0cmFjZXBvaW50X2VudHJ5X2ZyZWVfb2xkKGVudHJ5LCBvbGQpOworCXJlbW92ZV90cmFjZXBvaW50KG5hbWUpOwkvKiBJZ25vcmUgYnVzeSBlcnJvciBtZXNzYWdlICovCisJcmV0ID0gMDsKK2VuZDoKKwltdXRleF91bmxvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKTsKKworLyoqCisgKiB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlIC0gR2V0IGEgbmV4dCB0cmFjZXBvaW50IGl0ZXJhdG9yIGdpdmVuIGEgcmFuZ2UuCisgKiBAdHJhY2Vwb2ludDogY3VycmVudCB0cmFjZXBvaW50cyAoaW4pLCBuZXh0IHRyYWNlcG9pbnQgKG91dCkKKyAqIEBiZWdpbjogYmVnaW5uaW5nIG9mIHRoZSByYW5nZQorICogQGVuZDogZW5kIG9mIHRoZSByYW5nZQorICoKKyAqIFJldHVybnMgd2hldGhlciBhIG5leHQgdHJhY2Vwb2ludCBoYXMgYmVlbiBmb3VuZCAoMSkgb3Igbm90ICgwKS4KKyAqIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCB0cmFjZXBvaW50IGluIHRoZSByYW5nZSBpZiB0aGUgaW5wdXQgdHJhY2Vwb2ludCBpcworICogTlVMTC4KKyAqLworaW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3sKKwlpZiAoISp0cmFjZXBvaW50ICYmIGJlZ2luICE9IGVuZCkgeworCQkqdHJhY2Vwb2ludCA9IGJlZ2luOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCp0cmFjZXBvaW50ID49IGJlZ2luICYmICp0cmFjZXBvaW50IDwgZW5kKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2UpOworCitzdGF0aWMgdm9pZCB0cmFjZXBvaW50X2dldF9pdGVyKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpCit7CisJaW50IGZvdW5kID0gMDsKKworCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCisJaWYgKCFpdGVyLT5tb2R1bGUpIHsKKwkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAorCQkJCV9fc3RhcnRfX190cmFjZXBvaW50cywgX19zdG9wX19fdHJhY2Vwb2ludHMpOworCQlpZiAoZm91bmQpCisJCQlnb3RvIGVuZDsKKwl9CisJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KKwlmb3VuZCA9IG1vZHVsZV9nZXRfaXRlcl90cmFjZXBvaW50cyhpdGVyKTsKK2VuZDoKKwlpZiAoIWZvdW5kKQorCQl0cmFjZXBvaW50X2l0ZXJfcmVzZXQoaXRlcik7Cit9CisKK3ZvaWQgdHJhY2Vwb2ludF9pdGVyX3N0YXJ0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpCit7CisJdHJhY2Vwb2ludF9nZXRfaXRlcihpdGVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfaXRlcl9zdGFydCk7CisKK3ZvaWQgdHJhY2Vwb2ludF9pdGVyX25leHQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlpdGVyLT50cmFjZXBvaW50Kys7CisJLyoKKwkgKiBpdGVyLT50cmFjZXBvaW50IG1heSBiZSBpbnZhbGlkIGJlY2F1c2Ugd2UgYmxpbmRseSBpbmNyZW1lbnRlZCBpdC4KKwkgKiBNYWtlIHN1cmUgaXQgaXMgdmFsaWQgYnkgbWFyc2hhbGxpbmcgb24gdGhlIHRyYWNlcG9pbnRzLCBnZXR0aW5nIHRoZQorCSAqIHRyYWNlcG9pbnRzIGZyb20gZm9sbG93aW5nIG1vZHVsZXMgaWYgbmVjZXNzYXJ5LgorCSAqLworCXRyYWNlcG9pbnRfZ2V0X2l0ZXIoaXRlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZXBvaW50X2l0ZXJfbmV4dCk7CisKK3ZvaWQgdHJhY2Vwb2ludF9pdGVyX3N0b3Aoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlcG9pbnRfaXRlcl9zdG9wKTsKKwordm9pZCB0cmFjZXBvaW50X2l0ZXJfcmVzZXQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcikKK3sKKwlpdGVyLT5tb2R1bGUgPSBOVUxMOworCWl0ZXItPnRyYWNlcG9pbnQgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vwb2ludF9pdGVyX3Jlc2V0KTsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMzFkNzg0ZC4uYjBmMjM5ZSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTY1Miw2ICs2NTIsMTEgQEAKIAlkZXBlbmRzIG9uIEJMT0NLCiAJZGVmYXVsdCBuCiAJaGVscAorCSAgQklHIEZBVCBXQVJOSU5HOiBFTkFCTElORyBUSElTIE9QVElPTiBNSUdIVCBCUkVBSyBCT09USU5HIE9OCisJICBTT01FIERJU1RSSUJVVElPTlMuICBETyBOT1QgRU5BQkxFIFRISVMgVU5MRVNTIFlPVSBLTk9XIFdIQVQKKwkgIFlPVSBBUkUgRE9JTkcuICBEaXN0cm9zLCBwbGVhc2UgZW5hYmxlIHRoaXMgYW5kIGZpeCB3aGF0ZXZlcgorCSAgaXMgYnJva2VuLgorCiAJICBDb252ZW50aW9uYWxseSwgYmxvY2sgZGV2aWNlIG51bWJlcnMgYXJlIGFsbG9jYXRlZCBmcm9tCiAJICBwcmVkZXRlcm1pbmVkIGNvbnRpZ3VvdXMgYXJlYS4gIEhvd2V2ZXIsIGV4dGVuZGVkIGJsb2NrIGFyZWEKIAkgIG1heSBpbnRyb2R1Y2Ugbm9uLWNvbnRpZ3VvdXMgYmxvY2sgZGV2aWNlIG51bWJlcnMuICBUaGlzCmRpZmYgLS1naXQgYS9saWIvYml0bWFwLmMgYi9saWIvYml0bWFwLmMKaW5kZXggMDZmYjU3Yy4uNDgyZGY5NCAxMDA2NDQKLS0tIGEvbGliL2JpdG1hcC5jCisrKyBiL2xpYi9iaXRtYXAuYwpAQCAtMzE2LDE3ICszMTYsNiBAQAogRVhQT1JUX1NZTUJPTChiaXRtYXBfc2NucHJpbnRmKTsKIAogLyoqCi0gKiBiaXRtYXBfc2NucHJpbnRmX2xlbiAtIHJldHVybiBidWZmZXIgbGVuZ3RoIG5lZWRlZCB0byBjb252ZXJ0Ci0gKiBiaXRtYXAgdG8gYW4gQVNDSUkgaGV4IHN0cmluZwotICogQG5yX2JpdHM6IG51bWJlciBvZiBiaXRzIHRvIGJlIGNvbnZlcnRlZAotICovCi1pbnQgYml0bWFwX3NjbnByaW50Zl9sZW4odW5zaWduZWQgaW50IG5yX2JpdHMpCi17Ci0JdW5zaWduZWQgaW50IG5yX25pYmJsZXMgPSBBTElHTihucl9iaXRzLCA0KSAvIDQ7Ci0JcmV0dXJuIG5yX25pYmJsZXMgKyBBTElHTihucl9uaWJibGVzLCBDSFVOS1NaIC8gNCkgLyAoQ0hVTktTWiAvIDQpIC0gMTsKLX0KLQotLyoqCiAgKiBfX2JpdG1hcF9wYXJzZSAtIGNvbnZlcnQgYW4gQVNDSUkgaGV4IHN0cmluZyBpbnRvIGEgYml0bWFwLgogICogQGJ1ZjogcG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBzdHJpbmcuCiAgKiBAYnVmbGVuOiBidWZmZXIgc2l6ZSBpbiBieXRlcy4gIElmIHN0cmluZyBpcyBzbWFsbGVyIHRoYW4gdGhpcwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBjY2VlY2I2Li5hMDEzYmJjIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGZvciBQQUdFX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTU1MCwxOCArNTUxLDUxIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGNoYXIgKnJlc291cmNlX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgc3RydWN0IHJlc291cmNlICpyZXMsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQoreworI2lmbmRlZiBJT19SU1JDX1BSSU5US19TSVpFCisjZGVmaW5lIElPX1JTUkNfUFJJTlRLX1NJWkUJNAorI2VuZGlmCisKKyNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKKyNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJOAorI2VuZGlmCisKKwkvKiByb29tIGZvciB0aGUgYWN0dWFsIG51bWJlcnMsIHRoZSB0d28gIjB4IiwgLSwgWywgXSBhbmQgdGhlIGZpbmFsIHplcm8gKi8KKwljaGFyIHN5bVs0KnNpemVvZihyZXNvdXJjZV9zaXplX3QpICsgOF07CisJY2hhciAqcCA9IHN5bSwgKnBlbmQgPSBzeW0gKyBzaXplb2Yoc3ltKTsKKwlpbnQgc2l6ZSA9IC0xOworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQlzaXplID0gSU9fUlNSQ19QUklOVEtfU0laRTsKKwllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXNpemUgPSBNRU1fUlNSQ19QUklOVEtfU0laRTsKKworCSpwKysgPSAnWyc7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPnN0YXJ0LCAxNiwgc2l6ZSwgLTEsIFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQpOworCSpwKysgPSAnLSc7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPmVuZCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwkqcCsrID0gJ10nOworCSpwID0gMDsKKworCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHN5bSwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworfQorCiAvKgogICogU2hvdyBhICclcCcgdGhpbmcuICBBIGtlcm5lbCBleHRlbnNpb24gaXMgdGhhdCB0aGUgJyVwJyBpcyBmb2xsb3dlZAogICogYnkgYW4gZXh0cmEgc2V0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYXQgYXJlIGV4dGVuZGVkIGZvcm1hdAogICogc3BlY2lmaWVycy4KICAqCi0gKiBSaWdodCBub3cgd2UganVzdCBoYW5kbGUgJ0YnIChmb3Igc3ltYm9saWMgRnVuY3Rpb24gZGVzY3JpcHRvciBwb2ludGVycykKLSAqIGFuZCAnUycgKGZvciBTeW1ib2xpYyBkaXJlY3QgcG9pbnRlcnMpLCBidXQgdGhpcyBjYW4gZWFzaWx5IGJlCi0gKiBleHRlbmRlZCBpbiB0aGUgZnV0dXJlIChuZXR3b3JrIGFkZHJlc3MgdHlwZXMgZXRjKS4KKyAqIFJpZ2h0IG5vdyB3ZSBoYW5kbGU6CiAgKgotICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0IGZ1bmN0aW9uCi0gKiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEgcG9pbnRlciB0aGUKLSAqIHJlYWwgYWRkcmVzcy4gCisgKiAtICdGJyBGb3Igc3ltYm9saWMgZnVuY3Rpb24gZGVzY3JpcHRvciBwb2ludGVycworICogLSAnUycgRm9yIHN5bWJvbGljIGRpcmVjdCBwb2ludGVycworICogLSAnUicgRm9yIGEgc3RydWN0IHJlc291cmNlIHBvaW50ZXIsIGl0IHByaW50cyB0aGUgcmFuZ2Ugb2YKKyAqICAgICAgIGFkZHJlc3NlcyAobm90IHRoZSBuYW1lIG5vciB0aGUgZmxhZ3MpCisgKgorICogTm90ZTogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0CisgKiBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEKKyAqIHBvaW50ZXIgdG8gdGhlIHJlYWwgYWRkcmVzcy4KICAqLwogc3RhdGljIGNoYXIgKnBvaW50ZXIoY29uc3QgY2hhciAqZm10LCBjaGFyICpidWYsIGNoYXIgKmVuZCwgdm9pZCAqcHRyLCBpbnQgZmllbGRfd2lkdGgsIGludCBwcmVjaXNpb24sIGludCBmbGFncykKIHsKQEAgLTU3MSw2ICs2MDUsOCBAQAogCQkvKiBGYWxsdGhyb3VnaCAqLwogCWNhc2UgJ1MnOgogCQlyZXR1cm4gc3ltYm9sX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJY2FzZSAnUic6CisJCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOwogCX0KIAlmbGFncyB8PSBTTUFMTDsKIAlpZiAoZmllbGRfd2lkdGggPT0gLTEpIHsKQEAgLTU5MCw2ICs2MjYsNyBAQAogICogVGhpcyBmdW5jdGlvbiBmb2xsb3dzIEM5OSB2c25wcmludGYsIGJ1dCBoYXMgc29tZSBleHRlbnNpb25zOgogICogJXBTIG91dHB1dCB0aGUgbmFtZSBvZiBhIHRleHQgc3ltYm9sCiAgKiAlcEYgb3V0cHV0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gcG9pbnRlcgorICogJXBSIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZQogICoKICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCiAgKiBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMWE1MDFhNC4uNWI1NzkwZiAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0yMDksNSArMjA5LDE2IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIUFSQ0hfTk9fVklSVF9UT19CVVMKIAorY29uZmlnIFVORVZJQ1RBQkxFX0xSVQorCWJvb2wgIkFkZCBMUlUgbGlzdCB0byB0cmFjayBub24tZXZpY3RhYmxlIHBhZ2VzIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gTU1VCisJaGVscAorCSAgS2VlcHMgdW5ldmljdGFibGUgcGFnZXMgb2ZmIG9mIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIHBhZ2VvdXQKKwkgIGxpc3RzLCBzbyBrc3dhcGQgd2lsbCBub3Qgd2FzdGUgQ1BVIHRpbWUgb3IgaGF2ZSBpdHMgYmFsYW5jaW5nCisJICBhbGdvcml0aG1zIHRocm93biBvZmYgYnkgc2Nhbm5pbmcgdGhlc2UgcGFnZXMuICBTZWxlY3RpbmcgdGhpcworCSAgd2lsbCB1c2Ugb25lIHBhZ2UgZmxhZyBhbmQgaW5jcmVhc2UgdGhlIGNvZGUgc2l6ZSBhIGxpdHRsZSwKKwkgIHNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKIGNvbmZpZyBNTVVfTk9USUZJRVIKIAlib29sCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGRhNGNjZjAuLmMwNmI0NWEgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0zMyw1ICszMyw0IEBACiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm8KIG9iai0kKENPTkZJR19TTVApICs9IGFsbG9jcGVyY3B1Lm8KIG9iai0kKENPTkZJR19RVUlDS0xJU1QpICs9IHF1aWNrbGlzdC5vCi1vYmotJChDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUikgKz0gbWVtY29udHJvbC5vCi0KK29iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8gcGFnZV9jZ3JvdXAubwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDkwM2JmMzEuLmFiODU1MzYgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+IC8qIGZvciBCVUdfT04oIWluX2F0b21pYygpKSBvbmx5ICovCiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPiAvKiBmb3IgcGFnZV9pc19maWxlX2NhY2hlKCkgKi8KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKgpAQCAtMTE1LDEyICsxMTYsMTIgQEAKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAKLQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAJcmFkaXhfdHJlZV9kZWxldGUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgcGFnZS0+aW5kZXgpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCW1hcHBpbmctPm5ycGFnZXMtLTsKIAlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9QQUdFUyk7CiAJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKKwltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAKIAkvKgogCSAqIFNvbWUgZmlsZXN5c3RlbXMgc2VlbSB0byByZS1kaXJ0eSB0aGUgcGFnZSBldmVuIGFmdGVyCkBAIC00OTIsOSArNDkzLDI0IEBACiBpbnQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlwZ29mZl90IG9mZnNldCwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JaW50IHJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwgZ2ZwX21hc2spOwotCWlmIChyZXQgPT0gMCkKLQkJbHJ1X2NhY2hlX2FkZChwYWdlKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBTcGxpY2VfcmVhZCBhbmQgcmVhZGFoZWFkIGFkZCBzaG1lbS90bXBmcyBwYWdlcyBpbnRvIHRoZSBwYWdlIGNhY2hlCisJICogYmVmb3JlIHNobWVtX3JlYWRwYWdlIGhhcyBhIGNoYW5jZSB0byBtYXJrIHRoZW0gYXMgU3dhcEJhY2tlZDogdGhleQorCSAqIG5lZWQgdG8gZ28gb24gdGhlIGFjdGl2ZV9hbm9uIGxydSBiZWxvdywgYW5kIG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlCisJICogKGNhbGxlZCBpbiBhZGRfdG9fcGFnZV9jYWNoZSkgbmVlZHMgdG8ga25vdyB3aGVyZSB0aGV5J3JlIGdvaW5nIHRvby4KKwkgKi8KKwlpZiAobWFwcGluZ19jYXBfc3dhcF9iYWNrZWQobWFwcGluZykpCisJCVNldFBhZ2VTd2FwQmFja2VkKHBhZ2UpOworCisJcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgb2Zmc2V0LCBnZnBfbWFzayk7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCQlscnVfY2FjaGVfYWRkX2ZpbGUocGFnZSk7CisJCWVsc2UKKwkJCWxydV9jYWNoZV9hZGRfYWN0aXZlX2Fub24ocGFnZSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU1NywxNyArNTczLDE0IEBACiAgKiBtZWNoYW5hbmlzbSBiZXR3ZWVuIFBhZ2VMb2NrZWQgcGFnZXMgYW5kIFBhZ2VXcml0ZWJhY2sgcGFnZXMgaXMgc2hhcmVkLgogICogQnV0IHRoYXQncyBPSyAtIHNsZWVwZXJzIGluIHdhaXRfb25fcGFnZV93cml0ZWJhY2soKSBqdXN0IGdvIGJhY2sgdG8gc2xlZXAuCiAgKgotICogVGhlIGZpcnN0IG1iIGlzIG5lY2Vzc2FyeSB0byBzYWZlbHkgY2xvc2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gb3BlbmVkIGJ5IHRoZQotICogdGVzdF9hbmRfc2V0X2JpdCgpIHRvIGxvY2sgdGhlIHBhZ2U7IHRoZSBzZWNvbmQgbWIgaXMgbmVjZXNzYXJ5IHRvIGVuZm9yY2UKLSAqIG9yZGVyaW5nIGJldHdlZW4gdGhlIGNsZWFyX2JpdCBhbmQgdGhlIHJlYWQgb2YgdGhlIHdhaXRxdWV1ZSAodG8gYXZvaWQgU01QCi0gKiByYWNlcyB3aXRoIGEgcGFyYWxsZWwgd2FpdF9vbl9wYWdlX2xvY2tlZCgpKS4KKyAqIFRoZSBtYiBpcyBuZWNlc3NhcnkgdG8gZW5mb3JjZSBvcmRlcmluZyBiZXR3ZWVuIHRoZSBjbGVhcl9iaXQgYW5kIHRoZSByZWFkCisgKiBvZiB0aGUgd2FpdHF1ZXVlICh0byBhdm9pZCBTTVAgcmFjZXMgd2l0aCBhIHBhcmFsbGVsIHdhaXRfb25fcGFnZV9sb2NrZWQoKSkuCiAgKi8KIHZvaWQgdW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpKQotCQlCVUcoKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWNsZWFyX2JpdF91bmxvY2soUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJd2FrZV91cF9wYWdlKHBhZ2UsIFBHX2xvY2tlZCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVubG9ja19wYWdlKTsKZGlmZiAtLWdpdCBhL21tL2ZyZW1hcC5jIGIvbW0vZnJlbWFwLmMKaW5kZXggNzg4MTYzOC4uN2QxMmNhNyAxMDA2NDQKLS0tIGEvbW0vZnJlbWFwLmMKKysrIGIvbW0vZnJlbWFwLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogc3RhdGljIHZvaWQgemFwX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewpAQCAtMjE1LDE1ICsyMTcsMzEgQEAKIAkJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl9CiAKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkvKgorCQkgKiBkcm9wIFBHX01sb2NrZWQgZmxhZyBmb3Igb3Zlci1tYXBwZWQgcmFuZ2UKKwkJICovCisJCXVuc2lnbmVkIGludCBzYXZlZF9mbGFncyA9IHZtYS0+dm1fZmxhZ3M7CisJCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CisJCXZtYS0+dm1fZmxhZ3MgPSBzYXZlZF9mbGFnczsKKwl9CisKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CiAJZXJyID0gcG9wdWxhdGVfcmFuZ2UobW0sIHZtYSwgc3RhcnQsIHNpemUsIHBnb2ZmKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIHN0YXJ0LCBzdGFydCArIHNpemUpOwogCWlmICghZXJyICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKSB7Ci0JCWlmICh1bmxpa2VseShoYXNfd3JpdGVfbG9jaykpIHsKLQkJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQkJCWhhc193cml0ZV9sb2NrID0gMDsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCS8qCisJCQkgKiBtaWdodCBiZSBtYXBwaW5nIHByZXZpb3VzbHkgdW5tYXBwZWQgcmFuZ2Ugb2YgZmlsZQorCQkJICovCisJCQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgc3RhcnQgKyBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh1bmxpa2VseShoYXNfd3JpdGVfbG9jaykpIHsKKwkJCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCQkJaGFzX3dyaXRlX2xvY2sgPSAwOworCQkJfQorCQkJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBzdGFydCtzaXplKTsKIAkJfQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIHN0YXJ0K3NpemUpOwogCX0KIAogCS8qCkBAIC0yNDAsNCArMjU4LDMgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAzODYzMzg2Li5jZThjYmIyIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnM7CiB9OwogCi1zdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwX2FsbG9jKHZvaWQpCitzdGF0aWMgc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcF9hbGxvYyh2b2lkKQogewogCXN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXAgPSBrbWFsbG9jKHNpemVvZigqcmVzdl9tYXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlc3ZfbWFwKQpAQCAtMjc0LDcgKzI3NCw3IEBACiAJcmV0dXJuIHJlc3ZfbWFwOwogfQogCi12b2lkIHJlc3ZfbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKK3N0YXRpYyB2b2lkIHJlc3ZfbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIHsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHJlc3ZfbWFwLCByZWZzKTsKIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCiAJCXJldHVybiAoc3RydWN0IHJlc3ZfbWFwICopKGdldF92bWFfcHJpdmF0ZV9kYXRhKHZtYSkgJgogCQkJCQkJCX5IUEFHRV9SRVNWX01BU0spOwotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdm1hX3Jlc3ZfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcmVzdl9tYXAgKm1hcCkKQEAgLTE0NTksMTEgKzE0NTksMTEgQEAKIHsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gJmRlZmF1bHRfaHN0YXRlOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJCSJIdWdlUGFnZXNfVG90YWw6ICU1bHVcbiIKLQkJCSJIdWdlUGFnZXNfRnJlZTogICU1bHVcbiIKLQkJCSJIdWdlUGFnZXNfUnN2ZDogICU1bHVcbiIKLQkJCSJIdWdlUGFnZXNfU3VycDogICU1bHVcbiIKLQkJCSJIdWdlcGFnZXNpemU6ICAgICU1bHUga0JcbiIsCisJCQkiSHVnZVBhZ2VzX1RvdGFsOiAgICU1bHVcbiIKKwkJCSJIdWdlUGFnZXNfRnJlZTogICAgJTVsdVxuIgorCQkJIkh1Z2VQYWdlc19Sc3ZkOiAgICAlNWx1XG4iCisJCQkiSHVnZVBhZ2VzX1N1cnA6ICAgICU1bHVcbiIKKwkJCSJIdWdlcGFnZXNpemU6ICAgJThsdSBrQlxuIiwKIAkJCWgtPm5yX2h1Z2VfcGFnZXMsCiAJCQloLT5mcmVlX2h1Z2VfcGFnZXMsCiAJCQloLT5yZXN2X2h1Z2VfcGFnZXMsCkBAIC0xNzQ3LDEwICsxNzQ3LDggQEAKICAqIGZyb20gb3RoZXIgVk1BcyBhbmQgbGV0IHRoZSBjaGlsZHJlbiBiZSBTSUdLSUxMZWQgaWYgdGhleSBhcmUgZmF1bHRpbmcgdGhlCiAgKiBzYW1lIHJlZ2lvbi4KICAqLwotaW50IHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbnQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICppdGVyX3ZtYTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKQEAgLTIwNzMsNiArMjA3MSwxNCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IGh1Z2VfemVyb3BhZ2Vfb2socHRlX3QgKnB0ZXAsIGludCB3cml0ZSwgaW50IHNoYXJlZCkKK3sKKwlpZiAoIXB0ZXAgfHwgd3JpdGUgfHwgc2hhcmVkKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlcCkpOworfQorCiBpbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLAogCQkJdW5zaWduZWQgbG9uZyAqcG9zaXRpb24sIGludCAqbGVuZ3RoLCBpbnQgaSwKQEAgLTIwODIsNiArMjA4OCw4IEBACiAJdW5zaWduZWQgbG9uZyB2YWRkciA9ICpwb3NpdGlvbjsKIAlpbnQgcmVtYWluZGVyID0gKmxlbmd0aDsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpOworCWludCB6ZXJvcGFnZV9vayA9IDA7CisJaW50IHNoYXJlZCA9IHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQ7CiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCXdoaWxlICh2YWRkciA8IHZtYS0+dm1fZW5kICYmIHJlbWFpbmRlcikgewpAQCAtMjA5NCw4ICsyMTAyLDExIEBACiAJCSAqIGZpcnN0LCBmb3IgdGhlIHBhZ2UgaW5kZXhpbmcgYmVsb3cgdG8gd29yay4KIAkJICovCiAJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgdmFkZHIgJiBodWdlX3BhZ2VfbWFzayhoKSk7CisJCWlmIChodWdlX3plcm9wYWdlX29rKHB0ZSwgd3JpdGUsIHNoYXJlZCkpCisJCQl6ZXJvcGFnZV9vayA9IDE7CiAKLQkJaWYgKCFwdGUgfHwgaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpIHx8CisJCWlmICghcHRlIHx8CisJCSAgICAoaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpICYmICF6ZXJvcGFnZV9vaykgfHwKIAkJICAgICh3cml0ZSAmJiAhcHRlX3dyaXRlKGh1Z2VfcHRlcF9nZXQocHRlKSkpKSB7CiAJCQlpbnQgcmV0OwogCkBAIC0yMTE1LDggKzIxMjYsMTEgQEAKIAkJcGFnZSA9IHB0ZV9wYWdlKGh1Z2VfcHRlcF9nZXQocHRlKSk7CiBzYW1lX3BhZ2U6CiAJCWlmIChwYWdlcykgewotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlwYWdlc1tpXSA9IHBhZ2UgKyBwZm5fb2Zmc2V0OworCQkJaWYgKHplcm9wYWdlX29rKQorCQkJCXBhZ2VzW2ldID0gWkVST19QQUdFKDApOworCQkJZWxzZQorCQkJCXBhZ2VzW2ldID0gcGFnZSArIHBmbl9vZmZzZXQ7CisJCQlnZXRfcGFnZShwYWdlc1tpXSk7CiAJCX0KIAogCQlpZiAodm1hcykKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDFmNDNmNzQuLmU0ZTcyOGIgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKKysrIGIvbW0vaW50ZXJuYWwuaApAQCAtMzksNiArMzksMTUgQEAKIAlhdG9taWNfZGVjKCZwYWdlLT5fY291bnQpOwogfQogCisvKgorICogaW4gbW0vdm1zY2FuLmM6CisgKi8KK2V4dGVybiBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBwdXRiYWNrX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKworLyoKKyAqIGluIG1tL3BhZ2VfYWxsb2MuYworICovCiBleHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfYm9vdG1lbShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIAogLyoKQEAgLTUyLDYgKzYxLDEyMCBAQAogCXJldHVybiBwYWdlX3ByaXZhdGUocGFnZSk7CiB9CiAKK2V4dGVybiBsb25nIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworc3RhdGljIGlubGluZSB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX2FsbChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwltdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHZtYS0+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+cGFyZW50KSA9PSBOVUxMKSkgeworCQlwYWdlX2Nncm91cF9pbml0KCk7CiAJCW1lbSA9ICZpbml0X21lbV9jZ3JvdXA7Ci0JCXBhZ2VfY2dyb3VwX2NhY2hlID0gS01FTV9DQUNIRShwYWdlX2Nncm91cCwgU0xBQl9QQU5JQyk7CiAJfSBlbHNlIHsKIAkJbWVtID0gbWVtX2Nncm91cF9hbGxvYygpOwogCQlpZiAoIW1lbSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMTAwMmY0Ny4uMTY0OTUxYyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTExMjksMTIgKzExMjksMTcgQEAKIAlyZXR1cm4gIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+ZmF1bHQ7CiB9CiAKLWludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAorCisKK2ludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgZmxhZ3MsCiAJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IHZtX2ZsYWdzOworCXVuc2lnbmVkIGludCB2bV9mbGFncyA9IDA7CisJaW50IHdyaXRlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfV1JJVEUpOworCWludCBmb3JjZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0ZPUkNFKTsKKwlpbnQgaWdub3JlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyk7CiAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiAwOwpAQCAtMTE1OCw3ICsxMTYzLDkgQEAKIAkJCXB1ZF90ICpwdWQ7CiAJCQlwbWRfdCAqcG1kOwogCQkJcHRlX3QgKnB0ZTsKLQkJCWlmICh3cml0ZSkgLyogdXNlciBnYXRlIHBhZ2VzIGFyZSByZWFkLW9ubHkgKi8KKworCQkJLyogdXNlciBnYXRlIHBhZ2VzIGFyZSByZWFkLW9ubHkgKi8KKwkJCWlmICghaWdub3JlICYmIHdyaXRlKQogCQkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCQkJaWYgKHBnID4gVEFTS19TSVpFKQogCQkJCXBnZCA9IHBnZF9vZmZzZXRfayhwZyk7CkBAIC0xMTkwLDggKzExOTcsOSBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXZtYSB8fCAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpCi0JCQkJfHwgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQorCQlpZiAoIXZtYSB8fAorCQkgICAgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSB8fAorCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKIAkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCiAJCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkgewpAQCAtMTI2Niw2ICsxMjc0LDIzIEBACiAJfSB3aGlsZSAobGVuKTsKIAlyZXR1cm4gaTsKIH0KKworaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3cml0ZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX1dSSVRFOworCWlmIChmb3JjZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX0ZPUkNFOworCisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwKKwkJCQlzdGFydCwgbGVuLCBmbGFncywKKwkJCQlwYWdlcywgdm1hcyk7Cit9CisKIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCiBwdGVfdCAqZ2V0X2xvY2tlZF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTEyOTYsMTggKzEzMjEsMTQgQEAKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAotCXJldHZhbCA9IG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQogCXJldHZhbCA9IC1FSU5WQUw7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQlnb3RvIG91dF91bmNoYXJnZTsKKwkJZ290byBvdXQ7CiAJcmV0dmFsID0gLUVOT01FTTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAlwdGUgPSBnZXRfbG9ja2VkX3B0ZShtbSwgYWRkciwgJnB0bCk7CiAJaWYgKCFwdGUpCi0JCWdvdG8gb3V0X3VuY2hhcmdlOworCQlnb3RvIG91dDsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKCFwdGVfbm9uZSgqcHRlKSkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTMyMyw4ICsxMzQ0LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogb3V0X3VubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKLW91dF91bmNoYXJnZToKLQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE4NTgsNiArMTg3NywxNSBAQAogCW5ld19wYWdlID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsIHZtYSwgYWRkcmVzcyk7CiAJaWYgKCFuZXdfcGFnZSkKIAkJZ290byBvb207CisJLyoKKwkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKKwkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogZm9yIExSVSBtYW5pcHVsYXRpb24gKi8KKwkJY2xlYXJfcGFnZV9tbG9jayhvbGRfcGFnZSk7CisJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKKwl9CiAJY293X3VzZXJfcGFnZShuZXdfcGFnZSwgb2xkX3BhZ2UsIGFkZHJlc3MsIHZtYSk7CiAJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOwogCkBAIC0xODg2LDExICsxOTE0LDEzIEBACiAJCSAqIHRocmVhZCBkb2luZyBDT1cuCiAJCSAqLwogCQlwdGVwX2NsZWFyX2ZsdXNoX25vdGlmeSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwotCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7Ci0JCWxydV9jYWNoZV9hZGRfYWN0aXZlKG5ld19wYWdlKTsKKwkJU2V0UGFnZVN3YXBCYWNrZWQobmV3X3BhZ2UpOworCQlscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShuZXdfcGFnZSwgdm1hKTsKIAkJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChuZXdfcGFnZSwgdm1hLCBhZGRyZXNzKTsKIAorLy9UT0RPOiAgaXMgdGhpcyBzYWZlPyAgZG9fYW5vbnltb3VzX3BhZ2UoKSBkb2VzIGl0IHRoaXMgd2F5LgorCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CiAJCWlmIChvbGRfcGFnZSkgewogCQkJLyoKIAkJCSAqIE9ubHkgYWZ0ZXIgc3dpdGNoaW5nIHRoZSBwdGUgdG8gdGhlIG5ldyBwYWdlIG1heQpAQCAtMjI4OCwxNiArMjMxOCwxNyBAQAogCQljb3VudF92bV9ldmVudChQR01BSkZBVUxUKTsKIAl9CiAKLQlpZiAobWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSB7Ci0JCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwotCQlyZXQgPSBWTV9GQVVMVF9PT007Ci0JCWdvdG8gb3V0OwotCX0KLQogCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwogCWxvY2tfcGFnZShwYWdlKTsKIAlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKIAorCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0gVk1fRkFVTFRfT09NOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyoKIAkgKiBCYWNrIG91dCBpZiBzb21lYm9keSBlbHNlIGFscmVhZHkgZmF1bHRlZCBpbiB0aGlzIHB0ZS4KIAkgKi8KQEAgLTIzMjQsNyArMjM1NSw3IEBACiAJcGFnZV9hZGRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAKIAlzd2FwX2ZyZWUoZW50cnkpOwotCWlmICh2bV9zd2FwX2Z1bGwoKSkKKwlpZiAodm1fc3dhcF9mdWxsKCkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHx8IFBhZ2VNbG9ja2VkKHBhZ2UpKQogCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIApAQCAtMjM4Miw3ICsyNDEzLDggQEAKIAlpZiAoIXB0ZV9ub25lKCpwYWdlX3RhYmxlKSkKIAkJZ290byByZWxlYXNlOwogCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7Ci0JbHJ1X2NhY2hlX2FkZF9hY3RpdmUocGFnZSk7CisJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CisJbHJ1X2NhY2hlX2FkZF9hY3RpdmVfb3JfdW5ldmljdGFibGUocGFnZSwgdm1hKTsKIAlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCkBAIC0yNDIzLDYgKzI0NTUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXB0ZV90IGVudHJ5OwogCWludCBhbm9uID0gMDsKKwlpbnQgY2hhcmdlZCA9IDA7CiAJc3RydWN0IHBhZ2UgKmRpcnR5X3BhZ2UgPSBOVUxMOwogCXN0cnVjdCB2bV9mYXVsdCB2bWY7CiAJaW50IHJldDsKQEAgLTI0NjMsNiArMjQ5NiwxOCBAQAogCQkJCXJldCA9IFZNX0ZBVUxUX09PTTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KKwkJCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKKwkJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJY2hhcmdlZCA9IDE7CisJCQkvKgorCQkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCisJCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJCQkgKi8KKwkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQorCQkJCWNsZWFyX3BhZ2VfbWxvY2sodm1mLnBhZ2UpOwogCQkJY29weV91c2VyX2hpZ2hwYWdlKHBhZ2UsIHZtZi5wYWdlLCBhZGRyZXNzLCB2bWEpOwogCQkJX19TZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCX0gZWxzZSB7CkBAIC0yNDk3LDExICsyNTQyLDYgQEAKIAogCX0KIAotCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gVk1fRkFVTFRfT09NOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlwYWdlX3RhYmxlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKIAogCS8qCkBAIC0yNTIwLDExICsyNTYwLDExIEBACiAJCWVudHJ5ID0gbWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKIAkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkKIAkJCWVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7Ci0JCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAkJaWYgKGFub24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKKwkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQlTZXRQYWdlU3dhcEJhY2tlZChwYWdlKTsKKwkJCWxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHBhZ2UsIHZtYSk7CisJCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJCX0gZWxzZSB7CiAJCQlpbmNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwogCQkJcGFnZV9hZGRfZmlsZV9ybWFwKHBhZ2UpOwpAQCAtMjUzMywxMSArMjU3MywxNCBAQAogCQkJCWdldF9wYWdlKGRpcnR5X3BhZ2UpOwogCQkJfQogCQl9CisvL1RPRE86ICBpcyB0aGlzIHNhZmU/ICBkb19hbm9ueW1vdXNfcGFnZSgpIGRvZXMgaXQgdGhpcyB3YXkuCisJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAogCQkvKiBubyBuZWVkIHRvIGludmFsaWRhdGU6IGEgbm90LXByZXNlbnQgcGFnZSB3b24ndCBiZSBjYWNoZWQgKi8KIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAl9IGVsc2UgewotCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CisJCWlmIChjaGFyZ2VkKQorCQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogCQlpZiAoYW5vbikKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJZWxzZQpAQCAtMjc3MiwxOSArMjgxNSw5IEBACiAJbGVuID0gRElWX1JPVU5EX1VQKGVuZCwgUEFHRV9TSVpFKSAtIGFkZHIvUEFHRV9TSVpFOwogCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLAogCQkJbGVuLCB3cml0ZSwgMCwgTlVMTCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJLyoKLQkJICAgU1VTIHJlcXVpcmUgc3RyYW5nZSByZXR1cm4gdmFsdWUgdG8gbWxvY2sKLQkJICAgIC0gaW52YWxpZCBhZGRyIGdlbmVyYXRlIHRvIEVOT01FTS4KLQkJICAgIC0gb3V0IG9mIG1lbW9yeSBzaG91bGQgZ2VuZXJhdGUgRUFHQUlOLgotCQkqLwotCQlpZiAocmV0ID09IC1FRkFVTFQpCi0JCQlyZXQgPSAtRU5PTUVNOwotCQllbHNlIGlmIChyZXQgPT0gLUVOT01FTSkKLQkJCXJldCA9IC1FQUdBSU47CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiByZXQgPT0gbGVuID8gMCA6IC1FTk9NRU07CisJcmV0dXJuIHJldCA9PSBsZW4gPyAwIDogLUVGQVVMVDsKIH0KIAogI2lmICFkZWZpbmVkKF9fSEFWRV9BUkNIX0dBVEVfQVJFQSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDg5ZmVlMmQuLjY4MzdhMTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtMzIzLDExICszMjQsMTEgQEAKIAlCVUdfT04ocGh5c19zdGFydF9wZm4gJiB+UEFHRV9TRUNUSU9OX01BU0spOwogCUJVR19PTihucl9wYWdlcyAlIFBBR0VTX1BFUl9TRUNUSU9OKTsKIAotCXJlbGVhc2VfbWVtX3JlZ2lvbihwaHlzX3N0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBucl9wYWdlcyAqIFBBR0VfU0laRSk7Ci0KIAlzZWN0aW9uc190b19yZW1vdmUgPSBucl9wYWdlcyAvIFBBR0VTX1BFUl9TRUNUSU9OOwogCWZvciAoaSA9IDA7IGkgPCBzZWN0aW9uc190b19yZW1vdmU7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBoeXNfc3RhcnRfcGZuICsgaSpQQUdFU19QRVJfU0VDVElPTjsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBmbiA8PCBQQUdFX1NISUZULAorCQkJCSAgIFBBR0VTX1BFUl9TRUNUSU9OIDw8IFBBR0VfU0hJRlQpOwogCQlyZXQgPSBfX3JlbW92ZV9zZWN0aW9uKHpvbmUsIF9fcGZuX3RvX3NlY3Rpb24ocGZuKSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTY1Nyw4ICs2NTgsOSBAQAogCQkgKiBXZSBjYW4gc2tpcCBmcmVlIHBhZ2VzLiBBbmQgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIHBhZ2VzIG9uCiAJCSAqIExSVS4KIAkJICovCi0JCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgJnNvdXJjZSk7CisJCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSk7CiAJCWlmICghcmV0KSB7IC8qIFN1Y2Nlc3MgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnNvdXJjZSk7CiAJCQltb3ZlX3BhZ2VzLS07CiAJCX0gZWxzZSB7CiAJCQkvKiBCZWNhc3VlIHdlIGRvbid0IGhhdmUgYmlnIHpvbmUtPmxvY2suIHdlIHNob3VsZApAQCAtODQ5LDEwICs4NTEsMTkgQEAKIAogCXJldHVybiByZXQ7CiB9CisKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisKKwlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7CisJZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOworCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOworfQogI2Vsc2UKIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfbWVtb3J5KTsKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLworRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDgzMzY5MDUuLjM2ZjQyNTcgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC05Myw2ICs5Myw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIC8qIEludGVybmFsIGZsYWdzICovCiAjZGVmaW5lIE1QT0xfTUZfRElTQ09OVElHX09LIChNUE9MX01GX0lOVEVSTkFMIDw8IDApCS8qIFNraXAgY2hlY2tzIGZvciBjb250aW51b3VzIHZtYXMgKi8KICNkZWZpbmUgTVBPTF9NRl9JTlZFUlQgKE1QT0xfTUZfSU5URVJOQUwgPDwgMSkJCS8qIEludmVydCBjaGVjayBmb3Igbm9kZW1hc2sgKi8KQEAgLTc2Miw4ICs3NjQsMTEgQEAKIAkvKgogCSAqIEF2b2lkIG1pZ3JhdGluZyBhIHBhZ2UgdGhhdCBpcyBzaGFyZWQgd2l0aCBvdGhlcnMuCiAJICovCi0JaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkKLQkJaXNvbGF0ZV9scnVfcGFnZShwYWdlLCBwYWdlbGlzdCk7CisJaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkgeworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgcGFnZWxpc3QpOworCQl9CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19ub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbm9kZSwgaW50ICoqeCkKQEAgLTIxOTcsNyArMjIwMiw3IEBACiAJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCiAJCW1kLT5zd2FwY2FjaGUrKzsKIAotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCWlmIChQYWdlQWN0aXZlKHBhZ2UpIHx8IFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKIAkJbWQtPmFjdGl2ZSsrOwogCiAJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMmE4MDEzNi4uNjYwMjk0MSAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMzcsMzYgKzM3LDYgQEAKICNkZWZpbmUgbHJ1X3RvX3BhZ2UoX2hlYWQpIChsaXN0X2VudHJ5KChfaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQogCiAvKgotICogSXNvbGF0ZSBvbmUgcGFnZSBmcm9tIHRoZSBMUlUgbGlzdHMuIElmIHN1Y2Nlc3NmdWwgcHV0IGl0IG9udG8KLSAqIHRoZSBpbmRpY2F0ZWQgbGlzdCB3aXRoIGVsZXZhdGVkIHBhZ2UgY291bnQuCi0gKgotICogUmVzdWx0OgotICogIC1FQlVTWTogcGFnZSBub3Qgb24gTFJVIGxpc3QKLSAqICAwOiBwYWdlIHJlbW92ZWQgZnJvbSBMUlUgbGlzdCBhbmQgYWRkZWQgdG8gdGhlIHNwZWNpZmllZCBsaXN0LgotICovCi1pbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCi17Ci0JaW50IHJldCA9IC1FQlVTWTsKLQotCWlmIChQYWdlTFJVKHBhZ2UpKSB7Ci0JCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwotCi0JCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpIHsKLQkJCXJldCA9IDA7Ci0JCQlDbGVhclBhZ2VMUlUocGFnZSk7Ci0JCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKLQkJCQlkZWxfcGFnZV9mcm9tX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwotCQkJZWxzZQotCQkJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgcGFnZWxpc3QpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogbWlncmF0ZV9wcmVwKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB3ZSBzdGFydCBjb21waWxpbmcgYSBsaXN0IG9mIHBhZ2VzCiAgKiB0byBiZSBtaWdyYXRlZCB1c2luZyBpc29sYXRlX2xydV9wYWdlKCkuCiAgKi8KQEAgLTgzLDIzICs1Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX3RvX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewotCQkvKgotCQkgKiBscnVfY2FjaGVfYWRkX2FjdGl2ZSBjaGVja3MgdGhhdAotCQkgKiB0aGUgUEdfYWN0aXZlIGJpdCBpcyBvZmYuCi0JCSAqLwotCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7Ci0JCWxydV9jYWNoZV9hZGRfYWN0aXZlKHBhZ2UpOwotCX0gZWxzZSB7Ci0JCWxydV9jYWNoZV9hZGQocGFnZSk7Ci0JfQotCXB1dF9wYWdlKHBhZ2UpOwotfQotCiAvKgotICogQWRkIGlzb2xhdGVkIHBhZ2VzIG9uIHRoZSBsaXN0IGJhY2sgdG8gdGhlIExSVS4KKyAqIEFkZCBpc29sYXRlZCBwYWdlcyBvbiB0aGUgbGlzdCBiYWNrIHRvIHRoZSBMUlUgdW5kZXIgcGFnZSBsb2NrCisgKiB0byBhdm9pZCBsZWFraW5nIGV2aWN0YWJsZSBwYWdlcyBiYWNrIG9udG8gdW5ldmljdGFibGUgbGlzdC4KICAqCiAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgcHV0IGJhY2suCiAgKi8KQEAgLTExMSw3ICs2Nyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgcGFnZTIsIGwsIGxydSkgewogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJbW92ZV90b19scnUocGFnZSk7CisJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CiAJCWNvdW50Kys7CiAJfQogCXJldHVybiBjb3VudDsKQEAgLTM3NCw4ICszMzAsNiBAQAogCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9GSUxFX1BBR0VTKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKLQlpZiAoIVBhZ2VTd2FwQ2FjaGUobmV3cGFnZSkpCi0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzg1LDYgKzMzOSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1pZ3JhdGVfcGFnZV9jb3B5KHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlpbnQgYW5vbjsKKwogCWNvcHlfaGlnaHBhZ2UobmV3cGFnZSwgcGFnZSk7CiAKIAlpZiAoUGFnZUVycm9yKHBhZ2UpKQpAQCAtMzkzLDggKzM0OSwxMSBAQAogCQlTZXRQYWdlUmVmZXJlbmNlZChuZXdwYWdlKTsKIAlpZiAoUGFnZVVwdG9kYXRlKHBhZ2UpKQogCQlTZXRQYWdlVXB0b2RhdGUobmV3cGFnZSk7Ci0JaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJaWYgKFRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7CiAJCVNldFBhZ2VBY3RpdmUobmV3cGFnZSk7CisJfSBlbHNlCisJCXVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKIAlpZiAoUGFnZUNoZWNrZWQocGFnZSkpCiAJCVNldFBhZ2VDaGVja2VkKG5ld3BhZ2UpOwogCWlmIChQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpKQpAQCAtNDEyLDE0ICszNzEsMjAgQEAKIAkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMobmV3cGFnZSk7CiAgCX0KIAorCW1sb2NrX21pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKKwogI2lmZGVmIENPTkZJR19TV0FQCiAJQ2xlYXJQYWdlU3dhcENhY2hlKHBhZ2UpOwogI2VuZGlmCi0JQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwogCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwkvKiBwYWdlLT5tYXBwaW5nIGNvbnRhaW5zIGEgZmxhZyBmb3IgUGFnZUFub24oKSAqLworCWFub24gPSBQYWdlQW5vbihwYWdlKTsKIAlwYWdlLT5tYXBwaW5nID0gTlVMTDsKIAorCWlmICghYW5vbikgLyogVGhpcyBwYWdlIHdhcyByZW1vdmVkIGZyb20gcmFkaXgtdHJlZS4gKi8KKwkJbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHBhZ2UpOworCiAJLyoKIAkgKiBJZiBhbnkgd2FpdGVycyBoYXZlIGFjY3VtdWxhdGVkIG9uIHRoZSBuZXcgcGFnZSB0aGVuCiAJICogd2FrZSB0aGVtIHVwLgpAQCAtNTk0LDYgKzU1OSwxMCBAQAogICoKICAqIFRoZSBuZXcgcGFnZSB3aWxsIGhhdmUgcmVwbGFjZWQgdGhlIG9sZCBwYWdlIGlmIHRoaXMgZnVuY3Rpb24KICAqIGlzIHN1Y2Nlc3NmdWwuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogICA8IDAgLSBlcnJvciBjb2RlCisgKiAgPT0gMCAtIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBtb3ZlX3RvX25ld19wYWdlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTYxMSw2ICs1ODAsOCBAQAogCS8qIFByZXBhcmUgbWFwcGluZyBmb3IgdGhlIG5ldyBwYWdlLiovCiAJbmV3cGFnZS0+aW5kZXggPSBwYWdlLT5pbmRleDsKIAluZXdwYWdlLT5tYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCVNldFBhZ2VTd2FwQmFja2VkKG5ld3BhZ2UpOwogCiAJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAlpZiAoIW1hcHBpbmcpCkBAIC02NTQsOSArNjI1LDEwIEBACiAJaWYgKCFuZXdwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpCisJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSkgewogCQkvKiBwYWdlIHdhcyBmcmVlZCBmcm9tIHVuZGVyIHVzLiBTbyB3ZSBhcmUgZG9uZS4gKi8KIAkJZ290byBtb3ZlX25ld3BhZ2U7CisJfQogCiAJY2hhcmdlID0gbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihwYWdlLCBuZXdwYWdlKTsKIAlpZiAoY2hhcmdlID09IC1FTk9NRU0pIHsKQEAgLTczMCw3ICs3MDIsNiBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAogdW5sb2NrOgotCiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAKIAlpZiAocmMgIT0gLUVBR0FJTikgewpAQCAtNzQxLDE3ICs3MTIsMTkgQEAKICAJCSAqIHJlc3RvcmVkLgogIAkJICovCiAgCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLSAJCW1vdmVfdG9fbHJ1KHBhZ2UpOworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogCX0KIAogbW92ZV9uZXdwYWdlOgogCWlmICghY2hhcmdlKQogCQltZW1fY2dyb3VwX2VuZF9taWdyYXRpb24obmV3cGFnZSk7CisKIAkvKgogCSAqIE1vdmUgdGhlIG5ldyBwYWdlIHRvIHRoZSBMUlUuIElmIG1pZ3JhdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwKIAkgKiB0aGVuIHRoaXMgd2lsbCBmcmVlIHRoZSBwYWdlLgogCSAqLwotCW1vdmVfdG9fbHJ1KG5ld3BhZ2UpOworCXB1dGJhY2tfbHJ1X3BhZ2UobmV3cGFnZSk7CisKIAlpZiAocmVzdWx0KSB7CiAJCWlmIChyYykKIAkJCSpyZXN1bHQgPSByYzsKQEAgLTg1OCw5ICs4MzEsMTEgQEAKICAqIE1vdmUgYSBzZXQgb2YgcGFnZXMgYXMgaW5kaWNhdGVkIGluIHRoZSBwbSBhcnJheS4gVGhlIGFkZHIKICAqIGZpZWxkIG11c3QgYmUgc2V0IHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhZ2UgdG8gYmUgbW92ZWQKICAqIGFuZCB0aGUgbm9kZSBudW1iZXIgbXVzdCBjb250YWluIGEgdmFsaWQgdGFyZ2V0IG5vZGUuCisgKiBUaGUgcG0gYXJyYXkgZW5kcyB3aXRoIG5vZGUgPSBNQVhfTlVNTk9ERVMuCiAgKi8KLXN0YXRpYyBpbnQgZG9fbW92ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0sCi0JCQkJaW50IG1pZ3JhdGVfYWxsKQorc3RhdGljIGludCBkb19tb3ZlX3BhZ2VfdG9fbm9kZV9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSwKKwkJCQkgICAgICBpbnQgbWlncmF0ZV9hbGwpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcGFnZV90b19ub2RlICpwcDsKQEAgLTkxNCw3ICs4ODksOSBAQAogCQkJCSFtaWdyYXRlX2FsbCkKIAkJCWdvdG8gcHV0X2FuZF9zZXQ7CiAKLQkJZXJyID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlLCAmcGFnZWxpc3QpOworCQllcnIgPSBpc29sYXRlX2xydV9wYWdlKHBhZ2UpOworCQlpZiAoIWVycikKKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnBhZ2VsaXN0KTsKIHB1dF9hbmRfc2V0OgogCQkvKgogCQkgKiBFaXRoZXIgcmVtb3ZlIHRoZSBkdXBsaWNhdGUgcmVmY291bnQgZnJvbQpAQCAtOTI2LDM2ICs5MDMsMTE4IEBACiAJCXBwLT5zdGF0dXMgPSBlcnI7CiAJfQogCisJZXJyID0gMDsKIAlpZiAoIWxpc3RfZW1wdHkoJnBhZ2VsaXN0KSkKIAkJZXJyID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlX25vZGUsCiAJCQkJKHVuc2lnbmVkIGxvbmcpcG0pOwotCWVsc2UKLQkJZXJyID0gLUVOT0VOVDsKIAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIAogLyoKLSAqIERldGVybWluZSB0aGUgbm9kZXMgb2YgYSBsaXN0IG9mIHBhZ2VzLiBUaGUgYWRkciBpbiB0aGUgcG0gYXJyYXkKLSAqIG11c3QgaGF2ZSBiZWVuIHNldCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHdoaWNoIHdlIHdhbnQgdG8gZGV0ZXJtaW5lCi0gKiB0aGUgbm9kZSBudW1iZXIuCisgKiBNaWdyYXRlIGFuIGFycmF5IG9mIHBhZ2UgYWRkcmVzcyBvbnRvIGFuIGFycmF5IG9mIG5vZGVzIGFuZCBmaWxsCisgKiB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBvZiBzdGF0dXMuCiAgKi8KLXN0YXRpYyBpbnQgZG9fcGFnZXNfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0pCitzdGF0aWMgaW50IGRvX3BhZ2VzX21vdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJIGNvbnN0IHZvaWQgX191c2VyICogX191c2VyICpwYWdlcywKKwkJCSBjb25zdCBpbnQgX191c2VyICpub2RlcywKKwkJCSBpbnQgX191c2VyICpzdGF0dXMsIGludCBmbGFncykKIHsKLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0gPSBOVUxMOworCW5vZGVtYXNrX3QgdGFza19ub2RlczsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKIAotCWZvciAoIDsgcG0tPm5vZGUgIT0gTUFYX05VTU5PREVTOyBwbSsrKSB7Ci0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJaW50IGVycjsKKwl0YXNrX25vZGVzID0gY3B1c2V0X21lbXNfYWxsb3dlZCh0YXNrKTsKKworCS8qIExpbWl0IG5yX3BhZ2VzIHNvIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIG1heSBub3Qgb3ZlcmZsb3cgKi8KKwlpZiAobnJfcGFnZXMgPj0gVUxPTkdfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlX3RvX25vZGUpIC0gMSkgeworCQllcnIgPSAtRTJCSUc7CisJCWdvdG8gb3V0OworCX0KKworCXBtID0gdm1hbGxvYygobnJfcGFnZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSk7CisJaWYgKCFwbSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEdldCBwYXJhbWV0ZXJzIGZyb20gdXNlciBzcGFjZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcG0KKwkgKiBhcnJheS4gUmV0dXJuIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSB1c2VyIGRpZCBzb21ldGhpbmcgd3JvbmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJY29uc3Qgdm9pZCBfX3VzZXIgKnA7CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJdm1hID0gZmluZF92bWEobW0sIHBtLT5hZGRyKTsKKwkJaWYgKGdldF91c2VyKHAsIHBhZ2VzICsgaSkpCisJCQlnb3RvIG91dF9wbTsKKworCQlwbVtpXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKKwkJaWYgKG5vZGVzKSB7CisJCQlpbnQgbm9kZTsKKworCQkJaWYgKGdldF91c2VyKG5vZGUsIG5vZGVzICsgaSkpCisJCQkJZ290byBvdXRfcG07CisKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlpZiAoIW5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCisJCQkJZ290byBvdXRfcG07CisKKwkJCWVyciA9IC1FQUNDRVM7CisJCQlpZiAoIW5vZGVfaXNzZXQobm9kZSwgdGFza19ub2RlcykpCisJCQkJZ290byBvdXRfcG07CisKKwkJCXBtW2ldLm5vZGUgPSBub2RlOworCQl9IGVsc2UKKwkJCXBtW2ldLm5vZGUgPSAwOwkvKiBhbnl0aGluZyB0byBub3QgbWF0Y2ggTUFYX05VTU5PREVTICovCisJfQorCS8qIEVuZCBtYXJrZXIgKi8KKwlwbVtucl9wYWdlc10ubm9kZSA9IE1BWF9OVU1OT0RFUzsKKworCWVyciA9IGRvX21vdmVfcGFnZV90b19ub2RlX2FycmF5KG1tLCBwbSwgZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKTsKKwlpZiAoZXJyID49IDApCisJCS8qIFJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspCisJCQlpZiAocHV0X3VzZXIocG1baV0uc3RhdHVzLCBzdGF0dXMgKyBpKSkKKwkJCQllcnIgPSAtRUZBVUxUOworCitvdXRfcG06CisJdmZyZWUocG0pOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIG5vZGVzIG9mIGFuIGFycmF5IG9mIHBhZ2VzIGFuZCBzdG9yZSBpdCBpbiBhbiBhcnJheSBvZiBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgZG9fcGFnZXNfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSBjb25zdCB2b2lkIF9fdXNlciAqIF9fdXNlciAqcGFnZXMsCisJCQkgaW50IF9fdXNlciAqc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwlpbnQgZXJyOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJY29uc3Qgdm9pZCBfX3VzZXIgKnA7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCWVyciA9IC1FRkFVTFQ7CisJCWlmIChnZXRfdXNlcihwLCBwYWdlcytpKSkKKwkJCWdvdG8gb3V0OworCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHA7CisKKwkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCQlpZiAoIXZtYSkKIAkJCWdvdG8gc2V0X3N0YXR1czsKIAotCQlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBwbS0+YWRkciwgMCk7CisJCXBhZ2UgPSBmb2xsb3dfcGFnZSh2bWEsIGFkZHIsIDApOwogCiAJCWVyciA9IFBUUl9FUlIocGFnZSk7CiAJCWlmIChJU19FUlIocGFnZSkpCkBAIC05NjgsMTEgKzEwMjcsMTMgQEAKIAogCQllcnIgPSBwYWdlX3RvX25pZChwYWdlKTsKIHNldF9zdGF0dXM6Ci0JCXBtLT5zdGF0dXMgPSBlcnI7CisJCXB1dF91c2VyKGVyciwgc3RhdHVzK2kpOwogCX0KKwllcnIgPSAwOwogCitvdXQ6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtOTg0LDEyICsxMDQ1LDkgQEAKIAkJCWNvbnN0IGludCBfX3VzZXIgKm5vZGVzLAogCQkJaW50IF9fdXNlciAqc3RhdHVzLCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGVyciA9IDA7Ci0JaW50IGk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCW5vZGVtYXNrX3QgdGFza19ub2RlczsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSA9IE5VTEw7CisJaW50IGVycjsKIAogCS8qIENoZWNrIGZsYWdzICovCiAJaWYgKGZsYWdzICYgfihNUE9MX01GX01PVkV8TVBPTF9NRl9NT1ZFX0FMTCkpCkBAIC0xMDIxLDc1ICsxMDc5LDIxIEBACiAJICAgIChjdXJyZW50LT51aWQgIT0gdGFzay0+c3VpZCkgJiYgKGN1cnJlbnQtPnVpZCAhPSB0YXNrLT51aWQpICYmCiAJICAgICFjYXBhYmxlKENBUF9TWVNfTklDRSkpIHsKIAkJZXJyID0gLUVQRVJNOwotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0OwogCX0KIAogIAllcnIgPSBzZWN1cml0eV90YXNrX21vdmVtZW1vcnkodGFzayk7CiAgCWlmIChlcnIpCi0gCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0OwogCi0KLQl0YXNrX25vZGVzID0gY3B1c2V0X21lbXNfYWxsb3dlZCh0YXNrKTsKLQotCS8qIExpbWl0IG5yX3BhZ2VzIHNvIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIG1heSBub3Qgb3ZlcmZsb3cgKi8KLQlpZiAobnJfcGFnZXMgPj0gVUxPTkdfTUFYIC8gc2l6ZW9mKHN0cnVjdCBwYWdlX3RvX25vZGUpIC0gMSkgewotCQllcnIgPSAtRTJCSUc7Ci0JCWdvdG8gb3V0MjsKKwlpZiAobm9kZXMpIHsKKwkJZXJyID0gZG9fcGFnZXNfbW92ZShtbSwgdGFzaywgbnJfcGFnZXMsIHBhZ2VzLCBub2Rlcywgc3RhdHVzLAorCQkJCSAgICBmbGFncyk7CisJfSBlbHNlIHsKKwkJZXJyID0gZG9fcGFnZXNfc3RhdChtbSwgbnJfcGFnZXMsIHBhZ2VzLCBzdGF0dXMpOwogCX0KIAotCXBtID0gdm1hbGxvYygobnJfcGFnZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSk7Ci0JaWYgKCFwbSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDI7Ci0JfQotCi0JLyoKLQkgKiBHZXQgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3BhY2UgYW5kIGluaXRpYWxpemUgdGhlIHBtCi0JICogYXJyYXkuIFJldHVybiB2YXJpb3VzIGVycm9ycyBpZiB0aGUgdXNlciBkaWQgc29tZXRoaW5nIHdyb25nLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7Ci0JCWNvbnN0IHZvaWQgX191c2VyICpwOwotCi0JCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChnZXRfdXNlcihwLCBwYWdlcyArIGkpKQotCQkJZ290byBvdXQ7Ci0KLQkJcG1baV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7Ci0JCWlmIChub2RlcykgewotCQkJaW50IG5vZGU7Ci0KLQkJCWlmIChnZXRfdXNlcihub2RlLCBub2RlcyArIGkpKQotCQkJCWdvdG8gb3V0OwotCi0JCQllcnIgPSAtRU5PREVWOwotCQkJaWYgKCFub2RlX3N0YXRlKG5vZGUsIE5fSElHSF9NRU1PUlkpKQotCQkJCWdvdG8gb3V0OwotCi0JCQllcnIgPSAtRUFDQ0VTOwotCQkJaWYgKCFub2RlX2lzc2V0KG5vZGUsIHRhc2tfbm9kZXMpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlwbVtpXS5ub2RlID0gbm9kZTsKLQkJfSBlbHNlCi0JCQlwbVtpXS5ub2RlID0gMDsJLyogYW55dGhpbmcgdG8gbm90IG1hdGNoIE1BWF9OVU1OT0RFUyAqLwotCX0KLQkvKiBFbmQgbWFya2VyICovCi0JcG1bbnJfcGFnZXNdLm5vZGUgPSBNQVhfTlVNTk9ERVM7Ci0KLQlpZiAobm9kZXMpCi0JCWVyciA9IGRvX21vdmVfcGFnZXMobW0sIHBtLCBmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpOwotCWVsc2UKLQkJZXJyID0gZG9fcGFnZXNfc3RhdChtbSwgcG0pOwotCi0JaWYgKGVyciA+PSAwKQotCQkvKiBSZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uICovCi0JCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQotCQkJaWYgKHB1dF91c2VyKHBtW2ldLnN0YXR1cywgc3RhdHVzICsgaSkpCi0JCQkJZXJyID0gLUVGQVVMVDsKLQogb3V0OgotCXZmcmVlKHBtKTsKLW91dDI6CiAJbW1wdXQobW0pOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCAwMWZiZTkzLi4wMDhlYTcwIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTgsMTAgKzgsMTggQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBpbnQgY2FuX2RvX21sb2NrKHZvaWQpCiB7CkBAIC0yMywxNyArMzEsMzgxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNhbl9kb19tbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogTWxvY2tlZCBwYWdlcyBhcmUgbWFya2VkIHdpdGggUGFnZU1sb2NrZWQoKSBmbGFnIGZvciBlZmZpY2llbnQgdGVzdGluZworICogaW4gdm1zY2FuIGFuZCwgcG9zc2libHksIHRoZSBmYXVsdCBwYXRoOyBhbmQgdG8gc3VwcG9ydCBzZW1pLWFjY3VyYXRlCisgKiBzdGF0aXN0aWNzLgorICoKKyAqIEFuIG1sb2NrZWQgcGFnZSBbUGFnZU1sb2NrZWQocGFnZSldIGlzIHVuZXZpY3RhYmxlLiAgQXMgc3VjaCwgaXQgd2lsbAorICogYmUgcGxhY2VkIG9uIHRoZSBMUlUgInVuZXZpY3RhYmxlIiBsaXN0LCByYXRoZXIgdGhhbiB0aGUgW2luXWFjdGl2ZSBsaXN0cy4KKyAqIFRoZSB1bmV2aWN0YWJsZSBsaXN0IGlzIGFuIExSVSBzaWJsaW5nIGxpc3QgdG8gdGhlIFtpbl1hY3RpdmUgbGlzdHMuCisgKiBQYWdlVW5ldmljdGFibGUgaXMgc2V0IHRvIGluZGljYXRlIHRoZSB1bmV2aWN0YWJsZSBzdGF0ZS4KKyAqCisgKiBXaGVuIGxhenkgbWxvY2tpbmcgdmlhIHZtc2NhbiwgaXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZQorICogdm1hJ3MgVk1fTE9DS0VEIHN0YXR1cyBpcyBub3QgY29uY3VycmVudGx5IGJlaW5nIG1vZGlmaWVkLCBvdGhlcndpc2Ugd2UKKyAqIG1heSBoYXZlIG1sb2NrZWQgYSBwYWdlIHRoYXQgaXMgYmVpbmcgbXVubG9ja2VkLiBTbyBsYXp5IG1sb2NrIG11c3QgdGFrZQorICogdGhlIG1tYXBfc2VtIGZvciByZWFkLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHZtYSByZWFsbHkgaXMgbG9ja2VkCisgKiAoc2VlIG1tL3JtYXAuYykuCisgKi8KKworLyoKKyAqICBMUlUgYWNjb3VudGluZyBmb3IgY2xlYXJfcGFnZV9tbG9jaygpCisgKi8KK3ZvaWQgX19jbGVhcl9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsJLyogdHJ1bmNhdGVkID8gKi8KKwkJcmV0dXJuOworCX0KKworCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHQ0xFQVJFRCk7CisJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKSB7CisJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUGFnZSBub3Qgb24gdGhlIExSVSB5ZXQuICBGbHVzaCBhbGwgcGFnZXZlY3MgYW5kIHJldHJ5LgorCQkgKi8KKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQorCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJZWxzZSBpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdTVFJBTkRFRCk7CisKKwl9Cit9CisKKy8qCisgKiBNYXJrIHBhZ2UgYXMgbWxvY2tlZCBpZiBub3QgYWxyZWFkeS4KKyAqIElmIHBhZ2Ugb24gTFJVLCBpc29sYXRlIGFuZCBwdXRiYWNrIHRvIG1vdmUgdG8gdW5ldmljdGFibGUgbGlzdC4KKyAqLwordm9pZCBtbG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJaWYgKCFUZXN0U2V0UGFnZU1sb2NrZWQocGFnZSkpIHsKKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTUxPQ0tFRCk7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJfQorfQorCisvKgorICogY2FsbGVkIGZyb20gbXVubG9jaygpL211bm1hcCgpIHBhdGggd2l0aCBwYWdlIHN1cHBvc2VkbHkgb24gdGhlIExSVS4KKyAqCisgKiBOb3RlOiAgdW5saWtlIG1sb2NrX3ZtYV9wYWdlKCksIHdlIGNhbid0IGp1c3QgY2xlYXIgdGhlIFBhZ2VNbG9ja2VkCisgKiBbaW4gdHJ5X3RvX211bmxvY2soKV0gYW5kIHRoZW4gYXR0ZW1wdCB0byBpc29sYXRlIHRoZSBwYWdlLiAgV2UgbXVzdAorICogaXNvbGF0ZSB0aGUgcGFnZSB0byBrZWVwIG90aGVycyBmcm9tIG1lc3Npbmcgd2l0aCBpdHMgdW5ldmljdGFibGUKKyAqIGFuZCBtbG9ja2VkIHN0YXRlIHdoaWxlIHRyeWluZyB0byBtdW5sb2NrLiAgSG93ZXZlciwgd2UgcHJlLWNsZWFyIHRoZQorICogbWxvY2tlZCBzdGF0ZSBhbnl3YXkgYXMgd2UgbWlnaHQgbG9zZSB0aGUgaXNvbGF0aW9uIHJhY2UgYW5kIHdlIG1pZ2h0CisgKiBub3QgZ2V0IGFub3RoZXIgY2hhbmNlIHRvIGNsZWFyIFBhZ2VNbG9ja2VkLiAgSWYgd2Ugc3VjY2Vzc2Z1bGx5CisgKiBpc29sYXRlIHRoZSBwYWdlIGFuZCB0cnlfdG9fbXVubG9jaygpIGRldGVjdHMgb3RoZXIgVk1fTE9DS0VEIHZtYXMKKyAqIG1hcHBpbmcgdGhlIHBhZ2UsIGl0IHdpbGwgcmVzdG9yZSB0aGUgUGFnZU1sb2NrZWQgc3RhdGUsIHVubGVzcyB0aGUgcGFnZQorICogaXMgbWFwcGVkIGluIGEgbm9uLWxpbmVhciB2bWEuICBTbywgd2UgZ28gYWhlYWQgYW5kIFNldFBhZ2VNbG9ja2VkKCksCisgKiBwZXJoYXBzIHJlZHVuZGFudGx5LgorICogSWYgd2UgbG9zZSB0aGUgaXNvbGF0aW9uIHJhY2UsIGFuZCB0aGUgcGFnZSBpcyBtYXBwZWQgYnkgb3RoZXIgVk1fTE9DS0VECisgKiB2bWFzLCB3ZSdsbCBkZXRlY3QgdGhpcyBpbiB2bXNjYW4tLXZpYSB0cnlfdG9fbXVubG9jaygpIG9yIHRyeV90b191bm1hcCgpCisgKiBlaXRoZXIgb2Ygd2hpY2ggd2lsbCByZXN0b3JlIHRoZSBQYWdlTWxvY2tlZCBzdGF0ZSBieSBjYWxsaW5nCisgKiBtbG9ja192bWFfcGFnZSgpIGFib3ZlLCBpZiBpdCBjYW4gZ3JhYiB0aGUgdm1hJ3MgbW1hcCBzZW0uCisgKi8KK3N0YXRpYyB2b2lkIG11bmxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCWlmIChUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkgeworCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKSB7CisJCQlpbnQgcmV0ID0gdHJ5X3RvX211bmxvY2socGFnZSk7CisJCQkvKgorCQkJICogZGlkIHRyeV90b191bmxvY2soKSBzdWNjZWVkIG9yIHB1bnQ/CisJCQkgKi8KKwkJCWlmIChyZXQgPT0gU1dBUF9TVUNDRVNTIHx8IHJldCA9PSBTV0FQX0FHQUlOKQorCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTVVOTE9DS0VEKTsKKworCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBsb3N0IHRoZSByYWNlLiAgbGV0IHRyeV90b191bm1hcCgpIGRlYWwKKwkJCSAqIHdpdGggaXQuICBBdCBsZWFzdCB3ZSBnZXQgdGhlIHBhZ2Ugc3RhdGUgYW5kCisJCQkgKiBtbG9jayBzdGF0cyByaWdodC4gIEhvd2V2ZXIsIHBhZ2UgaXMgc3RpbGwgb24KKwkJCSAqIHRoZSBub3JlY2xhaW0gbGlzdC4gIFdlJ2xsIGZpeCB0aGF0IHVwIHdoZW4KKwkJCSAqIHRoZSBwYWdlIGlzIGV2ZW50dWFsbHkgZnJlZWQgb3Igd2Ugc2NhbiB0aGUKKwkJCSAqIG5vcmVjbGFpbSBsaXN0LgorCQkJICovCisJCQlpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHU1RSQU5ERUQpOworCQkJZWxzZQorCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTVVOTE9DS0VEKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIC0gIG1sb2NrL211bmxvY2sgYSByYW5nZSBvZiBwYWdlcyBpbiB0aGUgdm1hLgorICogQHZtYTogICB0YXJnZXQgdm1hCisgKiBAc3RhcnQ6IHN0YXJ0IGFkZHJlc3MKKyAqIEBlbmQ6ICAgZW5kIGFkZHJlc3MKKyAqIEBtbG9jazogMCBpbmRpY2F0ZSBtdW5sb2NrLCBvdGhlcndpc2UgbWxvY2suCisgKgorICogSWYgQG1sb2NrID09IDAsIHVubG9jayBhbiBtbG9ja2VkIHJhbmdlOworICogZWxzZSBtbG9jayB0aGUgcmFuZ2Ugb2YgcGFnZXMuICBUaGlzIHRha2VzIGNhcmUgb2YgbWFraW5nIHRoZSBwYWdlcyBwcmVzZW50ICwKKyAqIHRvby4KKyAqCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLgorICoKKyAqIHZtYS0+dm1fbW0tPm1tYXBfc2VtIG11c3QgYmUgaGVsZCBmb3IgYXQgbGVhc3QgcmVhZC4KKyAqLworc3RhdGljIGxvbmcgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgaW50IG1sb2NrKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbMTZdOyAvKiAxNiBnaXZlcyBhIHJlYXNvbmFibGUgYmF0Y2ggKi8KKwlpbnQgbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFOworCWludCByZXQ7CisJaW50IGd1cF9mbGFncyA9IDA7CisKKwlWTV9CVUdfT04oc3RhcnQgJiB+UEFHRV9NQVNLKTsKKwlWTV9CVUdfT04oZW5kICAgJiB+UEFHRV9NQVNLKTsKKwlWTV9CVUdfT04oc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KTsKKwlWTV9CVUdfT04oZW5kICAgPiB2bWEtPnZtX2VuZCk7CisJVk1fQlVHX09OKCghcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKSAmJgorCQkgIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSAhPSAwKSk7CisKKwkvKgorCSAqIG1sb2NrOiAgIGRvbid0IHBhZ2UgcG9wdWxhdGUgaWYgcGFnZSBoYXMgUFJPVF9OT05FIHBlcm1pc3Npb24uCisJICogbXVubG9jazogdGhlIHBhZ2VzIGFsd2F5cyBkbyBtdW5sb2NrIGFsdGhyb3VnaAorCSAqICAgICAgICAgIGl0cyBoYXMgUFJPVF9OT05FIHBlcm1pc3Npb24uCisJICovCisJaWYgKCFtbG9jaykKKwkJZ3VwX2ZsYWdzIHw9IEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TOworCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKKwkJZ3VwX2ZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKworCWxydV9hZGRfZHJhaW5fYWxsKCk7CS8qIHB1c2ggY2FjaGVkIHBhZ2VzIHRvIExSVSAqLworCisJd2hpbGUgKG5yX3BhZ2VzID4gMCkgeworCQlpbnQgaTsKKworCQljb25kX3Jlc2NoZWQoKTsKKworCQkvKgorCQkgKiBnZXRfdXNlcl9wYWdlcyBtYWtlcyBwYWdlcyBwcmVzZW50IGlmIHdlIGFyZQorCQkgKiBzZXR0aW5nIG1sb2NrLiBhbmQgdGhpcyBleHRyYSByZWZlcmVuY2UgY291bnQgd2lsbAorCQkgKiBkaXNhYmxlIG1pZ3JhdGlvbiBvZiB0aGlzIHBhZ2UuICBIb3dldmVyLCBwYWdlIG1heQorCQkgKiBzdGlsbCBiZSB0cnVuY2F0ZWQgb3V0IGZyb20gdW5kZXIgdXMuCisJCSAqLworCQlyZXQgPSBfX2dldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBhZGRyLAorCQkJCW1pbl90KGludCwgbnJfcGFnZXMsIEFSUkFZX1NJWkUocGFnZXMpKSwKKwkJCQlndXBfZmxhZ3MsIHBhZ2VzLCBOVUxMKTsKKwkJLyoKKwkJICogVGhpcyBjYW4gaGFwcGVuIGZvciwgZS5nLiwgVk1fTk9OTElORUFSIHJlZ2lvbnMgYmVmb3JlCisJCSAqIGEgcGFnZSBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBhdCBhIGdpdmVuIG9mZnNldCwKKwkJICogb3IgZm9yIGFkZHJlc3NlcyB0aGF0IG1hcCBiZXlvbmQgZW5kIG9mIGEgZmlsZS4KKwkJICogV2UnbGwgbWxvY2sgdGhlIHRoZSBwYWdlcyBpZi93aGVuIHRoZXkgZ2V0IGZhdWx0ZWQgaW4uCisJCSAqLworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAocmV0ID09IDApIHsKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoZSB2bWEgaXMgdGhlcmUsIHNvIHRoZSBvbmx5IHRpbWUKKwkJCSAqIHdlIGNhbm5vdCBnZXQgYSBzaW5nbGUgcGFnZSBzaG91bGQgYmUgYW4KKwkJCSAqIGVycm9yIChyZXQgPCAwKSBjYXNlLgorCQkJICovCisJCQlXQVJOX09OKDEpOworCQkJYnJlYWs7CisJCX0KKworCQlscnVfYWRkX2RyYWluKCk7CS8qIHB1c2ggY2FjaGVkIHBhZ2VzIHRvIExSVSAqLworCisJCWZvciAoaSA9IDA7IGkgPCByZXQ7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCQkJLyoKKwkJCSAqIEJlY2F1c2Ugd2UgbG9jayBwYWdlIGhlcmUgYW5kIG1pZ3JhdGlvbiBpcyBibG9ja2VkCisJCQkgKiBieSB0aGUgZWxldmF0ZWQgcmVmZXJlbmNlLCB3ZSBuZWVkIG9ubHkgY2hlY2sgZm9yCisJCQkgKiBwYWdlIHRydW5jYXRpb24gKGZpbGUtY2FjaGUgb25seSkuCisJCQkgKi8KKwkJCWlmIChwYWdlLT5tYXBwaW5nKSB7CisJCQkJaWYgKG1sb2NrKQorCQkJCQltbG9ja192bWFfcGFnZShwYWdlKTsKKwkJCQllbHNlCisJCQkJCW11bmxvY2tfdm1hX3BhZ2UocGFnZSk7CisJCQl9CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCXB1dF9wYWdlKHBhZ2UpOwkJLyogcmVmIGZyb20gZ2V0X3VzZXJfcGFnZXMoKSAqLworCisJCQkvKgorCQkJICogaGVyZSB3ZSBhc3N1bWUgdGhhdCBnZXRfdXNlcl9wYWdlcygpIGhhcyBnaXZlbiB1cworCQkJICogYSBsaXN0IG9mIHZpcnR1YWxseSBjb250aWd1b3VzIHBhZ2VzLgorCQkJICovCisJCQlhZGRyICs9IFBBR0VfU0laRTsJLyogZm9yIG5leHQgZ2V0X3VzZXJfcGFnZXMoKSAqLworCQkJbnJfcGFnZXMtLTsKKwkJfQorCQlyZXQgPSAwOworCX0KKworCWxydV9hZGRfZHJhaW5fYWxsKCk7CS8qIHRvIHVwZGF0ZSBzdGF0cyAqLworCisJcmV0dXJuIHJldDsJLyogY291bnQgZW50aXJlIHZtYSBhcyBsb2NrZWRfdm0gKi8KK30KKworLyoKKyAqIGNvbnZlcnQgZ2V0X3VzZXJfcGFnZXMoKSByZXR1cm4gdmFsdWUgdG8gcG9zaXggbWxvY2soKSBlcnJvcgorICovCitzdGF0aWMgaW50IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKGxvbmcgcmV0dmFsKQoreworCWlmIChyZXR2YWwgPT0gLUVGQVVMVCkKKwkJcmV0dmFsID0gLUVOT01FTTsKKwllbHNlIGlmIChyZXR2YWwgPT0gLUVOT01FTSkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZWxzZSAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKKy8qCisgKiBKdXN0IG1ha2UgcGFnZXMgcHJlc2VudCBpZiBWTV9MT0NLRUQuICBOby1vcCBpZiB1bmxvY2tpbmcuCisgKi8KK3N0YXRpYyBsb25nIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCSAgIGludCBtbG9jaykKK3sKKwlpZiAobWxvY2sgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQorCQlyZXR1cm4gbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihsb25nIHJldHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKworLyoqCisgKiBtbG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtIG1sb2NrIHBhZ2VzIGluIHNwZWNpZmllZCB2bWEgcmFuZ2UuCisgKiBAdm1hIC0gdGhlIHZtYSBjb250YWluaW5nIHRoZSBzcGVjZmllZCBhZGRyZXNzIHJhbmdlCisgKiBAc3RhcnQgLSBzdGFydGluZyBhZGRyZXNzIGluIEB2bWEgdG8gbWxvY2sKKyAqIEBlbmQgICAtIGVuZCBhZGRyZXNzIFsrMV0gaW4gQHZtYSB0byBtbG9jaworICoKKyAqIEZvciBtbWFwKCkvbXJlbWFwKCkvZXhwYW5zaW9uIG9mIG1sb2NrZWQgdm1hLgorICoKKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MgZm9yICJub3JtYWwiIHZtYXMuCisgKgorICogcmV0dXJuIG51bWJlciBvZiBwYWdlcyBbPiAwXSB0byBiZSByZW1vdmVkIGZyb20gbG9ja2VkX3ZtIG9uIHN1Y2Nlc3MKKyAqIG9mICJzcGVjaWFsIiB2bWFzLgorICoKKyAqIHJldHVybiBuZWdhdGl2ZSBlcnJvciBpZiB2bWEgc3Bhbm5pbmcgQHN0YXJ0LUByYW5nZSBkaXNhcHBlYXJzIHdoaWxlCisgKiBtbWFwIHNlbWFwaG9yZSBpcyBkcm9wcGVkLiAgVW5saWtlbHk/CisgKi8KK2xvbmcgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCWludCBucl9wYWdlcyA9IChlbmQgLSBzdGFydCkgLyBQQUdFX1NJWkU7CisJQlVHX09OKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpOworCisJLyoKKwkgKiBmaWx0ZXIgdW5sb2NrYWJsZSB2bWFzCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKQorCQlnb3RvIG5vX21sb2NrOworCisJaWYgKCEoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fRE9OVEVYUEFORCB8IFZNX1JFU0VSVkVEKSkgfHwKKwkJCWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8CisJCQl2bWEgPT0gZ2V0X2dhdGVfdm1hKGN1cnJlbnQpKSkgeworCQlsb25nIGVycm9yOworCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisKKwkJZXJyb3IgPSBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOworCisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCS8qIHZtYSBjYW4gY2hhbmdlIG9yIGRpc2FwcGVhciAqLworCQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOworCQkvKiBub24tTlVMTCB2bWEgbXVzdCBjb250YWluIEBzdGFydCwgYnV0IG5lZWQgdG8gY2hlY2sgQGVuZCAqLworCQlpZiAoIXZtYSB8fCAgZW5kID4gdm1hLT52bV9lbmQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXR1cm4gMDsJLyogaGlkZSBvdGhlciBlcnJvcnMgZnJvbSBtbWFwKCksIGV0IGFsICovCisJfQorCisJLyoKKwkgKiBVc2VyIG1hcHBlZCBrZXJuZWwgcGFnZXMgb3IgaHVnZSBwYWdlczoKKwkgKiBtYWtlIHRoZXNlIHBhZ2VzIHByZXNlbnQgdG8gcG9wdWxhdGUgdGhlIHB0ZXMsIGJ1dAorCSAqIGZhbGwgdGhydScgdG8gcmVzZXQgVk1fTE9DS0VELS1ubyBuZWVkIHRvIHVubG9jaywgYW5kCisJICogcmV0dXJuIG5yX3BhZ2VzIHNvIHRoZXNlIGRvbid0IGdldCBjb3VudGVkIGFnYWluc3QgdGFzaydzCisJICogbG9ja2VkIGxpbWl0LiAgaHVnZSBwYWdlcyBhcmUgYWxyZWFkeSBjb3VudGVkIGFnYWluc3QKKwkgKiBsb2NrZWQgdm0gbGltaXQuCisJICovCisJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCitub19tbG9jazoKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7CS8qIGFuZCBkb24ndCBjb21lIGJhY2shICovCisJcmV0dXJuIG5yX3BhZ2VzOwkJLyogZXJyb3Igb3IgcGFnZXMgTk9UIG1sb2NrZWQgKi8KK30KKworCisvKgorICogbXVubG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtIG11bmxvY2sgYWxsIHBhZ2VzIGluIHRoZSB2bWEgcmFuZ2UuJworICogQHZtYSAtIHZtYSBjb250YWluaW5nIHJhbmdlIHRvIGJlIG11bmxvY2soKWVkLgorICogQHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyBpbiBAdm1hIG9mIHRoZSByYW5nZQorICogQGVuZCAtIGVuZCBvZiByYW5nZSBpbiBAdm1hLgorICoKKyAqICBGb3IgbXJlbWFwKCksIG11bm1hcCgpIGFuZCBleGl0KCkuCisgKgorICogQ2FsbGVkIHdpdGggQHZtYSBWTV9MT0NLRUQuCisgKgorICogUmV0dXJucyB3aXRoIFZNX0xPQ0tFRCBjbGVhcmVkLiAgQ2FsbGVycyBtdXN0IGJlIHByZXBhcmVkIHRvCisgKiBkZWFsIHdpdGggdGhpcy4KKyAqCisgKiBXZSBkb24ndCBzYXZlIGFuZCByZXN0b3JlIFZNX0xPQ0tFRCBoZXJlIGJlY2F1c2UgcGFnZXMgYXJlCisgKiBzdGlsbCBvbiBscnUuICBJbiB1bm1hcCBwYXRoLCBwYWdlcyBtaWdodCBiZSBzY2FubmVkIGJ5IHJlY2xhaW0KKyAqIGFuZCByZS1tbG9ja2VkIGJ5IHRyeV90b197bXVubG9ja3x1bm1hcH0gYmVmb3JlIHdlIHVubWFwIGFuZAorICogZnJlZSB0aGVtLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBmcmVlaW5nIG1sb2NrZWQgcGFnZXMuCisgKi8KK3ZvaWQgbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7CisJX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAwKTsKK30KKworLyoKKyAqIG1sb2NrX2ZpeHVwICAtIGhhbmRsZSBtbG9ja1thbGxdL211bmxvY2tbYWxsXSByZXF1ZXN0cy4KKyAqCisgKiBGaWx0ZXJzIG91dCAic3BlY2lhbCIgdm1hcyAtLSBWTV9MT0NLRUQgbmV2ZXIgZ2V0cyBzZXQgZm9yIHRoZXNlLCBhbmQKKyAqIG11bmxvY2sgaXMgYSBuby1vcC4gIEhvd2V2ZXIsIGZvciBzb21lIHNwZWNpYWwgdm1hcywgd2UgZ28gYWhlYWQgYW5kCisgKiBwb3B1bGF0ZSB0aGUgcHRlcyB2aWEgbWFrZV9wYWdlc19wcmVzZW50KCkuCisgKgorICogRm9yIHZtYXMgdGhhdCBwYXNzIHRoZSBmaWx0ZXJzLCBtZXJnZS9zcGxpdCBhcyBhcHByb3ByaWF0ZS4KKyAqLwogc3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHJldiwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgaW50IG5ld2ZsYWdzKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IHZtYS0+dm1fbW07CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXBnb2ZmX3QgcGdvZmY7Ci0JaW50IHBhZ2VzOworCWludCBucl9wYWdlczsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgbG9jayA9IG5ld2ZsYWdzICYgVk1fTE9DS0VEOwogCi0JaWYgKG5ld2ZsYWdzID09IHZtYS0+dm1fZmxhZ3MpIHsKLQkJKnByZXYgPSB2bWE7Ci0JCWdvdG8gb3V0OworCWlmIChuZXdmbGFncyA9PSB2bWEtPnZtX2ZsYWdzIHx8CisJCQkodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpKQorCQlnb3RvIG91dDsJLyogZG9uJ3Qgc2V0IFZNX0xPQ0tFRCwgIGRvbid0IGNvdW50ICovCisKKwlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fRE9OVEVYUEFORCB8IFZNX1JFU0VSVkVEKSkgfHwKKwkJCWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8CisJCQl2bWEgPT0gZ2V0X2dhdGVfdm1hKGN1cnJlbnQpKSB7CisJCWlmIChsb2NrKQorCQkJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCQlnb3RvIG91dDsJLyogZG9uJ3Qgc2V0IFZNX0xPQ0tFRCwgIGRvbid0IGNvdW50ICovCiAJfQogCiAJcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmICsgKChzdGFydCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpOwpAQCAtNDQsOCArNDE2LDYgQEAKIAkJZ290byBzdWNjZXNzOwogCX0KIAotCSpwcmV2ID0gdm1hOwotCiAJaWYgKHN0YXJ0ICE9IHZtYS0+dm1fc3RhcnQpIHsKIAkJcmV0ID0gc3BsaXRfdm1hKG1tLCB2bWEsIHN0YXJ0LCAxKTsKIAkJaWYgKHJldCkKQEAgLTYwLDI0ICs0MzAsNjEgQEAKIAogc3VjY2VzczoKIAkvKgorCSAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS4KKwkgKi8KKwlucl9wYWdlcyA9IChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKKwlpZiAoIWxvY2spCisJCW5yX3BhZ2VzID0gLW5yX3BhZ2VzOworCW1tLT5sb2NrZWRfdm0gKz0gbnJfcGFnZXM7CisKKwkvKgogCSAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9zZW0gaGVsZCBpbiB3cml0ZSBtb2RlLgogCSAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZQotCSAqIHNldCBWTV9MT0NLRUQsIG1ha2VfcGFnZXNfcHJlc2VudCBiZWxvdyB3aWxsIGJyaW5nIGl0IGJhY2suCisJICogc2V0IFZNX0xPQ0tFRCwgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLgogCSAqLwogCXZtYS0+dm1fZmxhZ3MgPSBuZXdmbGFnczsKIAotCS8qCi0JICogS2VlcCB0cmFjayBvZiBhbW91bnQgb2YgbG9ja2VkIFZNLgotCSAqLwotCXBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwotCWlmIChuZXdmbGFncyAmIFZNX0xPQ0tFRCkgewotCQlwYWdlcyA9IC1wYWdlczsKLQkJaWYgKCEobmV3ZmxhZ3MgJiBWTV9JTykpCi0JCQlyZXQgPSBtYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIGVuZCk7CisJaWYgKGxvY2spIHsKKwkJLyoKKwkJICogbW1hcF9zZW0gaXMgY3VycmVudGx5IGhlbGQgZm9yIHdyaXRlLiAgRG93bmdyYWRlIHRoZSB3cml0ZQorCQkgKiBsb2NrIHRvIGEgcmVhZCBsb2NrIHNvIHRoYXQgb3RoZXIgZmF1bHRzLCBtbWFwIHNjYW5zLCAuLi4KKwkJICogd2hpbGUgd2UgZmF1bHQgaW4gYWxsIHBhZ2VzLgorCQkgKi8KKwkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJCXJldCA9IF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMSk7CisKKwkJLyoKKwkJICogTmVlZCB0byByZWFjcXVpcmUgbW1hcCBzZW0gaW4gd3JpdGUgbW9kZSwgYXMgb3VyIGNhbGxlcnMKKwkJICogZXhwZWN0IHRoaXMuICBXZSBoYXZlIG5vIHN1cHBvcnQgZm9yIGF0b21pY2FsbHkgdXBncmFkaW5nCisJCSAqIGEgc2VtIHRvIHdyaXRlLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByYW5nZXMgd2hpbGUgc2VtCisJCSAqIGlzIHVubG9ja2VkLgorCQkgKi8KKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJLyogdm1hIGNhbiBjaGFuZ2Ugb3IgZGlzYXBwZWFyICovCisJCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCSpwcmV2ID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwkJLyogbm9uLU5VTEwgKnByZXYgbXVzdCBjb250YWluIEBzdGFydCwgYnV0IG5lZWQgdG8gY2hlY2sgQGVuZCAqLworCQlpZiAoISgqcHJldikgfHwgZW5kID4gKCpwcmV2KS0+dm1fZW5kKQorCQkJcmV0ID0gLUVOT01FTTsKKwkJZWxzZSBpZiAocmV0ID4gMCkgeworCQkJbW0tPmxvY2tlZF92bSAtPSByZXQ7CisJCQlyZXQgPSAwOworCQl9IGVsc2UKKwkJCXJldCA9IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKHJldCk7IC8qIHRyYW5zbGF0ZSBpZiBuZWVkZWQgKi8KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUT0RPOiAgZm9yIHVubG9ja2luZywgcGFnZXMgd2lsbCBhbHJlYWR5IGJlIHJlc2lkZW50LCBzbworCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgZm9yIGFsbG9jYXRpb25zL3JlY2xhaW0vcGFnZWluLCAuLi4KKwkJICogSG93ZXZlciwgdW5sb2NraW5nIGEgdmVyeSBsYXJnZSByZWdpb24gY2FuIHN0aWxsIHRha2UgYQorCQkgKiB3aGlsZS4gIFNob3VsZCB3ZSBkb3duZ3JhZGUgdGhlIHNlbWFwaG9yZSBmb3IgYm90aCBsb2NrCisJCSAqIEFORCB1bmxvY2sgPworCQkgKi8KKwkJX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAwKTsKIAl9CiAKLQltbS0+bG9ja2VkX3ZtIC09IHBhZ2VzOwogb3V0OgorCSpwcmV2ID0gdm1hOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBlN2E1YTY4Li43NGY0ZDE1IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAlyYl9pbnNlcnRfY29sb3IoJnZtYS0+dm1fcmIsICZtbS0+bW1fcmIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX192bWFfbGlua19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIHZvaWQgX192bWFfbGlua19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBmaWxlICogZmlsZTsKIApAQCAtNjYyLDggKzY2Miw2IEBACiAgKiBJZiB0aGUgdm1hIGhhcyBhIC0+Y2xvc2Ugb3BlcmF0aW9uIHRoZW4gdGhlIGRyaXZlciBwcm9iYWJseSBuZWVkcyB0byByZWxlYXNlCiAgKiBwZXItdm1hIHJlc291cmNlcywgc28gd2UgZG9uJ3QgYXR0ZW1wdCB0byBtZXJnZSB0aG9zZS4KICAqLwotI2RlZmluZSBWTV9TUEVDSUFMIChWTV9JTyB8IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCkKLQogc3RhdGljIGlubGluZSBpbnQgaXNfbWVyZ2VhYmxlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHZtX2ZsYWdzKQogewpAQCAtOTcyLDYgKzk3MCw3IEBACiAJCQlyZXR1cm4gLUVQRVJNOwogCQl2bV9mbGFncyB8PSBWTV9MT0NLRUQ7CiAJfQorCiAJLyogbWxvY2sgTUNMX0ZVVFVSRT8gKi8KIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7CkBAIC0xMTM5LDEwICsxMTM4LDEyIEBACiAJICogVGhlIFZNX1NIQVJFRCB0ZXN0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNobWVtX3plcm9fc2V0dXAKIAkgKiB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBvYmplY3QgZm9yIGEgc2hhcmVkIGFub255bW91cyBtYXAgYmVsb3cuCiAJICovCi0JaWYgKCFmaWxlICYmICEodm1fZmxhZ3MgJiBWTV9TSEFSRUQpICYmCi0JICAgIHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgdm1fZmxhZ3MsCi0JCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKSkKLQkJZ290byBvdXQ7CisJaWYgKCFmaWxlICYmICEodm1fZmxhZ3MgJiBWTV9TSEFSRUQpKSB7CisJCXZtYSA9IHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgdm1fZmxhZ3MsCisJCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKTsKKwkJaWYgKHZtYSkKKwkJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTIyNCwxMCArMTIyNSwxNCBAQAogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAl2bV9zdGF0X2FjY291bnQobW0sIHZtX2ZsYWdzLCBmaWxlLCBsZW4gPj4gUEFHRV9TSElGVCk7CiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCW1tLT5sb2NrZWRfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7Ci0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKLQl9Ci0JaWYgKChmbGFncyAmIE1BUF9QT1BVTEFURSkgJiYgIShmbGFncyAmIE1BUF9OT05CTE9DSykpCisJCS8qCisJCSAqIG1ha2VzIHBhZ2VzIHByZXNlbnQ7IGRvd25ncmFkZXMsIGRyb3BzLCByZWFjcXVpcmVzIG1tYXBfc2VtCisJCSAqLworCQlsb25nIG5yX3BhZ2VzID0gbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbik7CisJCWlmIChucl9wYWdlcyA8IDApCisJCQlyZXR1cm4gbnJfcGFnZXM7CS8qIHZtYSBnb25lISAqLworCQltbS0+bG9ja2VkX3ZtICs9IChsZW4gPj4gUEFHRV9TSElGVCkgLSBucl9wYWdlczsKKwl9IGVsc2UgaWYgKChmbGFncyAmIE1BUF9QT1BVTEFURSkgJiYgIShmbGFncyAmIE1BUF9OT05CTE9DSykpCiAJCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKIAlyZXR1cm4gYWRkcjsKIApAQCAtMTU4Niw3ICsxNTkxLDcgQEAKICAqIHZtYSBpcyB0aGUgbGFzdCBvbmUgd2l0aCBhZGRyZXNzID4gdm1hLT52bV9lbmQuICBIYXZlIHRvIGV4dGVuZCB2bWEuCiAgKi8KICNpZm5kZWYgQ09ORklHX0lBNjQKLXN0YXRpYyBpbmxpbmUKK3N0YXRpYwogI2VuZGlmCiBpbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTE2MzYsNyArMTY0MSw3IEBACiAvKgogICogdm1hIGlzIHRoZSBmaXJzdCBvbmUgd2l0aCBhZGRyZXNzIDwgdm1hLT52bV9zdGFydC4gIEhhdmUgdG8gZXh0ZW5kIHZtYS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgZXhwYW5kX2Rvd253YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKK3N0YXRpYyBpbnQgZXhwYW5kX2Rvd253YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJaW50IGVycm9yOwpAQCAtMTY5OCwxMCArMTcwMywxMiBAQAogCXZtYSA9IGZpbmRfdm1hX3ByZXYobW0sIGFkZHIsICZwcmV2KTsKIAlpZiAodm1hICYmICh2bWEtPnZtX3N0YXJ0IDw9IGFkZHIpKQogCQlyZXR1cm4gdm1hOwotCWlmICghcHJldiB8fCBleHBhbmRfc3RhY2socHJldiwgYWRkcikpCisJaWYgKGV4cGFuZF9zdGFjayhwcmV2LCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHByZXYtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgcHJldi0+dm1fZW5kKTsKKwlpZiAocHJldi0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJaWYgKG1sb2NrX3ZtYV9wYWdlc19yYW5nZShwcmV2LCBhZGRyLCBwcmV2LT52bV9lbmQpIDwgMCkKKwkJCXJldHVybiBOVUxMOwkvKiB2bWEgZ29uZSEgKi8KKwl9CiAJcmV0dXJuIHByZXY7CiB9CiAjZWxzZQpAQCAtMTcyNyw4ICsxNzM0LDEwIEBACiAJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCWlmIChleHBhbmRfc3RhY2sodm1hLCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBzdGFydCk7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJaWYgKG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIHN0YXJ0KSA8IDApCisJCQlyZXR1cm4gTlVMTDsJLyogdm1hIGdvbmUhICovCisJfQogCXJldHVybiB2bWE7CiB9CiAjZW5kaWYKQEAgLTE3NDcsOCArMTc1Niw2IEBACiAJCWxvbmcgbnJwYWdlcyA9IHZtYV9wYWdlcyh2bWEpOwogCiAJCW1tLT50b3RhbF92bSAtPSBucnBhZ2VzOwotCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJCW1tLT5sb2NrZWRfdm0gLT0gbnJwYWdlczsKIAkJdm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtPnZtX2ZsYWdzLCB2bWEtPnZtX2ZpbGUsIC1ucnBhZ2VzKTsKIAkJdm1hID0gcmVtb3ZlX3ZtYSh2bWEpOwogCX0gd2hpbGUgKHZtYSk7CkBAIC0xOTE0LDYgKzE5MjEsMjAgQEAKIAl2bWEgPSBwcmV2PyBwcmV2LT52bV9uZXh0OiBtbS0+bW1hcDsKIAogCS8qCisJICogdW5sb2NrIGFueSBtbG9jaygpZWQgcmFuZ2VzIGJlZm9yZSBkZXRhY2hpbmcgdm1hcworCSAqLworCWlmIChtbS0+bG9ja2VkX3ZtKSB7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdG1wID0gdm1hOworCQl3aGlsZSAodG1wICYmIHRtcC0+dm1fc3RhcnQgPCBlbmQpIHsKKwkJCWlmICh0bXAtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCQkJbW0tPmxvY2tlZF92bSAtPSB2bWFfcGFnZXModG1wKTsKKwkJCQltdW5sb2NrX3ZtYV9wYWdlc19hbGwodG1wKTsKKwkJCX0KKwkJCXRtcCA9IHRtcC0+dm1fbmV4dDsKKwkJfQorCX0KKworCS8qCiAJICogUmVtb3ZlIHRoZSB2bWEncywgYW5kIHVubWFwIHRoZSBhY3R1YWwgcGFnZXMKIAkgKi8KIAlkZXRhY2hfdm1hc190b19iZV91bm1hcHBlZChtbSwgdm1hLCBwcmV2LCBlbmQpOwpAQCAtMjAyNSw4ICsyMDQ2LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBDYW4gd2UganVzdCBleHBhbmQgYW4gb2xkIHByaXZhdGUgYW5vbnltb3VzIG1hcHBpbmc/ICovCi0JaWYgKHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsCi0JCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKSkKKwl2bWEgPSB2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIGZsYWdzLAorCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCk7CisJaWYgKHZtYSkKIAkJZ290byBvdXQ7CiAKIAkvKgpAQCAtMjA0OCw4ICsyMDcwLDggQEAKIG91dDoKIAltbS0+dG90YWxfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJaWYgKGZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCW1tLT5sb2NrZWRfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7Ci0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKKwkJaWYgKCFtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuKSkKKwkJCW1tLT5sb2NrZWRfdm0gKz0gKGxlbiA+PiBQQUdFX1NISUZUKTsKIAl9CiAJcmV0dXJuIGFkZHI7CiB9CkBAIC0yMDYwLDcgKzIwODIsNyBAQAogdm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IG1tdV9nYXRoZXIgKnRsYjsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1tLT5tbWFwOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgbnJfYWNjb3VudGVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIApAQCAtMjA2OCw2ICsyMDkwLDE1IEBACiAJYXJjaF9leGl0X21tYXAobW0pOwogCW1tdV9ub3RpZmllcl9yZWxlYXNlKG1tKTsKIAorCWlmIChtbS0+bG9ja2VkX3ZtKSB7CisJCXZtYSA9IG1tLT5tbWFwOworCQl3aGlsZSAodm1hKSB7CisJCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKKwkJCQltdW5sb2NrX3ZtYV9wYWdlc19hbGwodm1hKTsKKwkJCXZtYSA9IHZtYS0+dm1fbmV4dDsKKwkJfQorCX0KKwl2bWEgPSBtbS0+bW1hcDsKIAlscnVfYWRkX2RyYWluKCk7CiAJZmx1c2hfY2FjaGVfbW0obW0pOwogCXRsYiA9IHRsYl9nYXRoZXJfbW11KG1tLCAxKTsKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggMWE3NzQzOS4uNThhMjkwOCAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogc3RhdGljIHBtZF90ICpnZXRfb2xkX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CkBAIC0yMzgsOCArMjQwLDggQEAKIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJbW0tPmxvY2tlZF92bSArPSBuZXdfbGVuID4+IFBBR0VfU0hJRlQ7CiAJCWlmIChuZXdfbGVuID4gb2xkX2xlbikKLQkJCW1ha2VfcGFnZXNfcHJlc2VudChuZXdfYWRkciArIG9sZF9sZW4sCi0JCQkJCSAgIG5ld19hZGRyICsgbmV3X2xlbik7CisJCQltbG9ja192bWFfcGFnZXNfcmFuZ2UobmV3X3ZtYSwgbmV3X2FkZHIgKyBvbGRfbGVuLAorCQkJCQkJICAgICAgIG5ld19hZGRyICsgbmV3X2xlbik7CiAJfQogCiAJcmV0dXJuIG5ld19hZGRyOwpAQCAtMzc5LDcgKzM4MSw3IEBACiAJCQl2bV9zdGF0X2FjY291bnQobW0sIHZtYS0+dm1fZmxhZ3MsIHZtYS0+dm1fZmlsZSwgcGFnZXMpOwogCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJCQltbS0+bG9ja2VkX3ZtICs9IHBhZ2VzOwotCQkJCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyICsgb2xkX2xlbiwKKwkJCQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyICsgb2xkX2xlbiwKIAkJCQkJCSAgIGFkZHIgKyBuZXdfbGVuKTsKIAkJCX0KIAkJCXJldCA9IGFkZHI7CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCBlZDc1YmM5Li4yNjk2YjI0IDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiB2b2lkICpoaWdoX21lbW9yeTsKIHN0cnVjdCBwYWdlICptZW1fbWFwOwogdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CkBAIC0xMjgsMjAgKzEzMCwxNiBAQAogCXJldHVybiBQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CiB9CiAKLS8qCi0gKiBnZXQgYSBsaXN0IG9mIHBhZ2VzIGluIGFuIGFkZHJlc3MgcmFuZ2UgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpZWQgcHJvY2VzcwotICogYW5kIGluZGljYXRlIHRoZSBWTUEgdGhhdCBjb3ZlcnMgZWFjaCBwYWdlCi0gKiAtIHRoaXMgaXMgcG90ZW50aWFsbHkgZG9kZ3kgYXMgd2UgbWF5IGVuZCBpbmNyZW1lbnRpbmcgdGhlIHBhZ2UgY291bnQgb2YgYQotICogICBzbGFiIHBhZ2Ugb3IgYSBzZWNvbmRhcnkgcGFnZSBmcm9tIGEgY29tcG91bmQgcGFnZQotICogLSBkb24ndCBwZXJtaXQgYWNjZXNzIHRvIFZNQXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LCBzdWNoIGFzIEkvTyBtYXBwaW5ncwotICovCi1pbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAotCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCitpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3M7CiAJaW50IGk7CisJaW50IHdyaXRlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfV1JJVEUpOworCWludCBmb3JjZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0ZPUkNFKTsKKwlpbnQgaWdub3JlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyk7CiAKIAkvKiBjYWxjdWxhdGUgcmVxdWlyZWQgcmVhZCBvciB3cml0ZSBwZXJtaXNzaW9ucy4KIAkgKiAtIGlmICdmb3JjZScgaXMgc2V0LCB3ZSBvbmx5IHJlcXVpcmUgdGhlICJNQVkiIGZsYWdzLgpAQCAtMTU2LDcgKzE1NCw3IEBACiAKIAkJLyogcHJvdGVjdCB3aGF0IHdlIGNhbiwgaW5jbHVkaW5nIGNoYXJkZXZzICovCiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSB8fAotCQkgICAgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQorCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKIAkJCWdvdG8gZmluaXNoX29yX2ZhdWx0OwogCiAJCWlmIChwYWdlcykgewpAQCAtMTc0LDYgKzE3MiwzMCBAQAogZmluaXNoX29yX2ZhdWx0OgogCXJldHVybiBpID8gOiAtRUZBVUxUOwogfQorCisKKy8qCisgKiBnZXQgYSBsaXN0IG9mIHBhZ2VzIGluIGFuIGFkZHJlc3MgcmFuZ2UgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpZWQgcHJvY2VzcworICogYW5kIGluZGljYXRlIHRoZSBWTUEgdGhhdCBjb3ZlcnMgZWFjaCBwYWdlCisgKiAtIHRoaXMgaXMgcG90ZW50aWFsbHkgZG9kZ3kgYXMgd2UgbWF5IGVuZCBpbmNyZW1lbnRpbmcgdGhlIHBhZ2UgY291bnQgb2YgYQorICogICBzbGFiIHBhZ2Ugb3IgYSBzZWNvbmRhcnkgcGFnZSBmcm9tIGEgY29tcG91bmQgcGFnZQorICogLSBkb24ndCBwZXJtaXQgYWNjZXNzIHRvIFZNQXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LCBzdWNoIGFzIEkvTyBtYXBwaW5ncworICovCitpbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAorCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3cml0ZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX1dSSVRFOworCWlmIChmb3JjZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX0ZPUkNFOworCisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwKKwkJCQlzdGFydCwgbGVuLCBmbGFncywKKwkJCQlwYWdlcywgdm1hcyk7Cit9CiBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzKTsKIAogREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBjMTMwYTEzLi4yOTcwZTM1IDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTMyOSw5ICszMjksNyBAQAogCQlzdHJ1Y3Qgem9uZSAqeiA9CiAJCQkmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW1pPTkVfSElHSE1FTV07CiAKLQkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykKLQkJCSsgem9uZV9wYWdlX3N0YXRlKHosIE5SX0lOQUNUSVZFKQotCQkJKyB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfQUNUSVZFKTsKKwkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKyB6b25lX2xydV9wYWdlcyh6KTsKIAl9CiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbnVtYmVyIG9mIGhpZ2htZW0gcGFnZXMgaXMgbmV2ZXIgbGFyZ2VyCkBAIC0zNTUsOSArMzUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHg7CiAKLQl4ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRSkKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpOworCXggPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSArIGdsb2JhbF9scnVfcGFnZXMoKTsKIAogCWlmICghdm1faGlnaG1lbV9pc19kaXJ0eWFibGUpCiAJCXggLT0gaGlnaG1lbV9kaXJ0eWFibGVfbWVtb3J5KHgpOwpAQCAtODc2LDYgKzg3Miw3IEBACiAJcGdvZmZfdCBlbmQ7CQkvKiBJbmNsdXNpdmUgKi8KIAlpbnQgc2Nhbm5lZCA9IDA7CiAJaW50IHJhbmdlX3dob2xlID0gMDsKKwlsb25nIG5yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZTsKIAogCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwpAQCAtOTM5LDcgKzkzNiw3IEBACiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQkJcmV0ID0gMDsKIAkJCX0KLQkJCWlmIChyZXQgfHwgKC0tKHdiYy0+bnJfdG9fd3JpdGUpIDw9IDApKQorCQkJaWYgKHJldCB8fCAoLS1ucl90b193cml0ZSA8PSAwKSkKIAkJCQlkb25lID0gMTsKIAkJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CkBAIC05NTgsMTEgKzk1NSwxMiBAQAogCQlpbmRleCA9IDA7CiAJCWdvdG8gcmV0cnk7CiAJfQotCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQotCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKKwlpZiAoIXdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpIHsKKwkJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiBucl90b193cml0ZSA+IDApKQorCQkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBucl90b193cml0ZTsKKwl9CiAKLQlpZiAod2JjLT5yYW5nZV9jb250KQotCQl3YmMtPnJhbmdlX3N0YXJ0ID0gaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh3cml0ZV9jYWNoZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOWViOWViOS4uZDBhMjQwZiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMjIzLDE3ICsyMjMsMTIgQEAKIAogc3RhdGljIHZvaWQgYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jdm9pZCAqcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQogCXByaW50ayhLRVJOX0VNRVJHICJCYWQgcGFnZSBzdGF0ZSBpbiBwcm9jZXNzICclcydcbiIgS0VSTl9FTUVSRwogCQkicGFnZTolcCBmbGFnczoweCUwKmx4IG1hcHBpbmc6JXAgbWFwY291bnQ6JWQgY291bnQ6JWRcbiIsCiAJCWN1cnJlbnQtPmNvbW0sIHBhZ2UsIChpbnQpKDIqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKIAkJKHVuc2lnbmVkIGxvbmcpcGFnZS0+ZmxhZ3MsIHBhZ2UtPm1hcHBpbmcsCiAJCXBhZ2VfbWFwY291bnQocGFnZSksIHBhZ2VfY291bnQocGFnZSkpOwotCWlmIChwYykgewotCQlwcmludGsoS0VSTl9FTUVSRyAiY2dyb3VwOiVwXG4iLCBwYyk7Ci0JCXBhZ2VfcmVzZXRfYmFkX2Nncm91cChwYWdlKTsKLQl9CisKIAlwcmludGsoS0VSTl9FTUVSRyAiVHJ5aW5nIHRvIGZpeCBpdCB1cCwgYnV0IGEgcmVib290IGlzIG5lZWRlZFxuIgogCQlLRVJOX0VNRVJHICJCYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CkBAIC00NTQsMTQgKzQ0OSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBmcmVlX3BhZ2VzX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWZyZWVfcGFnZV9tbG9jayhwYWdlKTsKIAlpZiAodW5saWtlbHkocGFnZV9tYXBjb3VudChwYWdlKSB8CiAJCShwYWdlLT5tYXBwaW5nICE9IE5VTEwpICB8Ci0JCShwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSAhPSBOVUxMKSB8CiAJCShwYWdlX2NvdW50KHBhZ2UpICE9IDApICB8CiAJCShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfRlJFRSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfX0NsZWFyUGFnZURpcnR5KHBhZ2UpOworCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKKwkJX19DbGVhclBhZ2VTd2FwQmFja2VkKHBhZ2UpOwogCS8qCiAJICogRm9yIG5vdywgd2UgcmVwb3J0IGlmIFBHX3Jlc2VydmVkIHdhcyBmb3VuZCBzZXQsIGJ1dCBkbyBub3QKIAkgKiBjbGVhciBpdCwgYW5kIGRvIG5vdCBmcmVlIHRoZSBwYWdlLiAgQnV0IHdlIHNoYWxsIHNvb24gbmVlZApAQCAtNjAwLDcgKzU5Nyw2IEBACiB7CiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAotCQkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkgIT0gTlVMTCkgfAogCQkocGFnZV9jb3VudChwYWdlKSAhPSAwKSAgfAogCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVApKSkKIAkJYmFkX3BhZ2UocGFnZSk7CkBAIC02MTQsNyArNjEwLDExIEBACiAKIAlwYWdlLT5mbGFncyAmPSB+KDEgPDwgUEdfdXB0b2RhdGUgfCAxIDw8IFBHX2Vycm9yIHwgMSA8PCBQR19yZWNsYWltIHwKIAkJCTEgPDwgUEdfcmVmZXJlbmNlZCB8IDEgPDwgUEdfYXJjaF8xIHwKLQkJCTEgPDwgUEdfb3duZXJfcHJpdl8xIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2spOworCQkJMSA8PCBQR19vd25lcl9wcml2XzEgfCAxIDw8IFBHX21hcHBlZHRvZGlzaworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCXwgMSA8PCBQR19tbG9ja2VkCisjZW5kaWYKKwkJCSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIAlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCkBAIC0xODYyLDEwICsxODYyLDIxIEBACiAJCX0KIAl9CiAKLQlwcmludGsoIkFjdGl2ZTolbHUgaW5hY3RpdmU6JWx1IGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdVxuIgorCXByaW50aygiQWN0aXZlX2Fub246JWx1IGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdVxuIgorCQkiIGluYWN0aXZlX2ZpbGU6JWx1IgorLy9UT0RPOiAgY2hlY2svYWRqdXN0IGxpbmUgbGVuZ3RocworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIiB1bmV2aWN0YWJsZTolbHUiCisjZW5kaWYKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiOiVsdSBtYXBwZWQ6JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSksCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VORVZJQ1RBQkxFKSwKKyNlbmRpZgogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSwKQEAgLTE4ODgsOCArMTg5OSwxMyBAQAogCQkJIiBtaW46JWx1a0IiCiAJCQkiIGxvdzolbHVrQiIKIAkJCSIgaGlnaDolbHVrQiIKLQkJCSIgYWN0aXZlOiVsdWtCIgotCQkJIiBpbmFjdGl2ZTolbHVrQiIKKwkJCSIgYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGluYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGFjdGl2ZV9maWxlOiVsdWtCIgorCQkJIiBpbmFjdGl2ZV9maWxlOiVsdWtCIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCSIgdW5ldmljdGFibGU6JWx1a0IiCisjZW5kaWYKIAkJCSIgcHJlc2VudDolbHVrQiIKIAkJCSIgcGFnZXNfc2Nhbm5lZDolbHUiCiAJCQkiIGFsbF91bnJlY2xhaW1hYmxlPyAlcyIKQEAgLTE4OTksOCArMTkxNSwxMyBAQAogCQkJSyh6b25lLT5wYWdlc19taW4pLAogCQkJSyh6b25lLT5wYWdlc19sb3cpLAogCQkJSyh6b25lLT5wYWdlc19oaWdoKSwKLQkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkpLAotCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKSksCisjZW5kaWYKIAkJCUsoem9uZS0+cHJlc2VudF9wYWdlcyksCiAJCQl6b25lLT5wYWdlc19zY2FubmVkLAogCQkJKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgPyAieWVzIiA6ICJubyIpCkBAIC0zNDEwLDEwICszNDMxLDEyIEBACiAJcGdkYXQtPm5yX3pvbmVzID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOwogCXBnZGF0LT5rc3dhcGRfbWF4X29yZGVyID0gMDsKKwlwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHBnZGF0KTsKIAkKIAlmb3IgKGogPSAwOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGo7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVhbHNpemUsIG1lbW1hcF9wYWdlczsKKwkJZW51bSBscnVfbGlzdCBsOwogCiAJCXNpemUgPSB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShuaWQsIGosIHpvbmVzX3NpemUpOwogCQlyZWFsc2l6ZSA9IHNpemUgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKG5pZCwgaiwKQEAgLTM0MjgsOCArMzQ1MSw4IEBACiAJCQlQQUdFX0FMSUdOKHNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UpKSA+PiBQQUdFX1NISUZUOwogCQlpZiAocmVhbHNpemUgPj0gbWVtbWFwX3BhZ2VzKSB7CiAJCQlyZWFsc2l6ZSAtPSBtZW1tYXBfcGFnZXM7Ci0JCQltbWluaXRfZHByaW50ayhNTUlOSVRfVFJBQ0UsICJtZW1tYXBfaW5pdCIsCi0JCQkJIiVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSIgICVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCiAJCQkJem9uZV9uYW1lc1tqXSwgbWVtbWFwX3BhZ2VzKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0zNDM5LDggKzM0NjIsNyBAQAogCQkvKiBBY2NvdW50IGZvciByZXNlcnZlZCBwYWdlcyAqLwogCQlpZiAoaiA9PSAwICYmIHJlYWxzaXplID4gZG1hX3Jlc2VydmUpIHsKIAkJCXJlYWxzaXplIC09IGRtYV9yZXNlcnZlOwotCQkJbW1pbml0X2RwcmludGsoTU1JTklUX1RSQUNFLCAibWVtbWFwX2luaXQiLAotCQkJCQkiJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAogCQkJCQl6b25lX25hbWVzWzBdLCBkbWFfcmVzZXJ2ZSk7CiAJCX0KIApAQCAtMzQ2NSwxMCArMzQ4NywxNCBAQAogCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwogCiAJCXpvbmVfcGNwX2luaXQoem9uZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgPSAwOwotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKKwkJZm9yX2VhY2hfbHJ1KGwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5scnVbbF0ubGlzdCk7CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCX0KKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMF0gPSAwOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFsxXSA9IDA7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdID0gMDsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gPSAwOwogCQl6YXBfem9uZV92bV9zdGF0cyh6b25lKTsKIAkJem9uZS0+ZmxhZ3MgPSAwOwogCQlpZiAoIXNpemUpCkBAIC00MjEwLDcgKzQyMzYsNyBAQAogCWZvcl9lYWNoX3pvbmUoem9uZSkgewogCQl1NjQgdG1wOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCQl0bXAgPSAodTY0KXBhZ2VzX21pbiAqIHpvbmUtPnByZXNlbnRfcGFnZXM7CiAJCWRvX2Rpdih0bXAsIGxvd21lbV9wYWdlcyk7CiAJCWlmIChpc19oaWdobWVtKHpvbmUpKSB7CkBAIC00MjQyLDEzICs0MjY4LDUzIEBACiAJCXpvbmUtPnBhZ2VzX2xvdyAgID0gem9uZS0+cGFnZXNfbWluICsgKHRtcCA+PiAyKTsKIAkJem9uZS0+cGFnZXNfaGlnaCAgPSB6b25lLT5wYWdlc19taW4gKyAodG1wID4+IDEpOwogCQlzZXR1cF96b25lX21pZ3JhdGVfcmVzZXJ2ZSh6b25lKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCX0KIAogCS8qIHVwZGF0ZSB0b3RhbHJlc2VydmVfcGFnZXMgKi8KIAljYWxjdWxhdGVfdG90YWxyZXNlcnZlX3BhZ2VzKCk7CiB9CiAKKy8qKgorICogc2V0dXBfcGVyX3pvbmVfaW5hY3RpdmVfcmF0aW8gLSBjYWxsZWQgd2hlbiBtaW5fZnJlZV9rYnl0ZXMgY2hhbmdlcy4KKyAqCisgKiBUaGUgaW5hY3RpdmUgYW5vbiBsaXN0IHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgVk0gbmV2ZXIgaGFzIHRvCisgKiBkbyB0b28gbXVjaCB3b3JrLCBidXQgbGFyZ2UgZW5vdWdoIHRoYXQgZWFjaCBpbmFjdGl2ZSBwYWdlIGhhcyBhIGNoYW5jZQorICogdG8gYmUgcmVmZXJlbmNlZCBhZ2FpbiBiZWZvcmUgaXQgaXMgc3dhcHBlZCBvdXQuCisgKgorICogVGhlIGluYWN0aXZlX2Fub24gcmF0aW8gaXMgdGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkVfQU5PTiB0bworICogSU5BQ1RJVkVfQU5PTiBwYWdlcyBvbiB0aGlzIHpvbmUncyBMUlUsIG1haW50YWluZWQgYnkgdGhlCisgKiBwYWdlb3V0IGNvZGUuIEEgem9uZS0+aW5hY3RpdmVfcmF0aW8gb2YgMyBtZWFucyAzOjEgb3IgMjUlIG9mCisgKiB0aGUgYW5vbnltb3VzIHBhZ2VzIGFyZSBrZXB0IG9uIHRoZSBpbmFjdGl2ZSBsaXN0LgorICoKKyAqIHRvdGFsICAgICB0YXJnZXQgICAgbWF4CisgKiBtZW1vcnkgICAgcmF0aW8gICAgIGluYWN0aXZlIGFub24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMTBNQiAgICAgICAxICAgICAgICAgNU1CCisgKiAgMTAwTUIgICAgICAgMSAgICAgICAgNTBNQgorICogICAgMUdCICAgICAgIDMgICAgICAgMjUwTUIKKyAqICAgMTBHQiAgICAgIDEwICAgICAgIDAuOUdCCisgKiAgMTAwR0IgICAgICAzMSAgICAgICAgIDNHQgorICogICAgMVRCICAgICAxMDEgICAgICAgIDEwR0IKKyAqICAgMTBUQiAgICAgMzIwICAgICAgICAzMkdCCisgKi8KK3ZvaWQgc2V0dXBfcGVyX3pvbmVfaW5hY3RpdmVfcmF0aW8odm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCQl1bnNpZ25lZCBpbnQgZ2IsIHJhdGlvOworCisJCS8qIFpvbmUgc2l6ZSBpbiBnaWdhYnl0ZXMgKi8KKwkJZ2IgPSB6b25lLT5wcmVzZW50X3BhZ2VzID4+ICgzMCAtIFBBR0VfU0hJRlQpOworCQlyYXRpbyA9IGludF9zcXJ0KDEwICogZ2IpOworCQlpZiAoIXJhdGlvKQorCQkJcmF0aW8gPSAxOworCisJCXpvbmUtPmluYWN0aXZlX3JhdGlvID0gcmF0aW87CisJfQorfQorCiAvKgogICogSW5pdGlhbGlzZSBtaW5fZnJlZV9rYnl0ZXMuCiAgKgpAQCAtNDI4Niw2ICs0MzUyLDcgQEAKIAkJbWluX2ZyZWVfa2J5dGVzID0gNjU1MzY7CiAJc2V0dXBfcGVyX3pvbmVfcGFnZXNfbWluKCk7CiAJc2V0dXBfcGVyX3pvbmVfbG93bWVtX3Jlc2VydmUoKTsKKwlzZXR1cF9wZXJfem9uZV9pbmFjdGl2ZV9yYXRpbygpOwogCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQoaW5pdF9wZXJfem9uZV9wYWdlc19taW4pCmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg2NTUwCi0tLSAvZGV2L251bGwKKysrIGIvbW0vcGFnZV9jZ3JvdXAuYwpAQCAtMCwwICsxLDIzNyBAQAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdF9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorCitzdGF0aWMgdm9pZCBfX21lbWluaXQKK19faW5pdF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCB1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlwYy0+ZmxhZ3MgPSAwOworCXBjLT5tZW1fY2dyb3VwID0gTlVMTDsKKwlwYy0+cGFnZSA9IHBmbl90b19wYWdlKHBmbik7Cit9CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF91c2FnZTsKKworI2lmICFkZWZpbmVkKENPTkZJR19TUEFSU0VNRU0pCisKKwordm9pZCBfX2luaXQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQoreworCXBnZGF0LT5ub2RlX3BhZ2VfY2dyb3VwID0gTlVMTDsKK30KKworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2U7CisKKwliYXNlID0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS0+bm9kZV9wYWdlX2Nncm91cDsKKwlpZiAodW5saWtlbHkoIWJhc2UpKQorCQlyZXR1cm4gTlVMTDsKKworCW9mZnNldCA9IHBmbiAtIE5PREVfREFUQShwYWdlX3RvX25pZChwYWdlKSktPm5vZGVfc3RhcnRfcGZuOworCXJldHVybiBiYXNlICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBhbGxvY19ub2RlX3BhZ2VfY2dyb3VwKGludCBuaWQpCit7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlLCAqcGM7CisJdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBucl9wYWdlcywgaW5kZXg7CisKKwlzdGFydF9wZm4gPSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm47CisJbnJfcGFnZXMgPSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzOworCisJdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogbnJfcGFnZXM7CisKKwliYXNlID0gX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEobmlkKSwKKwkJCXRhYmxlX3NpemUsIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PTUVNOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5yX3BhZ2VzOyBpbmRleCsrKSB7CisJCXBjID0gYmFzZSArIGluZGV4OworCQlfX2luaXRfcGFnZV9jZ3JvdXAocGMsIHN0YXJ0X3BmbiArIGluZGV4KTsKKwl9CisJTk9ERV9EQVRBKG5pZCktPm5vZGVfcGFnZV9jZ3JvdXAgPSBiYXNlOworCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IHBhZ2VfY2dyb3VwX2luaXQodm9pZCkKK3sKKworCWludCBuaWQsIGZhaWw7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpICB7CisJCWZhaWwgPSBhbGxvY19ub2RlX3BhZ2VfY2dyb3VwKG5pZCk7CisJCWlmIChmYWlsKQorCQkJZ290byBmYWlsOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJhbGxvY2F0ZWQgJWxkIGJ5dGVzIG9mIHBhZ2VfY2dyb3VwXG4iLCB0b3RhbF91c2FnZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHRyeSBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgb3B0aW9uIGlmIHlvdSIKKwkiIGRvbid0IHdhbnRcbiIpOworCXJldHVybjsKK2ZhaWw6CisJcHJpbnRrKEtFUk5fQ1JJVCAiYWxsb2NhdGlvbiBvZiBwYWdlX2Nncm91cCB3YXMgZmFpbGVkLlxuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAicGxlYXNlIHRyeSBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgYm9vdCBvcHRpb25cbiIpOworCXBhbmljKCJPdXQgb2YgbWVtb3J5Iik7Cit9CisKKyNlbHNlIC8qIENPTkZJR19GTEFUX05PREVfTUVNX01BUCAqLworCitzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCXN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbiA9IF9fcGZuX3RvX3NlY3Rpb24ocGZuKTsKKworCXJldHVybiBzZWN0aW9uLT5wYWdlX2Nncm91cCArIHBmbjsKK30KKworaW50IF9fbWVtaW5pdCBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBwZm4pCit7CisJc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uOworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZSwgKnBjOworCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZTsKKwlpbnQgbmlkLCBpbmRleDsKKworCXNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisKKwlpZiAoc2VjdGlvbi0+cGFnZV9jZ3JvdXApCisJCXJldHVybiAwOworCisJbmlkID0gcGFnZV90b19uaWQocGZuX3RvX3BhZ2UocGZuKSk7CisKKwl0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwYWdlX2Nncm91cCkgKiBQQUdFU19QRVJfU0VDVElPTjsKKwliYXNlID0ga21hbGxvY19ub2RlKHRhYmxlX3NpemUsIEdGUF9LRVJORUwsIG5pZCk7CisJaWYgKCFiYXNlKQorCQliYXNlID0gdm1hbGxvY19ub2RlKHRhYmxlX3NpemUsIG5pZCk7CisKKwlpZiAoIWJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwYWdlIGNncm91cCBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQQUdFU19QRVJfU0VDVElPTjsgaW5kZXgrKykgeworCQlwYyA9IGJhc2UgKyBpbmRleDsKKwkJX19pbml0X3BhZ2VfY2dyb3VwKHBjLCBwZm4gKyBpbmRleCk7CisJfQorCisJc2VjdGlvbiA9IF9fcGZuX3RvX3NlY3Rpb24ocGZuKTsKKwlzZWN0aW9uLT5wYWdlX2Nncm91cCA9IGJhc2UgLSBwZm47CisJdG90YWxfdXNhZ2UgKz0gdGFibGVfc2l6ZTsKKwlyZXR1cm4gMDsKK30KKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKK3ZvaWQgX19mcmVlX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXM7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlOworCisJbXMgPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisJaWYgKCFtcyB8fCAhbXMtPnBhZ2VfY2dyb3VwKQorCQlyZXR1cm47CisJYmFzZSA9IG1zLT5wYWdlX2Nncm91cCArIHBmbjsKKwltcy0+cGFnZV9jZ3JvdXAgPSBOVUxMOworCWlmIChpc192bWFsbG9jX2FkZHIoYmFzZSkpCisJCXZmcmVlKGJhc2UpOworCWVsc2UKKwkJa2ZyZWUoYmFzZSk7Cit9CisKK2ludCBvbmxpbmVfcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJaW50IG5pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHBmbjsKKwlpbnQgZmFpbCA9IDA7CisKKwlzdGFydCA9IHN0YXJ0X3BmbiAmIChQQUdFU19QRVJfU0VDVElPTiAtIDEpOworCWVuZCA9IEFMSUdOKHN0YXJ0X3BmbiArIG5yX3BhZ2VzLCBQQUdFU19QRVJfU0VDVElPTik7CisKKwlmb3IgKHBmbiA9IHN0YXJ0OyAhZmFpbCAmJiBwZm4gPCBlbmQ7IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgeworCQlpZiAoIXBmbl9wcmVzZW50KHBmbikpCisJCQljb250aW51ZTsKKwkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4pOworCX0KKwlpZiAoIWZhaWwpCisJCXJldHVybiAwOworCisJLyogcm9sbGJhY2sgKi8KKwlmb3IgKHBmbiA9IHN0YXJ0OyBwZm4gPCBlbmQ7IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikKKwkJX19mcmVlX3BhZ2VfY2dyb3VwKHBmbik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworaW50IG9mZmxpbmVfcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCBuaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBwZm47CisKKwlzdGFydCA9IHN0YXJ0X3BmbiAmIChQQUdFU19QRVJfU0VDVElPTiAtIDEpOworCWVuZCA9IEFMSUdOKHN0YXJ0X3BmbiArIG5yX3BhZ2VzLCBQQUdFU19QRVJfU0VDVElPTik7CisKKwlmb3IgKHBmbiA9IHN0YXJ0OyBwZm4gPCBlbmQ7IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikKKwkJX19mcmVlX3BhZ2VfY2dyb3VwKHBmbik7CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBwYWdlX2Nncm91cF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWVtb3J5X25vdGlmeSAqbW4gPSBhcmc7CisJaW50IHJldCA9IDA7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1FTV9HT0lOR19PTkxJTkU6CisJCXJldCA9IG9ubGluZV9wYWdlX2Nncm91cChtbi0+c3RhcnRfcGZuLAorCQkJCSAgIG1uLT5ucl9wYWdlcywgbW4tPnN0YXR1c19jaGFuZ2VfbmlkKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fQ0FOQ0VMX09OTElORToKKwljYXNlIE1FTV9PRkZMSU5FOgorCQlvZmZsaW5lX3BhZ2VfY2dyb3VwKG1uLT5zdGFydF9wZm4sCisJCQkJbW4tPm5yX3BhZ2VzLCBtbi0+c3RhdHVzX2NoYW5nZV9uaWQpOworCQlicmVhazsKKwljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgorCQlicmVhazsKKwljYXNlIE1FTV9PTkxJTkU6CisJY2FzZSBNRU1fQ0FOQ0VMX09GRkxJTkU6CisJCWJyZWFrOworCX0KKwlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCisKK3ZvaWQgX19pbml0IHBhZ2VfY2dyb3VwX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlpbnQgZmFpbCA9IDA7CisKKwlmb3IgKHBmbiA9IDA7ICFmYWlsICYmIHBmbiA8IG1heF9wZm47IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgeworCQlpZiAoIXBmbl9wcmVzZW50KHBmbikpCisJCQljb250aW51ZTsKKwkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4pOworCX0KKwlpZiAoZmFpbCkgeworCQlwcmludGsoS0VSTl9DUklUICJ0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IGJvb3Qgb3B0aW9uXG4iKTsKKwkJcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKKwl9IGVsc2UgeworCQlob3RwbHVnX21lbW9yeV9ub3RpZmllcihwYWdlX2Nncm91cF9jYWxsYmFjaywgMCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gImFsbG9jYXRlZCAlbGQgYnl0ZXMgb2YgcGFnZV9jZ3JvdXBcbiIsIHRvdGFsX3VzYWdlKTsKKwlwcmludGsoS0VSTl9JTkZPICJwbGVhc2UgdHJ5IGNncm91cF9kaXNhYmxlPW1lbW9yeSBvcHRpb24gaWYgeW91IGRvbid0IgorCSIgd2FudFxuIik7Cit9CisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3sKKwlyZXR1cm47Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCA2Y2JkOWE3Li5iZWM4M2MxIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgbWF4X3NhbmVfcmVhZGFoZWFkKHVuc2lnbmVkIGxvbmcgbnIpCiB7Ci0JcmV0dXJuIG1pbihuciwgKG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfSU5BQ1RJVkUpCisJcmV0dXJuIG1pbihuciwgKG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfSU5BQ1RJVkVfRklMRSkKIAkJKyBub2RlX3BhZ2Vfc3RhdGUobnVtYV9ub2RlX2lkKCksIE5SX0ZSRUVfUEFHRVMpKSAvIDIpOwogfQogCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMDM4M2FjZi4uMTA5OTM5NCAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNTMsOSArNTMsNDcgQEAKIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1zdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOworI2luY2x1ZGUgImludGVybmFsLmgiCiAKLS8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIG1tYXBfc2VtLiAqLworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYV9hbGxvYyh2b2lkKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit7CisJa21lbV9jYWNoZV9mcmVlKGFub25fdm1hX2NhY2hlcCwgYW5vbl92bWEpOworfQorCisvKioKKyAqIGFub25fdm1hX3ByZXBhcmUgLSBhdHRhY2ggYW4gYW5vbl92bWEgdG8gYSBtZW1vcnkgcmVnaW9uCisgKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvbgorICoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGUgbWVtb3J5IG1hcHBpbmcgZGVzY3JpYmVkIGJ5ICd2bWEnIGhhcworICogYW4gJ2Fub25fdm1hJyBhdHRhY2hlZCB0byBpdCwgc28gdGhhdCB3ZSBjYW4gYXNzb2NpYXRlIHRoZQorICogYW5vbnltb3VzIHBhZ2VzIG1hcHBlZCBpbnRvIGl0IHdpdGggdGhhdCBhbm9uX3ZtYS4KKyAqCisgKiBUaGUgY29tbW9uIGNhc2Ugd2lsbCBiZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSBvbmUsIGJ1dCBpZgorICogaWYgbm90IHdlIGVpdGhlciBuZWVkIHRvIGZpbmQgYW4gYWRqYWNlbnQgbWFwcGluZyB0aGF0IHdlCisgKiBjYW4gcmUtdXNlIHRoZSBhbm9uX3ZtYSBmcm9tICh2ZXJ5IGNvbW1vbiB3aGVuIHRoZSBvbmx5CisgKiByZWFzb24gZm9yIHNwbGl0dGluZyBhIHZtYSBoYXMgYmVlbiBtcHJvdGVjdCgpKSwgb3Igd2UKKyAqIGFsbG9jYXRlIGEgbmV3IG9uZS4KKyAqCisgKiBBbm9uLXZtYSBhbGxvY2F0aW9ucyBhcmUgdmVyeSBzdWJ0bGUsIGJlY2F1c2Ugd2UgbWF5IGhhdmUKKyAqIG9wdGltaXN0aWNhbGx5IGxvb2tlZCB1cCBhbiBhbm9uX3ZtYSBpbiBwYWdlX2xvY2tfYW5vbl92bWEoKQorICogYW5kIHRoYXQgbWF5IGFjdHVhbGx5IHRvdWNoIHRoZSBzcGlubG9jayBldmVuIGluIHRoZSBuZXdseQorICogYWxsb2NhdGVkIHZtYSAoaXQgZGVwZW5kcyBvbiBSQ1UgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBhbm9uX3ZtYSBpc24ndCBhY3R1YWxseSBkZXN0cm95ZWQpLgorICoKKyAqIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGRvIHByb3BlciBhbm9uX3ZtYSBsb2NraW5nIGV2ZW4KKyAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIGRvIG5vdCB3YW50CisgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nCisgKiBhbiBhbm9uX3ZtYS4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWRpbmcuCisgKi8KIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwpAQCAtNjMsMjAgKzEwMSwxNyBAQAogCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpIHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZCwgKmxvY2tlZDsKKwkJc3RydWN0IGFub25fdm1hICphbGxvY2F0ZWQ7CiAKIAkJYW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpOwotCQlpZiAoYW5vbl92bWEpIHsKLQkJCWFsbG9jYXRlZCA9IE5VTEw7Ci0JCQlsb2NrZWQgPSBhbm9uX3ZtYTsKLQkJCXNwaW5fbG9jaygmbG9ja2VkLT5sb2NrKTsKLQkJfSBlbHNlIHsKKwkJYWxsb2NhdGVkID0gTlVMTDsKKwkJaWYgKCFhbm9uX3ZtYSkgewogCQkJYW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpOwogCQkJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlhbGxvY2F0ZWQgPSBhbm9uX3ZtYTsKLQkJCWxvY2tlZCA9IE5VTEw7CiAJCX0KKwkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAKIAkJLyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovCiAJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CkBAIC04Nyw4ICsxMjIsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAotCQlpZiAobG9ja2VkKQotCQkJc3Bpbl91bmxvY2soJmxvY2tlZC0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAJCWlmICh1bmxpa2VseShhbGxvY2F0ZWQpKQogCQkJYW5vbl92bWFfZnJlZShhbGxvY2F0ZWQpOwogCX0KQEAgLTE1Nyw3ICsxOTEsNyBAQAogICogR2V0dGluZyBhIGxvY2sgb24gYSBzdGFibGUgYW5vbl92bWEgZnJvbSBhIHBhZ2Ugb2ZmIHRoZSBMUlUgaXMKICAqIHRyaWNreTogcGFnZV9sb2NrX2Fub25fdm1hIHJlbHkgb24gUkNVIHRvIGd1YXJkIGFnYWluc3QgdGhlIHJhY2VzLgogICovCi1zdGF0aWMgc3RydWN0IGFub25fdm1hICpwYWdlX2xvY2tfYW5vbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdHJ1Y3QgYW5vbl92bWEgKnBhZ2VfbG9ja19hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwogCXVuc2lnbmVkIGxvbmcgYW5vbl9tYXBwaW5nOwpAQCAtMTc3LDcgKzIxMSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCiB7CiAJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTI2OCw2ICszMDIsMzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBwYWdlX21hcHBlZF9pbl92bWEgLSBjaGVjayB3aGV0aGVyIGEgcGFnZSBpcyByZWFsbHkgbWFwcGVkIGluIGEgVk1BCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICogQHZtYTogdGhlIFZNQSB0byB0ZXN0CisgKgorICogUmV0dXJucyAxIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCBpbnRvIHRoZSBwYWdlIHRhYmxlcyBvZiB0aGUgVk1BLCAwCisgKiBpZiB0aGUgcGFnZSBpcyBub3QgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIHRoaXMgVk1BLiAgT25seQorICogdmFsaWQgZm9yIG5vcm1hbCBmaWxlIG9yIGFub255bW91cyBWTUFzLgorICovCitzdGF0aWMgaW50IHBhZ2VfbWFwcGVkX2luX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXB0ZV90ICpwdGU7CisJc3BpbmxvY2tfdCAqcHRsOworCisJYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CisJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkJCS8qIG91dCBvZiB2bWEgcmFuZ2UgKi8KKwkJcmV0dXJuIDA7CisJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIHZtYS0+dm1fbW0sIGFkZHJlc3MsICZwdGwsIDEpOworCWlmICghcHRlKQkJCS8qIHRoZSBwYWdlIGlzIG5vdCBpbiB0aGlzIG1tICovCisJCXJldHVybiAwOworCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBTdWJmdW5jdGlvbnMgb2YgcGFnZV9yZWZlcmVuY2VkOiBwYWdlX3JlZmVyZW5jZWRfb25lIGNhbGxlZAogICogcmVwZWF0ZWRseSBmcm9tIGVpdGhlciBwYWdlX3JlZmVyZW5jZWRfYW5vbiBvciBwYWdlX3JlZmVyZW5jZWRfZmlsZS4KQEAgLTI4OSwxMCArMzQ5LDE3IEBACiAJaWYgKCFwdGUpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBEb24ndCB3YW50IHRvIGVsZXZhdGUgcmVmZXJlbmNlZCBmb3IgbWxvY2tlZCBwYWdlIHRoYXQgZ2V0cyB0aGlzIGZhciwKKwkgKiBpbiBvcmRlciB0aGF0IGl0IHByb2dyZXNzZXMgdG8gdHJ5X3RvX3VubWFwIGFuZCBpcyBtb3ZlZCB0byB0aGUKKwkgKiB1bmV2aWN0YWJsZSBsaXN0LgorCSAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCXJlZmVyZW5jZWQrKzsKIAkJKm1hcGNvdW50ID0gMTsJLyogYnJlYWsgZWFybHkgZnJvbSBsb29wICovCi0JfSBlbHNlIGlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCisJCWdvdG8gb3V0X3VubWFwOworCX0KKworCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCiAJCXJlZmVyZW5jZWQrKzsKIAogCS8qIFByZXRlbmQgdGhlIHBhZ2UgaXMgcmVmZXJlbmNlZCBpZiB0aGUgdGFzayBoYXMgdGhlCkBAIC0zMDEsNiArMzY4LDcgQEAKIAkJCXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkKIAkJcmVmZXJlbmNlZCsrOwogCitvdXRfdW5tYXA6CiAJKCptYXBjb3VudCktLTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKIG91dDoKQEAgLTM5MCwxMSArNDU4LDYgQEAKIAkJICovCiAJCWlmIChtZW1fY29udCAmJiAhbW1fbWF0Y2hfY2dyb3VwKHZtYS0+dm1fbW0sIG1lbV9jb250KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fTE9DS0VEfFZNX01BWVNIQVJFKSkKLQkJCQkgID09IChWTV9MT0NLRUR8Vk1fTUFZU0hBUkUpKSB7Ci0JCQlyZWZlcmVuY2VkKys7Ci0JCQlicmVhazsKLQkJfQogCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9vbmUocGFnZSwgdm1hLCAmbWFwY291bnQpOwogCQlpZiAoIW1hcGNvdW50KQogCQkJYnJlYWs7CkBAIC02NzQsOCArNzM3LDggQEAKIAkJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7CiAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJfQotCi0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwKIAkJCVBhZ2VBbm9uKHBhZ2UpID8gTlJfQU5PTl9QQUdFUyA6IE5SX0ZJTEVfTUFQUEVEKTsKIAkJLyoKQEAgLTcxNywxMSArNzgwLDE2IEBACiAJICogSWYgaXQncyByZWNlbnRseSByZWZlcmVuY2VkIChwZXJoYXBzIHBhZ2VfcmVmZXJlbmNlZAogCSAqIHNraXBwZWQgb3ZlciB0aGlzIG1tKSB0aGVuIHdlIHNob3VsZCByZWFjdGl2YXRlIGl0LgogCSAqLwotCWlmICghbWlncmF0aW9uICYmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgfHwKLQkJCShwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpKSkgewotCQlyZXQgPSBTV0FQX0ZBSUw7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KKwlpZiAoIW1pZ3JhdGlvbikgeworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJcmV0ID0gU1dBUF9NTE9DSzsKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisJCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpIHsKKwkJCXJldCA9IFNXQVBfRkFJTDsKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisgIAl9CiAKIAkvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqLwogCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwYWdlX3RvX3BmbihwYWdlKSk7CkBAIC04MDIsMTIgKzg3MCwxNyBAQAogICogRm9yIHZlcnkgc3BhcnNlbHkgcG9wdWxhdGVkIFZNQXMgdGhpcyBpcyBhIGxpdHRsZSBpbmVmZmljaWVudCAtIGNoYW5jZXMgYXJlCiAgKiB0aGVyZSB0aGVyZSB3b24ndCBiZSBtYW55IHB0ZXMgbG9jYXRlZCB3aXRoaW4gdGhlIHNjYW4gY2x1c3Rlci4gIEluIHRoaXMgY2FzZQogICogbWF5YmUgd2UgY291bGQgc2NhbiBmdXJ0aGVyIC0gdG8gdGhlIGVuZCBvZiB0aGUgcHRlIHBhZ2UsIHBlcmhhcHMuCisgKgorICogTWxvY2tlZCBwYWdlczogIGNoZWNrIFZNX0xPQ0tFRCB1bmRlciBtbWFwX3NlbSBoZWxkIGZvciByZWFkLCBpZiB3ZSBjYW4KKyAqIGFjcXVpcmUgaXQgd2l0aG91dCBibG9ja2luZy4gIElmIHZtYSBsb2NrZWQsIG1sb2NrIHRoZSBwYWdlcyBpbiB0aGUgY2x1c3RlciwKKyAqIHJhdGhlciB0aGFuIHVubWFwcGluZyB0aGVtLiAgSWYgd2UgZW5jb3VudGVyIHRoZSAiY2hlY2tfcGFnZSIgdGhhdCB2bXNjYW4gaXMKKyAqIHRyeWluZyB0byB1bm1hcCwgcmV0dXJuIFNXQVBfTUxPQ0ssIGVsc2UgZGVmYXVsdCBTV0FQX0FHQUlOLgogICovCiAjZGVmaW5lIENMVVNURVJfU0laRQltaW4oMzIqUEFHRV9TSVpFLCBQTURfU0laRSkKICNkZWZpbmUgQ0xVU1RFUl9NQVNLCSh+KENMVVNURVJfU0laRSAtIDEpKQogCi1zdGF0aWMgdm9pZCB0cnlfdG9fdW5tYXBfY2x1c3Rlcih1bnNpZ25lZCBsb25nIGN1cnNvciwKLQl1bnNpZ25lZCBpbnQgKm1hcGNvdW50LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2NsdXN0ZXIodW5zaWduZWQgbG9uZyBjdXJzb3IsIHVuc2lnbmVkIGludCAqbWFwY291bnQsCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqY2hlY2tfcGFnZSkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJcGdkX3QgKnBnZDsKQEAgLTgxOSw2ICs4OTIsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKKwlpbnQgbG9ja2VkX3ZtYSA9IDA7CiAKIAlhZGRyZXNzID0gKHZtYS0+dm1fc3RhcnQgKyBjdXJzb3IpICYgQ0xVU1RFUl9NQVNLOwogCWVuZCA9IGFkZHJlc3MgKyBDTFVTVEVSX1NJWkU7CkBAIC04MjksMTUgKzkwNCwyNiBAQAogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE1MT0NLX1BBR0VTID0+IGZlYXR1cmUgaXMgY29uZmlndXJlZC4KKwkgKiBpZiB3ZSBjYW4gYWNxdWlyZSB0aGUgbW1hcF9zZW0gZm9yIHJlYWQsIGFuZCB2bWEgaXMgVk1fTE9DS0VELAorCSAqIGtlZXAgdGhlIHNlbSB3aGlsZSBzY2FubmluZyB0aGUgY2x1c3RlciBmb3IgbWxvY2tpbmcgcGFnZXMuCisJICovCisJaWYgKE1MT0NLX1BBR0VTICYmIGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJbG9ja2VkX3ZtYSA9ICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKTsKKwkJaWYgKCFsb2NrZWRfdm1hKQorCQkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOyAvKiBkb24ndCBuZWVkIGl0ICovCisJfQogCiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKIApAQCAtODUwLDYgKzkzNiwxMyBAQAogCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyZXNzLCAqcHRlKTsKIAkJQlVHX09OKCFwYWdlIHx8IFBhZ2VBbm9uKHBhZ2UpKTsKIAorCQlpZiAobG9ja2VkX3ZtYSkgeworCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7ICAgLyogbm8tb3AgaWYgYWxyZWFkeSBtbG9ja2VkICovCisJCQlpZiAocGFnZSA9PSBjaGVja19wYWdlKQorCQkJCXJldCA9IFNXQVBfTUxPQ0s7CisJCQljb250aW51ZTsJLyogZG9uJ3QgdW5tYXAgKi8KKwkJfQorCiAJCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCiAJCQljb250aW51ZTsKIApAQCAtODcxLDM5ICs5NjQsMTA0IEBACiAJCSgqbWFwY291bnQpLS07CiAJfQogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKKwlpZiAobG9ja2VkX3ZtYSkKKwkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCisvKgorICogY29tbW9uIGhhbmRsaW5nIGZvciBwYWdlcyBtYXBwZWQgaW4gVk1fTE9DS0VEIHZtYXMKKyAqLworc3RhdGljIGludCB0cnlfdG9fbWxvY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IG1sb2NrZWQgPSAwOworCisJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCW1sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJbWxvY2tlZCsrOwkvKiByZWFsbHkgbWxvY2tlZCB0aGUgcGFnZSAqLworCQl9CisJCXVwX3JlYWQoJnZtYS0+dm1fbW0tPm1tYXBfc2VtKTsKKwl9CisJcmV0dXJuIG1sb2NrZWQ7Cit9CisKKy8qKgorICogdHJ5X3RvX3VubWFwX2Fub24gLSB1bm1hcCBvciB1bmxvY2sgYW5vbnltb3VzIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZAorICogcm1hcCBtZXRob2QKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB1bm1hcC91bmxvY2sKKyAqIEB1bmxvY2s6ICByZXF1ZXN0IGZvciB1bmxvY2sgcmF0aGVyIHRoYW4gdW5tYXAgW3VubGlrZWx5XQorICogQG1pZ3JhdGlvbjogIHVubWFwcGluZyBmb3IgbWlncmF0aW9uIC0gaWdub3JlZCBpZiBAdW5sb2NrCisgKgorICogRmluZCBhbGwgdGhlIG1hcHBpbmdzIG9mIGEgcGFnZSB1c2luZyB0aGUgbWFwcGluZyBwb2ludGVyIGFuZCB0aGUgdm1hIGNoYWlucworICogY29udGFpbmVkIGluIHRoZSBhbm9uX3ZtYSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAvdHJ5X3RvX211bmxvY2sgZm9yCisgKiBhbm9ueW1vdXMgcGFnZXMuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHRyeV90b19tdW5sb2NrKCksIHRoZSBtbWFwX3NlbSBvZiB0aGUgbW0gY29udGFpbmluZyB0aGUgdm1hCisgKiB3aGVyZSB0aGUgcGFnZSB3YXMgZm91bmQgd2lsbCBiZSBoZWxkIGZvciB3cml0ZS4gIFNvLCB3ZSB3b24ndCByZWNoZWNrCisgKiB2bV9mbGFncyBmb3IgdGhhdCBWTUEuICBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZSB0aGF0IHZtYSBzaG91bGRuJ3QgYmUKKyAqICdMT0NLRUQuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB1bmxvY2ssIGludCBtaWdyYXRpb24pCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7CiAJaW50IHJldCA9IFNXQVBfQUdBSU47CiAKKwlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKKwkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCisKIAlhbm9uX3ZtYSA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKIAlpZiAoIWFub25fdm1hKQogCQlyZXR1cm4gcmV0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgewotCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKLQkJaWYgKHJldCA9PSBTV0FQX0ZBSUwgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQotCQkJYnJlYWs7CisJCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKSB7CisJCQlpZiAoISgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYKKwkJCSAgICAgIHBhZ2VfbWFwcGVkX2luX3ZtYShwYWdlLCB2bWEpKSkKKwkJCQljb250aW51ZTsgIC8qIG11c3QgdmlzaXQgYWxsIHVubG9ja2VkIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7ICAvKiBzYXcgYXQgbGVhc3Qgb25lIG1sb2NrZWQgdm1hICovCisJCX0gZWxzZSB7CisJCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKKwkJCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spIHsKKwkJCW1sb2NrZWQgPSB0cnlfdG9fbWxvY2tfcGFnZShwYWdlLCB2bWEpOworCQkJaWYgKG1sb2NrZWQpCisJCQkJYnJlYWs7CS8qIHN0b3AgaWYgYWN0dWFsbHkgbWxvY2tlZCBwYWdlICovCisJCX0KIAl9CiAKIAlwYWdlX3VubG9ja19hbm9uX3ZtYShhbm9uX3ZtYSk7CisKKwlpZiAobWxvY2tlZCkKKwkJcmV0ID0gU1dBUF9NTE9DSzsJLyogYWN0dWFsbHkgbWxvY2tlZCB0aGUgcGFnZSAqLworCWVsc2UgaWYgKHJldCA9PSBTV0FQX01MT0NLKQorCQlyZXQgPSBTV0FQX0FHQUlOOwkvKiBzYXcgVk1fTE9DS0VEIHZtYSAqLworCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiB0cnlfdG9fdW5tYXBfZmlsZSAtIHVubWFwIGZpbGUgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkIHJtYXAgbWV0aG9kCi0gKiBAcGFnZTogdGhlIHBhZ2UgdG8gdW5tYXAKLSAqIEBtaWdyYXRpb246IG1pZ3JhdGlvbiBmbGFnCisgKiB0cnlfdG9fdW5tYXBfZmlsZSAtIHVubWFwL3VubG9jayBmaWxlIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZCBybWFwIG1ldGhvZAorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwL3VubG9jaworICogQHVubG9jazogIHJlcXVlc3QgZm9yIHVubG9jayByYXRoZXIgdGhhbiB1bm1hcCBbdW5saWtlbHldCisgKiBAbWlncmF0aW9uOiAgdW5tYXBwaW5nIGZvciBtaWdyYXRpb24gLSBpZ25vcmVkIGlmIEB1bmxvY2sKICAqCiAgKiBGaW5kIGFsbCB0aGUgbWFwcGluZ3Mgb2YgYSBwYWdlIHVzaW5nIHRoZSBtYXBwaW5nIHBvaW50ZXIgYW5kIHRoZSB2bWEgY2hhaW5zCiAgKiBjb250YWluZWQgaW4gdGhlIGFkZHJlc3Nfc3BhY2Ugc3RydWN0IGl0IHBvaW50cyB0by4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwIGZvciBvYmplY3QtYmFzZWQgcGFnZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwL3RyeV90b19tdW5sb2NrIGZvcgorICogb2JqZWN0LWJhc2VkIHBhZ2VzLgorICogV2hlbiBjYWxsZWQgZnJvbSB0cnlfdG9fbXVubG9jaygpLCB0aGUgbW1hcF9zZW0gb2YgdGhlIG1tIGNvbnRhaW5pbmcgdGhlIHZtYQorICogd2hlcmUgdGhlIHBhZ2Ugd2FzIGZvdW5kIHdpbGwgYmUgaGVsZCBmb3Igd3JpdGUuICBTbywgd2Ugd29uJ3QgcmVjaGVjaworICogdm1fZmxhZ3MgZm9yIHRoYXQgVk1BLiAgVGhhdCBzaG91bGQgYmUgT0ssIGJlY2F1c2UgdGhhdCB2bWEgc2hvdWxkbid0IGJlCisgKiAnTE9DS0VELgogICovCi1zdGF0aWMgaW50IHRyeV90b191bm1hcF9maWxlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbWlncmF0aW9uKQorc3RhdGljIGludCB0cnlfdG9fdW5tYXBfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHVubG9jaywgaW50IG1pZ3JhdGlvbikKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAJcGdvZmZfdCBwZ29mZiA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7CkBAIC05MTQsMjAgKzEwNzIsNDQgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9ubF9jdXJzb3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWF4X25sX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBtYXBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7CisKKwlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKKwkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCiAKIAlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl2bWFfcHJpb190cmVlX2ZvcmVhY2godm1hLCAmaXRlciwgJm1hcHBpbmctPmlfbW1hcCwgcGdvZmYsIHBnb2ZmKSB7Ci0JCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOwotCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCi0JCQlnb3RvIG91dDsKKwkJaWYgKE1MT0NLX1BBR0VTICYmIHVubGlrZWx5KHVubG9jaykpIHsKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQorCQkJCWNvbnRpbnVlOwkvKiBtdXN0IHZpc2l0IGFsbCB2bWFzICovCisJCQlyZXQgPSBTV0FQX01MT0NLOworCQl9IGVsc2UgeworCQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsIG1pZ3JhdGlvbik7CisJCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHJldCA9PSBTV0FQX01MT0NLKSB7CisJCQltbG9ja2VkID0gdHJ5X3RvX21sb2NrX3BhZ2UocGFnZSwgdm1hKTsKKwkJCWlmIChtbG9ja2VkKQorCQkJCWJyZWFrOyAgLyogc3RvcCBpZiBhY3R1YWxseSBtbG9ja2VkIHBhZ2UgKi8KKwkJfQogCX0KIAorCWlmIChtbG9ja2VkKQorCQlnb3RvIG91dDsKKwogCWlmIChsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKSkKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsCiAJCQkJCQlzaGFyZWQudm1fc2V0Lmxpc3QpIHsKLQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiAhbWlncmF0aW9uKQorCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCQkJY29udGludWU7CS8qIG11c3QgdmlzaXQgYWxsIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7CS8qIGxlYXZlIG1sb2NrZWQgPT0gMCAqLworCQkJZ290byBvdXQ7CQkvKiBubyBuZWVkIHRvIGxvb2sgZnVydGhlciAqLworCQl9CisJCWlmICghTUxPQ0tfUEFHRVMgJiYgIW1pZ3JhdGlvbiAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCiAJCQljb250aW51ZTsKIAkJY3Vyc29yID0gKHVuc2lnbmVkIGxvbmcpIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCQlpZiAoY3Vyc29yID4gbWF4X25sX2N1cnNvcikKQEAgLTkzNyw3ICsxMTE5LDcgQEAKIAkJCW1heF9ubF9zaXplID0gY3Vyc29yOwogCX0KIAotCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFueSBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCAqLworCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFsbCBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCA/ICovCiAJCXJldCA9IFNXQVBfRkFJTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTYxLDEyICsxMTQzLDE2IEBACiAJZG8gewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsCiAJCQkJCQlzaGFyZWQudm1fc2V0Lmxpc3QpIHsKLQkJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYgIW1pZ3JhdGlvbikKKwkJCWlmICghTUxPQ0tfUEFHRVMgJiYgIW1pZ3JhdGlvbiAmJgorCQkJICAgICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKIAkJCQljb250aW51ZTsKIAkJCWN1cnNvciA9ICh1bnNpZ25lZCBsb25nKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAkJCXdoaWxlICggY3Vyc29yIDwgbWF4X25sX2N1cnNvciAmJgogCQkJCWN1cnNvciA8IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgewotCQkJCXRyeV90b191bm1hcF9jbHVzdGVyKGN1cnNvciwgJm1hcGNvdW50LCB2bWEpOworCQkJCXJldCA9IHRyeV90b191bm1hcF9jbHVzdGVyKGN1cnNvciwgJm1hcGNvdW50LAorCQkJCQkJCQl2bWEsIHBhZ2UpOworCQkJCWlmIChyZXQgPT0gU1dBUF9NTE9DSykKKwkJCQkJbWxvY2tlZCA9IDI7CS8qIHRvIHJldHVybiBiZWxvdyAqLwogCQkJCWN1cnNvciArPSBDTFVTVEVSX1NJWkU7CiAJCQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBjdXJzb3I7CiAJCQkJaWYgKChpbnQpbWFwY291bnQgPD0gMCkKQEAgLTk4Nyw2ICsxMTczLDEwIEBACiAJCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCWlmIChtbG9ja2VkKQorCQlyZXQgPSBTV0FQX01MT0NLOwkvKiBhY3R1YWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJZWxzZSBpZiAocmV0ID09IFNXQVBfTUxPQ0spCisJCXJldCA9IFNXQVBfQUdBSU47CS8qIHNhdyBWTV9MT0NLRUQgdm1hICovCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwMiw2ICsxMTkyLDcgQEAKICAqIFNXQVBfU1VDQ0VTUwktIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyBhbGwgbWFwcGluZ3MKICAqIFNXQVBfQUdBSU4JLSB3ZSBtaXNzZWQgYSBtYXBwaW5nLCB0cnkgYWdhaW4gbGF0ZXIKICAqIFNXQVBfRkFJTAktIHRoZSBwYWdlIGlzIHVuc3dhcHBhYmxlCisgKiBTV0FQX01MT0NLCS0gcGFnZSBpcyBtbG9ja2VkLgogICovCiBpbnQgdHJ5X3RvX3VubWFwKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbWlncmF0aW9uKQogewpAQCAtMTAxMCwxMiArMTIwMSwzNiBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlpZiAoUGFnZUFub24ocGFnZSkpCi0JCXJldCA9IHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIG1pZ3JhdGlvbik7CisJCXJldCA9IHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIDAsIG1pZ3JhdGlvbik7CiAJZWxzZQotCQlyZXQgPSB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCBtaWdyYXRpb24pOwotCi0JaWYgKCFwYWdlX21hcHBlZChwYWdlKSkKKwkJcmV0ID0gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgMCwgbWlncmF0aW9uKTsKKwlpZiAocmV0ICE9IFNXQVBfTUxPQ0sgJiYgIXBhZ2VfbWFwcGVkKHBhZ2UpKQogCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qKgorICogdHJ5X3RvX211bmxvY2sgLSB0cnkgdG8gbXVubG9jayBhIHBhZ2UKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBiZSBtdW5sb2NrZWQKKyAqCisgKiBDYWxsZWQgZnJvbSBtdW5sb2NrIGNvZGUuICBDaGVja3MgYWxsIG9mIHRoZSBWTUFzIG1hcHBpbmcgdGhlIHBhZ2UKKyAqIHRvIG1ha2Ugc3VyZSBub2JvZHkgZWxzZSBoYXMgdGhpcyBwYWdlIG1sb2NrZWQuIFRoZSBwYWdlIHdpbGwgYmUKKyAqIHJldHVybmVkIHdpdGggUEdfbWxvY2tlZCBjbGVhcmVkIGlmIG5vIG90aGVyIHZtYXMgaGF2ZSBpdCBtbG9ja2VkLgorICoKKyAqIFJldHVybiB2YWx1ZXMgYXJlOgorICoKKyAqIFNXQVBfU1VDQ0VTUwktIG5vIHZtYSdzIGhvbGRpbmcgcGFnZSBtbG9ja2VkLgorICogU1dBUF9BR0FJTgktIHBhZ2UgbWFwcGVkIGluIG1sb2NrZWQgdm1hIC0tIGNvdWxkbid0IGFjcXVpcmUgbW1hcCBzZW0KKyAqIFNXQVBfTUxPQ0sJLSBwYWdlIGlzIG5vdyBtbG9ja2VkLgorICovCitpbnQgdHJ5X3RvX211bmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpIHx8IFBhZ2VMUlUocGFnZSkpOworCisJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgMSwgMCk7CisJZWxzZQorCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgMSwgMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGJmNjZkMDEuLmQzOGQ3ZTYgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzaG1lbV9iYWNraW5nX2Rldl9pbmZvICBfX3JlYWRfbW9zdGx5ID0gewogCS5yYV9wYWdlcwk9IDAsCS8qIE5vIHJlYWRhaGVhZCAqLwotCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSywKKwkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0sgfCBCRElfQ0FQX1NXQVBfQkFDS0VELAogCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKIH07CiAKQEAgLTEzNjcsNiArMTM2Nyw3IEBACiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQorCQkJU2V0UGFnZVN3YXBCYWNrZWQoZmlsZXBhZ2UpOwogCiAJCQkvKiBQcmVjaGFyZ2UgcGFnZSB3aGlsZSB3ZSBjYW4gd2FpdCwgY29tcGVuc2F0ZSBhZnRlciAqLwogCQkJZXJyb3IgPSBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShmaWxlcGFnZSwgY3VycmVudC0+bW0sCkBAIC0xNDc2LDEyICsxNDc3LDE2IEBACiAJCWlmICghdXNlcl9zaG1fbG9jayhpbm9kZS0+aV9zaXplLCB1c2VyKSkKIAkJCWdvdG8gb3V0X25vbWVtOwogCQlpbmZvLT5mbGFncyB8PSBWTV9MT0NLRUQ7CisJCW1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKGZpbGUtPmZfbWFwcGluZyk7CiAJfQogCWlmICghbG9jayAmJiAoaW5mby0+ZmxhZ3MgJiBWTV9MT0NLRUQpICYmIHVzZXIpIHsKIAkJdXNlcl9zaG1fdW5sb2NrKGlub2RlLT5pX3NpemUsIHVzZXIpOwogCQlpbmZvLT5mbGFncyAmPSB+Vk1fTE9DS0VEOworCQltYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKGZpbGUtPmZfbWFwcGluZyk7CisJCXNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyhmaWxlLT5mX21hcHBpbmcpOwogCX0KIAlyZXR2YWwgPSAwOworCiBvdXRfbm9tZW06CiAJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiByZXR2YWw7CkBAIC0yNTgwLDYgKzI1ODUsNyBAQAogCXNobWVtX3VuYWNjdF9zaXplKGZsYWdzLCBzaXplKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzaG1lbV9maWxlX3NldHVwKTsKIAogLyoqCiAgKiBzaG1lbV96ZXJvX3NldHVwIC0gc2V0dXAgYSBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmcKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA5ZTBjYjMxLi4yMTUyZTQ4IDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC0zMSwxMSArMzEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIC8qIEhvdyBtYW55IHBhZ2VzIGRvIHdlIHRyeSB0byBzd2FwIG9yIHBhZ2UgaW4vb3V0IHRvZ2V0aGVyPyAqLwogaW50IHBhZ2VfY2x1c3RlcjsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjLCBscnVfYWRkX3B2ZWNzKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjW05SX0xSVV9MSVNUU10sIGxydV9hZGRfcHZlY3MpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjLCBscnVfcm90YXRlX3B2ZWNzKTsKIAogLyoKQEAgLTExNiw4ICsxMTcsOSBAQAogCQkJem9uZSA9IHBhZ2V6b25lOwogCQkJc3Bpbl9sb2NrKCZ6b25lLT5scnVfbG9jayk7CiAJCX0KLQkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKKwkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkgJiYgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCQkJaW50IGxydSA9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbHJ1XS5saXN0KTsKIAkJCXBnbW92ZWQrKzsKIAkJfQogCX0KQEAgLTEzNiw3ICsxMzgsNyBAQAogdm9pZCAgcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaWYgKCFQYWdlTG9ja2VkKHBhZ2UpICYmICFQYWdlRGlydHkocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkgJiYKLQkgICAgUGFnZUxSVShwYWdlKSkgeworCSAgICAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpICYmIFBhZ2VMUlUocGFnZSkpIHsKIAkJc3RydWN0IHBhZ2V2ZWMgKnB2ZWM7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE1NywxMiArMTU5LDE5IEBACiAJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJaW50IGZpbGUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCWludCBscnUgPSBMUlVfQkFTRSArIGZpbGU7CisJCWRlbF9wYWdlX2Zyb21fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKKwogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwotCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKKwkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CiAJCV9fY291bnRfdm1fZXZlbnQoUEdBQ1RJVkFURSk7Ci0JCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCB0cnVlKTsKKwkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CisKKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbISFmaWxlXSsrOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFshIWZpbGVdKys7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogfQpAQCAtMTc2LDcgKzE4NSw4IEBACiAgKi8KIHZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmICghUGFnZUFjdGl2ZShwYWdlKSAmJiBQYWdlUmVmZXJlbmNlZChwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CisJaWYgKCFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkgJiYKKwkJCVBhZ2VSZWZlcmVuY2VkKHBhZ2UpICYmIFBhZ2VMUlUocGFnZSkpIHsKIAkJYWN0aXZhdGVfcGFnZShwYWdlKTsKIAkJQ2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKTsKIAl9IGVsc2UgaWYgKCFQYWdlUmVmZXJlbmNlZChwYWdlKSkgewpAQCAtMTg2LDI4ICsxOTYsNzMgQEAKIAogRVhQT1JUX1NZTUJPTChtYXJrX3BhZ2VfYWNjZXNzZWQpOwogCi0vKioKLSAqIGxydV9jYWNoZV9hZGQ6IGFkZCBhIHBhZ2UgdG8gdGhlIHBhZ2UgbGlzdHMKLSAqIEBwYWdlOiB0aGUgcGFnZSB0byBhZGQKLSAqLwotdm9pZCBscnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICpwYWdlKQordm9pZCBfX2xydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewotCXN0cnVjdCBwYWdldmVjICpwdmVjID0gJmdldF9jcHVfdmFyKGxydV9hZGRfcHZlY3MpOworCXN0cnVjdCBwYWdldmVjICpwdmVjID0gJmdldF9jcHVfdmFyKGxydV9hZGRfcHZlY3MpW2xydV07CiAKIAlwYWdlX2NhY2hlX2dldChwYWdlKTsKIAlpZiAoIXBhZ2V2ZWNfYWRkKHB2ZWMsIHBhZ2UpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjKTsKKwkJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBscnUpOwogCXB1dF9jcHVfdmFyKGxydV9hZGRfcHZlY3MpOwogfQogCi12b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdlICpwYWdlKQorLyoqCisgKiBscnVfY2FjaGVfYWRkX2xydSAtIGFkZCBhIHBhZ2UgdG8gYSBwYWdlIGxpc3QKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byB0aGUgTFJVLgorICogQGxydTogdGhlIExSVSBsaXN0IHRvIHdoaWNoIHRoZSBwYWdlIGlzIGFkZGVkLgorICovCit2b2lkIGxydV9jYWNoZV9hZGRfbHJ1KHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX2FjdGl2ZV9wdmVjcyk7CisJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7CisJCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKKwl9IGVsc2UgaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CisJCUNsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCX0KIAotCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwotCWlmICghcGFnZXZlY19hZGQocHZlYywgcGFnZSkpCi0JCV9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShwdmVjKTsKLQlwdXRfY3B1X3ZhcihscnVfYWRkX2FjdGl2ZV9wdmVjcyk7CisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkgfHwgUGFnZUFjdGl2ZShwYWdlKSB8fCBQYWdlVW5ldmljdGFibGUocGFnZSkpOworCV9fbHJ1X2NhY2hlX2FkZChwYWdlLCBscnUpOworfQorCisvKioKKyAqIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3QgLSBhZGQgYSBwYWdlIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0CisgKiBAcGFnZTogIHRoZSBwYWdlIHRvIGJlIGFkZGVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0CisgKgorICogQWRkIHBhZ2UgZGlyZWN0bHkgdG8gaXRzIHpvbmUncyB1bmV2aWN0YWJsZSBsaXN0LiAgVG8gYXZvaWQgcmFjZXMgd2l0aAorICogdGFza3MgdGhhdCBtaWdodCBiZSBtYWtpbmcgdGhlIHBhZ2UgZXZpY3RhYmxlLCB0aHJvdWdoIGVnLiBtdW5sb2NrLAorICogbXVubWFwIG9yIGV4aXQsIHdoaWxlIGl0J3Mgbm90IG9uIHRoZSBscnUsIHdlIHdhbnQgdG8gYWRkIHRoZSBwYWdlCisgKiB3aGlsZSBpdCdzIGxvY2tlZCBvciBvdGhlcndpc2UgImludmlzaWJsZSIgdG8gb3RoZXIgdGFza3MuICBUaGlzIGlzCisgKiBkaWZmaWN1bHQgdG8gZG8gd2hlbiB1c2luZyB0aGUgcGFnZXZlYyBjYWNoZSwgc28gYnlwYXNzIHRoYXQuCisgKi8KK3ZvaWQgYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwlTZXRQYWdlVW5ldmljdGFibGUocGFnZSk7CisJU2V0UGFnZUxSVShwYWdlKTsKKwlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBMUlVfVU5FVklDVEFCTEUpOworCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworfQorCisvKioKKyAqIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlCisgKiBAcGFnZTogIHRoZSBwYWdlIHRvIGJlIGFkZGVkIHRvIExSVQorICogQHZtYTogICB2bWEgaW4gd2hpY2ggcGFnZSBpcyBtYXBwZWQgZm9yIGRldGVybWluaW5nIHJlY2xhaW1hYmlsaXR5CisgKgorICogcGxhY2UgQHBhZ2Ugb24gYWN0aXZlIG9yIHVuZXZpY3RhYmxlIExSVSBsaXN0LCBkZXBlbmRpbmcgb24KKyAqIHBhZ2VfZXZpY3RhYmxlKCkuICBOb3RlIHRoYXQgaWYgdGhlIHBhZ2UgaXMgbm90IGV2aWN0YWJsZSwKKyAqIGl0IGdvZXMgZGlyZWN0bHkgYmFjayBvbnRvIGl0J3Mgem9uZSdzIHVuZXZpY3RhYmxlIGxpc3QuICBJdCBkb2VzCisgKiBOT1QgdXNlIGEgcGVyIGNwdSBwYWdldmVjLgorICovCit2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgdm1hKSkKKwkJbHJ1X2NhY2hlX2FkZF9scnUocGFnZSwgTFJVX0FDVElWRSArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSk7CisJZWxzZQorCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOwogfQogCiAvKgpAQCAtMjE3LDE1ICsyNzIsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgZHJhaW5fY3B1X3BhZ2V2ZWNzKGludCBjcHUpCiB7CisJc3RydWN0IHBhZ2V2ZWMgKnB2ZWNzID0gcGVyX2NwdShscnVfYWRkX3B2ZWNzLCBjcHUpOwogCXN0cnVjdCBwYWdldmVjICpwdmVjOworCWludCBscnU7CiAKLQlwdmVjID0gJnBlcl9jcHUobHJ1X2FkZF9wdmVjcywgY3B1KTsKLQlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7Ci0KLQlwdmVjID0gJnBlcl9jcHUobHJ1X2FkZF9hY3RpdmVfcHZlY3MsIGNwdSk7Ci0JaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCi0JCV9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShwdmVjKTsKKwlmb3JfZWFjaF9scnUobHJ1KSB7CisJCXB2ZWMgPSAmcHZlY3NbbHJ1IC0gTFJVX0JBU0VdOworCQlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgbHJ1KTsKKwl9CiAKIAlwdmVjID0gJnBlcl9jcHUobHJ1X3JvdGF0ZV9wdmVjcywgY3B1KTsKIAlpZiAocGFnZXZlY19jb3VudChwdmVjKSkgewpAQCAtMjQ0LDcgKzI5OSw3IEBACiAJcHV0X2NwdSgpOwogfQogCi0jaWZkZWYgQ09ORklHX05VTUEKKyNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSB8fCBkZWZpbmVkKENPTkZJR19VTkVWSUNUQUJMRV9MUlUpCiBzdGF0aWMgdm9pZCBscnVfYWRkX2RyYWluX3Blcl9jcHUoc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSkKIHsKIAlscnVfYWRkX2RyYWluKCk7CkBAIC0zMDgsNiArMzYzLDcgQEAKIAogCQlpZiAoUGFnZUxSVShwYWdlKSkgewogCQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOworCiAJCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewogCQkJCWlmICh6b25lKQogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywKQEAgLTM4MCwxMCArNDM2LDExIEBACiAgKiBBZGQgdGhlIHBhc3NlZCBwYWdlcyB0byB0aGUgTFJVLCB0aGVuIGRyb3AgdGhlIGNhbGxlcidzIHJlZmNvdW50CiAgKiBvbiB0aGVtLiAgUmVpbml0aWFsaXNlcyB0aGUgY2FsbGVyJ3MgcGFnZXZlYy4KICAqLwotdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3ZvaWQgX19fX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJaW50IGk7CiAJc3RydWN0IHpvbmUgKnpvbmUgPSBOVUxMOworCVZNX0JVR19PTihpc191bmV2aWN0YWJsZV9scnUobHJ1KSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CkBAIC0zOTUsMzggKzQ1MiwxMyBAQAogCQkJem9uZSA9IHBhZ2V6b25lOwogCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQl9Ci0JCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKLQkJU2V0UGFnZUxSVShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQl9Ci0JaWYgKHpvbmUpCi0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCXJlbGVhc2VfcGFnZXMocHZlYy0+cGFnZXMsIHB2ZWMtPm5yLCBwdmVjLT5jb2xkKTsKLQlwYWdldmVjX3JlaW5pdChwdmVjKTsKLX0KLQotRVhQT1JUX1NZTUJPTChfX3BhZ2V2ZWNfbHJ1X2FkZCk7Ci0KLXZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKQotewotCWludCBpOwotCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KHB2ZWMpOyBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLT5wYWdlc1tpXTsKLQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOwotCi0JCWlmIChwYWdlem9uZSAhPSB6b25lKSB7Ci0JCQlpZiAoem9uZSkKLQkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJCXpvbmUgPSBwYWdlem9uZTsKLQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJfQotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCVNldFBhZ2VMUlUocGFnZSk7CiAJCVZNX0JVR19PTihQYWdlQWN0aXZlKHBhZ2UpKTsKLQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOworCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisJCVNldFBhZ2VMUlUocGFnZSk7CisJCWlmIChpc19hY3RpdmVfbHJ1KGxydSkpCisJCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOworCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwogCX0KIAlpZiAoem9uZSkKIAkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CkBAIC00MzQsNiArNDY2LDggQEAKIAlwYWdldmVjX3JlaW5pdChwdmVjKTsKIH0KIAorRVhQT1JUX1NZTUJPTChfX19fcGFnZXZlY19scnVfYWRkKTsKKwogLyoKICAqIFRyeSB0byBkcm9wIGJ1ZmZlcnMgZnJvbSB0aGUgcGFnZXMgaW4gYSBwYWdldmVjCiAgKi8KQEAgLTQ1Myw2ICs0ODcsMzAgQEAKIH0KIAogLyoqCisgKiBwYWdldmVjX3N3YXBfZnJlZSAtIHRyeSB0byBmcmVlIHN3YXAgc3BhY2UgZnJvbSB0aGUgcGFnZXMgaW4gYSBwYWdldmVjCisgKiBAcHZlYzogcGFnZXZlYyB3aXRoIHN3YXBjYWNoZSBwYWdlcyB0byBmcmVlIHRoZSBzd2FwIHNwYWNlIG9mCisgKgorICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIGFuIGV4dHJhIHJlZmVyZW5jZSB0byBlYWNoIHBhZ2UgYW5kCisgKiBub3QgaG9sZCB0aGUgcGFnZSBsb2NrIG9uIHRoZSBwYWdlcy4gIFRoaXMgZnVuY3Rpb24gdXNlcyBhCisgKiB0cnlsb2NrIG9uIHRoZSBwYWdlIGxvY2sgc28gaXQgbWF5IG5vdCBhbHdheXMgZnJlZSB0aGUgc3dhcAorICogc3BhY2UgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZS4KKyAqLwordm9pZCBwYWdldmVjX3N3YXBfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KHB2ZWMpOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLT5wYWdlc1tpXTsKKworCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSAmJiB0cnlsb2NrX3BhZ2UocGFnZSkpIHsKKwkJCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQorCQkJCXJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihwYWdlKTsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQl9CisJfQorfQorCisvKioKICAqIHBhZ2V2ZWNfbG9va3VwIC0gZ2FuZyBwYWdlY2FjaGUgbG9va3VwCiAgKiBAcHZlYzoJV2hlcmUgdGhlIHJlc3VsdGluZyBwYWdlcyBhcmUgcGxhY2VkCiAgKiBAbWFwcGluZzoJVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggNzk3YzM4My4uMzM1M2M5MCAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzMsNyArMzMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIHN3YXBfYmFja2luZ19kZXZfaW5mbyA9IHsKLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLIHwgQkRJX0NBUF9TV0FQX0JBQ0tFRCwKIAkudW5wbHVnX2lvX2ZuCT0gc3dhcF91bnBsdWdfaW9fZm4sCiB9OwogCkBAIC03NSw2ICs3NSw3IEBACiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlCVUdfT04oUGFnZVN3YXBDYWNoZShwYWdlKSk7CiAJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpKTsKKwlCVUdfT04oIVBhZ2VTd2FwQmFja2VkKHBhZ2UpKTsKIAllcnJvciA9IHJhZGl4X3RyZWVfcHJlbG9hZChnZnBfbWFzayk7CiAJaWYgKCFlcnJvcikgewogCQlwYWdlX2NhY2hlX2dldChwYWdlKTsKQEAgLTMwMiwxNyArMzAzLDE5IEBACiAJCSAqIHJlLXVzaW5nIHRoZSBqdXN0IGZyZWVkIHN3YXAgZW50cnkgZm9yIGFuIGV4aXN0aW5nIHBhZ2UuCiAJCSAqIE1heSBmYWlsICgtRU5PTUVNKSBpZiByYWRpeC10cmVlIG5vZGUgYWxsb2NhdGlvbiBmYWlsZWQuCiAJCSAqLwotCQlzZXRfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlfX3NldF9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CisJCVNldFBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKIAkJZXJyID0gYWRkX3RvX3N3YXBfY2FjaGUobmV3X3BhZ2UsIGVudHJ5LCBnZnBfbWFzayAmIEdGUF9LRVJORUwpOwogCQlpZiAobGlrZWx5KCFlcnIpKSB7CiAJCQkvKgogCQkJICogSW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBwYWdlIGFuZCByZXR1cm4uCiAJCQkgKi8KLQkJCWxydV9jYWNoZV9hZGRfYWN0aXZlKG5ld19wYWdlKTsKKwkJCWxydV9jYWNoZV9hZGRfYW5vbihuZXdfcGFnZSk7CiAJCQlzd2FwX3JlYWRwYWdlKE5VTEwsIG5ld19wYWdlKTsKIAkJCXJldHVybiBuZXdfcGFnZTsKIAkJfQotCQljbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CisJCUNsZWFyUGFnZVN3YXBCYWNrZWQobmV3X3BhZ2UpOworCQlfX2NsZWFyX3BhZ2VfbG9ja2VkKG5ld19wYWdlKTsKIAkJc3dhcF9mcmVlKGVudHJ5KTsKIAl9IHdoaWxlIChlcnIgIT0gLUVOT01FTSk7CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDFlMzMwZjIuLjkwY2I2N2EgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAgKiBXb3JrIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHByb2Nlc3NlcyBzaGFyaW5nIHRoaXMKICAqIHN3YXAgY2FjaGUgcGFnZS4gRnJlZSBpdCBpZiB5b3UgY2FuLiBSZXR1cm4gc3VjY2Vzcy4KICAqLwotaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvdW50KQogewogCWludCByZXR2YWw7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiBwOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJCXJldHVybiAwOwogCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKQogCQlyZXR1cm4gMDsKLQlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAyKSAvKiAyOiB1cyArIGNhY2hlICovCisJaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gY291bnQpIC8qIHVzICsgY2FjaGUgKyBwdGVzICovCiAJCXJldHVybiAwOwogCiAJZW50cnkudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpOwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJaWYgKHAtPnN3YXBfbWFwW3N3cF9vZmZzZXQoZW50cnkpXSA9PSAxKSB7CiAJCS8qIFJlY2hlY2sgdGhlIHBhZ2UgY291bnQgd2l0aCB0aGUgc3dhcGNhY2hlIGxvY2sgaGVsZC4uICovCiAJCXNwaW5fbG9ja19pcnEoJnN3YXBwZXJfc3BhY2UudHJlZV9sb2NrKTsKLQkJaWYgKChwYWdlX2NvdW50KHBhZ2UpID09IDIpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CisJCWlmICgocGFnZV9jb3VudChwYWdlKSA9PSBjb3VudCkgJiYgIVBhZ2VXcml0ZWJhY2socGFnZSkpIHsKIAkJCV9fZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwYWdlKTsKIAkJCVNldFBhZ2VEaXJ0eShwYWdlKTsKIAkJCXJldHZhbCA9IDE7CkBAIC0zODgsNiArMzg4LDI1IEBACiB9CiAKIC8qCisgKiBNb3N0IG9mIHRoZSB0aW1lIHRoZSBwYWdlIHNob3VsZCBoYXZlIHR3byByZWZlcmVuY2VzOiBvbmUgZm9yIHRoZQorICogcHJvY2VzcyBhbmQgb25lIGZvciB0aGUgc3dhcCBjYWNoZS4KKyAqLworaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9jb3VudChwYWdlLCAyKTsKK30KKworLyoKKyAqIFRoZSBwYWdlb3V0IGNvZGUgaG9sZHMgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIHRoZSBwYWdlLiAgVGhhdCByYWlzZXMKKyAqIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGVzdCBmb3IgdG8gMiBmb3IgYSBwYWdlIHRoYXQgaXMgb25seSBpbiB0aGUKKyAqIHN3YXAgY2FjaGUgcGx1cyAxIGZvciBlYWNoIHByb2Nlc3MgdGhhdCBtYXBzIHRoZSBwYWdlLgorICovCitpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfcmVmKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9jb3VudChwYWdlLCAyICsgcGFnZV9tYXBjb3VudChwYWdlKSk7Cit9CisKKy8qCiAgKiBGcmVlIHRoZSBzd2FwIGVudHJ5IGxpa2UgYWJvdmUsIGJ1dCBhbHNvIHRyeSB0bwogICogZnJlZSB0aGUgcGFnZSBjYWNoZSBlbnRyeSBpZiBpdCBpcyB0aGUgbGFzdCB1c2VyLgogICovCkBAIC00MDMsNyArNDIyLDcgQEAKIAlpZiAocCkgewogCQlpZiAoc3dhcF9lbnRyeV9mcmVlKHAsIHN3cF9vZmZzZXQoZW50cnkpKSA9PSAxKSB7CiAJCQlwYWdlID0gZmluZF9nZXRfcGFnZSgmc3dhcHBlcl9zcGFjZSwgZW50cnkudmFsKTsKLQkJCWlmIChwYWdlICYmIHVubGlrZWx5KCF0cnlsb2NrX3BhZ2UocGFnZSkpKSB7CisJCQlpZiAocGFnZSAmJiAhdHJ5bG9ja19wYWdlKHBhZ2UpKSB7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQkJCXBhZ2UgPSBOVUxMOwogCQkJfQpkaWZmIC0tZ2l0IGEvbW0vdGlueS1zaG1lbS5jIGIvbW0vdGlueS1zaG1lbS5jCmluZGV4IDhkN2EyN2EuLjNlNjdkNTcgMTAwNjQ0Ci0tLSBhL21tL3Rpbnktc2htZW0uYworKysgYi9tbS90aW55LXNobWVtLmMKQEAgLTk1LDYgKzk1LDcgQEAKIHB1dF9tZW1vcnk6CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fZmlsZV9zZXR1cCk7CiAKIC8qKgogICogc2htZW1femVyb19zZXR1cCAtIHNldHVwIGEgc2hhcmVkIGFub255bW91cyBtYXBwaW5nCmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuYwppbmRleCBlODNlNGIxLi4xMjI5MjExIDEwMDY0NAotLS0gYS9tbS90cnVuY2F0ZS5jCisrKyBiL21tL3RydW5jYXRlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JLyogZ3JyLiB0cnlfdG9fcmVsZWFzZV9wYWdlLAogCQkJCSAgIGRvX2ludmFsaWRhdGVwYWdlICovCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogCiAvKioKQEAgLTEwMyw2ICsxMDQsNyBAQAogCiAJY2FuY2VsX2RpcnR5X3BhZ2UocGFnZSwgUEFHRV9DQUNIRV9TSVpFKTsKIAorCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7CiAJcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIAlDbGVhclBhZ2VNYXBwZWRUb0Rpc2socGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwkvKiBwYWdlY2FjaGUgcmVmICovCkBAIC0xMjcsNiArMTI5LDcgQEAKIAlpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgMCkpCiAJCXJldHVybiAwOwogCisJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKIAlyZXQgPSByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBwYWdlKTsKIAogCXJldHVybiByZXQ7CkBAIC0zNTIsNiArMzU1LDcgQEAKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlnb3RvIGZhaWxlZDsKIAorCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7CiAJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpKTsKIAlfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGJiYTA2YzQuLjY1YWU1NzYgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTgsNiArOCw3IEBACiAgKiAgTnVtYSBhd2FyZW5lc3MsIENocmlzdG9waCBMYW1ldGVyLCBTR0ksIEp1bmUgMjAwNQogICovCiAKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC0xNiwxOCArMTcsMTggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAKLURFRklORV9SV0xPQ0sodm1saXN0X2xvY2spOwotc3RydWN0IHZtX3N0cnVjdCAqdm1saXN0OwotCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKLQkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKTsKKy8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KIAogc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtNDAsOCArNDEsNyBAQAogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdnVubWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTU1LDggKzU1LDcgQEAKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHZ1bm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCB2dW5tYXBfcHVkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC03MCwxMiArNjksMTAgQEAKIAl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotdm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCB2dW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXBnZF90ICpwZ2Q7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIHNpemU7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKQEAgLTg2LDM1ICs4MywzNiBAQAogCQkJY29udGludWU7CiAJCXZ1bm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0KTsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hcF92bV9hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpCi17Ci0JdW5tYXBfa2VybmVsX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHIsIGFyZWEtPnNpemUpOwogfQogCiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCiB7CiAJcHRlX3QgKnB0ZTsKIAorCS8qCisJICogbnIgaXMgYSBydW5uaW5nIGluZGV4IGludG8gdGhlIGFycmF5IHdoaWNoIGhlbHBzIGhpZ2hlciBsZXZlbAorCSAqIGNhbGxlcnMga2VlcCB0cmFjayBvZiB3aGVyZSB3ZSdyZSB1cCB0by4KKwkgKi8KKwogCXB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9ICoqcGFnZXM7Ci0JCVdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKTsKLQkJaWYgKCFwYWdlKQorCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CisKKwkJaWYgKFdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChXQVJOX09OKCFwYWdlKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7Ci0JCSgqcGFnZXMpKys7CisJCSgqbnIpKys7CiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKK3N0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTEyNCwxNCArMTIyLDE0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcykpCisJCWlmICh2bWFwX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBucikpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQogewogCXB1ZF90ICpwdWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTQxLDU3ICsxMzksNzggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKSkKKwkJaWYgKHZtYXBfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1pbnQgbWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKioqcGFnZXMpCisvKgorICogU2V0IHVwIHBhZ2UgdGFibGVzIGluIGt2YSAoYWRkciwgZW5kKS4gVGhlIHB0ZXMgc2hhbGwgaGF2ZSBwcm90ICJwcm90IiwgYW5kCisgKiB3aWxsIGhhdmUgcGZucyBjb3JyZXNwb25kaW5nIHRvIHRoZSAicGFnZXMiIGFycmF5LgorICoKKyAqIEllLiBwdGUgYXQgYWRkcitOKlBBR0VfU0laRSBzaGFsbCBwb2ludCB0byBwZm4gY29ycmVzcG9uZGluZyB0byBwYWdlc1tOXQorICovCitzdGF0aWMgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgYXJlYS0+c2l6ZSAtIFBBR0VfU0laRTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOworCWludCBuciA9IDA7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJZXJyID0gdm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcyk7CisJCWVyciA9IHZtYXBfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZucik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyLCBlbmQpOwotCXJldHVybiBlcnI7CisJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOworCisJaWYgKHVubGlrZWx5KGVycikpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIG5yOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOworCitzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCit7CisJLyoKKwkgKiB4ODYtNjQgYW5kIHNwYXJjNjQgcHV0IG1vZHVsZXMgaW4gYSBzcGVjaWFsIHBsYWNlLAorCSAqIGFuZCBmYWxsIGJhY2sgb24gdm1hbGxvYygpIGlmIHRoYXQgZmFpbHMuIE90aGVycworCSAqIGp1c3QgcHV0IGl0IGluIHRoZSB2bWFsbG9jIHNwYWNlLgorCSAqLworI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFU19WQUREUikKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl4OworCWlmIChhZGRyID49IE1PRFVMRVNfVkFERFIgJiYgYWRkciA8IE1PRFVMRVNfRU5EKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiBpc192bWFsbG9jX2FkZHIoeCk7Cit9CiAKIC8qCi0gKiBNYXAgYSB2bWFsbG9jKCktc3BhY2UgdmlydHVhbCBhZGRyZXNzIHRvIHRoZSBwaHlzaWNhbCBwYWdlLgorICogV2FsayBhIHZtYXAgYWRkcmVzcyB0byB0aGUgc3RydWN0IHBhZ2UgaXQgbWFwcy4KICAqLwogc3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICp2bWFsbG9jX2FkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHZtYWxsb2NfYWRkcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKLQlwdWRfdCAqcHVkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZXAsIHB0ZTsKIAogCS8qCiAJICogWFhYIHdlIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIHRoaXMgaWYgd2UgYWRkIFZJUlRVQUxfQlVHX09OIGZvcgogCSAqIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgdm1hbGxvYyBtb2R1bGUgc3BhY2UKIAkgKi8KLQlWSVJUVUFMX0JVR19PTighaXNfdm1hbGxvY19hZGRyKHZtYWxsb2NfYWRkcikgJiYKLQkJCSFpc19tb2R1bGVfYWRkcmVzcyhhZGRyKSk7CisJVklSVFVBTF9CVUdfT04oIWlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIodm1hbGxvY19hZGRyKSk7CiAKIAlpZiAoIXBnZF9ub25lKCpwZ2QpKSB7Ci0JCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKIAkJaWYgKCFwdWRfbm9uZSgqcHVkKSkgewotCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCQkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAkJCWlmICghcG1kX25vbmUoKnBtZCkpIHsKKwkJCQlwdGVfdCAqcHRlcCwgcHRlOworCiAJCQkJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAJCQkJcHRlID0gKnB0ZXA7CiAJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCkBAIC0yMTMsMTMgKzIzMiw3NTEgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wZm4pOwogCi1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqCi1fX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCisKKy8qKiogR2xvYmFsIGt2YSBhbGxvY2F0b3IgKioqLworCisjZGVmaW5lIFZNX0xBWllfRlJFRQkweDAxCisjZGVmaW5lIFZNX0xBWllfRlJFRUlORwkweDAyCisjZGVmaW5lIFZNX1ZNX0FSRUEJMHgwNAorCitzdHJ1Y3Qgdm1hcF9hcmVhIHsKKwl1bnNpZ25lZCBsb25nIHZhX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgdmFfZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsJCS8qIGFkZHJlc3Mgc29ydGVkIHJidHJlZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGFkZHJlc3Mgc29ydGVkIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7CS8qICJsYXp5IHB1cmdlIiBsaXN0ICovCisJdm9pZCAqcHJpdmF0ZTsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZtYXBfYXJlYV9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB2bWFwX2FyZWFfcm9vdCA9IFJCX1JPT1Q7CitzdGF0aWMgTElTVF9IRUFEKHZtYXBfYXJlYV9saXN0KTsKKworc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKl9fZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wLCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHZtYXBfYXJlYV9yb290LnJiX25vZGU7CisKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCQl2YSA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlpZiAoYWRkciA8IHZhLT52YV9zdGFydCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gdmEtPnZhX3N0YXJ0KQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gdmE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5zZXJ0X3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqdG1wOworCisJd2hpbGUgKCpwKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnRtcDsKKworCQlwYXJlbnQgPSAqcDsKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKTsKKwkJaWYgKHZhLT52YV9zdGFydCA8IHRtcC0+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+IDApIHsKKwkJKnBhZ2VzICs9IGVycjsKKwkJZXJyID0gMDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOworCisvKioqIE9sZCB2bWFsbG9jIGludGVyZmFjZXMgKioqLworREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CitzdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCit7CisJc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKnZhOworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWlmIChmbGFncyAmIFZNX0lPUkVNQVApIHsKQEAgLTIzMiwxMyArOTg5LDEyIEBACiAKIAkJYWxpZ24gPSAxdWwgPDwgYml0OwogCX0KLQlhZGRyID0gQUxJR04oc3RhcnQsIGFsaWduKTsKKwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiBOVUxMOwogCiAJYXJlYSA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmFyZWEpLCBnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOwotCiAJaWYgKHVubGlrZWx5KCFhcmVhKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI0Nyw0OCArMTAwMywzMiBAQAogCSAqLwogCXNpemUgKz0gUEFHRV9TSVpFOwogCi0Jd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gTlVMTCA7cCA9ICZ0bXAtPm5leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciA8IGFkZHIpIHsKLQkJCWlmKCh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciArIHRtcC0+c2l6ZSA+PSBhZGRyKQotCQkJCWFkZHIgPSBBTElHTih0bXAtPnNpemUgKyAKLQkJCQkJICAgICAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIsIGFsaWduKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoc2l6ZSArIGFkZHIpIDwgYWRkcikKLQkJCWdvdG8gb3V0OwotCQlpZiAoc2l6ZSArIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyKQotCQkJZ290byBmb3VuZDsKLQkJYWRkciA9IEFMSUdOKHRtcC0+c2l6ZSArICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciwgYWxpZ24pOwotCQlpZiAoYWRkciA+IGVuZCAtIHNpemUpCi0JCQlnb3RvIG91dDsKKwl2YSA9IGFsbG9jX3ZtYXBfYXJlYShzaXplLCBhbGlnbiwgc3RhcnQsIGVuZCwgbm9kZSwgZ2ZwX21hc2spOworCWlmIChJU19FUlIodmEpKSB7CisJCWtmcmVlKGFyZWEpOworCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKChzaXplICsgYWRkcikgPCBhZGRyKQotCQlnb3RvIG91dDsKLQlpZiAoYWRkciA+IGVuZCAtIHNpemUpCi0JCWdvdG8gb3V0OwotCi1mb3VuZDoKLQlhcmVhLT5uZXh0ID0gKnA7Ci0JKnAgPSBhcmVhOwogCiAJYXJlYS0+ZmxhZ3MgPSBmbGFnczsKLQlhcmVhLT5hZGRyID0gKHZvaWQgKilhZGRyOworCWFyZWEtPmFkZHIgPSAodm9pZCAqKXZhLT52YV9zdGFydDsKIAlhcmVhLT5zaXplID0gc2l6ZTsKIAlhcmVhLT5wYWdlcyA9IE5VTEw7CiAJYXJlYS0+bnJfcGFnZXMgPSAwOwogCWFyZWEtPnBoeXNfYWRkciA9IDA7CiAJYXJlYS0+Y2FsbGVyID0gY2FsbGVyOworCXZhLT5wcml2YXRlID0gYXJlYTsKKwl2YS0+ZmxhZ3MgfD0gVk1fVk1fQVJFQTsKKworCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwlmb3IgKHAgPSAmdm1saXN0OyAodG1wID0gKnApICE9IE5VTEw7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmICh0bXAtPmFkZHIgPj0gYXJlYS0+YWRkcikKKwkJCWJyZWFrOworCX0KKwlhcmVhLT5uZXh0ID0gKnA7CisJKnAgPSBhcmVhOwogCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwogCiAJcmV0dXJuIGFyZWE7Ci0KLW91dDoKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlrZnJlZShhcmVhKTsKLQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGxvY2F0aW9uIGZhaWxlZDogb3V0IG9mIHZtYWxsb2Mgc3BhY2UgLSB1c2Ugdm1hbGxvYz08c2l6ZT4gdG8gaW5jcmVhc2Ugc2l6ZS5cbiIpOwotCXJldHVybiBOVUxMOwogfQogCiBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKQEAgLTMyOCwzOSArMTA2OCwxNSBAQAogCQkJCSAgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgdm1saXN0X2xvY2sgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2ZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQorc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKnRtcDsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAotCWZvciAodG1wID0gdm1saXN0OyB0bXAgIT0gTlVMTDsgdG1wID0gdG1wLT5uZXh0KSB7Ci0JCSBpZiAodG1wLT5hZGRyID09IGFkZHIpCi0JCQlicmVhazsKLQl9CisJdmEgPSBmaW5kX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTsKKwlpZiAodmEgJiYgdmEtPmZsYWdzICYgVk1fVk1fQVJFQSkKKwkJcmV0dXJuIHZhLT5wcml2YXRlOwogCi0JcmV0dXJuIHRtcDsKLX0KLQotLyogQ2FsbGVyIG11c3QgaG9sZCB2bWxpc3RfbG9jayAqLwotc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKLXsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICoqcCwgKnRtcDsKLQotCWZvciAocCA9ICZ2bWxpc3QgOyAodG1wID0gKnApICE9IE5VTEwgO3AgPSAmdG1wLT5uZXh0KSB7Ci0JCSBpZiAodG1wLT5hZGRyID09IGFkZHIpCi0JCQkgZ290byBmb3VuZDsKLQl9CiAJcmV0dXJuIE5VTEw7Ci0KLWZvdW5kOgotCXVubWFwX3ZtX2FyZWEodG1wKTsKLQkqcCA9IHRtcC0+bmV4dDsKLQotCS8qCi0JICogUmVtb3ZlIHRoZSBndWFyZCBwYWdlLgotCSAqLwotCXRtcC0+c2l6ZSAtPSBQQUdFX1NJWkU7Ci0JcmV0dXJuIHRtcDsKIH0KIAogLyoqCkBAIC0zNzMsMTEgKzEwODksMjQgQEAKICAqLwogc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKIHsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICp2OwotCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQl2ID0gX19yZW1vdmVfdm1fYXJlYShhZGRyKTsKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlyZXR1cm4gdjsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCXZhID0gZmluZF92bWFwX2FyZWEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJaWYgKHZhICYmIHZhLT5mbGFncyAmIFZNX1ZNX0FSRUEpIHsKKwkJc3RydWN0IHZtX3N0cnVjdCAqdm0gPSB2YS0+cHJpdmF0ZTsKKwkJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOworCisJCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwkJZm9yIChwID0gJnZtbGlzdDsgKHRtcCA9ICpwKSAhPSB2bTsgcCA9ICZ0bXAtPm5leHQpCisJCQk7CisJCSpwID0gdG1wLT5uZXh0OworCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKKworCQlyZXR1cm4gdm07CisJfQorCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBfX3Z1bm1hcChjb25zdCB2b2lkICphZGRyLCBpbnQgZGVhbGxvY2F0ZV9wYWdlcykKQEAgLTQ4Nyw2ICsxMjE2LDggQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hcCk7CiAKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAorCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpOwogc3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJIHBncHJvdF90IHByb3QsIGludCBub2RlLCB2b2lkICpjYWxsZXIpCiB7CkBAIC02MTMsMTAgKzEzNDQsOCBAQAogCiAJcmV0ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKKwkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOwotCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTY5NiwxMCArMTQyNSw4IEBACiAKIAlyZXQgPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKIAlpZiAocmV0KSB7Ci0JCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQkJYXJlYSA9IF9fZmluZF92bV9hcmVhKHJldCk7CisJCWFyZWEgPSBmaW5kX3ZtX2FyZWEocmV0KTsKIAkJYXJlYS0+ZmxhZ3MgfD0gVk1fVVNFUk1BUDsKLQkJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC04MDAsMjYgKzE1MjcsMjUgQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgdWFkZHIgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgdXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JaW50IHJldDsKIAogCWlmICgoUEFHRV9TSVpFLTEpICYgKHVuc2lnbmVkIGxvbmcpYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlhcmVhID0gX19maW5kX3ZtX2FyZWEoYWRkcik7CisJYXJlYSA9IGZpbmRfdm1fYXJlYShhZGRyKTsKIAlpZiAoIWFyZWEpCi0JCWdvdG8gb3V0X2VpbnZhbF9sb2NrZWQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCEoYXJlYS0+ZmxhZ3MgJiBWTV9VU0VSTUFQKSkKLQkJZ290byBvdXRfZWludmFsX2xvY2tlZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodXNpemUgKyAocGdvZmYgPDwgUEFHRV9TSElGVCkgPiBhcmVhLT5zaXplIC0gUEFHRV9TSVpFKQotCQlnb3RvIG91dF9laW52YWxfbG9ja2VkOwotCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYWRkciArPSBwZ29mZiA8PCBQQUdFX1NISUZUOwogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJCWludCByZXQ7CisKIAkJcmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCB1YWRkciwgcGFnZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtODMyLDExICsxNTU4LDcgQEAKIAkvKiBQcmV2ZW50ICJ0aGluZ3MiIGxpa2UgbWVtb3J5IG1pZ3JhdGlvbj8gVk1fZmxhZ3MgbmVlZCBhIGNsZWFudXAuLi4gKi8KIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwogCi0JcmV0dXJuIHJldDsKLQotb3V0X2VpbnZhbF9sb2NrZWQ6Ci0JcmVhZF91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7CiAKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMWZmMWE1OC4uM2I1ODYwMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+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+em9uZV9zdGFydF9wZm4sCisJCSAgIHpvbmUtPmluYWN0aXZlX3JhdGlvKTsKIAlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL01ha2VmaWxlIGIvbmV0LzlwL01ha2VmaWxlCmluZGV4IDUxOTIxOTQuLjEwNDFiN2IgMTAwNjQ0Ci0tLSBhL25ldC85cC9NYWtlZmlsZQorKysgYi9uZXQvOXAvTWFrZWZpbGUKQEAgLTQsMTAgKzQsOSBAQAogOXBuZXQtb2JqcyA6PSBcCiAJbW9kLm8gXAogCWNsaWVudC5vIFwKLQljb252Lm8gXAogCWVycm9yLm8gXAotCWZjcHJpbnQubyBcCiAJdXRpbC5vIFwKKwlwcm90b2NvbC5vIFwKIAl0cmFuc19mZC5vIFwKIAogOXBuZXRfdmlydGlvLW9ianMgOj0gXApkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IGUwNTNlMDYuLmJiYWMyZjcgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTMzLDEyICszMyw5IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC85cC85cC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgotI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfZmlkICpwOV9maWRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpOwotc3RhdGljIHZvaWQgcDlfZmlkX2Rlc3Ryb3koc3RydWN0IHA5X2ZpZCAqZmlkKTsKLXN0YXRpYyBzdHJ1Y3QgcDlfc3RhdCAqcDlfY2xvbmVfc3RhdChzdHJ1Y3QgcDlfc3RhdCAqc3QsIGludCBkb3R1KTsKKyNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSAicHJvdG9jb2wuaCIKIAogLyoKICAgKiBDbGllbnQgT3B0aW9uIFBhcnNpbmcgKGNvZGUgaW5zcGlyZWQgYnkgTkZTIGNvZGUpCkBAIC01OSw2ICs1Niw5IEBACiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKIC8qKgogICogdjlmc19wYXJzZV9vcHRpb25zIC0gcGFyc2UgbW91bnQgb3B0aW9ucyBpbnRvIHNlc3Npb24gc3RydWN0dXJlCiAgKiBAb3B0aW9uczogb3B0aW9ucyBzdHJpbmcgcGFzc2VkIGZyb20gbW91bnQKQEAgLTEyNCw5MjIgKzEyNCw0OTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHA5X3RhZ19hbGxvYyAtIGxvb2t1cC9hbGxvY2F0ZSBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgorICogdGhpcyBpcyBhIHNpbXBsZSBhcnJheSBsb29rdXAsIGJ1dCB3aWxsIGdyb3cgdGhlCisgKiByZXF1ZXN0X3Nsb3RzIGFzIG5lY2Vzc2FyeSB0byBhY2NvbW9kYXRlIHRyYW5zYWN0aW9uCisgKiBpZHMgd2hpY2ggZGlkIG5vdCBwcmV2aW91c2x5IGhhdmUgYSBzbG90LgorICoKKyAqIHRoaXMgY29kZSByZWxpZXMgb24gdGhlIGNsaWVudCBzcGlubG9jayB0byBtYW5hZ2UgbG9ja3MsIGl0cworICogcG9zc2libGUgd2Ugc2hvdWxkIHN3aXRjaCB0byBzb21ldGhpbmcgZWxzZSwgYnV0IEknZCByYXRoZXIKKyAqIHN0aWNrIHdpdGggc29tZXRoaW5nIGxvdy1vdmVyaGVhZCBmb3IgdGhlIGNvbW1vbiBjYXNlLgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV90YWdfYWxsb2Moc3RydWN0IHA5X2NsaWVudCAqYywgdTE2IHRhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByb3csIGNvbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCS8qIFRoaXMgbG9va3MgdXAgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYnkgdGFnIHNvIHdlIGtub3cgd2hpY2gKKwkgKiBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvICovCisJdGFnKys7CisKKwlpZiAodGFnID49IGMtPm1heF90YWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJLyogY2hlY2sgYWdhaW4gc2luY2Ugb3JpZ2luYWwgY2hlY2sgd2FzIG91dHNpZGUgb2YgbG9jayAqLworCQl3aGlsZSAodGFnID49IGMtPm1heF90YWcpIHsKKwkJCXJvdyA9ICh0YWcgLyBQOV9ST1dfTUFYVEFHKTsKKwkJCWMtPnJlcXNbcm93XSA9IGtjYWxsb2MoUDlfUk9XX01BWFRBRywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwOV9yZXFfdCksIEdGUF9BVE9NSUMpOworCisJCQlpZiAoIWMtPnJlcXNbcm93XSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJfQorCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJCWMtPnJlcXNbcm93XVtjb2xdLnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwkJCQljLT5yZXFzW3Jvd11bY29sXS50YyA9IE5VTEw7CisJCQl9CisJCQljLT5tYXhfdGFnICs9IFA5X1JPV19NQVhUQUc7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+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+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworaW50CitwOXBkdV92d3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHA5cGR1X3ByZXBhcmUoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDE2X3QgdGFnLCBpbnQ4X3QgdHlwZSk7CitpbnQgcDlwZHVfZmluYWxpemUoc3RydWN0IHA5X2ZjYWxsICpwZHUpOwordm9pZCBwOXBkdV9kdW1wKGludCwgc3RydWN0IHA5X2ZjYWxsICopOwordm9pZCBwOXBkdV9yZXNldChzdHJ1Y3QgcDlfZmNhbGwgKnBkdSk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IDZkYWJiZGIuLmJlNjVkODIgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC0zOSwxMiArMzksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KIAogI2RlZmluZSBQOV9QT1JUIDU2NAogI2RlZmluZSBNQVhfU09DS19CVUYgKDY0KjEwMjQpCi0jZGVmaW5lIEVSUkVRRkxVU0gJMQotI2RlZmluZSBTQ0hFRF9USU1FT1VUCTEwCiAjZGVmaW5lIE1BWFBPTExXQUREUgkyCiAKIC8qKgpAQCAtNjEsNyArNjAsNiBAQAogCXUxNiBwb3J0OwogfTsKIAotCiAvKioKICAqIHN0cnVjdCBwOV90cmFuc19mZCAtIHRyYW5zcG9ydCBzdGF0ZQogICogQHJkOiByZWZlcmVuY2UgdG8gZmlsZSB0byByZWFkIGZyb20KQEAgLTEwMCw2MCArOTgsMjIgQEAKIAlXcGVuZGluZyA9IDgsCQkvKiBjYW4gd3JpdGUgKi8KIH07CiAKLWVudW0gewotCU5vbmUsCi0JRmx1c2hpbmcsCi0JRmx1c2hlZCwKLX07Ci0KLXN0cnVjdCBwOV9yZXE7Ci10eXBlZGVmIHZvaWQgKCpwOV9jb25uX3JlcV9jYWxsYmFjaykoc3RydWN0IHA5X3JlcSAqcmVxLCB2b2lkICphKTsKLQotLyoqCi0gKiBzdHJ1Y3QgcDlfcmVxIC0gZmQgbXV4IGVuY29kaW5nIG9mIGFuIHJwYyB0cmFuc2FjdGlvbgotICogQGxvY2s6IHByb3RlY3RzIHJlcV9saXN0Ci0gKiBAdGFnOiBudW1lcmljIHRhZyBmb3IgcnBjIHRyYW5zYWN0aW9uCi0gKiBAdGNhbGw6IHJlcXVlc3QgJnA5X2ZjYWxsIHN0cnVjdHVyZQotICogQHJjYWxsOiByZXNwb25zZSAmcDlfZmNhbGwgc3RydWN0dXJlCi0gKiBAZXJyOiBlcnJvciBzdGF0ZQotICogQGNiOiBjYWxsYmFjayBmb3Igd2hlbiByZXNwb25zZSBpcyByZWNlaXZlZAotICogQGNiYTogYXJndW1lbnQgdG8gcGFzcyB0byBjYWxsYmFjawotICogQGZsdXNoOiBmbGFnIHRvIGluZGljYXRlIFJQQyBoYXMgYmVlbiBmbHVzaGVkCi0gKiBAcmVxX2xpc3Q6IGxpc3QgbGluayBmb3IgaGlnaGVyIGxldmVsIG9iamVjdHMgdG8gY2hhaW4gcmVxdWVzdHMKLSAqCi0gKi8KLQotc3RydWN0IHA5X3JlcSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCWludCB0YWc7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0Y2FsbDsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJjYWxsOwotCWludCBlcnI7Ci0JcDlfY29ubl9yZXFfY2FsbGJhY2sgY2I7Ci0Jdm9pZCAqY2JhOwotCWludCBmbHVzaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OwotfTsKLQotc3RydWN0IHA5X211eF9wb2xsX3Rhc2sgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG11eF9saXN0OwotCWludCBtdXhudW07CitzdHJ1Y3QgcDlfcG9sbF93YWl0IHsKKwlzdHJ1Y3QgcDlfY29ubiAqY29ubjsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9hZGRyOwogfTsKIAogLyoqCiAgKiBzdHJ1Y3QgcDlfY29ubiAtIGZkIG11eCBjb25uZWN0aW9uIHN0YXRlIGluZm9ybWF0aW9uCi0gKiBAbG9jazogcHJvdGVjdHMgbXV4X2xpc3QgKD8pCiAgKiBAbXV4X2xpc3Q6IGxpc3QgbGluayBmb3IgbXV4IHRvIG1hbmFnZSBtdWx0aXBsZSBjb25uZWN0aW9ucyAoPykKLSAqIEBwb2xsX3Rhc2s6IHRhc2sgcG9sbGluZyBvbiB0aGlzIGNvbm5lY3Rpb24KLSAqIEBtc2l6ZTogbWF4aW11bSBzaXplIGZvciBjb25uZWN0aW9uIChkdXApCi0gKiBAZXh0ZW5kZWQ6IDlwMjAwMC51IGZsYWcgKGR1cCkKLSAqIEB0cmFuczogcmVmZXJlbmNlIHRvIHRyYW5zcG9ydCBpbnN0YW5jZSBmb3IgdGhpcyBjb25uZWN0aW9uCi0gKiBAdGFncG9vbDogaWQgYWNjb3VudGluZyBmb3IgdHJhbnNhY3Rpb25zCisgKiBAY2xpZW50OiByZWZlcmVuY2UgdG8gY2xpZW50IGluc3RhbmNlIGZvciB0aGlzIGNvbm5lY3Rpb24KICAqIEBlcnI6IGVycm9yIHN0YXRlCiAgKiBAcmVxX2xpc3Q6IGFjY291bnRpbmcgZm9yIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBzZW50CiAgKiBAdW5zZW50X3JlcV9saXN0OiBhY2NvdW50aW5nIGZvciByZXF1ZXN0cyB0aGF0IGhhdmVuJ3QgYmVlbiBzZW50Ci0gKiBAcmNhbGw6IGN1cnJlbnQgcmVzcG9uc2UgJnA5X2ZjYWxsIHN0cnVjdHVyZQorICogQHJlcTogY3VycmVudCByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZCAoaWYgYW55KQorICogQHRtcF9idWY6IHRlbXBvcmFyeSBidWZmZXIgdG8gcmVhZCBpbiBoZWFkZXIKKyAqIEByc2l6ZTogYW1vdW50IHRvIHJlYWQgZm9yIGN1cnJlbnQgZnJhbWUKICAqIEBycG9zOiByZWFkIHBvc2l0aW9uIGluIGN1cnJlbnQgZnJhbWUKICAqIEByYnVmOiBjdXJyZW50IHJlYWQgYnVmZmVyCiAgKiBAd3Bvczogd3JpdGUgcG9zaXRpb24gZm9yIGN1cnJlbnQgZnJhbWUKQEAgLTE2OSw0MDkgKzEyOSwzMDAgQEAKICAqLwogCiBzdHJ1Y3QgcDlfY29ubiB7Ci0Jc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0IGxvY2sgc3RydWN0dXJlICovCiAJc3RydWN0IGxpc3RfaGVhZCBtdXhfbGlzdDsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqcG9sbF90YXNrOwotCWludCBtc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7Ci0Jc3RydWN0IHA5X2lkcG9vbCAqdGFncG9vbDsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQ7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgdW5zZW50X3JlcV9saXN0OwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJY2hhciB0bXBfYnVmWzddOworCWludCByc2l6ZTsKIAlpbnQgcnBvczsKIAljaGFyICpyYnVmOwogCWludCB3cG9zOwogCWludCB3c2l6ZTsKIAljaGFyICp3YnVmOwotCXdhaXRfcXVldWVfdCBwb2xsX3dhaXRbTUFYUE9MTFdBRERSXTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqcG9sbF93YWRkcltNQVhQT0xMV0FERFJdOworCXN0cnVjdCBsaXN0X2hlYWQgcG9sbF9wZW5kaW5nX2xpbms7CisJc3RydWN0IHA5X3BvbGxfd2FpdCBwb2xsX3dhaXRbTUFYUE9MTFdBRERSXTsKIAlwb2xsX3RhYmxlIHB0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBycTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3E7CiAJdW5zaWduZWQgbG9uZyB3c2NoZWQ7CiB9OwogCi0vKioKLSAqIHN0cnVjdCBwOV9tdXhfcnBjIC0gZmQgbXV4IHJwYyBhY2NvdW50aW5nIHN0cnVjdHVyZQotICogQG06IGNvbm5lY3Rpb24gdGhpcyByZXF1ZXN0IHdhcyBpc3N1ZWQgb24KLSAqIEBlcnI6IGVycm9yIHN0YXRlCi0gKiBAdGNhbGw6IHJlcXVlc3QgJnA5X2ZjYWxsCi0gKiBAcmNhbGw6IHJlc3BvbnNlICZwOV9mY2FsbAotICogQHdxdWV1ZTogd2FpdCBxdWV1ZSB0aGF0IGNsaWVudCBpcyBibG9ja2VkIG9uIGZvciB0aGlzIHJwYwotICoKLSAqIEJ1ZzogaXNuJ3QgdGhpcyBpbmZvcm1hdGlvbiBkdXBsaWNhdGVkIGVsc2V3aGVyZSBsaWtlICZwOV9yZXEKLSAqLwotCi1zdHJ1Y3QgcDlfbXV4X3JwYyB7Ci0Jc3RydWN0IHA5X2Nvbm4gKm07Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjYWxsOwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd3F1ZXVlOwotfTsKLQotc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqKTsKLXN0YXRpYyB2b2lkIHA5X3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgcDlfd3JpdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgcDlfcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsCi0JCQkJCQkJCXBvbGxfdGFibGUgKnApOwotc3RhdGljIGludCBwOV9mZF93cml0ZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKTsKLXN0YXRpYyBpbnQgcDlfZmRfcmVhZChzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKTsKLQotc3RhdGljIERFRklORV9NVVRFWChwOV9tdXhfdGFza19sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socDlfcG9sbF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQocDlfcG9sbF9wZW5kaW5nX2xpc3QpOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwOV9tdXhfd3E7Ci0KLXN0YXRpYyBpbnQgcDlfbXV4X251bTsKLXN0YXRpYyBpbnQgcDlfbXV4X3BvbGxfdGFza19udW07Ci1zdGF0aWMgc3RydWN0IHA5X211eF9wb2xsX3Rhc2sgcDlfbXV4X3BvbGxfdGFza3NbMTAwXTsKLQotc3RhdGljIHZvaWQgcDlfY29ubl9kZXN0cm95KHN0cnVjdCBwOV9jb25uICopOwotc3RhdGljIHVuc2lnbmVkIGludCBwOV9mZF9wb2xsKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsCi0JCQkJCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KTsKLQotI2lmZGVmIFA5X05PTkJMT0NLCi1zdGF0aWMgaW50IHA5X2Nvbm5fcnBjbmIoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JcDlfY29ubl9yZXFfY2FsbGJhY2sgY2IsIHZvaWQgKmEpOwotI2VuZGlmIC8qIFA5X05PTkJMT0NLICovCi0KLXN0YXRpYyB2b2lkIHA5X2Nvbm5fY2FuY2VsKHN0cnVjdCBwOV9jb25uICptLCBpbnQgZXJyKTsKLQotc3RhdGljIHUxNiBwOV9tdXhfZ2V0X3RhZyhzdHJ1Y3QgcDlfY29ubiAqbSkKLXsKLQlpbnQgdGFnOwotCi0JdGFnID0gcDlfaWRwb29sX2dldChtLT50YWdwb29sKTsKLQlpZiAodGFnIDwgMCkKLQkJcmV0dXJuIFA5X05PVEFHOwotCWVsc2UKLQkJcmV0dXJuICh1MTYpIHRhZzsKLX0KLQotc3RhdGljIHZvaWQgcDlfbXV4X3B1dF90YWcoc3RydWN0IHA5X2Nvbm4gKm0sIHUxNiB0YWcpCi17Ci0JaWYgKHRhZyAhPSBQOV9OT1RBRyAmJiBwOV9pZHBvb2xfY2hlY2sodGFnLCBtLT50YWdwb29sKSkKLQkJcDlfaWRwb29sX3B1dCh0YWcsIG0tPnRhZ3Bvb2wpOwotfQotCi0vKioKLSAqIHA5X211eF9jYWxjX3BvbGxfcHJvY3MgLSBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgcG9sbGluZyBwcm9jcwotICogQG11eG51bTogbnVtYmVyIG9mIG1vdW50cwotICoKLSAqIENhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgbW91bnRlZCB2OWZzIGZpbGVzeXN0ZW1zLgotICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBzcXJ0IG9mIHRoZSBudW1iZXIgb2YgbW91bnRzLgotICovCi0KLXN0YXRpYyBpbnQgcDlfbXV4X2NhbGNfcG9sbF9wcm9jcyhpbnQgbXV4bnVtKQotewotCWludCBuOwotCi0JaWYgKHA5X211eF9wb2xsX3Rhc2tfbnVtKQotCQluID0gbXV4bnVtIC8gcDlfbXV4X3BvbGxfdGFza19udW0gKwotCQkgICAgKG11eG51bSAlIHA5X211eF9wb2xsX3Rhc2tfbnVtID8gMSA6IDApOwotCWVsc2UKLQkJbiA9IDE7Ci0KLQlpZiAobiA+IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpKQotCQluID0gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludCBwOV9tdXhfcG9sbF9zdGFydChzdHJ1Y3QgcDlfY29ubiAqbSkKLXsKLQlpbnQgaSwgbjsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqdnB0LCAqdnB0bGFzdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBwcm9jOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgbXV4bnVtICVkIHByb2NudW0gJWRcbiIsIG0sIHA5X211eF9udW0sCi0JCXA5X211eF9wb2xsX3Rhc2tfbnVtKTsKLQltdXRleF9sb2NrKCZwOV9tdXhfdGFza19sb2NrKTsKLQotCW4gPSBwOV9tdXhfY2FsY19wb2xsX3Byb2NzKHA5X211eF9udW0gKyAxKTsKLQlpZiAobiA+IHA5X211eF9wb2xsX3Rhc2tfbnVtKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHA5X211eF9wb2xsX3Rhc2tzKTsgaSsrKSB7Ci0JCQlpZiAocDlfbXV4X3BvbGxfdGFza3NbaV0udGFzayA9PSBOVUxMKSB7Ci0JCQkJdnB0ID0gJnA5X211eF9wb2xsX3Rhc2tzW2ldOwotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY3JlYXRlIHByb2MgJXBcbiIsCi0JCQkJCQkJCQl2cHQpOwotCQkJCXBwcm9jID0ga3RocmVhZF9jcmVhdGUocDlfcG9sbF9wcm9jLCB2cHQsCi0JCQkJCQkJCSJ2OWZzLXBvbGwiKTsKLQotCQkJCWlmICghSVNfRVJSKHBwcm9jKSkgewotCQkJCQl2cHQtPnRhc2sgPSBwcHJvYzsKLQkJCQkJSU5JVF9MSVNUX0hFQUQoJnZwdC0+bXV4X2xpc3QpOwotCQkJCQl2cHQtPm11eG51bSA9IDA7Ci0JCQkJCXA5X211eF9wb2xsX3Rhc2tfbnVtKys7Ci0JCQkJCXdha2VfdXBfcHJvY2Vzcyh2cHQtPnRhc2spOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChpID49IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpKQotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkJIndhcm5pbmc6IG5vIGZyZWUgcG9sbCBzbG90c1xuIik7Ci0JfQotCi0JbiA9IChwOV9tdXhfbnVtICsgMSkgLyBwOV9tdXhfcG9sbF90YXNrX251bSArCi0JICAgICgocDlfbXV4X251bSArIDEpICUgcDlfbXV4X3BvbGxfdGFza19udW0gPyAxIDogMCk7Ci0KLQl2cHRsYXN0ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7IGkrKykgewotCQl2cHQgPSAmcDlfbXV4X3BvbGxfdGFza3NbaV07Ci0JCWlmICh2cHQtPnRhc2sgIT0gTlVMTCkgewotCQkJdnB0bGFzdCA9IHZwdDsKLQkJCWlmICh2cHQtPm11eG51bSA8IG4pIHsKLQkJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInB1dCBpbiBwcm9jICVkXG4iLCBpKTsKLQkJCQlsaXN0X2FkZCgmbS0+bXV4X2xpc3QsICZ2cHQtPm11eF9saXN0KTsKLQkJCQl2cHQtPm11eG51bSsrOwotCQkJCW0tPnBvbGxfdGFzayA9IHZwdDsKLQkJCQltZW1zZXQoJm0tPnBvbGxfd2FkZHIsIDAsCi0JCQkJCQkJc2l6ZW9mKG0tPnBvbGxfd2FkZHIpKTsKLQkJCQlpbml0X3BvbGxfZnVuY3B0cigmbS0+cHQsIHA5X3BvbGx3YWl0KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChpID49IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpKSB7Ci0JCWlmICh2cHRsYXN0ID09IE5VTEwpIHsKLQkJCW11dGV4X3VubG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAicHV0IGluIHByb2MgJWRcbiIsIGkpOwotCQlsaXN0X2FkZCgmbS0+bXV4X2xpc3QsICZ2cHRsYXN0LT5tdXhfbGlzdCk7Ci0JCXZwdGxhc3QtPm11eG51bSsrOwotCQltLT5wb2xsX3Rhc2sgPSB2cHRsYXN0OwotCQltZW1zZXQoJm0tPnBvbGxfd2FkZHIsIDAsIHNpemVvZihtLT5wb2xsX3dhZGRyKSk7Ci0JCWluaXRfcG9sbF9mdW5jcHRyKCZtLT5wdCwgcDlfcG9sbHdhaXQpOwotCX0KLQotCXA5X211eF9udW0rKzsKLQltdXRleF91bmxvY2soJnA5X211eF90YXNrX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwOV9wb2xsX3Rhc2s7CiAKIHN0YXRpYyB2b2lkIHA5X211eF9wb2xsX3N0b3Aoc3RydWN0IHA5X2Nvbm4gKm0pCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqdnB0OwogCi0JbXV0ZXhfbG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci0JdnB0ID0gbS0+cG9sbF90YXNrOwotCWxpc3RfZGVsKCZtLT5tdXhfbGlzdCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWRkcik7IGkrKykgewotCQlpZiAobS0+cG9sbF93YWRkcltpXSAhPSBOVUxMKSB7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZShtLT5wb2xsX3dhZGRyW2ldLCAmbS0+cG9sbF93YWl0W2ldKTsKLQkJCW0tPnBvbGxfd2FkZHJbaV0gPSBOVUxMOwotCQl9Ci0JfQotCXZwdC0+bXV4bnVtLS07Ci0JaWYgKCF2cHQtPm11eG51bSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImRlc3Ryb3kgcHJvYyAlcFxuIiwgdnB0KTsKLQkJa3RocmVhZF9zdG9wKHZwdC0+dGFzayk7Ci0JCXZwdC0+dGFzayA9IE5VTEw7Ci0JCXA5X211eF9wb2xsX3Rhc2tfbnVtLS07Ci0JfQotCXA5X211eF9udW0tLTsKLQltdXRleF91bmxvY2soJnA5X211eF90YXNrX2xvY2spOwotfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FpdCk7IGkrKykgeworCQlzdHJ1Y3QgcDlfcG9sbF93YWl0ICpwd2FpdCA9ICZtLT5wb2xsX3dhaXRbaV07CiAKLS8qKgotICogcDlfY29ubl9jcmVhdGUgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyLXNlc3Npb24gbXV4IGRhdGEKLSAqIEB0cmFuczogdHJhbnNwb3J0IHN0cnVjdHVyZQotICoKLSAqIE5vdGU6IENyZWF0ZXMgdGhlIHBvbGxpbmcgdGFzayBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzZXNzaW9uLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcDlfY29ubiAqcDlfY29ubl9jcmVhdGUoc3RydWN0IHA5X3RyYW5zICp0cmFucykKLXsKLQlpbnQgaSwgbjsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAidHJhbnNwb3J0ICVwIG1zaXplICVkXG4iLCB0cmFucywKLQkJCQkJCQkJdHJhbnMtPm1zaXplKTsKLQltID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA5X2Nvbm4pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jc3Bpbl9sb2NrX2luaXQoJm0tPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZtLT5tdXhfbGlzdCk7Ci0JbS0+bXNpemUgPSB0cmFucy0+bXNpemU7Ci0JbS0+ZXh0ZW5kZWQgPSB0cmFucy0+ZXh0ZW5kZWQ7Ci0JbS0+dHJhbnMgPSB0cmFuczsKLQltLT50YWdwb29sID0gcDlfaWRwb29sX2NyZWF0ZSgpOwotCWlmIChJU19FUlIobS0+dGFncG9vbCkpIHsKLQkJa2ZyZWUobSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZtLT5yZXFfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm0tPnVuc2VudF9yZXFfbGlzdCk7Ci0JSU5JVF9XT1JLKCZtLT5ycSwgcDlfcmVhZF93b3JrKTsKLQlJTklUX1dPUksoJm0tPndxLCBwOV93cml0ZV93b3JrKTsKLQluID0gcDlfbXV4X3BvbGxfc3RhcnQobSk7Ci0JaWYgKG4pIHsKLQkJa2ZyZWUobSk7Ci0JCXJldHVybiBFUlJfUFRSKG4pOwotCX0KLQotCW4gPSBwOV9mZF9wb2xsKHRyYW5zLCAmbS0+cHQpOwotCWlmIChuICYgUE9MTElOKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGNhbiByZWFkXG4iLCBtKTsKLQkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7Ci0JfQotCi0JaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGNhbiB3cml0ZVxuIiwgbSk7Ci0JCXNldF9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FkZHIpOyBpKyspIHsKLQkJaWYgKElTX0VSUihtLT5wb2xsX3dhZGRyW2ldKSkgewotCQkJcDlfbXV4X3BvbGxfc3RvcChtKTsKLQkJCWtmcmVlKG0pOwotCQkJcmV0dXJuICh2b2lkICopbS0+cG9sbF93YWRkcjsJLyogdGhlIGVycm9yIGNvZGUgKi8KKwkJaWYgKHB3YWl0LT53YWl0X2FkZHIpIHsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKHB3YWl0LT53YWl0X2FkZHIsICZwd2FpdC0+d2FpdCk7CisJCQlwd2FpdC0+d2FpdF9hZGRyID0gTlVMTDsKIAkJfQogCX0KIAotCXJldHVybiBtOworCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZtLT5wb2xsX3BlbmRpbmdfbGluayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogcDlfbXV4X2Rlc3Ryb3kgLSBjYW5jZWxzIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGFuZCBmcmVlcyBtdXggcmVzb3VyY2VzCi0gKiBAbTogbXV4IHRvIGRlc3Ryb3kKKyAqIHA5X2Nvbm5fY2FuY2VsIC0gY2FuY2VsIGFsbCBwZW5kaW5nIHJlcXVlc3RzIHdpdGggZXJyb3IKKyAqIEBtOiBtdXggZGF0YQorICogQGVycjogZXJyb3IgY29kZQogICoKICAqLwogCi1zdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKm0pCitzdGF0aWMgdm9pZCBwOV9jb25uX2NhbmNlbChzdHJ1Y3QgcDlfY29ubiAqbSwgaW50IGVycikKIHsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBwcmV2ICVwIG5leHQgJXBcbiIsIG0sCi0JCW0tPm11eF9saXN0LnByZXYsIG0tPm11eF9saXN0Lm5leHQpOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxLCAqcnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChjYW5jZWxfbGlzdCk7CiAKLQlwOV9tdXhfcG9sbF9zdG9wKG0pOwotCWNhbmNlbF93b3JrX3N5bmMoJm0tPnJxKTsKLQljYW5jZWxfd29ya19zeW5jKCZtLT53cSk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm11eCAlcCBlcnIgJWRcbiIsIG0sIGVycik7CiAKLQlwOV9jb25uX2NhbmNlbChtLCAtRUNPTk5SRVNFVCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmNsaWVudC0+bG9jaywgZmxhZ3MpOwogCi0JbS0+dHJhbnMgPSBOVUxMOwotCXA5X2lkcG9vbF9kZXN0cm95KG0tPnRhZ3Bvb2wpOwotCWtmcmVlKG0pOworCWlmIChtLT5lcnIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwltLT5lcnIgPSBlcnI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19FUlJPUjsKKwkJaWYgKCFyZXEtPnRfZXJyKQorCQkJcmVxLT50X2VyciA9IGVycjsKKwkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+dW5zZW50X3JlcV9saXN0LCByZXFfbGlzdCkgeworCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRVJST1I7CisJCWlmICghcmVxLT50X2VycikKKwkJCXJlcS0+dF9lcnIgPSBlcnI7CisJCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmY2FuY2VsX2xpc3QsIHJlcV9saXN0KSB7CisJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImNhbGwgYmFjayByZXEgJXBcbiIsIHJlcSk7CisJCXA5X2NsaWVudF9jYihtLT5jbGllbnQsIHJlcSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitwOV9mZF9wb2xsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdCkKK3sKKwlpbnQgcmV0LCBuOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOworCisJaWYgKGNsaWVudCAmJiBjbGllbnQtPnN0YXR1cyA9PSBDb25uZWN0ZWQpCisJCXRzID0gY2xpZW50LT50cmFuczsKKworCWlmICghdHMpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJaWYgKCF0cy0+cmQtPmZfb3AgfHwgIXRzLT5yZC0+Zl9vcC0+cG9sbCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIXRzLT53ci0+Zl9vcCB8fCAhdHMtPndyLT5mX29wLT5wb2xsKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IHRzLT5yZC0+Zl9vcC0+cG9sbCh0cy0+cmQsIHB0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0cy0+cmQgIT0gdHMtPndyKSB7CisJCW4gPSB0cy0+d3ItPmZfb3AtPnBvbGwodHMtPndyLCBwdCk7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiBuOworCQlyZXQgPSAocmV0ICYgflBPTExPVVQpIHwgKG4gJiB+UE9MTElOKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHA5X3BvbGx3YWl0IC0gYWRkIHBvbGwgdGFzayB0byB0aGUgd2FpdCBxdWV1ZQotICogQGZpbHA6IGZpbGUgcG9pbnRlciBiZWluZyBwb2xsZWQKLSAqIEB3YWl0X2FkZHJlc3M6IHdhaXRfcSB0byBibG9jayBvbgotICogQHA6IHBvbGwgc3RhdGUKKyAqIHA5X2ZkX3JlYWQtIHJlYWQgZnJvbSBhIGZkCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKKyAqIEB2OiBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGludG8KKyAqIEBsZW46IHNpemUgb2YgcmVjZWl2ZSBidWZmZXIKICAqCi0gKiBjYWxsZWQgYnkgZmlsZXMgcG9sbCBvcGVyYXRpb24gdG8gYWRkIHY5ZnMtcG9sbCB0YXNrIHRvIGZpbGVzIHdhaXQgcXVldWUKICAqLwogCi1zdGF0aWMgdm9pZAotcDlfcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsIHBvbGxfdGFibGUgKnApCitzdGF0aWMgaW50IHA5X2ZkX3JlYWQoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCB2b2lkICp2LCBpbnQgbGVuKQogewotCWludCBpOworCWludCByZXQ7CisJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CisKKwlpZiAoY2xpZW50ICYmIGNsaWVudC0+c3RhdHVzICE9IERpc2Nvbm5lY3RlZCkKKwkJdHMgPSBjbGllbnQtPnRyYW5zOworCisJaWYgKCF0cykKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoISh0cy0+cmQtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJsb2NraW5nIHJlYWQgLi4uXG4iKTsKKworCXJldCA9IGtlcm5lbF9yZWFkKHRzLT5yZCwgdHMtPnJkLT5mX3BvcywgdiwgbGVuKTsKKwlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKKwkJY2xpZW50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwOV9yZWFkX3dvcmsgLSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGEgdHJhbnNwb3J0CisgKiBAd29yazogY29udGFpbmVyIG9mIHdvcmsgdG8gYmUgZG9uZQorICoKKyAqLworCitzdGF0aWMgdm9pZCBwOV9yZWFkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBuLCBlcnI7CiAJc3RydWN0IHA5X2Nvbm4gKm07CiAKLQltID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBwOV9jb25uLCBwdCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWRkcik7IGkrKykKLQkJaWYgKG0tPnBvbGxfd2FkZHJbaV0gPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JaWYgKGkgPj0gQVJSQVlfU0laRShtLT5wb2xsX3dhZGRyKSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibm90IGVub3VnaCB3YWl0X2FkZHJlc3Mgc2xvdHNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbS0+cG9sbF93YWRkcltpXSA9IHdhaXRfYWRkcmVzczsKLQotCWlmICghd2FpdF9hZGRyZXNzKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJubyB3YWl0X2FkZHJlc3NcbiIpOwotCQltLT5wb2xsX3dhZGRyW2ldID0gRVJSX1BUUigtRUlPKTsKLQkJcmV0dXJuOwotCX0KLQotCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZtLT5wb2xsX3dhaXRbaV0sIG0tPnBvbGxfdGFzay0+dGFzayk7Ci0JYWRkX3dhaXRfcXVldWUod2FpdF9hZGRyZXNzLCAmbS0+cG9sbF93YWl0W2ldKTsKLX0KLQotLyoqCi0gKiBwOV9wb2xsX211eCAtIHBvbGxzIGEgbXV4IGFuZCBzY2hlZHVsZXMgcmVhZCBvciB3cml0ZSB3b3JrcyBpZiBuZWNlc3NhcnkKLSAqIEBtOiBjb25uZWN0aW9uIHRvIHBvbGwKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgcDlfcG9sbF9tdXgoc3RydWN0IHA5X2Nvbm4gKm0pCi17Ci0JaW50IG47CisJbSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDlfY29ubiwgcnEpOwogCiAJaWYgKG0tPmVyciA8IDApCiAJCXJldHVybjsKIAotCW4gPSBwOV9mZF9wb2xsKG0tPnRyYW5zLCBOVUxMKTsKLQlpZiAobiA8IDAgfHwgbiAmIChQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExOVkFMKSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImVycm9yIG11eCAlcCBlcnIgJWRcbiIsIG0sIG4pOwotCQlpZiAobiA+PSAwKQotCQkJbiA9IC1FQ09OTlJFU0VUOwotCQlwOV9jb25uX2NhbmNlbChtLCBuKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAic3RhcnQgbXV4ICVwIHBvcyAlZFxuIiwgbSwgbS0+cnBvcyk7CisKKwlpZiAoIW0tPnJidWYpIHsKKwkJbS0+cmJ1ZiA9IG0tPnRtcF9idWY7CisJCW0tPnJwb3MgPSAwOworCQltLT5yc2l6ZSA9IDc7IC8qIHN0YXJ0IGJ5IHJlYWRpbmcgaGVhZGVyICovCiAJfQogCi0JaWYgKG4gJiBQT0xMSU4pIHsKLQkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGNhbiByZWFkXG4iLCBtKTsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHJlYWQgd29yayAlcFxuIiwgbSk7CisJY2xlYXJfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAicmVhZCBtdXggJXAgcG9zICVkIHNpemU6ICVkID0gJWRcbiIsIG0sCisJCQkJCW0tPnJwb3MsIG0tPnJzaXplLCBtLT5yc2l6ZS1tLT5ycG9zKTsKKwllcnIgPSBwOV9mZF9yZWFkKG0tPmNsaWVudCwgbS0+cmJ1ZiArIG0tPnJwb3MsCisJCQkJCQltLT5yc2l6ZSAtIG0tPnJwb3MpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgZ290ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOworCWlmIChlcnIgPT0gLUVBR0FJTikgeworCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXJyIDw9IDApCisJCWdvdG8gZXJyb3I7CisKKwltLT5ycG9zICs9IGVycjsKKworCWlmICgoIW0tPnJlcSkgJiYgKG0tPnJwb3MgPT0gbS0+cnNpemUpKSB7IC8qIGhlYWRlciByZWFkIGluICovCisJCXUxNiB0YWc7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJnb3QgbmV3IGhlYWRlclxuIik7CisKKwkJbiA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopIG0tPnJidWYpOyAvKiByZWFkIHBhY2tldCBzaXplICovCisJCWlmIChuID49IG0tPmNsaWVudC0+bXNpemUpIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCQkJInJlcXVlc3RlZCBwYWNrZXQgc2l6ZSB0b28gYmlnOiAlZFxuIiwgbik7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXRhZyA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopIChtLT5yYnVmKzUpKTsgLyogcmVhZCB0YWcgKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywKKwkJCSJtdXggJXAgcGt0OiBzaXplOiAlZCBieXRlcyB0YWc6ICVkXG4iLCBtLCBuLCB0YWcpOworCisJCW0tPnJlcSA9IHA5X3RhZ19sb29rdXAobS0+Y2xpZW50LCB0YWcpOworCQlpZiAoIW0tPnJlcSkgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIlVuZXhwZWN0ZWQgcGFja2V0IHRhZyAlZFxuIiwKKwkJCQkJCQkJIHRhZyk7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlmIChtLT5yZXEtPnJjID09IE5VTEwpIHsKKwkJCW0tPnJlcS0+cmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsKKwkJCQkJCW0tPmNsaWVudC0+bXNpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFtLT5yZXEtPnJjKSB7CisJCQkJbS0+cmVxID0gTlVMTDsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwkJbS0+cmJ1ZiA9IChjaGFyICopbS0+cmVxLT5yYyArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOworCQltZW1jcHkobS0+cmJ1ZiwgbS0+dG1wX2J1ZiwgbS0+cnNpemUpOworCQltLT5yc2l6ZSA9IG47CisJfQorCisJLyogbm90IGFuIGVsc2UgYmVjYXVzZSBzb21lIHBhY2tldHMgKGxpa2UgY2x1bmspIGhhdmUgbm8gcGF5bG9hZCAqLworCWlmICgobS0+cmVxKSAmJiAobS0+cnBvcyA9PSBtLT5yc2l6ZSkpIHsgLyogcGFja2V0IGlzIHJlYWQgaW4gKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImdvdCBuZXcgcGFja2V0XG4iKTsKKwkJc3Bpbl9sb2NrKCZtLT5jbGllbnQtPmxvY2spOworCQlsaXN0X2RlbCgmbS0+cmVxLT5yZXFfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZtLT5jbGllbnQtPmxvY2spOworCQlwOV9jbGllbnRfY2IobS0+Y2xpZW50LCBtLT5yZXEpOworCisJCW0tPnJidWYgPSBOVUxMOworCQltLT5ycG9zID0gMDsKKwkJbS0+cnNpemUgPSAwOworCQltLT5yZXEgPSBOVUxMOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmbS0+cmVxX2xpc3QpKSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpKQorCQkJbiA9IFBPTExJTjsKKwkJZWxzZQorCQkJbiA9IHA5X2ZkX3BvbGwobS0+Y2xpZW50LCBOVUxMKTsKKworCQlpZiAobiAmIFBPTExJTikgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHJlYWQgd29yayAlcFxuIiwgbSk7CiAJCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPnJxKTsKLQkJfQotCX0KKwkJfSBlbHNlCisJCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CisJfSBlbHNlCisJCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKIAotCWlmIChuICYgUE9MTE9VVCkgewotCQlzZXRfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKLQkJaWYgKChtLT53c2l6ZSB8fCAhbGlzdF9lbXB0eSgmbS0+dW5zZW50X3JlcV9saXN0KSkKLQkJICAgICYmICF0ZXN0X2FuZF9zZXRfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHdyaXRlIHdvcmsgJXBcbiIsIG0pOwotCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT53cSk7Ci0JCX0KLQl9CisJcmV0dXJuOworZXJyb3I6CisJcDlfY29ubl9jYW5jZWwobSwgZXJyKTsKKwljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiB9CiAKIC8qKgotICogcDlfcG9sbF9wcm9jIC0gcG9sbCB3b3JrZXIgdGhyZWFkCi0gKiBAYTogdGhyZWFkIHN0YXRlIGFuZCBhcmd1bWVudHMKLSAqCi0gKiBwb2xscyBhbGwgdjlmcyB0cmFuc3BvcnRzIGZvciBuZXcgZXZlbnRzIGFuZCBxdWV1ZXMgdGhlIGFwcHJvcHJpYXRlCi0gKiB3b3JrIHRvIHRoZSB3b3JrIHF1ZXVlCisgKiBwOV9mZF93cml0ZSAtIHdyaXRlIHRvIGEgc29ja2V0CisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKKyAqIEB2OiBidWZmZXIgdG8gc2VuZCBkYXRhIGZyb20KKyAqIEBsZW46IHNpemUgb2Ygc2VuZCBidWZmZXIKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqYSkKK3N0YXRpYyBpbnQgcDlfZmRfd3JpdGUoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCB2b2lkICp2LCBpbnQgbGVuKQogewotCXN0cnVjdCBwOV9jb25uICptLCAqbXRtcDsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqdnB0OworCWludCByZXQ7CisJbW1fc2VnbWVudF90IG9sZGZzOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwogCi0JdnB0ID0gYTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInN0YXJ0ICVwICVwXG4iLCBjdXJyZW50LCB2cHQpOwotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJaWYgKGNsaWVudCAmJiBjbGllbnQtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCisJCXRzID0gY2xpZW50LT50cmFuczsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobSwgbXRtcCwgJnZwdC0+bXV4X2xpc3QsIG11eF9saXN0KSB7Ci0JCQlwOV9wb2xsX211eChtKTsKLQkJfQorCWlmICghdHMpCisJCXJldHVybiAtRVJFTU9URUlPOwogCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic2xlZXBpbmcuLi5cbiIpOwotCQlzY2hlZHVsZV90aW1lb3V0KFNDSEVEX1RJTUVPVVQgKiBIWik7Ci0JfQorCWlmICghKHRzLT53ci0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgd3JpdGUgLi4uXG4iKTsKIAotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImZpbmlzaFxuIik7Ci0JcmV0dXJuIDA7CisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCS8qIFRoZSBjYXN0IHRvIGEgdXNlciBwb2ludGVyIGlzIHZhbGlkIGR1ZSB0byB0aGUgc2V0X2ZzKCkgKi8KKwlyZXQgPSB2ZnNfd3JpdGUodHMtPndyLCAodm9pZCBfX3VzZXIgKil2LCBsZW4sICZ0cy0+d3ItPmZfcG9zKTsKKwlzZXRfZnMob2xkZnMpOworCisJaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCisJCWNsaWVudC0+c3RhdHVzID0gRGlzY29ubmVjdGVkOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNTg0LDcgKzQzNSw3IEBACiB7CiAJaW50IG4sIGVycjsKIAlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlzdHJ1Y3QgcDlfcmVxICpyZXE7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CiAKIAltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwOV9jb25uLCB3cSk7CiAKQEAgLTU5OSwyNSArNDUwLDIzIEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlzcGluX2xvY2soJm0tPmxvY2spOwotYWdhaW46Ci0JCXJlcSA9IGxpc3RfZW50cnkobS0+dW5zZW50X3JlcV9saXN0Lm5leHQsIHN0cnVjdCBwOV9yZXEsCisJCXNwaW5fbG9jaygmbS0+Y2xpZW50LT5sb2NrKTsKKwkJcmVxID0gbGlzdF9lbnRyeShtLT51bnNlbnRfcmVxX2xpc3QubmV4dCwgc3RydWN0IHA5X3JlcV90LAogCQkJICAgICAgIHJlcV9saXN0KTsKKwkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX1NFTlQ7CiAJCWxpc3RfbW92ZV90YWlsKCZyZXEtPnJlcV9saXN0LCAmbS0+cmVxX2xpc3QpOwotCQlpZiAocmVxLT5lcnIgPT0gRVJSRVFGTFVTSCkKLQkJCWdvdG8gYWdhaW47CiAKLQkJbS0+d2J1ZiA9IHJlcS0+dGNhbGwtPnNkYXRhOwotCQltLT53c2l6ZSA9IHJlcS0+dGNhbGwtPnNpemU7CisJCW0tPndidWYgPSByZXEtPnRjLT5zZGF0YTsKKwkJbS0+d3NpemUgPSByZXEtPnRjLT5zaXplOwogCQltLT53cG9zID0gMDsKLQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCQlzcGluX3VubG9jaygmbS0+Y2xpZW50LT5sb2NrKTsKIAl9CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBwb3MgJWQgc2l6ZSAlZFxuIiwgbSwgbS0+d3BvcywKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHBvcyAlZCBzaXplICVkXG4iLCBtLCBtLT53cG9zLAogCQkJCQkJCQltLT53c2l6ZSk7CiAJY2xlYXJfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQllcnIgPSBwOV9mZF93cml0ZShtLT50cmFucywgbS0+d2J1ZiArIG0tPndwb3MsIG0tPndzaXplIC0gbS0+d3Bvcyk7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgc2VudCAlZCBieXRlc1xuIiwgbSwgZXJyKTsKKwllcnIgPSBwOV9mZF93cml0ZShtLT5jbGllbnQsIG0tPndidWYgKyBtLT53cG9zLCBtLT53c2l6ZSAtIG0tPndwb3MpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgc2VudCAlZCBieXRlc1xuIiwgbSwgZXJyKTsKIAlpZiAoZXJyID09IC1FQUdBSU4pIHsKIAkJY2xlYXJfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwogCQlyZXR1cm47CkBAIC02MzgsMTAgKzQ4NywxMCBAQAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKSkKIAkJCW4gPSBQT0xMT1VUOwogCQllbHNlCi0JCQluID0gcDlfZmRfcG9sbChtLT50cmFucywgTlVMTCk7CisJCQluID0gcDlfZmRfcG9sbChtLT5jbGllbnQsIE5VTEwpOwogCiAJCWlmIChuICYgUE9MTE9VVCkgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJzY2hlZHVsZSB3cml0ZSB3b3JrICVwXG4iLCBtKTsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzY2hlZCB3cml0ZSB3b3JrICVwXG4iLCBtKTsKIAkJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+d3EpOwogCQl9IGVsc2UKIAkJCWNsZWFyX2JpdChXd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKQEAgLTY1NSw1MDQgKzUwNCwxOTcgQEAKIAljbGVhcl9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVxdWVzdChzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X3JlcSAqcmVxKQorc3RhdGljIGludCBwOV9wb2xsd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCiB7Ci0JaW50IGVjb2RlOwotCXN0cnVjdCBwOV9zdHIgKmVuYW1lOworCXN0cnVjdCBwOV9wb2xsX3dhaXQgKnB3YWl0ID0KKwkJY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBwOV9wb2xsX3dhaXQsIHdhaXQpOworCXN0cnVjdCBwOV9jb25uICptID0gcHdhaXQtPmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlERUNMQVJFX1dBSVRRVUVVRShkdW1teV93YWl0LCBwOV9wb2xsX3Rhc2spOwogCi0JaWYgKCFyZXEtPmVyciAmJiByZXEtPnJjYWxsLT5pZCA9PSBQOV9SRVJST1IpIHsKLQkJZWNvZGUgPSByZXEtPnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm5vOwotCQllbmFtZSA9ICZyZXEtPnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yOworCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmbS0+cG9sbF9wZW5kaW5nX2xpbmspKQorCQlsaXN0X2FkZF90YWlsKCZtLT5wb2xsX3BlbmRpbmdfbGluaywgJnA5X3BvbGxfcGVuZGluZ19saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKIAotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIlJlcnJvciAlLipzXG4iLCBlbmFtZS0+bGVuLAotCQkJCQkJCQllbmFtZS0+c3RyKTsKLQotCQlpZiAobS0+ZXh0ZW5kZWQpCi0JCQlyZXEtPmVyciA9IC1lY29kZTsKLQotCQlpZiAoIXJlcS0+ZXJyKSB7Ci0JCQlyZXEtPmVyciA9IHA5X2VycnN0cjJlcnJubyhlbmFtZS0+c3RyLCBlbmFtZS0+bGVuKTsKLQotCQkJLyogc3RyaW5nIG1hdGNoIGZhaWxlZCAqLwotCQkJaWYgKCFyZXEtPmVycikgewotCQkJCVBSSU5UX0ZDQUxMX0VSUk9SKCJ1bmtub3duIGVycm9yIiwgcmVxLT5yY2FsbCk7Ci0JCQkJcmVxLT5lcnIgPSAtRVNFUlZFUkZBVUxUOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChyZXEtPnRjYWxsICYmIHJlcS0+cmNhbGwtPmlkICE9IHJlcS0+dGNhbGwtPmlkICsgMSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJmY2FsbCBtaXNtYXRjaDogZXhwZWN0ZWQgJWQsIGdvdCAlZFxuIiwKLQkJCQlyZXEtPnRjYWxsLT5pZCArIDEsIHJlcS0+cmNhbGwtPmlkKTsKLQkJaWYgKCFyZXEtPmVycikKLQkJCXJlcS0+ZXJyID0gLUVJTzsKLQl9CisJLyogcGVyZm9ybSB0aGUgZGVmYXVsdCB3YWtlIHVwIG9wZXJhdGlvbiAqLworCXJldHVybiBkZWZhdWx0X3dha2VfZnVuY3Rpb24oJmR1bW15X3dhaXQsIG1vZGUsIHN5bmMsIGtleSk7CiB9CiAKIC8qKgotICogcDlfcmVhZF93b3JrIC0gY2FsbGVkIHdoZW4gdGhlcmUgaXMgc29tZSBkYXRhIHRvIGJlIHJlYWQgZnJvbSBhIHRyYW5zcG9ydAotICogQHdvcms6IGNvbnRhaW5lciBvZiB3b3JrIHRvIGJlIGRvbmUKKyAqIHA5X3BvbGx3YWl0IC0gYWRkIHBvbGwgdGFzayB0byB0aGUgd2FpdCBxdWV1ZQorICogQGZpbHA6IGZpbGUgcG9pbnRlciBiZWluZyBwb2xsZWQKKyAqIEB3YWl0X2FkZHJlc3M6IHdhaXRfcSB0byBibG9jayBvbgorICogQHA6IHBvbGwgc3RhdGUKICAqCisgKiBjYWxsZWQgYnkgZmlsZXMgcG9sbCBvcGVyYXRpb24gdG8gYWRkIHY5ZnMtcG9sbCB0YXNrIHRvIGZpbGVzIHdhaXQgcXVldWUKICAqLwogCi1zdGF0aWMgdm9pZCBwOV9yZWFkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQKK3A5X3BvbGx3YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9hZGRyZXNzLCBwb2xsX3RhYmxlICpwKQogewotCWludCBuLCBlcnI7Ci0Jc3RydWN0IHA5X2Nvbm4gKm07Ci0Jc3RydWN0IHA5X3JlcSAqcmVxLCAqcnB0ciwgKnJyZXE7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyY2FsbDsKLQljaGFyICpyYnVmOworCXN0cnVjdCBwOV9jb25uICptID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBwOV9jb25uLCBwdCk7CisJc3RydWN0IHA5X3BvbGxfd2FpdCAqcHdhaXQgPSBOVUxMOworCWludCBpOwogCi0JbSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDlfY29ubiwgcnEpOwotCi0JaWYgKG0tPmVyciA8IDApCi0JCXJldHVybjsKLQotCXJjYWxsID0gTlVMTDsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInN0YXJ0IG11eCAlcCBwb3MgJWRcbiIsIG0sIG0tPnJwb3MpOwotCi0JaWYgKCFtLT5yY2FsbCkgewotCQltLT5yY2FsbCA9Ci0JCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgbS0+bXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW0tPnJjYWxsKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCW0tPnJidWYgPSAoY2hhciAqKW0tPnJjYWxsICsgc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7Ci0JCW0tPnJwb3MgPSAwOwotCX0KLQotCWNsZWFyX2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7Ci0JZXJyID0gcDlfZmRfcmVhZChtLT50cmFucywgbS0+cmJ1ZiArIG0tPnJwb3MsIG0tPm1zaXplIC0gbS0+cnBvcyk7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgZ290ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOwotCWlmIChlcnIgPT0gLUVBR0FJTikgewotCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZXJyIDw9IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQltLT5ycG9zICs9IGVycjsKLQl3aGlsZSAobS0+cnBvcyA+IDQpIHsKLQkJbiA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopIG0tPnJidWYpOwotCQlpZiAobiA+PSBtLT5tc2l6ZSkgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkicmVxdWVzdGVkIHBhY2tldCBzaXplIHRvbyBiaWc6ICVkXG4iLCBuKTsKLQkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKG0tPnJwb3MgPCBuKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FpdCk7IGkrKykgeworCQlpZiAobS0+cG9sbF93YWl0W2ldLndhaXRfYWRkciA9PSBOVUxMKSB7CisJCQlwd2FpdCA9ICZtLT5wb2xsX3dhaXRbaV07CiAJCQlicmVhazsKLQotCQllcnIgPQotCQkgICAgcDlfZGVzZXJpYWxpemVfZmNhbGwobS0+cmJ1ZiwgbiwgbS0+cmNhbGwsIG0tPmV4dGVuZGVkKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycm9yOwotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCQlpZiAoKHA5X2RlYnVnX2xldmVsJlA5X0RFQlVHX0ZDQUxMKSA9PSBQOV9ERUJVR19GQ0FMTCkgewotCQkJY2hhciBidWZbMTUwXTsKLQotCQkJcDlfcHJpbnRmY2FsbChidWYsIHNpemVvZihidWYpLCBtLT5yY2FsbCwKLQkJCQltLT5leHRlbmRlZCk7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIj4+PiAlcCAlc1xuIiwgbSwgYnVmKTsKLQkJfQotI2VuZGlmCi0KLQkJcmNhbGwgPSBtLT5yY2FsbDsKLQkJcmJ1ZiA9IG0tPnJidWY7Ci0JCWlmIChtLT5ycG9zID4gbikgewotCQkJbS0+cmNhbGwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgbS0+bXNpemUsCi0JCQkJCSAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtLT5yY2FsbCkgewotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQotCQkJbS0+cmJ1ZiA9IChjaGFyICopbS0+cmNhbGwgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKLQkJCW1lbW1vdmUobS0+cmJ1ZiwgcmJ1ZiArIG4sIG0tPnJwb3MgLSBuKTsKLQkJCW0tPnJwb3MgLT0gbjsKLQkJfSBlbHNlIHsKLQkJCW0tPnJjYWxsID0gTlVMTDsKLQkJCW0tPnJidWYgPSBOVUxMOwotCQkJbS0+cnBvcyA9IDA7Ci0JCX0KLQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBmY2FsbCBpZCAlZCB0YWcgJWRcbiIsIG0sCi0JCQkJCQkJcmNhbGwtPmlkLCByY2FsbC0+dGFnKTsKLQotCQlyZXEgPSBOVUxMOwotCQlzcGluX2xvY2soJm0tPmxvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQkJaWYgKHJyZXEtPnRhZyA9PSByY2FsbC0+dGFnKSB7Ci0JCQkJcmVxID0gcnJlcTsKLQkJCQlpZiAocmVxLT5mbHVzaCAhPSBGbHVzaGluZykKLQkJCQkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQotCQlpZiAocmVxKSB7Ci0JCQlyZXEtPnJjYWxsID0gcmNhbGw7Ci0JCQlwcm9jZXNzX3JlcXVlc3QobSwgcmVxKTsKLQotCQkJaWYgKHJlcS0+Zmx1c2ggIT0gRmx1c2hpbmcpIHsKLQkJCQlpZiAocmVxLT5jYikKLQkJCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7Ci0JCQkJZWxzZQotCQkJCQlrZnJlZShyZXEtPnJjYWxsKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChlcnIgPj0gMCAmJiByY2FsbC0+aWQgIT0gUDlfUkZMVVNIKQotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCQkJICAidW5leHBlY3RlZCByZXNwb25zZSBtdXggJXAgaWQgJWQgdGFnICVkXG4iLAotCQkJCSAgbSwgcmNhbGwtPmlkLCByY2FsbC0+dGFnKTsKLQkJCWtmcmVlKHJjYWxsKTsKIAkJfQogCX0KIAotCWlmICghbGlzdF9lbXB0eSgmbS0+cmVxX2xpc3QpKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpKQotCQkJbiA9IFBPTExJTjsKLQkJZWxzZQotCQkJbiA9IHA5X2ZkX3BvbGwobS0+dHJhbnMsIE5VTEwpOworCWlmICghcHdhaXQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm5vdCBlbm91Z2ggd2FpdF9hZGRyZXNzIHNsb3RzXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCQlpZiAobiAmIFBPTExJTikgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJzY2hlZHVsZSByZWFkIHdvcmsgJXBcbiIsIG0pOwotCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT5ycSk7Ci0JCX0gZWxzZQotCQkJY2xlYXJfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwotCX0gZWxzZQotCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7Ci0KLQlyZXR1cm47Ci0KLWVycm9yOgotCXA5X2Nvbm5fY2FuY2VsKG0sIGVycik7Ci0JY2xlYXJfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpOworCXB3YWl0LT5jb25uID0gbTsKKwlwd2FpdC0+d2FpdF9hZGRyID0gd2FpdF9hZGRyZXNzOworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnB3YWl0LT53YWl0LCBwOV9wb2xsd2FrZSk7CisJYWRkX3dhaXRfcXVldWUod2FpdF9hZGRyZXNzLCAmcHdhaXQtPndhaXQpOwogfQogCiAvKioKLSAqIHA5X3NlbmRfcmVxdWVzdCAtIHNlbmQgOVAgcmVxdWVzdAotICogVGhlIGZ1bmN0aW9uIGNhbiBzbGVlcCB1bnRpbCB0aGUgcmVxdWVzdCBpcyBzY2hlZHVsZWQgZm9yIHNlbmRpbmcuCi0gKiBUaGUgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkLiBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgbm90Ci0gKiBhIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1ZXN0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5LiBDYW4gcmV0dXJuIGVycm9ycwotICogdGhhdCBjYW4gYmUgcmV0cmlldmVkIGJ5IFBUUl9FUlIgbWFjcm9zLgorICogcDlfY29ubl9jcmVhdGUgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyLXNlc3Npb24gbXV4IGRhdGEKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQogICoKLSAqIEBtOiBtdXggZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEBjYjogY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHJlc3BvbnNlIGlzIHJlY2VpdmVkCi0gKiBAY2JhOiBwYXJhbWV0ZXIgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAqCisgKiBOb3RlOiBDcmVhdGVzIHRoZSBwb2xsaW5nIHRhc2sgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc2Vzc2lvbi4KICAqLwogCi1zdGF0aWMgc3RydWN0IHA5X3JlcSAqcDlfc2VuZF9yZXF1ZXN0KHN0cnVjdCBwOV9jb25uICptLAotCQkJCQkgIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCQkJCSAgcDlfY29ubl9yZXFfY2FsbGJhY2sgY2IsIHZvaWQgKmNiYSkKK3N0YXRpYyBzdHJ1Y3QgcDlfY29ubiAqcDlfY29ubl9jcmVhdGUoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50KQogewogCWludCBuOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKKwlzdHJ1Y3QgcDlfY29ubiAqbTsKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHRhc2sgJXAgdGNhbGwgJXAgaWQgJWRcbiIsIG0sIGN1cnJlbnQsCi0JCXRjLCB0Yy0+aWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJjbGllbnQgJXAgbXNpemUgJWRcbiIsIGNsaWVudCwKKwkJCQkJCQkJY2xpZW50LT5tc2l6ZSk7CisJbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9jb25uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCUlOSVRfTElTVF9IRUFEKCZtLT5tdXhfbGlzdCk7CisJbS0+Y2xpZW50ID0gY2xpZW50OworCisJSU5JVF9MSVNUX0hFQUQoJm0tPnJlcV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbS0+dW5zZW50X3JlcV9saXN0KTsKKwlJTklUX1dPUksoJm0tPnJxLCBwOV9yZWFkX3dvcmspOworCUlOSVRfV09SSygmbS0+d3EsIHA5X3dyaXRlX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZtLT5wb2xsX3BlbmRpbmdfbGluayk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJm0tPnB0LCBwOV9wb2xsd2FpdCk7CisKKwluID0gcDlfZmRfcG9sbChjbGllbnQsICZtLT5wdCk7CisJaWYgKG4gJiBQT0xMSU4pIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBjYW4gcmVhZFxuIiwgbSk7CisJCXNldF9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpOworCX0KKworCWlmIChuICYgUE9MTE9VVCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIGNhbiB3cml0ZVxuIiwgbSk7CisJCXNldF9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOworCX0KKworCXJldHVybiBtOworfQorCisvKioKKyAqIHA5X3BvbGxfbXV4IC0gcG9sbHMgYSBtdXggYW5kIHNjaGVkdWxlcyByZWFkIG9yIHdyaXRlIHdvcmtzIGlmIG5lY2Vzc2FyeQorICogQG06IGNvbm5lY3Rpb24gdG8gcG9sbAorICoKKyAqLworCitzdGF0aWMgdm9pZCBwOV9wb2xsX211eChzdHJ1Y3QgcDlfY29ubiAqbSkKK3sKKwlpbnQgbjsKKwogCWlmIChtLT5lcnIgPCAwKQotCQlyZXR1cm4gRVJSX1BUUihtLT5lcnIpOworCQlyZXR1cm47CiAKLQlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfcmVxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JaWYgKHRjLT5pZCA9PSBQOV9UVkVSU0lPTikKLQkJbiA9IFA5X05PVEFHOwotCWVsc2UKLQkJbiA9IHA5X211eF9nZXRfdGFnKG0pOwotCi0JaWYgKG4gPCAwKSB7Ci0JCWtmcmVlKHJlcSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CisJaWYgKG4gPCAwIHx8IG4gJiAoUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMTlZBTCkpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImVycm9yIG11eCAlcCBlcnIgJWRcbiIsIG0sIG4pOworCQlpZiAobiA+PSAwKQorCQkJbiA9IC1FQ09OTlJFU0VUOworCQlwOV9jb25uX2NhbmNlbChtLCBuKTsKIAl9CiAKLQlwOV9zZXRfdGFnKHRjLCBuKTsKLQotI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKLQlpZiAoKHA5X2RlYnVnX2xldmVsJlA5X0RFQlVHX0ZDQUxMKSA9PSBQOV9ERUJVR19GQ0FMTCkgewotCQljaGFyIGJ1ZlsxNTBdOwotCi0JCXA5X3ByaW50ZmNhbGwoYnVmLCBzaXplb2YoYnVmKSwgdGMsIG0tPmV4dGVuZGVkKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICI8PDwgJXAgJXNcbiIsIG0sIGJ1Zik7CisJaWYgKG4gJiBQT0xMSU4pIHsKKwkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgY2FuIHJlYWRcbiIsIG0pOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzY2hlZCByZWFkIHdvcmsgJXBcbiIsIG0pOworCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT5ycSk7CisJCX0KIAl9Ci0jZW5kaWYKIAotCXNwaW5fbG9ja19pbml0KCZyZXEtPmxvY2spOwotCXJlcS0+dGFnID0gbjsKLQlyZXEtPnRjYWxsID0gdGM7Ci0JcmVxLT5yY2FsbCA9IE5VTEw7Ci0JcmVxLT5lcnIgPSAwOwotCXJlcS0+Y2IgPSBjYjsKLQlyZXEtPmNiYSA9IGNiYTsKLQlyZXEtPmZsdXNoID0gTm9uZTsKKwlpZiAobiAmIFBPTExPVVQpIHsKKwkJc2V0X2JpdChXcGVuZGluZywgJm0tPndzY2hlZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKKwkJaWYgKChtLT53c2l6ZSB8fCAhbGlzdF9lbXB0eSgmbS0+dW5zZW50X3JlcV9saXN0KSkKKwkJICAgICYmICF0ZXN0X2FuZF9zZXRfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpKSB7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAic2NoZWQgd3JpdGUgd29yayAlcFxuIiwgbSk7CisJCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPndxKTsKKwkJfQorCX0KK30KIAotCXNwaW5fbG9jaygmbS0+bG9jayk7CisvKioKKyAqIHA5X2ZkX3JlcXVlc3QgLSBzZW5kIDlQIHJlcXVlc3QKKyAqIFRoZSBmdW5jdGlvbiBjYW4gc2xlZXAgdW50aWwgdGhlIHJlcXVlc3QgaXMgc2NoZWR1bGVkIGZvciBzZW5kaW5nLgorICogVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4gUmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uIGlzIG5vdAorICogYSBndWFyYW50ZWUgdGhhdCB0aGUgcmVxdWVzdCBpcyBzZW50IHN1Y2Nlc3NmdWxseS4KKyAqCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKKyAqIEByZXE6IHJlcXVlc3QgdG8gYmUgc2VudAorICoKKyAqLworCitzdGF0aWMgaW50IHA5X2ZkX3JlcXVlc3Qoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gY2xpZW50LT50cmFuczsKKwlzdHJ1Y3QgcDlfY29ubiAqbSA9IHRzLT5jb25uOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCB0YXNrICVwIHRjYWxsICVwIGlkICVkXG4iLCBtLAorCQkJCQkJY3VycmVudCwgcmVxLT50YywgcmVxLT50Yy0+aWQpOworCWlmIChtLT5lcnIgPCAwKQorCQlyZXR1cm4gbS0+ZXJyOworCisJc3Bpbl9sb2NrKCZjbGllbnQtPmxvY2spOworCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19VTlNFTlQ7CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5yZXFfbGlzdCwgJm0tPnVuc2VudF9yZXFfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOworCXNwaW5fdW5sb2NrKCZjbGllbnQtPmxvY2spOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXcGVuZGluZywgJm0tPndzY2hlZCkpCiAJCW4gPSBQT0xMT1VUOwogCWVsc2UKLQkJbiA9IHA5X2ZkX3BvbGwobS0+dHJhbnMsIE5VTEwpOworCQluID0gcDlfZmRfcG9sbChtLT5jbGllbnQsIE5VTEwpOwogCiAJaWYgKG4gJiBQT0xMT1VUICYmICF0ZXN0X2FuZF9zZXRfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpKQogCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPndxKTsKIAotCXJldHVybiByZXE7Ci19Ci0KLXN0YXRpYyB2b2lkIHA5X211eF9mcmVlX3JlcXVlc3Qoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9yZXEgKnJlcSkKLXsKLQlwOV9tdXhfcHV0X3RhZyhtLCByZXEtPnRhZyk7Ci0Ja2ZyZWUocmVxKTsKLX0KLQotc3RhdGljIHZvaWQgcDlfbXV4X2ZsdXNoX2NiKHN0cnVjdCBwOV9yZXEgKmZyZXEsIHZvaWQgKmEpCi17Ci0JaW50IHRhZzsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlzdHJ1Y3QgcDlfcmVxICpyZXEsICpycmVxLCAqcnB0cjsKLQotCW0gPSBhOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHRjICVwIHJjICVwIGVyciAlZCBvbGR0YWcgJWRcbiIsIG0sCi0JCWZyZXEtPnRjYWxsLCBmcmVxLT5yY2FsbCwgZnJlcS0+ZXJyLAotCQlmcmVxLT50Y2FsbC0+cGFyYW1zLnRmbHVzaC5vbGR0YWcpOwotCi0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQl0YWcgPSBmcmVxLT50Y2FsbC0+cGFyYW1zLnRmbHVzaC5vbGR0YWc7Ci0JcmVxID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQlpZiAocnJlcS0+dGFnID09IHRhZykgewotCQkJcmVxID0gcnJlcTsKLQkJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQotCWlmIChyZXEpIHsKLQkJc3Bpbl9sb2NrKCZyZXEtPmxvY2spOwotCQlyZXEtPmZsdXNoID0gRmx1c2hlZDsKLQkJc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7Ci0KLQkJaWYgKHJlcS0+Y2IpCi0JCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJZWxzZQotCQkJa2ZyZWUocmVxLT5yY2FsbCk7Ci0JfQotCi0Ja2ZyZWUoZnJlcS0+dGNhbGwpOwotCWtmcmVlKGZyZXEtPnJjYWxsKTsKLQlwOV9tdXhfZnJlZV9yZXF1ZXN0KG0sIGZyZXEpOwotfQotCi1zdGF0aWMgaW50Ci1wOV9tdXhfZmx1c2hfcmVxdWVzdChzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X3JlcSAqcmVxKQotewotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IHA5X3JlcSAqcnJlcSwgKnJwdHI7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCByZXEgJXAgdGFnICVkXG4iLCBtLCByZXEsIHJlcS0+dGFnKTsKLQotCS8qIGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGZvciBhIHJlcXVlc3QsIGRvIG5vdGhpbmcgKi8KLQlzcGluX2xvY2soJnJlcS0+bG9jayk7Ci0JaWYgKHJlcS0+cmNhbGwgfHwgcmVxLT5lcnIpIHsKLQkJc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLAotCQkJIm11eCAlcCByZXEgJXAgcmVzcG9uc2UgYWxyZWFkeSByZWNlaXZlZFxuIiwgbSwgcmVxKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmVxLT5mbHVzaCA9IEZsdXNoaW5nOwotCXNwaW5fdW5sb2NrKCZyZXEtPmxvY2spOwotCi0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQkvKiBpZiB0aGUgcmVxdWVzdCBpcyBub3Qgc2VudCB5ZXQsIGp1c3QgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnVuc2VudF9yZXFfbGlzdCwgcmVxX2xpc3QpIHsKLQkJaWYgKHJyZXEtPnRhZyA9PSByZXEtPnRhZykgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCi0JCQkgICAibXV4ICVwIHJlcSAlcCByZXF1ZXN0IGlzIG5vdCBzZW50IHlldFxuIiwgbSwgcmVxKTsKLQkJCWxpc3RfZGVsKCZycmVxLT5yZXFfbGlzdCk7Ci0JCQlyZXEtPmZsdXNoID0gRmx1c2hlZDsKLQkJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQkJCWlmIChyZXEtPmNiKQotCQkJCSgqcmVxLT5jYikgKHJlcSwgcmVxLT5jYmEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCi0JY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwotCWZjID0gcDlfY3JlYXRlX3RmbHVzaChyZXEtPnRhZyk7Ci0JcDlfc2VuZF9yZXF1ZXN0KG0sIGZjLCBwOV9tdXhfZmx1c2hfY2IsIG0pOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZAotcDlfY29ubl9ycGNfY2Ioc3RydWN0IHA5X3JlcSAqcmVxLCB2b2lkICphKQotewotCXN0cnVjdCBwOV9tdXhfcnBjICpyOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJyZXEgJXAgciAlcFxuIiwgcmVxLCBhKTsKLQlyID0gYTsKLQlyLT5yY2FsbCA9IHJlcS0+cmNhbGw7Ci0Jci0+ZXJyID0gcmVxLT5lcnI7Ci0KLQlpZiAocmVxLT5mbHVzaCAhPSBOb25lICYmICFyZXEtPmVycikKLQkJci0+ZXJyID0gLUVSRVNUQVJUU1lTOwotCi0Jd2FrZV91cCgmci0+d3F1ZXVlKTsKLX0KLQotLyoqCi0gKiBwOV9mZF9ycGMtIHNlbmRzIDlQIHJlcXVlc3QgYW5kIHdhaXRzIHVudGlsIGEgcmVzcG9uc2UgaXMgYXZhaWxhYmxlLgotICoJVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4KLSAqIEB0OiB0cmFuc3BvcnQgZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEByYzogcG9pbnRlciB3aGVyZSBhIHBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGlzIHN0b3JlZAotICoKLSAqLwotCi1pbnQKLXA5X2ZkX3JwYyhzdHJ1Y3QgcDlfdHJhbnMgKnQsIHN0cnVjdCBwOV9mY2FsbCAqdGMsIHN0cnVjdCBwOV9mY2FsbCAqKnJjKQotewotCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IHQtPnByaXY7Ci0Jc3RydWN0IHA5X2Nvbm4gKm0gPSBwLT5jb25uOwotCWludCBlcnIsIHNpZ3BlbmRpbmc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcDlfcmVxICpyZXE7Ci0Jc3RydWN0IHA5X211eF9ycGMgcjsKLQotCXIuZXJyID0gMDsKLQlyLnRjYWxsID0gdGM7Ci0Jci5yY2FsbCA9IE5VTEw7Ci0Jci5tID0gbTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyLndxdWV1ZSk7Ci0KLQlpZiAocmMpCi0JCSpyYyA9IE5VTEw7Ci0KLQlzaWdwZW5kaW5nID0gMDsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJc2lncGVuZGluZyA9IDE7Ci0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKLQl9Ci0KLQlyZXEgPSBwOV9zZW5kX3JlcXVlc3QobSwgdGMsIHA5X2Nvbm5fcnBjX2NiLCAmcik7Ci0JaWYgKElTX0VSUihyZXEpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmVxKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJlcnJvciAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoci53cXVldWUsIHIucmNhbGwgIT0gTlVMTCB8fCByLmVyciA8IDApOwotCWlmIChyLmVyciA8IDApCi0JCWVyciA9IHIuZXJyOwotCi0JaWYgKGVyciA9PSAtRVJFU1RBUlRTWVMgJiYgbS0+dHJhbnMtPnN0YXR1cyA9PSBDb25uZWN0ZWQKLQkJCQkJCQkmJiBtLT5lcnIgPT0gMCkgewotCQlpZiAocDlfbXV4X2ZsdXNoX3JlcXVlc3QobSwgcmVxKSkgewotCQkJLyogd2FpdCB1bnRpbCB3ZSBnZXQgcmVzcG9uc2Ugb2YgdGhlIGZsdXNoIG1lc3NhZ2UgKi8KLQkJCWRvIHsKLQkJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7Ci0JCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHIud3F1ZXVlLAotCQkJCQlyLnJjYWxsIHx8IHIuZXJyKTsKLQkJCX0gd2hpbGUgKCFyLnJjYWxsICYmICFyLmVyciAmJiBlcnIgPT0gLUVSRVNUQVJUU1lTICYmCi0JCQkJbS0+dHJhbnMtPnN0YXR1cyA9PSBDb25uZWN0ZWQgJiYgIW0tPmVycik7Ci0KLQkJCWVyciA9IC1FUkVTVEFSVFNZUzsKLQkJfQotCQlzaWdwZW5kaW5nID0gMTsKLQl9Ci0KLQlpZiAoc2lncGVuZGluZykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKHJjKQotCQkqcmMgPSByLnJjYWxsOwotCWVsc2UKLQkJa2ZyZWUoci5yY2FsbCk7Ci0KLQlwOV9tdXhfZnJlZV9yZXF1ZXN0KG0sIHJlcSk7Ci0JaWYgKGVyciA+IDApCi0JCWVyciA9IC1FSU87Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0jaWZkZWYgUDlfTk9OQkxPQ0sKLS8qKgotICogcDlfY29ubl9ycGNuYiAtIHNlbmRzIDlQIHJlcXVlc3Qgd2l0aG91dCB3YWl0aW5nIGZvciByZXNwb25zZS4KLSAqIEBtOiBtdXggZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEBjYjogY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gcmVzcG9uc2UgYXJyaXZlcwotICogQGE6IHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKgotICovCi0KLWludCBwOV9jb25uX3JwY25iKHN0cnVjdCBwOV9jb25uICptLCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLAotCQkgICBwOV9jb25uX3JlcV9jYWxsYmFjayBjYiwgdm9pZCAqYSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKLQotCXJlcSA9IHA5X3NlbmRfcmVxdWVzdChtLCB0YywgY2IsIGEpOwotCWlmIChJU19FUlIocmVxKSkgewotCQllcnIgPSBQVFJfRVJSKHJlcSk7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXJyb3IgJWRcbiIsIGVycik7Ci0JCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JfQotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgdGMgJXAgdGFnICVkXG4iLCBtLCB0YywgcmVxLT50YWcpOwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIFA5X05PTkJMT0NLICovCiAKLS8qKgotICogcDlfY29ubl9jYW5jZWwgLSBjYW5jZWwgYWxsIHBlbmRpbmcgcmVxdWVzdHMgd2l0aCBlcnJvcgotICogQG06IG11eCBkYXRhCi0gKiBAZXJyOiBlcnJvciBjb2RlCi0gKgotICovCi0KLXZvaWQgcDlfY29ubl9jYW5jZWwoc3RydWN0IHA5X2Nvbm4gKm0sIGludCBlcnIpCitzdGF0aWMgaW50IHA5X2ZkX2NhbmNlbChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQogewotCXN0cnVjdCBwOV9yZXEgKnJlcSwgKnJ0bXA7Ci0JTElTVF9IRUFEKGNhbmNlbF9saXN0KTsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gY2xpZW50LT50cmFuczsKKwlzdHJ1Y3QgcDlfY29ubiAqbSA9IHRzLT5jb25uOworCWludCByZXQgPSAxOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm11eCAlcCBlcnIgJWRcbiIsIG0sIGVycik7Ci0JbS0+ZXJyID0gZXJyOwotCXNwaW5fbG9jaygmbS0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQlsaXN0X21vdmUoJnJlcS0+cmVxX2xpc3QsICZjYW5jZWxfbGlzdCk7Ci0JfQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT51bnNlbnRfcmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgcmVxICVwXG4iLCBtLCByZXEpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJmNhbmNlbF9saXN0LCByZXFfbGlzdCkgewotCQlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7Ci0JCWlmICghcmVxLT5lcnIpCi0JCQlyZXEtPmVyciA9IGVycjsKKwlzcGluX2xvY2soJmNsaWVudC0+bG9jayk7CisJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwogCi0JCWlmIChyZXEtPmNiKQotCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7Ci0JCWVsc2UKLQkJCWtmcmVlKHJlcS0+cmNhbGwpOworCWlmIChyZXEtPnN0YXR1cyA9PSBSRVFfU1RBVFVTX1VOU0VOVCkgeworCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRkxTSEQ7CisJCXJldCA9IDA7CiAJfQorCisJc3Bpbl91bmxvY2soJmNsaWVudC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTEyMTYsNyArNzU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwOV9mZF9vcGVuKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIGludCByZmQsIGludCB3ZmQpCitzdGF0aWMgaW50IHA5X2ZkX29wZW4oc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBpbnQgcmZkLCBpbnQgd2ZkKQogewogCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfdHJhbnNfZmQpLAogCQkJCQkgICBHRlBfS0VSTkVMKTsKQEAgLTEyMzQsMTMgKzc3NiwxMyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0cmFucy0+cHJpdiA9IHRzOwotCXRyYW5zLT5zdGF0dXMgPSBDb25uZWN0ZWQ7CisJY2xpZW50LT50cmFucyA9IHRzOworCWNsaWVudC0+c3RhdHVzID0gQ29ubmVjdGVkOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcDlfc29ja2V0X29wZW4oc3RydWN0IHA5X3RyYW5zICp0cmFucywgc3RydWN0IHNvY2tldCAqY3NvY2tldCkKK3N0YXRpYyBpbnQgcDlfc29ja2V0X29wZW4oc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0KQogewogCWludCBmZCwgcmV0OwogCkBAIC0xMjUxLDEzNyArNzkzLDY1IEBACiAJCXJldHVybiBmZDsKIAl9CiAKLQlyZXQgPSBwOV9mZF9vcGVuKHRyYW5zLCBmZCwgZmQpOworCXJldCA9IHA5X2ZkX29wZW4oY2xpZW50LCBmZCwgZmQpOwogCWlmIChyZXQgPCAwKSB7CiAJCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV9zb2NrZXRfb3BlbjogZmFpbGVkIHRvIG9wZW4gZmRcbiIpOwogCQlzb2NrZmRfcHV0KGNzb2NrZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCSgoc3RydWN0IHA5X3RyYW5zX2ZkICopdHJhbnMtPnByaXYpLT5yZC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCSgoc3RydWN0IHA5X3RyYW5zX2ZkICopY2xpZW50LT50cmFucyktPnJkLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBwOV9mZF9yZWFkLSByZWFkIGZyb20gYSBmZAotICogQHRyYW5zOiB0cmFuc3BvcnQgaW5zdGFuY2Ugc3RhdGUKLSAqIEB2OiBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGludG8KLSAqIEBsZW46IHNpemUgb2YgcmVjZWl2ZSBidWZmZXIKKyAqIHA5X211eF9kZXN0cm95IC0gY2FuY2VscyBhbGwgcGVuZGluZyByZXF1ZXN0cyBhbmQgZnJlZXMgbXV4IHJlc291cmNlcworICogQG06IG11eCB0byBkZXN0cm95CiAgKgogICovCiAKLXN0YXRpYyBpbnQgcDlfZmRfcmVhZChzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcDlfY29ubl9kZXN0cm95KHN0cnVjdCBwOV9jb25uICptKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBwcmV2ICVwIG5leHQgJXBcbiIsIG0sCisJCW0tPm11eF9saXN0LnByZXYsIG0tPm11eF9saXN0Lm5leHQpOwogCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgIT0gRGlzY29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OworCXA5X211eF9wb2xsX3N0b3AobSk7CisJY2FuY2VsX3dvcmtfc3luYygmbS0+cnEpOworCWNhbmNlbF93b3JrX3N5bmMoJm0tPndxKTsKIAotCWlmICghdHMpCi0JCXJldHVybiAtRVJFTU9URUlPOworCXA5X2Nvbm5fY2FuY2VsKG0sIC1FQ09OTlJFU0VUKTsKIAotCWlmICghKHRzLT5yZC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgcmVhZCAuLi5cbiIpOwotCi0JcmV0ID0ga2VybmVsX3JlYWQodHMtPnJkLCB0cy0+cmQtPmZfcG9zLCB2LCBsZW4pOwotCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQotCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCXJldHVybiByZXQ7CisJbS0+Y2xpZW50ID0gTlVMTDsKKwlrZnJlZShtKTsKIH0KIAogLyoqCi0gKiBwOV9mZF93cml0ZSAtIHdyaXRlIHRvIGEgc29ja2V0Ci0gKiBAdHJhbnM6IHRyYW5zcG9ydCBpbnN0YW5jZSBzdGF0ZQotICogQHY6IGJ1ZmZlciB0byBzZW5kIGRhdGEgZnJvbQotICogQGxlbjogc2l6ZSBvZiBzZW5kIGJ1ZmZlcgorICogcDlfZmRfY2xvc2UgLSBzaHV0ZG93biBmaWxlIGRlc2NyaXB0b3IgdHJhbnNwb3J0CisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9mZF93cml0ZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQotewotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwotCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgIT0gRGlzY29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OwotCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0KLQlpZiAoISh0cy0+d3ItPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJsb2NraW5nIHdyaXRlIC4uLlxuIik7Ci0KLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhnZXRfZHMoKSk7Ci0JLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLwotCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOwotCXNldF9mcyhvbGRmcyk7Ci0KLQlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKLQkJdHJhbnMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1wOV9mZF9wb2xsKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHQpCi17Ci0JaW50IHJldCwgbjsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKLQotCWlmICh0cmFucyAmJiB0cmFucy0+c3RhdHVzID09IENvbm5lY3RlZCkKLQkJdHMgPSB0cmFucy0+cHJpdjsKLQotCWlmICghdHMpCi0JCXJldHVybiAtRVJFTU9URUlPOwotCi0JaWYgKCF0cy0+cmQtPmZfb3AgfHwgIXRzLT5yZC0+Zl9vcC0+cG9sbCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoIXRzLT53ci0+Zl9vcCB8fCAhdHMtPndyLT5mX29wLT5wb2xsKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9IHRzLT5yZC0+Zl9vcC0+cG9sbCh0cy0+cmQsIHB0KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICh0cy0+cmQgIT0gdHMtPndyKSB7Ci0JCW4gPSB0cy0+d3ItPmZfb3AtPnBvbGwodHMtPndyLCBwdCk7Ci0JCWlmIChuIDwgMCkKLQkJCXJldHVybiBuOwotCQlyZXQgPSAocmV0ICYgflBPTExPVVQpIHwgKG4gJiB+UE9MTElOKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHA5X2ZkX2Nsb3NlIC0gc2h1dGRvd24gc29ja2V0Ci0gKiBAdHJhbnM6IHByaXZhdGUgc29ja2V0IHN0cnVjdHVyZQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBwOV9mZF9jbG9zZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQorc3RhdGljIHZvaWQgcDlfZmRfY2xvc2Uoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwOV90cmFuc19mZCAqdHM7CiAKLQlpZiAoIXRyYW5zKQorCWlmICghY2xpZW50KQogCQlyZXR1cm47CiAKLQl0cyA9IHhjaGcoJnRyYW5zLT5wcml2LCBOVUxMKTsKLQorCXRzID0gY2xpZW50LT50cmFuczsKIAlpZiAoIXRzKQogCQlyZXR1cm47CiAKKwljbGllbnQtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwogCXA5X2Nvbm5fZGVzdHJveSh0cy0+Y29ubik7CiAKLQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwogCWlmICh0cy0+cmQpCiAJCWZwdXQodHMtPnJkKTsKIAlpZiAodHMtPndyKQogCQlmcHV0KHRzLT53cik7CisKIAlrZnJlZSh0cyk7CiB9CiAKQEAgLTE0MDIsMzEgKzg3MiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3RyYW5zX2NyZWF0ZV90Y3AoY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncywgaW50IG1zaXplLCB1bnNpZ25lZCBjaGFyIGRvdHUpCitzdGF0aWMgaW50CitwOV9mZF9jcmVhdGVfdGNwKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CiAJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3NlcnZlcjsKIAlzdHJ1Y3QgcDlfZmRfb3B0cyBvcHRzOwotCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnAgPSBOVUxMOyAvKiB0aGlzIGdldHMgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCWVyciA9IHBhcnNlX29wdHMoYXJncywgJm9wdHMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQlyZXR1cm4gZXJyOwogCiAJaWYgKHZhbGlkX2lwYWRkcjQoYWRkcikgPCAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljc29ja2V0ID0gTlVMTDsKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCXRyYW5zLT5tc2l6ZSA9IG1zaXplOwotCXRyYW5zLT5leHRlbmRlZCA9IGRvdHU7Ci0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKIAogCXNpbl9zZXJ2ZXIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJc2luX3NlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBpbl9hdG9uKGFkZHIpOwpAQCAtMTQ0OSw0NSArOTExLDM4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfc29ja2V0X29wZW4odHJhbnMsIGNzb2NrZXQpOworCWVyciA9IHA5X3NvY2tldF9vcGVuKGNsaWVudCwgY3NvY2tldCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgogCWlmIChjc29ja2V0KQogCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CiAKLQlrZnJlZSh0cmFucyk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX3VuaXgoY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncywgaW50IG1zaXplLAotCQkJCQkJCXVuc2lnbmVkIGNoYXIgZG90dSkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZV91bml4KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKmNzb2NrZXQ7CiAJc3RydWN0IHNvY2thZGRyX3VuIHN1bl9zZXJ2ZXI7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnA7CisJc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gTlVMTDsgLyogdGhpcyBnZXRzIGFsbG9jYXRlZCBpbiBwOV9mZF9vcGVuICovCiAKIAljc29ja2V0ID0gTlVMTDsKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKIAogCWlmIChzdHJsZW4oYWRkcikgPiBVTklYX1BBVEhfTUFYKSB7CiAJCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV90cmFuc191bml4OiBhZGRyZXNzIHRvbyBsb25nOiAlc1xuIiwKQEAgLTE1MDgsNzkgKzk2Myw2OSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWVyciA9IHA5X3NvY2tldF9vcGVuKHRyYW5zLCBjc29ja2V0KTsKKwllcnIgPSBwOV9zb2NrZXRfb3BlbihjbGllbnQsIGNzb2NrZXQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZG90dTsKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgogCWlmIChjc29ja2V0KQogCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CiAKLQlrZnJlZSh0cmFucyk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3RyYW5zX2NyZWF0ZV9mZChjb25zdCBjaGFyICpuYW1lLCBjaGFyICphcmdzLCBpbnQgbXNpemUsCi0JCQkJCQkJdW5zaWduZWQgY2hhciBleHRlbmRlZCkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmFyZ3MpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwogCXN0cnVjdCBwOV9mZF9vcHRzIG9wdHM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwOworCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IE5VTEw7IC8qIHRoaXMgZ2V0IGFsbG9jYXRlZCBpbiBwOV9mZF9vcGVuICovCiAKIAlwYXJzZV9vcHRzKGFyZ3MsICZvcHRzKTsKIAogCWlmIChvcHRzLnJmZCA9PSB+MCB8fCBvcHRzLndmZCA9PSB+MCkgewogCQlwcmludGsoS0VSTl9FUlIgInY5ZnM6IEluc3VmZmljaWVudCBvcHRpb25zIGZvciBwcm90bz1mZFxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9QUk9UT09QVCk7CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JdHJhbnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfdHJhbnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRyYW5zKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXRyYW5zLT5ycGMgPSBwOV9mZF9ycGM7Ci0JdHJhbnMtPmNsb3NlID0gcDlfZmRfY2xvc2U7Ci0KLQllcnIgPSBwOV9mZF9vcGVuKHRyYW5zLCBvcHRzLnJmZCwgb3B0cy53ZmQpOworCWVyciA9IHA5X2ZkX29wZW4oY2xpZW50LCBvcHRzLnJmZCwgb3B0cy53ZmQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZXh0ZW5kZWQ7Ci0JcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgdHJhbnMtPnByaXY7Ci0JcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKHRyYW5zKTsKKwlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSBjbGllbnQtPnRyYW5zOworCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZShjbGllbnQpOwogCWlmIChJU19FUlIocC0+Y29ubikpIHsKIAkJZXJyID0gUFRSX0VSUihwLT5jb25uKTsKIAkJcC0+Y29ubiA9IE5VTEw7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcmV0dXJuIHRyYW5zOworCXJldHVybiAwOwogCiBlcnJvcjoKLQlrZnJlZSh0cmFucyk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IHA5X3RyYW5zX21vZHVsZSBwOV90Y3BfdHJhbnMgPSB7CiAJLm5hbWUgPSAidGNwIiwKIAkubWF4c2l6ZSA9IE1BWF9TT0NLX0JVRiwKIAkuZGVmID0gMSwKLQkuY3JlYXRlID0gcDlfdHJhbnNfY3JlYXRlX3RjcCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlX3RjcCwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTE1ODgsNyArMTAzMywxMCBAQAogCS5uYW1lID0gInVuaXgiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAwLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfdW5peCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlX3VuaXgsCisJLmNsb3NlID0gcDlfZmRfY2xvc2UsCisJLnJlcXVlc3QgPSBwOV9mZF9yZXF1ZXN0LAorCS5jYW5jZWwgPSBwOV9mZF9jYW5jZWwsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiB9OwogCkBAIC0xNTk2LDIzICsxMDQ0LDcxIEBACiAJLm5hbWUgPSAiZmQiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAwLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfZmQsCisJLmNyZWF0ZSA9IHA5X2ZkX2NyZWF0ZSwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKKy8qKgorICogcDlfcG9sbF9wcm9jIC0gcG9sbCB3b3JrZXIgdGhyZWFkCisgKiBAYTogdGhyZWFkIHN0YXRlIGFuZCBhcmd1bWVudHMKKyAqCisgKiBwb2xscyBhbGwgdjlmcyB0cmFuc3BvcnRzIGZvciBuZXcgZXZlbnRzIGFuZCBxdWV1ZXMgdGhlIGFwcHJvcHJpYXRlCisgKiB3b3JrIHRvIHRoZSB3b3JrIHF1ZXVlCisgKgorICovCisKK3N0YXRpYyBpbnQgcDlfcG9sbF9wcm9jKHZvaWQgKmEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzdGFydCAlcFxuIiwgY3VycmVudCk7CisgcmVwZWF0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnA5X3BvbGxfcGVuZGluZ19saXN0KSkgeworCQlzdHJ1Y3QgcDlfY29ubiAqY29ubiA9IGxpc3RfZmlyc3RfZW50cnkoJnA5X3BvbGxfcGVuZGluZ19saXN0LAorCQkJCQkJCXN0cnVjdCBwOV9jb25uLAorCQkJCQkJCXBvbGxfcGVuZGluZ19saW5rKTsKKwkJbGlzdF9kZWxfaW5pdCgmY29ubi0+cG9sbF9wZW5kaW5nX2xpbmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKworCQlwOV9wb2xsX211eChjb25uKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAobGlzdF9lbXB0eSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QpKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzbGVlcGluZy4uLlxuIik7CisJCXNjaGVkdWxlKCk7CisJfQorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlnb3RvIHJlcGVhdDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJmaW5pc2hcbiIpOworCXJldHVybiAwOworfQorCiBpbnQgcDlfdHJhbnNfZmRfaW5pdCh2b2lkKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpOyBpKyspCi0JCXA5X211eF9wb2xsX3Rhc2tzW2ldLnRhc2sgPSBOVUxMOwotCiAJcDlfbXV4X3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgidjlmcyIpOwogCWlmICghcDlfbXV4X3dxKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInY5ZnM6IG11eDogY3JlYXRpbmcgd29ya3F1ZXVlIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXA5X3BvbGxfdGFzayA9IGt0aHJlYWRfcnVuKHA5X3BvbGxfcHJvYywgTlVMTCwgInY5ZnMtcG9sbCIpOworCWlmIChJU19FUlIocDlfcG9sbF90YXNrKSkgeworCQlkZXN0cm95X3dvcmtxdWV1ZShwOV9tdXhfd3EpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2OWZzOiBtdXg6IGNyZWF0aW5nIHBvbGwgdGFzayBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwOV9wb2xsX3Rhc2spOworCX0KKwogCXY5ZnNfcmVnaXN0ZXJfdHJhbnMoJnA5X3RjcF90cmFucyk7CiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfdW5peF90cmFucyk7CiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfZmRfdHJhbnMpOwpAQCAtMTYyMiw2ICsxMTE4LDcgQEAKIAogdm9pZCBwOV90cmFuc19mZF9leGl0KHZvaWQpCiB7CisJa3RocmVhZF9zdG9wKHA5X3BvbGxfdGFzayk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV90Y3BfdHJhbnMpOwogCXY5ZnNfdW5yZWdpc3Rlcl90cmFucygmcDlfdW5peF90cmFucyk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV9mZF90cmFucyk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggOTQ5MTJlMC4uMmQ3NzgxZSAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtMSwxMiArMSwxMCBAQAogLyoKLSAqIFRoZSBHdWVzdCA5cCB0cmFuc3BvcnQgZHJpdmVyCisgKiBUaGUgVmlydGlvIDlwIHRyYW5zcG9ydCBkcml2ZXIKICAqCiAgKiBUaGlzIGlzIGEgYmxvY2sgYmFzZWQgdHJhbnNwb3J0IGRyaXZlciBiYXNlZCBvbiB0aGUgbGd1ZXN0IGJsb2NrIGRyaXZlcgogICogY29kZS4KICAqCi0gKi8KLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgVmFuIEhlbnNiZXJnZW4sIElCTSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFZhbiBIZW5zYmVyZ2VuLCBJQk0gQ29ycG9yYXRpb24KICAqCiAgKiAgQmFzZWQgb24gdmlydGlvIGNvbnNvbGUgZHJpdmVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgpAQCAtNDEsNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+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+bG9jaywgZmxhZ3MpOwogCWlkcl9yZW1vdmUoJnAtPnBvb2wsIGlkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCBmNjM0OGUwLi44Zjk0MzFhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTM3LDEwICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKQEAgLTE0NSwxMSArMTQyLDggQEAKIAlpZiAocHJvdG8gPCAwIHx8IHByb3RvID49IEJUX01BWF9QUk9UTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19LTU9EKQotCWlmICghYnRfcHJvdG9bcHJvdG9dKSB7CisJaWYgKCFidF9wcm90b1twcm90b10pCiAJCXJlcXVlc3RfbW9kdWxlKCJidC1wcm90by0lZCIsIHByb3RvKTsKLQl9Ci0jZW5kaWYKIAogCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGE0YWJlZDUuLmZhNWNkYTQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCSpkID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW47Ci0JTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9GT1JXQVJELCBza2IsIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAorCU5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9GT1JXQVJELCBza2IsIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAogCQkoc3RydWN0IG5ldF9kZXZpY2UgKilvdXQsIGJyX25mX2ZvcndhcmRfZmluaXNoKTsKIAogCXJldHVybiBORl9TVE9MRU47CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA1YmI4OGViLi4wZmEyMDhlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTMwNSwyMyArMzA1LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0tNT0QKLSNkZWZpbmUgZmluZF9pbmxpc3RfbG9jayhoLG4scCxlLG0pIGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKChoKSwobiksKGUpLChtKSkKLSNlbHNlCiBzdGF0aWMgdm9pZCAqCiBmaW5kX2lubGlzdF9sb2NrKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKICAgIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7Ci0Jdm9pZCAqcmV0OwotCi0JcmV0ID0gZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KTsKLQlpZiAoIXJldCkgewotCQlyZXF1ZXN0X21vZHVsZSgiJXMlcyIsIHByZWZpeCwgbmFtZSk7Ci0JCXJldCA9IGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKGhlYWQsIG5hbWUsIGVycm9yLCBtdXRleCk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQkJZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KSwKKwkJCSIlcyVzIiwgcHJlZml4LCBuYW1lKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBlYnRfdGFibGUgKgogZmluZF90YWJsZV9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA4MDM1ZmJmNS4uN2Q0ZDJiMyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9hZl9jYW4uYworKysgYi9uZXQvY2FuL2FmX2Nhbi5jCkBAIC0xMjgsOCArMTI4LDggQEAKIAlpZiAobmV0ICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAotCS8qIHRyeSB0byBsb2FkIHByb3RvY29sIG1vZHVsZSwgd2hlbiBDT05GSUdfS01PRCBpcyBkZWZpbmVkICovCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkvKiB0cnkgdG8gbG9hZCBwcm90b2NvbCBtb2R1bGUga2VybmVsIGlzIG1vZHVsYXIgKi8KIAlpZiAoIXByb3RvX3RhYltwcm90b2NvbF0pIHsKIAkJZXJyID0gcmVxdWVzdF9tb2R1bGUoImNhbi1wcm90by0lZCIsIHByb3RvY29sKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAxNDA4YTA4My4uYjhhNGZkMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTkyNCwxMCArOTI0LDEwIEBACiAJCXN0cmxjcHkoZGV2LT5uYW1lLCBuZXduYW1lLCBJRk5BTVNJWik7CiAKIHJvbGxiYWNrOgotCWVyciA9IGRldmljZV9yZW5hbWUoJmRldi0+ZGV2LCBkZXYtPm5hbWUpOwotCWlmIChlcnIpIHsKKwlyZXQgPSBkZXZpY2VfcmVuYW1lKCZkZXYtPmRldiwgZGV2LT5uYW1lKTsKKwlpZiAocmV0KSB7CiAJCW1lbWNweShkZXYtPm5hbWUsIG9sZG5hbWUsIElGTkFNU0laKTsKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAl3cml0ZV9sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKQEAgLTQ5NTYsOCArNDk1Niw2IEBACiBFWFBPUlRfU1lNQk9MKGJyX2ZkYl9wdXRfaG9vayk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19LTU9ECiBFWFBPUlRfU1lNQk9MKGRldl9sb2FkKTsKLSNlbmRpZgogCiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woc29mdG5ldF9kYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggMzYzMDEzMS4uMzFmMjlkMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJc3RydWN0IG5sYXR0ciAqbGlua2luZm9bSUZMQV9JTkZPX01BWCsxXTsKIAlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogcmVwbGF5OgogI2VuZGlmCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkxBX01BWCwgaWZsYV9wb2xpY3kpOwpAQCAtMTEyOSw3ICsxMTI5LDcgQEAKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQlpZiAoIW9wcykgewotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCWlmIChraW5kWzBdKSB7CiAJCQkJX19ydG5sX3VubG9jaygpOwogCQkJCXJlcXVlc3RfbW9kdWxlKCJydG5sLWxpbmstJXMiLCBraW5kKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWQuYyBiL25ldC9kY2NwL2NjaWQuYwppbmRleCA0ODA5NzUzZDEuLjhmZTkzMWEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWQuYworKysgYi9uZXQvZGNjcC9jY2lkLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXN0cnVjdCBjY2lkICpjY2lkID0gTlVMTDsKIAogCWNjaWRzX3JlYWRfbG9jaygpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoY2NpZHNbaWRdID09IE5VTEwpIHsKIAkJLyogV2Ugb25seSB0cnkgdG8gbG9hZCBpZiBpbiBwcm9jZXNzIGNvbnRleHQgKi8KIAkJY2NpZHNfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCAxMTA2Mjc4Li5kNGNlMTIyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAlmbC5mbDZfZmxvd2xhYmVsID0gMDsKIAlmbC5vaWYgPSBpcmVxNi0+aWlmOwogCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7Ci0JZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsICZmbCk7CiAKIAlvcHQgPSBucC0+b3B0OwpAQCAtNTU4LDcgKzU1OCw3IEBACiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmaXJlcTYtPmxvY19hZGRyKTsKIAkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7CiAKIAkJaWYgKGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCBiMjgwNGUyZC4uZTZiZjk5ZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTMwOSw2ICszMDksNyBAQAogCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CiAKIAlpbmV0X3JzayhyZXEpLT5ybXRfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQ7CisJaW5ldF9yc2socmVxKS0+bG9jX3BvcnQJICA9IGRjY3BfaGRyKHNrYiktPmRjY3BoX2Rwb3J0OwogCWluZXRfcnNrKHJlcSktPmFja2VkCSAgPSAwOwogCXJlcS0+cmN2X3duZAkJICA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwogCWRyZXEtPmRyZXFfdGltZXN0YW1wX2VjaG8gPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCBkMDY5NDVjLi44MDlkODAzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJLyogQnVpbGQgYW5kIGNoZWNrc3VtIGhlYWRlciAqLwogCWRoID0gZGNjcF96ZXJvZWRfaGRyKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7CiAKLQlkaC0+ZGNjcGhfc3BvcnQJPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJZGgtPmRjY3BoX3Nwb3J0CT0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJZGgtPmRjY3BoX2Rwb3J0CT0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7CiAJZGgtPmRjY3BoX2RvZmYJPSAoZGNjcF9oZWFkZXJfc2l6ZSArCiAJCQkgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuKSAvIDQ7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCA4MDA4Yzg2Li4yOGUyNmJkIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTQ5MCw5ICs0OTAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZnItPmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKIAotI2lmZGVmIENPTkZJR19LTU9ECiAJZGV2X2xvYWQoJmluaXRfbmV0LCBpZnItPmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoKGNtZCkgewogCQljYXNlIFNJT0NHSUZBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBiMDQzZWRhLi4xYTlkZDY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtNjYzLDcgKzY2Myw3IEBACiB2b2lkIGFycF94bWl0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogU2VuZCBpdCBvZmYsIG1heWJlIGZpbHRlciBpdCB1c2luZyBmaXJld2FsbGluZyBmaXJzdC4gICovCi0JTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsIGRldl9xdWV1ZV94bWl0KTsKKwlORl9IT09LKE5GUFJPVE9fQVJQLCBORl9BUlBfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LCBkZXZfcXVldWVfeG1pdCk7CiB9CiAKIC8qCkBAIC05MjgsNyArOTI4LDcgQEAKIAogCW1lbXNldChORUlHSF9DQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IG5laWdoYm91cl9jYikpOwogCi0JcmV0dXJuIE5GX0hPT0soTkZfQVJQLCBORl9BUlBfSU4sIHNrYiwgZGV2LCBOVUxMLCBhcnBfcHJvY2Vzcyk7CisJcmV0dXJuIE5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9JTiwgc2tiLCBkZXYsIE5VTEwsIGFycF9wcm9jZXNzKTsKIAogZnJlZXNrYjoKIAlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA1MTU0ZTcyLi41NmZjZTNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC02MTMsOSArNjEzLDcgQEAKIAlpZiAoY29sb24pCiAJCSpjb2xvbiA9IDA7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHSUZBRERSOgkvKiBHZXQgaW50ZXJmYWNlIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggODljYjA0Ny4uNTY0MjMwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTUzLDExICs1Myw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmluZXRfZGlhZ19sb2NrX2hhbmRsZXIoaW50IHR5cGUpCiB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAoIWluZXRfZGlhZ190YWJsZVt0eXBlXSkKIAkJcmVxdWVzdF9tb2R1bGUoIm5ldC1wZi0lZC1wcm90by0lZC10eXBlLSVkIiwgUEZfTkVUTElOSywKIAkJCSAgICAgICBORVRMSU5LX0lORVRfRElBRywgdHlwZSk7Ci0jZW5kaWYKIAogCW11dGV4X2xvY2soJmluZXRfZGlhZ190YWJsZV9tdXRleCk7CiAJaWYgKCFpbmV0X2RpYWdfdGFibGVbdHlwZV0pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCmluZGV4IGZmZWFmZmMuLjgzMDNlNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCkBAIC03NDIsNiArNzQyLDcgQEAKIAkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpICsgbGVuLAogCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKIAkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShwKTsKIAkJCQlrZnJlZShpZCk7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTQyYmUwNC4uMmVhNmRjYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMTA5LDcgKzExMDksMTIgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgotCXJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4gPSBydDsKKwkvKgorCSAqIFNpbmNlIGxvb2t1cCBpcyBsb2NrZnJlZSwgd2UgbXVzdCBtYWtlIHN1cmUKKwkgKiBwcmV2aW91cyB3cml0ZXMgdG8gcnQgYXJlIGNvbWl0dGVkIHRvIG1lbW9yeQorCSAqIGJlZm9yZSBtYWtpbmcgcnQgdmlzaWJsZSB0byBvdGhlciBDUFVTLgorCSAqLworCXJjdV9hc3NpZ25fcG9pbnRlcihydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluLCBydCk7CiAJc3Bpbl91bmxvY2tfYmgocnRfaGFzaF9sb2NrX2FkZHIoaGFzaCkpOwogCSpycCA9IHJ0OwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNmEyNTA4Mi4uNGVjNWI0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCXNwaW5fbG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKIAljYSA9IHRjcF9jYV9maW5kKG5hbWUpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CiAJCXNwaW5fdW5sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlpZiAoY2EgPT0gaWNzay0+aWNza19jYV9vcHMpCiAJCWdvdG8gb3V0OwogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIG5vdCBmb3VuZCBhdHRlbXB0IHRvIGF1dG9sb2FkIG1vZHVsZSAqLwogCWlmICghY2EgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggZWMzOTRjZi4uNjc2YzgwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtMjA0LDYgKzIwNCw3IEBACiAKIAlyZXEtPm1zcyA9IG1zczsKIAlpcmVxLT5ybXRfcG9ydCA9IHRoLT5zb3VyY2U7CisJaXJlcS0+bG9jX3BvcnQgPSB0aC0+ZGVzdDsKIAlpcHY2X2FkZHJfY29weSgmaXJlcTYtPnJtdF9hZGRyLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+bG9jX2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkcik7CiAJaWYgKGlwdjZfb3B0X2FjY2VwdGVkKHNrLCBza2IpIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBlNTMxMGM5Yi4uYjZiMzU2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC00NzYsNyArNDc2LDcgQEAKIAlmbC5mbDZfZmxvd2xhYmVsID0gMDsKIAlmbC5vaWYgPSB0cmVxLT5paWY7CiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCW9wdCA9IG5wLT5vcHQ7CkBAIC0xMzA5LDcgKzEzMDksNyBAQAogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJnRyZXEtPmxvY19hZGRyKTsKIAkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCkBAIC0xODY1LDcgKzE4NjUsNyBAQAogCQkgICBpLAogCQkgICBzcmMtPnM2X2FkZHIzMlswXSwgc3JjLT5zNl9hZGRyMzJbMV0sCiAJCSAgIHNyYy0+czZfYWRkcjMyWzJdLCBzcmMtPnM2X2FkZHIzMlszXSwKLQkJICAgbnRvaHMoaW5ldF9zayhzayktPnNwb3J0KSwKKwkJICAgbnRvaHMoaW5ldF9yc2socmVxKS0+bG9jX3BvcnQpLAogCQkgICBkZXN0LT5zNl9hZGRyMzJbMF0sIGRlc3QtPnM2X2FkZHIzMlsxXSwKIAkJICAgZGVzdC0+czZfYWRkcjMyWzJdLCBkZXN0LT5zNl9hZGRyMzJbM10sCiAJCSAgIG50b2hzKGluZXRfcnNrKHJlcSktPnJtdF9wb3J0KSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA3ODg5MmNmLi4yNWRjZWY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC0yNzEsNyArMjcxLDYgQEAKIGNvbmZpZyBORl9DVF9ORVRMSU5LCiAJdHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnCiAJc2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LCi0JZGVwZW5kcyBvbiBORl9OQVQ9biB8fCBORl9OQVQKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCmluZGV4IDA1MDQ4ZTQuLjc5YTY5ODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCkBAIC0yNSwxMSArMjUsMTMgQEAKIGlmIElQX1ZTCiAKIGNvbmZpZwlJUF9WU19JUFY2Ci0JYm9vbCAiSVB2NiBzdXBwb3J0IGZvciBJUFZTIChEQU5HRVJPVVMpIgorCWJvb2wgIklQdjYgc3VwcG9ydCBmb3IgSVBWUyIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAoSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2KQogCS0tLWhlbHAtLS0KIAkgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy4gVGhpcyBpcyBpbmNvbXBsZXRlIGFuZCBtaWdodCBiZSBkYW5nZXJvdXMuCiAKKwkgIFNlZSBodHRwOi8vd3d3Lm1pbmRiYXNrZXQuY29tL2lwdnMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAogY29uZmlnCUlQX1ZTX0RFQlVHCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggMDhlODJkNi4uYTA0MGQ0NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtODEzLDYgKzgxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKQEAgLTgyMiw3ICs4MjMsNyBAQAogCiAJcGFyc2VfbmF0X3NldHVwID0gcmN1X2RlcmVmZXJlbmNlKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayk7CiAJaWYgKCFwYXJzZV9uYXRfc2V0dXApIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQluZm5sX3VubG9jaygpOwogCQlpZiAocmVxdWVzdF9tb2R1bGUoIm5mLW5hdC1pcHY0IikgPCAwKSB7CkBAIC04NDAsNiArODQxLDcgQEAKIAogCXJldHVybiBwYXJzZV9uYXRfc2V0dXAoY3QsIG1hbmlwLCBhdHRyKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggNDczOWY5Zi4uOWMwYmExNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIHJlcGxheToKIAlzcyA9IG5mbmV0bGlua19nZXRfc3Vic3lzKHR5cGUpOwogCWlmICghc3MpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCW5mbmxfdW5sb2NrKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZm5ldGxpbmstc3Vic3lzLSVkIiwgTkZOTF9TVUJTWVNfSUQodHlwZSkpOwogCQluZm5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKaW5kZXggMmNjMWZmZi4uZjk5NzdiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gIk5GUVVFVUUiLAotCQkuZmFtaWx5CQk9IE5GX0FSUCwKKwkJLmZhbWlseQkJPSBORlBST1RPX0FSUCwKIAkJLnRhcmdldAkJPSBuZnF1ZXVlX3RnLAogCQkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfTkZRX2luZm8pLAogCQkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCmluZGV4IDZmNjJjMzYuLjdhYzU0ZWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCkBAIC02MSw3ICs2MSw3IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKIAkJbSAgPSBudG9obChpcGgtPnNhZGRyKSA8IG50b2hsKGluZm8tPnNyY19taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0+c2FkZHIpID4gbnRvaGwoaW5mby0+c3JjX21heC5pcCk7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkgewogCQkJcHJfZGVidWcoInNyYyBJUCAiIE5JUFFVQURfRk1UICIgTk9UIGluIHJhbmdlICVzIgogCQkJICAgICAgICAgTklQUVVBRF9GTVQgIi0iIE5JUFFVQURfRk1UICJcbiIsCkBAIC03NSw3ICs3NSw3IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBudG9obChpcGgtPmRhZGRyKSA8IG50b2hsKGluZm8tPmRzdF9taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0+ZGFkZHIpID4gbnRvaGwoaW5mby0+ZHN0X21heC5pcCk7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlYpOwogCQlpZiAobSkgewogCQkJcHJfZGVidWcoImRzdCBJUCAiIE5JUFFVQURfRk1UICIgTk9UIGluIHJhbmdlICVzIgogCQkJICAgICAgICAgTklQUVVBRF9GTVQgIi0iIE5JUFFVQURfRk1UICJcbiIsCkBAIC0xMTQsMTQgKzExNCwxNCBAQAogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDKSB7CiAJCW0gID0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KSA8IDA7CiAJCW0gfD0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5zYWRkciwgJmluZm8tPnNyY19tYXguaW42KSA+IDA7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKIAkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKLQkJbSBePSBpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVjsKKwkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVik7CiAJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCmluZGV4IDRlYmQ0Y2EuLjI4MGM0NzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwpAQCAtMzE4LDE1ICszMTgsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaXBfbGlzdF9oYXNoX3NpemU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJnQtPmlwaGFzaFtpXSk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQl0LT5wcm9jID0gcHJvY19jcmVhdGUodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAotCQkgICZyZWNlbnRfbXRfZm9wcyk7CisJdC0+cHJvYyA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAorCQkgICZyZWNlbnRfbXRfZm9wcywgdCk7CiAJaWYgKHQtPnByb2MgPT0gTlVMTCkgewogCQlrZnJlZSh0KTsKIAkJZ290byBvdXQ7CiAJfQogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi0JdC0+cHJvY19vbGQgPSBwcm9jX2NyZWF0ZSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX29sZF9kaXIsCi0JCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMpOworCXQtPnByb2Nfb2xkID0gcHJvY19jcmVhdGVfZGF0YSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX29sZF9kaXIsCisJCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMsIHQpOwogCWlmICh0LT5wcm9jX29sZCA9PSBOVUxMKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHByb2Nfb2xkX2Rpcik7CiAJCWtmcmVlKHQpOwpAQCAtMzM0LDExICszMzQsOSBAQAogCX0KIAl0LT5wcm9jX29sZC0+dWlkICAgPSBpcF9saXN0X3VpZDsKIAl0LT5wcm9jX29sZC0+Z2lkICAgPSBpcF9saXN0X2dpZDsKLQl0LT5wcm9jX29sZC0+ZGF0YSAgPSB0OwogI2VuZGlmCiAJdC0+cHJvYy0+dWlkICAgICAgID0gaXBfbGlzdF91aWQ7CiAJdC0+cHJvYy0+Z2lkICAgICAgID0gaXBfbGlzdF9naWQ7Ci0JdC0+cHJvYy0+ZGF0YSAgICAgID0gdDsKICNlbmRpZgogCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnQtPmxpc3QsICZ0YWJsZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDJmZDhhZmEuLjQ4MDE4NGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAogCW5ldGxpbmtfbG9ja190YWJsZSgpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIW5sX3RhYmxlW3Byb3RvY29sXS5yZWdpc3RlcmVkKSB7CiAJCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9ORVRMSU5LLCBwcm90b2NvbCk7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwppbmRleCA5ZTljNmZjLi5iOWQ5N2VmIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCisrKyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKQEAgLTY3LDExICs2NywxMCBAQAogCX0KIAogCXBucCA9IHBob25ldF9wcm90b19nZXQocHJvdG9jb2wpOwotI2lmZGVmIENPTkZJR19LTU9ECiAJaWYgKHBucCA9PSBOVUxMICYmCiAJICAgIHJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9QSE9ORVQsIHByb3RvY29sKSA9PSAwKQogCQlwbnAgPSBwaG9uZXRfcHJvdG9fZ2V0KHByb3RvY29sKTsKLSNlbmRpZgorCiAJaWYgKHBucCA9PSBOVUxMKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAlpZiAoc29jay0+dHlwZSAhPSBwbnAtPnNvY2tfdHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggOTk3NGIzZi4uOGY0NTdmMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC00OTQsNyArNDk0LDcgQEAKIAogCWFfbyA9IHRjX2xvb2t1cF9hY3Rpb25fbihhY3RfbmFtZSk7CiAJaWYgKGFfbyA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQlydG5sX3VubG9jaygpOwogCQlyZXF1ZXN0X21vZHVsZSgiYWN0XyVzIiwgYWN0X25hbWUpOwogCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDhlYjc5ZTkuLjE2ZTdhYzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWVyciA9IC1FTk9FTlQ7CiAJCXRwX29wcyA9IHRjZl9wcm90b19sb29rdXBfb3BzKHRjYVtUQ0FfS0lORF0pOwogCQlpZiAodHBfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlzdHJ1Y3QgbmxhdHRyICpraW5kID0gdGNhW1RDQV9LSU5EXTsKIAkJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbWF0Y2guYyBiL25ldC9zY2hlZC9lbWF0Y2guYwppbmRleCA1ZTZmODJlLi5lODI1MTllIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1hdGNoLmMKKysrIGIvbmV0L3NjaGVkL2VtYXRjaC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCQlpZiAoZW0tPm9wcyA9PSBOVUxMKSB7CiAJCQllcnIgPSAtRU5PRU5UOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCV9fcnRubF91bmxvY2soKTsKIAkJCXJlcXVlc3RfbW9kdWxlKCJlbWF0Y2gta2luZC0ldSIsIGVtX2hkci0+a2luZCk7CiAJCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDExMjJjOTUuLmIxNmFkMjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7CiAKIAlvcHMgPSBxZGlzY19sb29rdXBfb3BzKGtpbmQpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAob3BzID09IE5VTEwgJiYga2luZCAhPSBOVUxMKSB7CiAJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAJCWlmIChubGFfc3RybGNweShuYW1lLCBraW5kLCBJRk5BTVNJWikgPCBJRk5BTVNJWikgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCA3YjU1NzJkLi45M2NkMzBjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlIG5vb3BfbmV0ZGV2X3F1ZXVlID0gewogCS5xZGlzYwkJPQkmbm9vcF9xZGlzYywKKwkucWRpc2Nfc2xlZXBpbmcJPQkmbm9vcF9xZGlzYywKIH07CiAKIHN0cnVjdCBRZGlzYyBub29wX3FkaXNjID0gewpAQCAtMzUyLDYgKzM1Myw3IEBACiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2M7CiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSBub3F1ZXVlX25ldGRldl9xdWV1ZSA9IHsKIAkucWRpc2MJCT0JJm5vcXVldWVfcWRpc2MsCisJLnFkaXNjX3NsZWVwaW5nCT0JJm5vcXVldWVfcWRpc2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2MgPSB7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggM2U4ZDRlMy4uMmI3YTRiNSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAogCXNvY2stPnR5cGUgPSB0eXBlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIEF0dGVtcHQgdG8gbG9hZCBhIHByb3RvY29sIG1vZHVsZSBpZiB0aGUgZmluZCBmYWlsZWQuCiAJICoKIAkgKiAxMi8wOS8xOTk2IE1hcmNpbjogQnV0ISB0aGlzIG1ha2VzIFJFQUxMWSBvbmx5IHNlbnNlLCBpZiB0aGUgdXNlcgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCA2YmZlYTllLi40MzZiZjFiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtODMsMTAgKzgzLDggQEAKIAlpZiAoZmxhdm9yID49IFJQQ19BVVRIX01BWEZMQVZPUikKIAkJZ290byBvdXQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWlmICgob3BzID0gYXV0aF9mbGF2b3JzW2ZsYXZvcl0pID09IE5VTEwpCiAJCXJlcXVlc3RfbW9kdWxlKCJycGMtYXV0aC0ldSIsIGZsYXZvcik7Ci0jZW5kaWYKIAlzcGluX2xvY2soJnJwY19hdXRoZmxhdm9yX2xvY2spOwogCW9wcyA9IGF1dGhfZmxhdm9yc1tmbGF2b3JdOwogCWlmIChvcHMgPT0gTlVMTCB8fCAhdHJ5X21vZHVsZV9nZXQob3BzLT5vd25lcikpIHsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvS2NvbmZpZyBiL3NhbXBsZXMvS2NvbmZpZwppbmRleCBlMWZiNDcxLi40YjAyZjVhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0tjb25maWcKKysrIGIvc2FtcGxlcy9LY29uZmlnCkBAIC0xMyw2ICsxMywxMiBAQAogCWhlbHAKIAkgIFRoaXMgYnVpbGQgbWFya2VycyBleGFtcGxlIG1vZHVsZXMuCiAKK2NvbmZpZyBTQU1QTEVfVFJBQ0VQT0lOVFMKKwl0cmlzdGF0ZSAiQnVpbGQgdHJhY2Vwb2ludHMgZXhhbXBsZXMgLS0gbG9hZGFibGUgbW9kdWxlcyBvbmx5IgorCWRlcGVuZHMgb24gVFJBQ0VQT0lOVFMgJiYgbQorCWhlbHAKKwkgIFRoaXMgYnVpbGQgdHJhY2Vwb2ludHMgZXhhbXBsZSBtb2R1bGVzLgorCiBjb25maWcgU0FNUExFX0tPQkpFQ1QKIAl0cmlzdGF0ZSAiQnVpbGQga29iamVjdCBleGFtcGxlcyIKIAloZWxwCmRpZmYgLS1naXQgYS9zYW1wbGVzL01ha2VmaWxlIGIvc2FtcGxlcy9NYWtlZmlsZQppbmRleCAyZTAyNTc1Li4xMGVhY2E4IDEwMDY0NAotLS0gYS9zYW1wbGVzL01ha2VmaWxlCisrKyBiL3NhbXBsZXMvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACiAjIE1ha2VmaWxlIGZvciBMaW51eCBzYW1wbGVzIGNvZGUKIAotb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IG1hcmtlcnMvIGtvYmplY3QvIGtwcm9iZXMvCitvYmotJChDT05GSUdfU0FNUExFUykJKz0gbWFya2Vycy8ga29iamVjdC8ga3Byb2Jlcy8gdHJhY2Vwb2ludHMvCmRpZmYgLS1naXQgYS9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jIGIvc2FtcGxlcy9tYXJrZXJzL3Byb2JlLWV4YW1wbGUuYwppbmRleCBjOGUwOTlkLi4yZGZiM2IzIDEwMDY0NAotLS0gYS9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jCisrKyBiL3NhbXBsZXMvbWFya2Vycy9wcm9iZS1leGFtcGxlLmMKQEAgLTgxLDYgKzgxLDcgQEAKIAkJCXByb2JlX2FycmF5W2ldLnByb2JlX2Z1bmMsICZwcm9iZV9hcnJheVtpXSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTnVtYmVyIG9mIGV2ZW50IGIgOiAldVxuIiwKIAkJCWF0b21pY19yZWFkKCZldmVudGJfY291bnQpKTsKKwltYXJrZXJfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwogfQogCiBtb2R1bGVfaW5pdChwcm9iZV9pbml0KTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvTWFrZWZpbGUgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDc5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIyBidWlsZHMgdGhlIHRyYWNlcG9pbnQgZXhhbXBsZSBrZXJuZWwgbW9kdWxlczsKKyMgdGhlbiB0byB1c2Ugb25lIChhcyByb290KTogIGluc21vZCA8bW9kdWxlX25hbWUua28+CisKK29iai0kKENPTkZJR19TQU1QTEVfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQtc2FtcGxlLm8KK29iai0kKENPTkZJR19TQU1QTEVfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQtcHJvYmUtc2FtcGxlLm8KK29iai0kKENPTkZJR19TQU1QTEVfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQtcHJvYmUtc2FtcGxlMi5vCmRpZmYgLS1naXQgYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RwLXNhbXBsZXMtdHJhY2UuaCBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHAtc2FtcGxlcy10cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTZiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RwLXNhbXBsZXMtdHJhY2UuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9UUF9TQU1QTEVTX1RSQUNFX0gKKyNkZWZpbmUgX1RQX1NBTVBMRVNfVFJBQ0VfSAorCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgkvKiBmb3Igc3RydWN0IGlub2RlIGFuZCBzdHJ1Y3QgZmlsZSAqLworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworREVGSU5FX1RSQUNFKHN1YnN5c19ldmVudCwKKwlUUFBST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSwKKwlUUEFSR1MoaW5vZGUsIGZpbGUpKTsKK0RFRklORV9UUkFDRShzdWJzeXNfZXZlbnRiLAorCVRQUFJPVE8odm9pZCksCisJVFBBUkdTKCkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtcHJvYmUtc2FtcGxlLmMgYi9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtcHJvYmUtc2FtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYmZkZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUuYworICoKKyAqIHNhbXBsZSB0cmFjZXBvaW50IHByb2Jlcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgorI2luY2x1ZGUgInRwLXNhbXBsZXMtdHJhY2UuaCIKKworLyoKKyAqIEhlcmUgdGhlIGNhbGxlciBvbmx5IGd1YXJhbnRlZXMgbG9ja2luZyBmb3Igc3RydWN0IGZpbGUgYW5kIHN0cnVjdCBpbm9kZS4KKyAqIExvY2tpbmcgbXVzdCB0aGVyZWZvcmUgYmUgZG9uZSBpbiB0aGUgcHJvYmUgdG8gdXNlIHRoZSBkZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkIHByb2JlX3N1YnN5c19ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlwYXRoX2dldCgmZmlsZS0+Zl9wYXRoKTsKKwlkZ2V0KGZpbGUtPmZfcGF0aC5kZW50cnkpOworCXByaW50ayhLRVJOX0lORk8gIkV2ZW50IGlzIGVuY291bnRlcmVkIHdpdGggZmlsZW5hbWUgJXNcbiIsCisJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlkcHV0KGZpbGUtPmZfcGF0aC5kZW50cnkpOworCXBhdGhfcHV0KCZmaWxlLT5mX3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBwcm9iZV9zdWJzeXNfZXZlbnRiKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiRXZlbnQgQiBpcyBlbmNvdW50ZXJlZFxuIik7Cit9CisKK2ludCBfX2luaXQgdHBfc2FtcGxlX3RyYWNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50KHByb2JlX3N1YnN5c19ldmVudCk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3N1YnN5c19ldmVudGIocHJvYmVfc3Vic3lzX2V2ZW50Yik7CisJV0FSTl9PTihyZXQpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KHRwX3NhbXBsZV90cmFjZV9pbml0KTsKKwordm9pZCBfX2V4aXQgdHBfc2FtcGxlX3RyYWNlX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3RyYWNlX3N1YnN5c19ldmVudGIocHJvYmVfc3Vic3lzX2V2ZW50Yik7CisJdW5yZWdpc3Rlcl90cmFjZV9zdWJzeXNfZXZlbnQocHJvYmVfc3Vic3lzX2V2ZW50KTsKK30KKworbW9kdWxlX2V4aXQodHBfc2FtcGxlX3RyYWNlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXRoaWV1IERlc25veWVycyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUcmFjZXBvaW50IFByb2JlcyBTYW1wbGVzIik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtcHJvYmUtc2FtcGxlMi5jIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXByb2JlLXNhbXBsZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTlmY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXByb2JlLXNhbXBsZTIuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUyLmMKKyAqCisgKiAybmQgc2FtcGxlIHRyYWNlcG9pbnQgcHJvYmVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgInRwLXNhbXBsZXMtdHJhY2UuaCIKKworLyoKKyAqIEhlcmUgdGhlIGNhbGxlciBvbmx5IGd1YXJhbnRlZXMgbG9ja2luZyBmb3Igc3RydWN0IGZpbGUgYW5kIHN0cnVjdCBpbm9kZS4KKyAqIExvY2tpbmcgbXVzdCB0aGVyZWZvcmUgYmUgZG9uZSBpbiB0aGUgcHJvYmUgdG8gdXNlIHRoZSBkZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkIHByb2JlX3N1YnN5c19ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJFdmVudCBpcyBlbmNvdW50ZXJlZCB3aXRoIGlub2RlIG51bWJlciAlbHVcbiIsCisJCWlub2RlLT5pX2lubyk7Cit9CisKK2ludCBfX2luaXQgdHBfc2FtcGxlX3RyYWNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc3Vic3lzX2V2ZW50KHByb2JlX3N1YnN5c19ldmVudCk7CisJV0FSTl9PTihyZXQpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KHRwX3NhbXBsZV90cmFjZV9pbml0KTsKKwordm9pZCBfX2V4aXQgdHBfc2FtcGxlX3RyYWNlX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3RyYWNlX3N1YnN5c19ldmVudChwcm9iZV9zdWJzeXNfZXZlbnQpOworfQorCittb2R1bGVfZXhpdCh0cF9zYW1wbGVfdHJhY2VfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRyYWNlcG9pbnQgUHJvYmVzIFNhbXBsZXMiKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU0YjdmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qIHRyYWNlcG9pbnQtc2FtcGxlLmMKKyAqCisgKiBFeGVjdXRlcyBhIHRyYWNlcG9pbnQgd2hlbiAvcHJvYy90cmFjZXBvaW50LWV4YW1wbGUgaXMgb3BlbmVkLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNyBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSAidHAtc2FtcGxlcy10cmFjZS5oIgorCitzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlbnRyeV9leGFtcGxlOworCitzdGF0aWMgaW50IG15X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IGk7CisKKwl0cmFjZV9zdWJzeXNfZXZlbnQoaW5vZGUsIGZpbGUpOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQl0cmFjZV9zdWJzeXNfZXZlbnRiKCk7CisJcmV0dXJuIC1FUEVSTTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWFya19vcHMgPSB7CisJLm9wZW4gPSBteV9vcGVuLAorfTsKKworc3RhdGljIGludCBleGFtcGxlX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9BTEVSVCAiZXhhbXBsZSBpbml0XG4iKTsKKwlwZW50cnlfZXhhbXBsZSA9IHByb2NfY3JlYXRlKCJ0cmFjZXBvaW50LWV4YW1wbGUiLCAwNDQ0LCBOVUxMLAorCQkmbWFya19vcHMpOworCWlmICghcGVudHJ5X2V4YW1wbGUpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4YW1wbGVfZXhpdCh2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJleGFtcGxlIGV4aXRcbiIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ0cmFjZXBvaW50LWV4YW1wbGUiLCBOVUxMKTsKK30KKworbW9kdWxlX2luaXQoZXhhbXBsZV9pbml0KQorbW9kdWxlX2V4aXQoZXhhbXBsZV9leGl0KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXRoaWV1IERlc25veWVycyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUcmFjZXBvaW50IGV4YW1wbGUiKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCmluZGV4IDI3N2NmZTAuLjVlZDRjYmYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZApAQCAtMTk4LDEwICsxOTgsMTcgQEAKIAlmaTsKIGVuZGlmCiAKK2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAorY21kX3JlY29yZF9tY291bnQgPSBwZXJsICQoc3JjdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgXAorCSIkKEFSQ0gpIiAiJChPQkpEVU1QKSIgIiQoT0JKQ09QWSkiICIkKENDKSIgIiQoTEQpIiAiJChOTSkiICIkKFJNKSIgXAorCSIkKE1WKSIgIiQoQCkiOworZW5kaWYKKwogZGVmaW5lIHJ1bGVfY2Nfb19jCiAJJChjYWxsIGVjaG8tY21kLGNoZWNrc3JjKSAkKGNtZF9jaGVja3NyYykJCQkgIFwKIAkkKGNhbGwgZWNoby1jbWQsY2Nfb19jKSAkKGNtZF9jY19vX2MpOwkJCQkgIFwKIAkkKGNtZF9tb2R2ZXJzaW9ucykJCQkJCQkgIFwKKwkkKGNtZF9yZWNvcmRfbWNvdW50KQkJCQkJCSAgXAogCXNjcmlwdHMvYmFzaWMvZml4ZGVwICQoZGVwZmlsZSkgJEAgJyQoY2FsbCBtYWtlLWNtZCxjY19vX2MpJyA+ICAgIFwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb3QtdGFyZ2V0KS50bXA7ICBcCiAJcm0gLWYgJChkZXBmaWxlKTsJCQkJCQkgIFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZSBiL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZQppbmRleCA3MzA0ZTE5Li5iZjhiMTk5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljLy5naXRpZ25vcmUKKysrIGIvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlCkBAIC0xLDMgKzEsMyBAQAoraGFzaAogZml4ZGVwCi1zcGxpdC1pbmNsdWRlCiBkb2Nwcm9jCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jvb3RncmFwaC5wbCBiL3NjcmlwdHMvYm9vdGdyYXBoLnBsCmluZGV4IDIyNDMzNTMuLjVlNzMxNmUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYm9vdGdyYXBoLnBsCisrKyBiL3NjcmlwdHMvYm9vdGdyYXBoLnBsCkBAIC0zNywxMyArMzcsMTMgQEAKICMgCWRtZXNnIHwgcGVybCBzY3JpcHRzL2Jvb3RncmFwaC5wbCA+IG91dHB1dC5zdmcKICMKIAotbXkgQHJvd3M7Ci1teSAlc3RhcnQsICVlbmQsICVyb3c7CitteSAlc3RhcnQsICVlbmQ7CiBteSAkZG9uZSA9IDA7Ci1teSAkcm93Y291bnQgPSAwOwogbXkgJG1heHRpbWUgPSAwOwogbXkgJGZpcnN0dGltZSA9IDEwMDsKIG15ICRjb3VudCA9IDA7CitteSAlcGlkczsKKwogd2hpbGUgKDw+KSB7CiAJbXkgJGxpbmUgPSAkXzsKIAlpZiAoJGxpbmUgPX4gLyhbMC05XC5dKylcXSBjYWxsaW5nICAoW2EtekEtWjAtOVxfXSspXCsvKSB7CkBAIC01NCwxNCArNTQsOCBAQAogCQkJCSRmaXJzdHRpbWUgPSAkMTsKIAkJCX0KIAkJfQotCQkkcm93eyRmdW5jfSA9IDE7CiAJCWlmICgkbGluZSA9fiAvXEAgKFswLTldKykvKSB7Ci0JCQlteSAkcGlkID0gJDE7Ci0JCQlpZiAoIWRlZmluZWQoJHJvd3NbJHBpZF0pKSB7Ci0JCQkJJHJvd2NvdW50ID0gJHJvd2NvdW50ICsgMTsKLQkJCQkkcm93c1skcGlkXSA9ICRyb3djb3VudDsKLQkJCX0KLQkJCSRyb3d7JGZ1bmN9ID0gJHJvd3NbJHBpZF07CisJCQkkcGlkc3skZnVuY30gPSAkMTsKIAkJfQogCQkkY291bnQgPSAkY291bnQgKyAxOwogCX0KQEAgLTEwOSwxNyArMTAzLDI1IEBACiBteSAkbXVsdCA9IDk1MC4wIC8gKCRtYXh0aW1lIC0gJGZpcnN0dGltZSk7CiBteSAkdGhyZXNob2xkID0gKCRtYXh0aW1lIC0gJGZpcnN0dGltZSkgLyA2MC4wOwogbXkgJHN0eWxlY291bnRlciA9IDA7CitteSAlcm93czsKK215ICRyb3dzY291bnQgPSAxOwogd2hpbGUgKCgka2V5LCR2YWx1ZSkgPSBlYWNoICVzdGFydCkgewogCW15ICRkdXJhdGlvbiA9ICRlbmR7JGtleX0gLSAkc3RhcnR7JGtleX07CiAKIAlpZiAoJGR1cmF0aW9uID49ICR0aHJlc2hvbGQpIHsKIAkJbXkgJHMsICRzMiwgJGUsICR5OworCQkkcGlkID0gJHBpZHN7JGtleX07CisKKwkJaWYgKCFkZWZpbmVkKCRyb3dzeyRwaWR9KSkgeworCQkJJHJvd3N7JHBpZH0gPSAkcm93c2NvdW50OworCQkJJHJvd3Njb3VudCA9ICRyb3dzY291bnQgKyAxOworCQl9CiAJCSRzID0gKCR2YWx1ZSAtICRmaXJzdHRpbWUpICogJG11bHQ7CiAJCSRzMiA9ICRzICsgNjsKIAkJJGUgPSAoJGVuZHska2V5fSAtICRmaXJzdHRpbWUpICogJG11bHQ7CiAJCSR3ID0gJGUgLSAkczsKIAotCQkkeSA9ICRyb3d7JGtleX0gKiAxNTA7CisJCSR5ID0gJHJvd3N7JHBpZH0gKiAxNTA7CiAJCSR5MiA9ICR5ICsgNDsKIAogCQkkc3R5bGUgPSAkc3R5bGVzWyRzdHlsZWNvdW50ZXJdOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IGUzMGJhYzEuLmY4OGJiM2UgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTEsNSArMSw1IEBACiAjIS91c3IvYmluL3BlcmwgLXcKLSMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKKyMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakByZWRoYXQuY29tPiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQogIyAoYykgMjAwNSwgSm9lbCBTY2hvcHAgPGpzY2hvcHBAYXVzdGluLmlibS5jb20+ICh0aGUgdWdseSBiaXQpCiAjIChjKSAyMDA3LCBBbmR5IFdoaXRjcm9mdCA8YXB3QHVrLmlibS5jb20+IChuZXcgY29uZGl0aW9ucywgdGVzdCBzdWl0ZSwgZXRjKQogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCA4ZTBkZTZhLi44ODkyMTYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0xNzI2LDYgKzE3MjYsMTQgQEAKIAlidWZfcHJpbnRmKGIsICJ9O1xuIik7CiB9CiAKK3ZvaWQgYWRkX3N0YWdpbmdfZmxhZyhzdHJ1Y3QgYnVmZmVyICpiLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzdGFnaW5nX2RpciA9ICJkcml2ZXJzL3N0YWdpbmciOworCisJaWYgKHN0cm5jbXAoc3RhZ2luZ19kaXIsIG5hbWUsIHN0cmxlbihzdGFnaW5nX2RpcikpID09IDApCisJCWJ1Zl9wcmludGYoYiwgIlxuTU9EVUxFX0lORk8oc3RhZ2luZywgXCJZXCIpO1xuIik7Cit9CisKIC8qKgogICogUmVjb3JkIENSQ3MgZm9yIHVucmVzb2x2ZWQgc3ltYm9scwogICoqLwpAQCAtMjEzNSw2ICsyMTQzLDcgQEAKIAkJYnVmLnBvcyA9IDA7CiAKIAkJYWRkX2hlYWRlcigmYnVmLCBtb2QpOworCQlhZGRfc3RhZ2luZ19mbGFnKCZidWYsIG1vZC0+bmFtZSk7CiAJCWVyciB8PSBhZGRfdmVyc2lvbnMoJmJ1ZiwgbW9kKTsKIAkJYWRkX2RlcGVuZHMoJmJ1ZiwgbW9kLCBtb2R1bGVzKTsKIAkJYWRkX21vZGRldnRhYmxlKCZidWYsIG1vZCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NmQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMCwwICsxLDM5NSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIChjKSAyMDA4LCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIHJlY29yZG1jb3VudC5wbCAtIG1ha2VzIGEgc2VjdGlvbiBjYWxsZWQgX19tY291bnRfbG9jIHRoYXQgaG9sZHMKKyMgICAgICAgICAgICAgICAgICAgYWxsIHRoZSBvZmZzZXRzIHRvIHRoZSBjYWxscyB0byBtY291bnQuCisjCisjCisjIFdoYXQgd2Ugd2FudCB0byBlbmQgdXAgd2l0aCBpcyBhIHNlY3Rpb24gaW4gdm1saW51eCBjYWxsZWQKKyMgX19tY291bnRfbG9jIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHBvaW50ZXJzIHRvIGFsbCB0aGUKKyMgY2FsbCBzaXRlcyBpbiB0aGUga2VybmVsIHRoYXQgY2FsbCBtY291bnQuIExhdGVyIG9uIGJvb3QgdXAsIHRoZSBrZXJuZWwKKyMgd2lsbCByZWFkIHRoaXMgbGlzdCwgc2F2ZSB0aGUgbG9jYXRpb25zIGFuZCB0dXJuIHRoZW0gaW50byBub3BzLgorIyBXaGVuIHRyYWNpbmcgb3IgcHJvZmlsaW5nIGlzIGxhdGVyIGVuYWJsZWQsIHRoZXNlIGxvY2F0aW9ucyB3aWxsIHRoZW4KKyMgYmUgY29udmVydGVkIGJhY2sgdG8gcG9pbnRlcnMgdG8gc29tZSBmdW5jdGlvbi4KKyMKKyMgVGhpcyBpcyBubyBlYXN5IGZlYXQuIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBvcmlnaW5hbAorIyBvYmplY3QgaXMgY29tcGlsZWQgYW5kIGJlZm9yZSBpdCBpcyBsaW5rZWQuCisjCisjIFRoZSByZWZlcmVuY2VzIHRvIHRoZSBjYWxsIHNpdGVzIGFyZSBvZmZzZXRzIGZyb20gdGhlIHNlY3Rpb24gb2YgdGV4dAorIyB0aGF0IHRoZSBjYWxsIHNpdGUgaXMgaW4uIEhlbmNlLCBhbGwgZnVuY3Rpb25zIGluIGEgc2VjdGlvbiB0aGF0CisjIGhhcyBhIGNhbGwgc2l0ZSB0byBtY291bnQsIHdpbGwgaGF2ZSB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZgorIyB0aGUgc2VjdGlvbiBhbmQgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorIworIyBUaGUgdHJpY2sgaXMgdG8gZmluZCBhIHdheSB0byByZWNvcmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbi4KKyMgVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRvIGxvb2sgYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzZWN0aW9uCisjIHdoaWNoIHdpbGwgYWxzbyBiZSB0aGUgbG9jYXRpb24gb2YgdGhhdCBzZWN0aW9uIGFmdGVyIGZpbmFsIGxpbmsuCisjIGUuZy4KKyMKKyMgIC5zZWN0aW9uICIudGV4dC5zY2hlZCIKKyMgIC5nbG9ibCBteV9mdW5jCisjICBteV9mdW5jOgorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIGNhbGwgbWNvdW50ICAob2Zmc2V0OiAweDUpCisjICAgICAgICBbLi4uXQorIyAgICAgICAgcmV0CisjICBvdGhlcl9mdW5jOgorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIGNhbGwgbWNvdW50IChvZmZzZXQ6IDB4MWIpCisjICAgICAgICBbLi4uXQorIworIyBCb3RoIHJlbG9jYXRpb24gb2Zmc2V0cyBmb3IgdGhlIG1jb3VudHMgaW4gdGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBiZQorIyBvZmZzZXQgZnJvbSAudGV4dC5zY2hlZC4gSWYgd2UgbWFrZSBhbm90aGVyIGZpbGUgY2FsbGVkIHRtcC5zIHdpdGg6CisjCisjICAuc2VjdGlvbiBfX21jb3VudF9sb2MKKyMgIC5xdWFkICBteV9mdW5jICsgMHg1CisjICAucXVhZCAgbXlfZnVuYyArIDB4MWIKKyMKKyMgV2UgY2FuIHRoZW4gY29tcGlsZSB0aGlzIHRtcC5zIGludG8gdG1wLm8sIGFuZCBsaW5rIGl0IHRvIHRoZSBvcmlnaW5hbAorIyBvYmplY3QuCisjCisjIEJ1dCB0aGlzIGdldHMgaGFyZCBpZiBteV9mdW5jIGlzIG5vdCBnbG9ibCAoYSBzdGF0aWMgZnVuY3Rpb24pLgorIyBJbiBzdWNoIGEgY2FzZSB3ZSBoYXZlOgorIworIyAgLnNlY3Rpb24gIi50ZXh0LnNjaGVkIgorIyAgbXlfZnVuYzoKKyMgICAgICAgIFsuLi5dCisjICAgICAgICBjYWxsIG1jb3VudCAgKG9mZnNldDogMHg1KQorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIHJldAorIyAgLmdsb2JsIG15X2Z1bmMKKyMgIG90aGVyX2Z1bmM6CisjICAgICAgICBbLi4uXQorIyAgICAgICAgY2FsbCBtY291bnQgKG9mZnNldDogMHgxYikKKyMgICAgICAgIFsuLi5dCisjCisjIElmIHdlIG1ha2UgdGhlIHRtcC5zIHRoZSBzYW1lIGFzIGFib3ZlLCB3aGVuIHdlIGxpbmsgdG9nZXRoZXIgd2l0aAorIyB0aGUgb3JpZ2luYWwgb2JqZWN0LCB3ZSB3aWxsIGVuZCB1cCB3aXRoIHR3byBzeW1ib2xzIGZvciBteV9mdW5jOgorIyBvbmUgbG9jYWwsIG9uZSBnbG9iYWwuICBBZnRlciBmaW5hbCBjb21waWxlLCB3ZSB3aWxsIGVuZCB1cCB3aXRoCisjIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gbXlfZnVuYy4KKyMKKyMgU2luY2UgbG9jYWwgb2JqZWN0cyBjYW4gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcywgd2UgbmVlZCB0byBmaW5kCisjIGEgd2F5IHRvIG1ha2UgdG1wLm8gcmVmZXJlbmNlIHRoZSBsb2NhbCBvYmplY3RzIG9mIHRoZSBvcmlnaW5hbCBvYmplY3QKKyMgZmlsZSBhZnRlciBpdCBpcyBsaW5rZWQgdG9nZXRoZXIuIFRvIGRvIHRoaXMsIHdlIGNvbnZlcnQgdGhlIG15X2Z1bmMKKyMgaW50byBhIGdsb2JhbCBzeW1ib2wgYmVmb3JlIGxpbmtpbmcgdG1wLm8uIFRoZW4gYWZ0ZXIgd2UgbGluayB0bXAubworIyB3ZSB3aWxsIG9ubHkgaGF2ZSBhIHNpbmdsZSBzeW1ib2wgZm9yIG15X2Z1bmMgdGhhdCBpcyBnbG9iYWwuCisjIFdlIGNhbiBjb252ZXJ0IG15X2Z1bmMgYmFjayBpbnRvIGEgbG9jYWwgc3ltYm9sIGFuZCB3ZSBhcmUgZG9uZS4KKyMKKyMgSGVyZSBhcmUgdGhlIHN0ZXBzIHdlIHRha2U6CisjCisjIDEpIFJlY29yZCBhbGwgdGhlIGxvY2FsIHN5bWJvbHMgYnkgdXNpbmcgJ25tJworIyAyKSBVc2Ugb2JqZHVtcCB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlIG9mZnNldHMgYW5kIHNlY3Rpb25zIGZvcgorIyAgICBtY291bnQuCisjIDMpIENvbXBpbGUgdGhlIGxpc3QgaW50byBpdHMgb3duIG9iamVjdC4KKyMgNCkgRG8gd2UgaGF2ZSB0byBkZWFsIHdpdGggbG9jYWwgZnVuY3Rpb25zPyBJZiBub3QsIGdvIHRvIHN0ZXAgOC4KKyMgNSkgTWFrZSBhbiBvYmplY3QgdGhhdCBjb252ZXJ0cyB0aGVzZSBsb2NhbCBmdW5jdGlvbnMgdG8gZ2xvYmFsIHN5bWJvbHMKKyMgICAgd2l0aCBvYmpjb3B5LgorIyA2KSBMaW5rIHRvZ2V0aGVyIHRoaXMgbmV3IG9iamVjdCB3aXRoIHRoZSBsaXN0IG9iamVjdC4KKyMgNykgQ29udmVydCB0aGUgbG9jYWwgZnVuY3Rpb25zIGJhY2sgdG8gbG9jYWwgc3ltYm9scyBhbmQgcmVuYW1lCisjICAgIHRoZSByZXN1bHQgYXMgdGhlIG9yaWdpbmFsIG9iamVjdC4KKyMgICAgRW5kLgorIyA4KSBMaW5rIHRoZSBvYmplY3Qgd2l0aCB0aGUgbGlzdCBvYmplY3QuCisjIDkpIE1vdmUgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QuCisjICAgIEVuZC4KKyMKKwordXNlIHN0cmljdDsKKworbXkgJFAgPSAkMDsKKyRQID1+IHNALiovQEBnOworCitteSAkViA9ICcwLjEnOworCitpZiAoJCNBUkdWIDwgNikgeworCXByaW50ICJ1c2FnZTogJFAgYXJjaCBvYmpkdW1wIG9iamNvcHkgY2MgbGQgbm0gcm0gbXYgaW5wdXRmaWxlXG4iOworCXByaW50ICJ2ZXJzaW9uOiAkVlxuIjsKKwlleGl0KDEpOworfQorCitteSAoJGFyY2gsICRvYmpkdW1wLCAkb2JqY29weSwgJGNjLCAkbGQsICRubSwgJHJtLCAkbXYsICRpbnB1dGZpbGUpID0gQEFSR1Y7CisKKyRvYmpkdW1wID0gIm9iamR1bXAiIGlmICgobGVuZ3RoICRvYmpkdW1wKSA9PSAwKTsKKyRvYmpjb3B5ID0gIm9iamNvcHkiIGlmICgobGVuZ3RoICRvYmpjb3B5KSA9PSAwKTsKKyRjYyA9ICJnY2MiIGlmICgobGVuZ3RoICRjYykgPT0gMCk7CiskbGQgPSAibGQiIGlmICgobGVuZ3RoICRsZCkgPT0gMCk7Ciskbm0gPSAibm0iIGlmICgobGVuZ3RoICRubSkgPT0gMCk7Ciskcm0gPSAicm0iIGlmICgobGVuZ3RoICRybSkgPT0gMCk7CiskbXYgPSAibXYiIGlmICgobGVuZ3RoICRtdikgPT0gMCk7CisKKyNwcmludCBTVERFUlIgInJ1bm5pbmc6ICRQICckYXJjaCcgJyRvYmpkdW1wJyAnJG9iamNvcHknICckY2MnICckbGQnICIgLgorIyAgICAiJyRubScgJyRybScgJyRtdicgJyRpbnB1dGZpbGUnXG4iOworCitteSAlbG9jYWxzOwkJIyBMaXN0IG9mIGxvY2FsIChzdGF0aWMpIGZ1bmN0aW9ucworbXkgJXdlYWs7CQkjIExpc3Qgb2Ygd2VhayBmdW5jdGlvbnMKK215ICVjb252ZXJ0OwkJIyBMaXN0IG9mIGxvY2FsIGZ1bmN0aW9ucyB1c2VkIHRoYXQgbmVlZHMgY29udmVyc2lvbgorCitteSAkdHlwZTsKK215ICRzZWN0aW9uX3JlZ2V4OwkjIEZpbmQgdGhlIHN0YXJ0IG9mIGEgc2VjdGlvbgorbXkgJGZ1bmN0aW9uX3JlZ2V4OwkjIEZpbmQgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbgorCQkJIyAgICAocmV0dXJuIG9mZnNldCBhbmQgZnVuYyBuYW1lKQorbXkgJG1jb3VudF9yZWdleDsJIyBGaW5kIHRoZSBjYWxsIHNpdGUgdG8gbWNvdW50IChyZXR1cm4gb2Zmc2V0KQorCitpZiAoJGFyY2ggZXEgIng4Nl82NCIpIHsKKyAgICAkc2VjdGlvbl9yZWdleCA9ICJEaXNhc3NlbWJseSBvZiBzZWN0aW9uIjsKKyAgICAkZnVuY3Rpb25fcmVnZXggPSAiXihbMC05YS1mQS1GXSspXFxzKzwoLio/KT46IjsKKyAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6LipcXHNtY291bnQoWystXTB4WzAtOWEtekEtWl0rKT9cJCI7CisgICAgJHR5cGUgPSAiLnF1YWQiOworCisgICAgIyBmb3JjZSBmbGFncyBmb3IgdGhpcyBhcmNoCisgICAgJGxkIC49ICIgLW0gZWxmX3g4Nl82NCI7CisgICAgJG9iamR1bXAgLj0gIiAtTSB4ODYtNjQiOworICAgICRvYmpjb3B5IC49ICIgLU8gZWxmNjQteDg2LTY0IjsKKyAgICAkY2MgLj0gIiAtbTY0IjsKKworfSBlbHNpZiAoJGFyY2ggZXEgImkzODYiKSB7CisgICAgJHNlY3Rpb25fcmVnZXggPSAiRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiI7CisgICAgJGZ1bmN0aW9uX3JlZ2V4ID0gIl4oWzAtOWEtZkEtRl0rKVxccys8KC4qPyk+OiI7CisgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzbWNvdW50XCQiOworICAgICR0eXBlID0gIi5sb25nIjsKKworICAgICMgZm9yY2UgZmxhZ3MgZm9yIHRoaXMgYXJjaAorICAgICRsZCAuPSAiIC1tIGVsZl9pMzg2IjsKKyAgICAkb2JqZHVtcCAuPSAiIC1NIGkzODYiOworICAgICRvYmpjb3B5IC49ICIgLU8gZWxmMzItaTM4NiI7CisgICAgJGNjIC49ICIgLW0zMiI7CisKK30gZWxzZSB7CisgICAgZGllICJBcmNoICRhcmNoIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQiOworfQorCitteSAkdGV4dF9mb3VuZCA9IDA7CitteSAkcmVhZF9mdW5jdGlvbiA9IDA7CitteSAkb3BlbmVkID0gMDsKK215ICRtY291bnRfc2VjdGlvbiA9ICJfX21jb3VudF9sb2MiOworCitteSAkZGlybmFtZTsKK215ICRmaWxlbmFtZTsKK215ICRwcmVmaXg7CitteSAkZXh0OworCitpZiAoJGlucHV0ZmlsZSA9fiBtLF4oLiopLyhbXi9dKikkLCkgeworICAgICRkaXJuYW1lID0gJDE7CisgICAgJGZpbGVuYW1lID0gJDI7Cit9IGVsc2UgeworICAgICRkaXJuYW1lID0gIi4iOworICAgICRmaWxlbmFtZSA9ICRpbnB1dGZpbGU7Cit9CisKK2lmICgkZmlsZW5hbWUgPX4gbSxeKC4qKShcLlxTKSwpIHsKKyAgICAkcHJlZml4ID0gJDE7CisgICAgJGV4dCA9ICQyOworfSBlbHNlIHsKKyAgICAkcHJlZml4ID0gJGZpbGVuYW1lOworICAgICRleHQgPSAiIjsKK30KKworbXkgJG1jb3VudF9zID0gJGRpcm5hbWUgLiAiLy50bXBfbWNfIiAuICRwcmVmaXggLiAiLnMiOworbXkgJG1jb3VudF9vID0gJGRpcm5hbWUgLiAiLy50bXBfbWNfIiAuICRwcmVmaXggLiAiLm8iOworCisjCisjIC0tZ2xvYmFsaXplLXN5bWJvbHMgY2FtZSBvdXQgaW4gMi4xNywgd2UgbXVzdCB0ZXN0IHRoZSB2ZXJzaW9uCisjIG9mIG9iamNvcHksIGFuZCBpZiBpdCBpcyBsZXNzIHRoYW4gMi4xNywgdGhlbiB3ZSBjYW4gbm90CisjIHJlY29yZCBsb2NhbCBmdW5jdGlvbnMuCitteSAkdXNlX2xvY2FscyA9IDAxOworbXkgJGxvY2FsX3dhcm5fb25jZSA9IDA7CitteSAkZm91bmRfdmVyc2lvbiA9IDA7CisKK29wZW4gKElOLCAiJG9iamNvcHkgLS12ZXJzaW9uIHwiKSB8fCBkaWUgImVycm9yIHJ1bm5pbmcgJG9iamNvcHkiOword2hpbGUgKDxJTj4pIHsKKyAgICBpZiAoL29iamNvcHkuKlxzKFxkKylcLihcZCspLykgeworCW15ICRtYWpvciA9ICQxOworCW15ICRtaW5vciA9ICQyOworCisJJGZvdW5kX3ZlcnNpb24gPSAxOworCWlmICgkbWFqb3IgPCAyIHx8CisJICAgICgkbWFqb3IgPT0gMiAmJiAkbWlub3IgPCAxNykpIHsKKwkgICAgJHVzZV9sb2NhbHMgPSAwOworCX0KKwlsYXN0OworICAgIH0KK30KK2Nsb3NlIChJTik7CisKK2lmICghJGZvdW5kX3ZlcnNpb24pIHsKKyAgICBwcmludCBTVERFUlIgIldBUk5JTkc6IGNvdWxkIG5vdCBmaW5kIG9iamNvcHkgdmVyc2lvbi5cbiIgLgorCSJcdERpc2FibGluZyBsb2NhbCBmdW5jdGlvbiByZWZlcmVuY2VzLlxuIjsKK30KKworCisjCisjIFN0ZXAgMTogZmluZCBhbGwgdGhlIGxvY2FsIChzdGF0aWMgZnVuY3Rpb25zKSBhbmQgd2VhayBzeW1ib2xzLgorIyAgICAgICAgJ3QnIGlzIGxvY2FsLCAndy9XJyBpcyB3ZWFrICh3ZSBuZXZlciB1c2UgYSB3ZWFrIGZ1bmN0aW9uKQorIworb3BlbiAoSU4sICIkbm0gJGlucHV0ZmlsZXwiKSB8fCBkaWUgImVycm9yIHJ1bm5pbmcgJG5tIjsKK3doaWxlICg8SU4+KSB7CisgICAgaWYgKC9eWzAtOWEtZkEtRl0rXHMrdFxzKyhcUyspLykgeworCSRsb2NhbHN7JDF9ID0gMTsKKyAgICB9IGVsc2lmICgvXlswLTlhLWZBLUZdK1xzKyhbd1ddKVxzKyhcUyspLykgeworCSR3ZWFreyQyfSA9ICQxOworICAgIH0KK30KK2Nsb3NlKElOKTsKKworbXkgQG9mZnNldHM7CQkjIEFycmF5IG9mIG9mZnNldHMgb2YgbWNvdW50IGNhbGxlcnMKK215ICRyZWZfZnVuYzsJCSMgcmVmZXJlbmNlIGZ1bmN0aW9uIHRvIHVzZSBmb3Igb2Zmc2V0cworbXkgJG9mZnNldCA9IDA7CQkjIG9mZnNldCBvZiByZWZfZnVuYyB0byBzZWN0aW9uIGJlZ2lubmluZworCisjIworIyB1cGRhdGVfZnVuY3MgLSBwcmludCBvdXQgdGhlIGN1cnJlbnQgbWNvdW50IGNhbGxlcnMKKyMKKyMgIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2Ygb2Zmc2V0cyB0byBjYWxsZXJzIGFuZCB3cml0ZSB0aGVtIHRvCisjICB0aGUgb3V0cHV0IGZpbGUgaW4gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcmVhZCBieSBhbiBhc3NlbWJsZXIuCisjCitzdWIgdXBkYXRlX2Z1bmNzCit7CisgICAgcmV0dXJuIGlmICgkI29mZnNldHMgPCAwKTsKKworICAgIGRlZmluZWQoJHJlZl9mdW5jKSB8fCBkaWUgIk5vIGZ1bmN0aW9uIHRvIHJlZmVyZW5jZSI7CisKKyAgICAjIEEgc2VjdGlvbiBvbmx5IGhhZCBhIHdlYWsgZnVuY3Rpb24sIHRvIHJlcHJlc2VudCBpdC4KKyAgICAjIFVuZm9ydHVuYXRlbHksIGEgd2VhayBmdW5jdGlvbiBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlcgorICAgICMgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSwgbWFraW5nIGFsbCB0aGVzZSBvZmZzZXRzIGluY29ycmVjdC4KKyAgICAjIFRvIGJlIHNhZmUsIHdlIHNpbXBseSBwcmludCBhIHdhcm5pbmcgYW5kIGJhaWwuCisgICAgaWYgKGRlZmluZWQgJHdlYWt7JHJlZl9mdW5jfSkgeworCXByaW50IFNUREVSUgorCSAgICAiJGlucHV0ZmlsZTogV0FSTklORzogcmVmZXJlbmNpbmcgd2VhayBmdW5jdGlvbiIgLgorCSAgICAiICRyZWZfZnVuYyBmb3IgbWNvdW50XG4iOworCXJldHVybjsKKyAgICB9CisKKyAgICAjIGlzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBJZiBzbywgbm90ZSB0aGlzIGZhY3QuCisgICAgaWYgKGRlZmluZWQgJGxvY2Fsc3skcmVmX2Z1bmN9KSB7CisKKwkjIG9ubHkgdXNlIGxvY2FscyBpZiBvYmpjb3B5IHN1cHBvcnRzIGdsb2JhbGl6ZS1zeW1ib2xzCisJaWYgKCEkdXNlX2xvY2FscykgeworCSAgICByZXR1cm47CisJfQorCSRjb252ZXJ0eyRyZWZfZnVuY30gPSAxOworICAgIH0KKworICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgbWNvdW50IGNhbGxlciBvZmZzZXRzIGFuZCBwcmludCBhIHJlZmVyZW5jZQorICAgICMgdG8gdGhlIGNhbGxlciBiYXNlZCBmcm9tIHRoZSByZWZfZnVuYy4KKyAgICBmb3IgKG15ICRpPTA7ICRpIDw9ICQjb2Zmc2V0czsgJGkrKykgeworCWlmICghJG9wZW5lZCkgeworCSAgICBvcGVuKEZJTEUsICI+JG1jb3VudF9zIikgfHwgZGllICJjYW4ndCBjcmVhdGUgJG1jb3VudF9zXG4iOworCSAgICAkb3BlbmVkID0gMTsKKwkgICAgcHJpbnQgRklMRSAiXHQuc2VjdGlvbiAkbWNvdW50X3NlY3Rpb24sXCJhXCIsXEBwcm9nYml0c1xuIjsKKwl9CisJcHJpbnRmIEZJTEUgIlx0JXMgJXMgKyAlZFxuIiwgJHR5cGUsICRyZWZfZnVuYywgJG9mZnNldHNbJGldIC0gJG9mZnNldDsKKyAgICB9Cit9CisKKyMKKyMgU3RlcCAyOiBmaW5kIHRoZSBzZWN0aW9ucyBhbmQgbWNvdW50IGNhbGwgc2l0ZXMKKyMKK29wZW4oSU4sICIkb2JqZHVtcCAtZHIgJGlucHV0ZmlsZXwiKSB8fCBkaWUgImVycm9yIHJ1bm5pbmcgJG9iamR1bXAiOworCitteSAkdGV4dDsKKword2hpbGUgKDxJTj4pIHsKKyAgICAjIGlzIGl0IGEgc2VjdGlvbj8KKyAgICBpZiAoLyRzZWN0aW9uX3JlZ2V4LykgeworCSRyZWFkX2Z1bmN0aW9uID0gMTsKKwkjIHByaW50IG91dCBhbnkgcmVjb3JkZWQgb2Zmc2V0cworCXVwZGF0ZV9mdW5jcygpIGlmICgkdGV4dF9mb3VuZCk7CisKKwkjIHJlc2V0IGFsbCBtYXJrZXJzIGFuZCBhcnJheXMKKwkkdGV4dF9mb3VuZCA9IDA7CisJdW5kZWYoJHJlZl9mdW5jKTsKKwl1bmRlZihAb2Zmc2V0cyk7CisKKyAgICAjIHNlY3Rpb24gZm91bmQsIG5vdyBpcyB0aGlzIGEgc3RhcnQgb2YgYSBmdW5jdGlvbj8KKyAgICB9IGVsc2lmICgkcmVhZF9mdW5jdGlvbiAmJiAvJGZ1bmN0aW9uX3JlZ2V4LykgeworCSR0ZXh0X2ZvdW5kID0gMTsKKwkkb2Zmc2V0ID0gaGV4ICQxOworCSR0ZXh0ID0gJDI7CisKKwkjIGlmIHRoaXMgaXMgZWl0aGVyIGEgbG9jYWwgZnVuY3Rpb24gb3IgYSB3ZWFrIGZ1bmN0aW9uCisJIyBrZWVwIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBnbG9iYWwgdGhhdAorCSMgd2UgY2FuIHVzZSBzYWZlbHkuCisJaWYgKCFkZWZpbmVkKCRsb2NhbHN7JHRleHR9KSAmJiAhZGVmaW5lZCgkd2Vha3skdGV4dH0pKSB7CisJICAgICRyZWZfZnVuYyA9ICR0ZXh0OworCSAgICAkcmVhZF9mdW5jdGlvbiA9IDA7CisJfSBlbHNlIHsKKwkgICAgIyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBmdW5jdGlvbiwgYW5kIHRoaXMgaXMgd2Vhaywgc2tpcCBpdAorCSAgICBpZiAoIWRlZmluZWQoJHJlZl9mdW5jKSB8fCAhZGVmaW5lZCgkd2Vha3skdGV4dH0pKSB7CisJCSRyZWZfZnVuYyA9ICR0ZXh0OworCSAgICB9CisJfQorICAgIH0KKworICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKKyAgICBpZiAoJHRleHRfZm91bmQgJiYgLyRtY291bnRfcmVnZXgvKSB7CisJJG9mZnNldHNbJCNvZmZzZXRzICsgMV0gPSBoZXggJDE7CisgICAgfQorfQorCisjIGR1bXAgb3V0IGFueW1vcmUgb2Zmc2V0cyB0aGF0IG1heSBoYXZlIGJlZW4gZm91bmQKK3VwZGF0ZV9mdW5jcygpIGlmICgkdGV4dF9mb3VuZCk7CisKKyMgSWYgd2UgZGlkIG5vdCBmaW5kIGFueSBtY291bnQgY2FsbGVycywgd2UgYXJlIGRvbmUgKGRvIG5vdGhpbmcpLgoraWYgKCEkb3BlbmVkKSB7CisgICAgZXhpdCgwKTsKK30KKworY2xvc2UoRklMRSk7CisKKyMKKyMgU3RlcCAzOiBDb21waWxlIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIGxpc3Qgb2YgY2FsbCBzaXRlcyB0byBtY291bnQuCisjCitgJGNjIC1vICRtY291bnRfbyAtYyAkbWNvdW50X3NgOworCitteSBAY29udmVydHMgPSBrZXlzICVjb252ZXJ0OworCisjCisjIFN0ZXAgNDogRG8gd2UgaGF2ZSBzZWN0aW9ucyB0aGF0IHN0YXJ0ZWQgd2l0aCBsb2NhbCBmdW5jdGlvbnM/CisjCitpZiAoJCNjb252ZXJ0cyA+PSAwKSB7CisgICAgbXkgJGdsb2JhbGxpc3QgPSAiIjsKKyAgICBteSAkbG9jYWxsaXN0ID0gIiI7CisKKyAgICBmb3JlYWNoIG15ICRjb24gKEBjb252ZXJ0cykgeworCSRnbG9iYWxsaXN0IC49ICIgLS1nbG9iYWxpemUtc3ltYm9sICRjb24iOworCSRsb2NhbGxpc3QgLj0gIiAtLWxvY2FsaXplLXN5bWJvbCAkY29uIjsKKyAgICB9CisKKyAgICBteSAkZ2xvYmFsb2JqID0gJGRpcm5hbWUgLiAiLy50bXBfZ2xfIiAuICRmaWxlbmFtZTsKKyAgICBteSAkZ2xvYmFsbWl4ID0gJGRpcm5hbWUgLiAiLy50bXBfbXhfIiAuICRmaWxlbmFtZTsKKworICAgICMKKyAgICAjIFN0ZXAgNTogc2V0IHVwIGVhY2ggbG9jYWwgZnVuY3Rpb24gYXMgYSBnbG9iYWwKKyAgICAjCisgICAgYCRvYmpjb3B5ICRnbG9iYWxsaXN0ICRpbnB1dGZpbGUgJGdsb2JhbG9iamA7CisKKyAgICAjCisgICAgIyBTdGVwIDY6IExpbmsgdGhlIGdsb2JhbCB2ZXJzaW9uIHRvIG91ciBsaXN0LgorICAgICMKKyAgICBgJGxkIC1yICRnbG9iYWxvYmogJG1jb3VudF9vIC1vICRnbG9iYWxtaXhgOworCisgICAgIworICAgICMgU3RlcCA3OiBDb252ZXJ0IHRoZSBsb2NhbCBmdW5jdGlvbnMgYmFjayBpbnRvIGxvY2FsIHN5bWJvbHMKKyAgICAjCisgICAgYCRvYmpjb3B5ICRsb2NhbGxpc3QgJGdsb2JhbG1peCAkaW5wdXRmaWxlYDsKKworICAgICMgUmVtb3ZlIHRoZSB0ZW1wIGZpbGVzCisgICAgYCRybSAkZ2xvYmFsb2JqICRnbG9iYWxtaXhgOworCit9IGVsc2UgeworCisgICAgbXkgJG1peCA9ICRkaXJuYW1lIC4gIi8udG1wX214XyIgLiAkZmlsZW5hbWU7CisKKyAgICAjCisgICAgIyBTdGVwIDg6IExpbmsgdGhlIG9iamVjdCB3aXRoIG91ciBsaXN0IG9mIGNhbGwgc2l0ZXMgb2JqZWN0LgorICAgICMKKyAgICBgJGxkIC1yICRpbnB1dGZpbGUgJG1jb3VudF9vIC1vICRtaXhgOworCisgICAgIworICAgICMgU3RlcCA5OiBNb3ZlIHRoZSByZXN1bHQgYmFjayB0byB0aGUgb3JpZ2luYWwgb2JqZWN0LgorICAgICMKKyAgICBgJG12ICRtaXggJGlucHV0ZmlsZWA7Cit9CisKKyMgQ2xlYW4gdXAgdGhlIHRlbXAgZmlsZXMKK2Akcm0gJG1jb3VudF9vICRtY291bnRfc2A7CisKK2V4aXQoMCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMgYi9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKaW5kZXggNDZmMjM5Ny4uNWJhNzg3MCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCisrKyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBkZXZfY2dyb3VwLmMgLSBkZXZpY2UgY2dyb3VwIHN1YnN5c3RlbQorICogZGV2aWNlX2Nncm91cC5jIC0gZGV2aWNlIGNncm91cCBzdWJzeXN0ZW0KICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycAogICovCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKICNkZWZpbmUgQUNDX01LTk9EIDEKICNkZWZpbmUgQUNDX1JFQUQgIDIKQEAgLTIyLDE4ICsyMyw4IEBACiAKIC8qCiAgKiB3aGl0ZWxpc3QgbG9ja2luZyBydWxlczoKLSAqIGNncm91cF9sb2NrKCkgY2Fubm90IGJlIHRha2VuIHVuZGVyIGRldl9jZ3JvdXAtPmxvY2suCi0gKiBkZXZfY2dyb3VwLT5sb2NrIGNhbiBiZSB0YWtlbiB3aXRoIG9yIHdpdGhvdXQgY2dyb3VwX2xvY2soKS4KLSAqCi0gKiBtb2RpZmljYXRpb25zIGFsd2F5cyByZXF1aXJlIGNncm91cF9sb2NrCi0gKiBtb2RpZmljYXRpb25zIHRvIGEgbGlzdCB3aGljaCBpcyB2aXNpYmxlIHJlcXVpcmUgdGhlCi0gKiAgIGRldl9jZ3JvdXAtPmxvY2sgKmFuZCogY2dyb3VwX2xvY2soKQotICogd2Fsa2luZyB0aGUgbGlzdCByZXF1aXJlcyBkZXZfY2dyb3VwLT5sb2NrIG9yIGNncm91cF9sb2NrKCkuCi0gKgotICogcmVhc29uaW5nOiBkZXZfd2hpdGVsaXN0X2NvcHkoKSBuZWVkcyB0byBrbWFsbG9jLCBzbyBuZWVkcwotICogICBhIG11dGV4LCB3aGljaCB0aGUgY2dyb3VwX2xvY2soKSBpcy4gIFNpbmNlIG1vZGlmeWluZwotICogICBhIHZpc2libGUgbGlzdCByZXF1aXJlcyBib3RoIGxvY2tzLCBlaXRoZXIgbG9jayBjYW4gYmUKLSAqICAgdGFrZW4gZm9yIHdhbGtpbmcgdGhlIGxpc3QuCisgKiBob2xkIGNncm91cF9sb2NrKCkgZm9yIHVwZGF0ZS9yZWFkLgorICogaG9sZCByY3VfcmVhZF9sb2NrKCkgZm9yIHJlYWQuCiAgKi8KIAogc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSB7CkBAIC00Nyw3ICszOCw2IEBACiBzdHJ1Y3QgZGV2X2Nncm91cCB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOwogCXN0cnVjdCBsaXN0X2hlYWQgd2hpdGVsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9jZ3JvdXAgKmNzc190b19kZXZjZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnMpCkBAIC04NCwxMyArNzQsOSBAQAogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoLCAqdG1wLCAqbmV3OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aCwgb3JpZywgbGlzdCkgewotCQluZXcgPSBrbWFsbG9jKHNpemVvZigqd2gpLCBHRlBfS0VSTkVMKTsKKwkJbmV3ID0ga21lbWR1cCh3aCwgc2l6ZW9mKCp3aCksIEdGUF9LRVJORUwpOwogCQlpZiAoIW5ldykKIAkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKLQkJbmV3LT5tYWpvciA9IHdoLT5tYWpvcjsKLQkJbmV3LT5taW5vciA9IHdoLT5taW5vcjsKLQkJbmV3LT50eXBlID0gd2gtPnR5cGU7Ci0JCW5ldy0+YWNjZXNzID0gd2gtPmFjY2VzczsKIAkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBkZXN0KTsKIAl9CiAKQEAgLTEwNywxOSArOTMsMTYgQEAKIC8qIFN0dXBpZCBwcm90b3R5cGUgLSBkb24ndCBib3RoZXIgY29tYmluaW5nIGV4aXN0aW5nIGVudHJpZXMgKi8KIC8qCiAgKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQotICogc2luY2UgdGhlIGxpc3QgaXMgdmlzaWJsZSB0byBvdGhlciB0YXNrcywgd2UgbmVlZCB0aGUgc3BpbmxvY2sgYWxzbwogICovCiBzdGF0aWMgaW50IGRldl93aGl0ZWxpc3RfYWRkKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCiB7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2hjb3B5LCAqd2FsazsKIAotCXdoY29weSA9IGttYWxsb2Moc2l6ZW9mKCp3aGNvcHkpLCBHRlBfS0VSTkVMKTsKKwl3aGNvcHkgPSBrbWVtZHVwKHdoLCBzaXplb2YoKndoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3aGNvcHkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHdoY29weSwgd2gsIHNpemVvZigqd2hjb3B5KSk7Ci0Jc3Bpbl9sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdhbGssICZkZXZfY2dyb3VwLT53aGl0ZWxpc3QsIGxpc3QpIHsKIAkJaWYgKHdhbGstPnR5cGUgIT0gd2gtPnR5cGUpCiAJCQljb250aW51ZTsKQEAgLTEzNSw3ICsxMTgsNiBAQAogCiAJaWYgKHdoY29weSAhPSBOVUxMKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmd2hjb3B5LT5saXN0LCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKLQlzcGluX3VubG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OSwxNCArMTMxLDEyIEBACiAKIC8qCiAgKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQotICogc2luY2UgdGhlIGxpc3QgaXMgdmlzaWJsZSB0byBvdGhlciB0YXNrcywgd2UgbmVlZCB0aGUgc3BpbmxvY2sgYWxzbwogICovCiBzdGF0aWMgdm9pZCBkZXZfd2hpdGVsaXN0X3JtKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCiB7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2FsaywgKnRtcDsKIAotCXNwaW5fbG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhbGssIHRtcCwgJmRldl9jZ3JvdXAtPndoaXRlbGlzdCwgbGlzdCkgewogCQlpZiAod2Fsay0+dHlwZSA9PSBERVZfQUxMKQogCQkJZ290byByZW1vdmU7CkBAIC0xNzQsNyArMTU0LDYgQEAKIAkJCWNhbGxfcmN1KCZ3YWxrLT5yY3UsIHdoaXRlbGlzdF9pdGVtX2ZyZWUpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIH0KIAogLyoKQEAgLTIxNCw3ICsxOTMsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmRldl9jZ3JvdXAtPmxvY2spOwogCXJldHVybiAmZGV2X2Nncm91cC0+Y3NzOwogfQogCkBAIC0zMzAsMTUgKzMwOCwxMSBAQAogewogCXN0cnVjdCBjZ3JvdXAgKnBjZyA9IGNoaWxkY2ctPmNzcy5jZ3JvdXAtPnBhcmVudDsKIAlzdHJ1Y3QgZGV2X2Nncm91cCAqcGFyZW50OwotCWludCByZXQ7CiAKIAlpZiAoIXBjZykKIAkJcmV0dXJuIDE7CiAJcGFyZW50ID0gY2dyb3VwX3RvX2RldmNncm91cChwY2cpOwotCXNwaW5fbG9jaygmcGFyZW50LT5sb2NrKTsKLQlyZXQgPSBtYXlfYWNjZXNzX3doaXRlbGlzdChwYXJlbnQsIHdoKTsKLQlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBtYXlfYWNjZXNzX3doaXRlbGlzdChwYXJlbnQsIHdoKTsKIH0KIAogLyoKQEAgLTM1NywxNyArMzMxLDE0IEBACiBzdGF0aWMgaW50IGRldmNncm91cF91cGRhdGVfYWNjZXNzKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZjZ3JvdXAsCiAJCQkJICAgaW50IGZpbGV0eXBlLCBjb25zdCBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IGRldl9jZ3JvdXAgKmN1cl9kZXZjZ3JvdXA7CiAJY29uc3QgY2hhciAqYjsKIAljaGFyICplbmRwOwotCWludCByZXR2YWwgPSAwLCBjb3VudDsKKwlpbnQgY291bnQ7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSB3aDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWN1cl9kZXZjZ3JvdXAgPSB0YXNrX2RldmNncm91cChjdXJyZW50KTsKLQogCW1lbXNldCgmd2gsIDAsIHNpemVvZih3aCkpOwogCWIgPSBidWZmZXI7CiAKQEAgLTQzNyw3ICs0MDgsNiBAQAogCX0KIAogaGFuZGxlOgotCXJldHZhbCA9IDA7CiAJc3dpdGNoIChmaWxldHlwZSkgewogCWNhc2UgREVWQ0dfQUxMT1c6CiAJCWlmICghcGFyZW50X2hhc19wZXJtKGRldmNncm91cCwgJndoKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA1NzZlNTExLi4zZTNmZGU3YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgogCiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAib2Jqc2VjLmgiCkBAIC0yMzIyLDEzICsyMzIzLDcgQEAKIAkJCWluaXRybGltID0gaW5pdF90YXNrLnNpZ25hbC0+cmxpbStpOwogCQkJcmxpbS0+cmxpbV9jdXIgPSBtaW4ocmxpbS0+cmxpbV9tYXgsIGluaXRybGltLT5ybGltX2N1cik7CiAJCX0KLQkJaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSB7Ci0JCQkvKgotCQkJICogVGhpcyB3aWxsIGNhdXNlIFJMSU1JVF9DUFUgY2FsY3VsYXRpb25zCi0JCQkgKiB0byBiZSByZWZpZ3VyZWQuCi0JCQkgKi8KLQkJCWN1cnJlbnQtPml0X3Byb2ZfZXhwaXJlcyA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKLQkJfQorCQl1cGRhdGVfcmxpbWl0X2NwdShybGltLT5ybGltX2N1cik7CiAJfQogCiAJLyogV2FrZSB1cCB0aGUgcGFyZW50IGlmIGl0IGlzIHdhaXRpbmcgc28gdGhhdCBpdCBjYW4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvamFjay5jIGIvc291bmQvY29yZS9qYWNrLmMKaW5kZXggODEzM2EyYi4uYmQyZDllNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9qYWNrLmMKKysrIGIvc291bmQvY29yZS9qYWNrLmMKQEAgLTE0Nyw2ICsxNDcsOSBAQAogICovCiB2b2lkIHNuZF9qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX2phY2sgKmphY2ssIGludCBzdGF0dXMpCiB7CisJaWYgKCFqYWNrKQorCQlyZXR1cm47CisKIAlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKIAkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0hFQURQSE9ORV9JTlNFUlQsCiAJCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0hFQURQSE9ORSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IDZlYTVjZmIuLjkyMTY5MTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC05MDgsMTIgKzkwOCwxMiBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2h3X3J1bGVfYWRkKTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzaworICogc25kX3BjbV9od19jb25zdHJhaW50X21hc2sgLSBhcHBseSB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgY29uc3RyYWludAogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIG1hc2sKICAqIEBtYXNrOiB0aGUgYml0bWFwIG1hc2sKICAqCi0gKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSBtYXNrIHBhcmFtZXRlci4KKyAqIEFwcGx5IHRoZSBjb25zdHJhaW50IG9mIHRoZSBnaXZlbiBiaXRtYXAgbWFzayB0byBhIDMyLWJpdCBtYXNrIHBhcmFtZXRlci4KICAqLwogaW50IHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCiAJCQkgICAgICAgdV9pbnQzMl90IG1hc2spCkBAIC05MjgsMTIgKzkyOCwxMiBAQAogfQogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrNjQKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrNjQgLSBhcHBseSB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgY29uc3RyYWludAogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIG1hc2sKICAqIEBtYXNrOiB0aGUgNjRiaXQgYml0bWFwIG1hc2sKICAqCi0gKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSBtYXNrIHBhcmFtZXRlci4KKyAqIEFwcGx5IHRoZSBjb25zdHJhaW50IG9mIHRoZSBnaXZlbiBiaXRtYXAgbWFzayB0byBhIDY0LWJpdCBtYXNrIHBhcmFtZXRlci4KICAqLwogaW50IHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrNjQoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSwgc25kX3BjbV9od19wYXJhbV90IHZhciwKIAkJCQkgdV9pbnQ2NF90IG1hc2spCkBAIC05NDksNyArOTQ5LDcgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcgorICogc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIgLSBhcHBseSBhbiBpbnRlZ2VyIGNvbnN0cmFpbnQgdG8gYW4gaW50ZXJ2YWwKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBpbnRlZ2VyIGNvbnN0cmFpbnQKICAqCkBAIC05NjQsNyArOTY0LDcgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIpOwogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXggLSBhcHBseSBhIG1pbi9tYXggcmFuZ2UgY29uc3RyYWludCB0byBhbiBpbnRlcnZhbAogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIHJhbmdlCiAgKiBAbWluOiB0aGUgbWluaW1hbCB2YWx1ZQpAQCAtOTk1LDcgKzk5NSw3IEBACiAKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdAorICogc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgLSBhcHBseSBhIGxpc3Qgb2YgY29uc3RyYWludHMgdG8gYSBwYXJhbWV0ZXIKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIGxpc3QgY29uc3RyYWludApAQCAtMTAzMSw3ICsxMDMxLDcgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcworICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMgLSBhcHBseSByYXRudW1zIGNvbnN0cmFpbnQgdG8gYSBwYXJhbWV0ZXIKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIHJhdG51bXMgY29uc3RyYWludApAQCAtMTA2NCw3ICsxMDY0LDcgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucworICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMgLSBhcHBseSByYXRkZW5zIGNvbnN0cmFpbnQgdG8gYSBwYXJhbWV0ZXIKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIHJhdGRlbnMgY29uc3RyYWludApAQCAtMTA5NSw3ICsxMDk1LDcgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzIC0gYWRkIGEgaHcgY29uc3RyYWludCBtc2JpdHMgcnVsZQogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKICAqIEB3aWR0aDogc2FtcGxlIGJpdHMgd2lkdGgKQEAgLTExMjMsNyArMTEyMyw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwIC0gYWRkIGEgaHcgY29uc3RyYWludCBzdGVwIHJ1bGUKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAdmFyOiBod19wYXJhbXMgdmFyaWFibGUgdG8gYXBwbHkgdGhlIHN0ZXAgY29uc3RyYWludApAQCAtMTE1NCw3ICsxMTU0LDcgQEAKIH0JCQogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9wb3cyCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MiAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgcG93ZXItb2YtMiBydWxlCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBwb3dlci1vZi0yIGNvbnN0cmFpbnQKQEAgLTEyMDIsMTMgKzEyMDIsMTMgQEAKIEVYUE9SVF9TWU1CT0woX3NuZF9wY21faHdfcGFyYW1zX2FueSk7CiAKIC8qKgotICogc25kX3BjbV9od19wYXJhbV92YWx1ZQorICogc25kX3BjbV9od19wYXJhbV92YWx1ZSAtIHJldHVybiBAcGFyYW1zIGZpZWxkIEB2YXIgdmFsdWUKICAqIEBwYXJhbXM6IHRoZSBod19wYXJhbXMgaW5zdGFuY2UKICAqIEB2YXI6IHBhcmFtZXRlciB0byByZXRyaWV2ZQotICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yIE5VTEwKKyAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciAlTlVMTAogICoKLSAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGZpZWxkIFBBUiBpZiBpdCdzIGZpeGVkIGluIGNvbmZpZ3VyYXRpb24gc3BhY2UgCi0gKiAgZGVmaW5lZCBieSBQQVJBTVMuIFJldHVybiAtRUlOVkFMIG90aGVyd2lzZQorICogUmV0dXJuIHRoZSB2YWx1ZSBmb3IgZmllbGQgQHZhciBpZiBpdCdzIGZpeGVkIGluIGNvbmZpZ3VyYXRpb24gc3BhY2UKKyAqIGRlZmluZWQgYnkgQHBhcmFtcy4gUmV0dXJuIC0lRUlOVkFMIG90aGVyd2lzZS4KICAqLwogaW50IHNuZF9wY21faHdfcGFyYW1fdmFsdWUoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkgICBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLCBpbnQgKmRpcikKQEAgLTEyNzEsMTMgKzEyNzEsMTMgQEAKIAogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fZmlyc3QKKyAqIHNuZF9wY21faHdfcGFyYW1fZmlyc3QgLSByZWZpbmUgY29uZmlnIHNwYWNlIGFuZCByZXR1cm4gbWluaW11bSB2YWx1ZQogICogQHBjbTogUENNIGluc3RhbmNlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKLSAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgJU5VTEwKICAqCi0gKiBJbnNpZGUgY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUyByZW1vdmUgZnJvbSBQQVIgYWxsIAorICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBAcGFyYW1zIHJlbW92ZSBmcm9tIEB2YXIgYWxsCiAgKiB2YWx1ZXMgPiBtaW5pbXVtLiBSZWR1Y2UgY29uZmlndXJhdGlvbiBzcGFjZSBhY2NvcmRpbmdseS4KICAqIFJldHVybiB0aGUgbWluaW11bS4KICAqLwpAQCAtMTMxNywxMyArMTMxNywxMyBAQAogCiAKIC8qKgotICogc25kX3BjbV9od19wYXJhbV9sYXN0CisgKiBzbmRfcGNtX2h3X3BhcmFtX2xhc3QgLSByZWZpbmUgY29uZmlnIHNwYWNlIGFuZCByZXR1cm4gbWF4aW11bSB2YWx1ZQogICogQHBjbTogUENNIGluc3RhbmNlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKLSAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgJU5VTEwKICAqCi0gKiBJbnNpZGUgY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUyByZW1vdmUgZnJvbSBQQVIgYWxsIAorICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBAcGFyYW1zIHJlbW92ZSBmcm9tIEB2YXIgYWxsCiAgKiB2YWx1ZXMgPCBtYXhpbXVtLiBSZWR1Y2UgY29uZmlndXJhdGlvbiBzcGFjZSBhY2NvcmRpbmdseS4KICAqIFJldHVybiB0aGUgbWF4aW11bS4KICAqLwpAQCAtMTM0NSwxMSArMTM0NSwxMSBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX2h3X3BhcmFtX2xhc3QpOwogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fY2hvb3NlCisgKiBzbmRfcGNtX2h3X3BhcmFtX2Nob29zZSAtIGNob29zZSBhIGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBieSBAcGFyYW1zCiAgKiBAcGNtOiBQQ00gaW5zdGFuY2UKICAqIEBwYXJhbXM6IHRoZSBod19wYXJhbXMgaW5zdGFuY2UKICAqCi0gKiBDaG9vc2Ugb25lIGNvbmZpZ3VyYXRpb24gZnJvbSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgUEFSQU1TCisgKiBDaG9vc2Ugb25lIGNvbmZpZ3VyYXRpb24gZnJvbSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcy4KICAqIFRoZSBjb25maWd1cmF0aW9uIGNob3NlbiBpcyB0aGF0IG9idGFpbmVkIGZpeGluZyBpbiB0aGlzIG9yZGVyOgogICogZmlyc3QgYWNjZXNzLCBmaXJzdCBmb3JtYXQsIGZpcnN0IHN1YmZvcm1hdCwgbWluIGNoYW5uZWxzLAogICogbWluIHJhdGUsIG1pbiBwZXJpb2QgdGltZSwgbWF4IGJ1ZmZlciBzaXplLCBtaW4gdGljayB0aW1lCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9taXNjLmMgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKaW5kZXggODliN2Y1NC4uZWEyYmY4MiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21pc2MuYwpAQCAtMzE5LDYgKzMxOSw3IEBACiAvKioKICAqIHNuZF9wY21fZm9ybWF0X3NpemUgLSByZXR1cm4gdGhlIGJ5dGUgc2l6ZSBvZiBzYW1wbGVzIG9uIHRoZSBnaXZlbiBmb3JtYXQKICAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgdG8gY2hlY2sKKyAqIEBzYW1wbGVzOiBzYW1wbGluZyByYXRlCiAgKgogICogUmV0dXJucyB0aGUgYnl0ZSBzaXplIG9mIHRoZSBnaXZlbiBzYW1wbGVzIGZvciB0aGUgZm9ybWF0LCBvciBhCiAgKiBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHVua25vd24gZm9ybWF0LgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCBlNjFlMTI1Li5hZWYxODY4MiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTg3NSwxMCArODc1LDggQEAKIH07CiAKIC8qKgotICogc25kX3BjbV9zdGFydAorICogc25kX3BjbV9zdGFydCAtIHN0YXJ0IGFsbCBsaW5rZWQgc3RyZWFtcwogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0gaW5zdGFuY2UKLSAqCi0gKiBTdGFydCBhbGwgbGlua2VkIHN0cmVhbXMuCiAgKi8KIGludCBzbmRfcGNtX3N0YXJ0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtOTI2LDEyICs5MjQsMTEgQEAKIH07CiAKIC8qKgotICogc25kX3BjbV9zdG9wCisgKiBzbmRfcGNtX3N0b3AgLSB0cnkgdG8gc3RvcCBhbGwgcnVubmluZyBzdHJlYW1zIGluIHRoZSBzdWJzdHJlYW0gZ3JvdXAKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCiAgKiBAc3RhdGU6IFBDTSBzdGF0ZSBhZnRlciBzdG9wcGluZyB0aGUgc3RyZWFtCiAgKgotICogVHJ5IHRvIHN0b3AgYWxsIHJ1bm5pbmcgc3RyZWFtcyBpbiB0aGUgc3Vic3RyZWFtIGdyb3VwLgotICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIGNoYW5nZWQgdG8gdGhlIGdpdmVuIHZhbHVlIGFmdGVyIHRoYXQgdW5jb25kaXRpb25hbGx5LgorICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIHRoZW4gY2hhbmdlZCB0byB0aGUgZ2l2ZW4gc3RhdGUgdW5jb25kaXRpb25hbGx5LgogICovCiBpbnQgc25kX3BjbV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgc3RhdGUpCiB7CkBAIC05NDEsMTEgKzkzOCwxMCBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N0b3ApOwogCiAvKioKLSAqIHNuZF9wY21fZHJhaW5fZG9uZQorICogc25kX3BjbV9kcmFpbl9kb25lIC0gc3RvcCB0aGUgRE1BIG9ubHkgd2hlbiB0aGUgZ2l2ZW4gc3RyZWFtIGlzIHBsYXliYWNrCiAgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbQogICoKLSAqIFN0b3AgdGhlIERNQSBvbmx5IHdoZW4gdGhlIGdpdmVuIHN0cmVhbSBpcyBwbGF5YmFjay4KLSAqIFRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgorICogQWZ0ZXIgc3RvcHBpbmcsIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgogICogVW5saWtlIHNuZF9wY21fc3RvcCgpLCB0aGlzIGFmZmVjdHMgb25seSB0aGUgZ2l2ZW4gc3RyZWFtLgogICovCiBpbnQgc25kX3BjbV9kcmFpbl9kb25lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTA2NSwxMCArMTA2MSw5IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3VzcGVuZAorICogc25kX3BjbV9zdXNwZW5kIC0gdHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBsaW5rZWQgc3RyZWFtcwogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0KICAqCi0gKiBUcmlnZ2VyIFNVU1BFTkQgdG8gYWxsIGxpbmtlZCBzdHJlYW1zLgogICogQWZ0ZXIgdGhpcyBjYWxsLCBhbGwgc3RyZWFtcyBhcmUgY2hhbmdlZCB0byBTVVNQRU5ERUQgc3RhdGUuCiAgKi8KIGludCBzbmRfcGNtX3N1c3BlbmQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMDg4LDEwICsxMDgzLDkgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9zdXNwZW5kKTsKIAogLyoqCi0gKiBzbmRfcGNtX3N1c3BlbmRfYWxsCisgKiBzbmRfcGNtX3N1c3BlbmRfYWxsIC0gdHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBzdWJzdHJlYW1zIGluIHRoZSBnaXZlbiBwY20KICAqIEBwY206IHRoZSBQQ00gaW5zdGFuY2UKICAqCi0gKiBUcmlnZ2VyIFNVU1BFTkQgdG8gYWxsIHN1YnN0cmVhbXMgaW4gdGhlIGdpdmVuIHBjbS4KICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gU1VTUEVOREVEIHN0YXRlLgogICovCiBpbnQgc25kX3BjbV9zdXNwZW5kX2FsbChzdHJ1Y3Qgc25kX3BjbSAqcGNtKQpAQCAtMTMxMywxMSArMTMwNyw5IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fcHJlcGFyZQorICogc25kX3BjbV9wcmVwYXJlIC0gcHJlcGFyZSB0aGUgUENNIHN1YnN0cmVhbSB0byBiZSB0cmlnZ2VyYWJsZQogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0gaW5zdGFuY2UKICAqIEBmaWxlOiBmaWxlIHRvIHJlZmVyIGZfZmxhZ3MKLSAqCi0gKiBQcmVwYXJlIHRoZSBQQ00gc3Vic3RyZWFtIHRvIGJlIHRyaWdnZXJhYmxlLgogICovCiBzdGF0aWMgaW50IHNuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9kdW1teS5jIGIvc291bmQvZHJpdmVycy9kdW1teS5jCmluZGV4IGU1ZTc0OWYuLjczYmU3ZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYworKysgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKQEAgLTUxLDcgKzUxLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDI1NiwgVUlOVF9NQVgpOwotCWlmIChlcnIpIDwgMCkKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBiNDkzNjYwLi5lNWQ0MjM5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdS9kYWMuaD4KICNpbmNsdWRlIDxhc20vY3B1L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KIAogI2RlZmluZSBNT0ROQU1FICJzaF9kYWNfYXVkaW8iCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggYTdkODk2Ni4uODhmYmYyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtNzU5LDcgKzc1OSw2IEBACiAJCQkgICAgICAgU1BDU19DSEFOTkVMTlVNX0xFRlQgfCBTUENTX1NPVVJDRU5VTV9VTlNQRUMgfAogCQkJICAgICAgIFNQQ1NfR0VORVJBVElPTlNUQVRVUyB8IDB4MDAwMDEyMDAgfAogCQkJICAgICAgIDB4MDAwMDAwMDAgfCBTUENTX0VNUEhBU0lTX05PTkUgfCBTUENTX0NPUFlSSUdIVCApOwotCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCAxYTY1Nzc1Li4yZWVkMmM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKIAlpbmZvLT5uYW1lID0gIk5WSURJQSBIRE1JIjsKKwlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOwogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3NuZF9wczMuYyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKaW5kZXggMjBkMGUzMi4uOGY5ZTM4NSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczMuYworKysgYi9zb3VuZC9wcGMvc25kX3BzMy5jCkBAIC02NjYsNiArNjY2LDcgQEAKIAljYXJkLT5hdnMuYXZzX2F1ZGlvX3dpZHRoID0gUFMzQVZfQ01EX0FVRElPX1dPUkRfQklUU18xNjsKIAljYXJkLT5hdnMuYXZzX2F1ZGlvX2Zvcm1hdCA9IFBTM0FWX0NNRF9BVURJT19GT1JNQVRfUENNOwogCWNhcmQtPmF2cy5hdnNfYXVkaW9fc291cmNlID0gUFMzQVZfQ01EX0FVRElPX1NPVVJDRV9TRVJJQUw7CisJbWVtY3B5KGNhcmQtPmF2cy5hdnNfY3NfaW5mbywgcHMzYXZfbW9kZV9jc19pbmZvLCA4KTsKIAogCXJldCA9IHNuZF9wczNfY2hhbmdlX2F2c2V0dGluZyhjYXJkKTsKIApAQCAtNjg1LDYgKzY4Niw3IEBACiB7CiAJc3RydWN0IHNuZF9wczNfY2FyZF9pbmZvICpjYXJkID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcHMzX2F2c2V0dGluZ19pbmZvIGF2czsKKwlpbnQgcmV0OwogCiAJYXZzID0gY2FyZC0+YXZzOwogCkBAIC03MjksMTkgKzczMSw5MiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoKGNhcmQtPmF2cy5hdnNfYXVkaW9fd2lkdGggIT0gYXZzLmF2c19hdWRpb193aWR0aCkgfHwKLQkgICAgKGNhcmQtPmF2cy5hdnNfYXVkaW9fcmF0ZSAhPSBhdnMuYXZzX2F1ZGlvX3JhdGUpKSB7Ci0JCWNhcmQtPmF2cyA9IGF2czsKLQkJc25kX3BzM19jaGFuZ2VfYXZzZXR0aW5nKGNhcmQpOworCW1lbWNweShhdnMuYXZzX2NzX2luZm8sIHBzM2F2X21vZGVfY3NfaW5mbywgOCk7CiAKKwlpZiAobWVtY21wKCZjYXJkLT5hdnMsICZhdnMsIHNpemVvZihhdnMpKSkgewogCQlwcl9kZWJ1ZygiJXM6IGFmdGVyIGZyZXE9JWQgd2lkdGg9JWRcbiIsIF9fZnVuY19fLAogCQkJIGNhcmQtPmF2cy5hdnNfYXVkaW9fcmF0ZSwgY2FyZC0+YXZzLmF2c19hdWRpb193aWR0aCk7CiAKLQkJcmV0dXJuIDA7CisJCWNhcmQtPmF2cyA9IGF2czsKKwkJc25kX3BzM19jaGFuZ2VfYXZzZXR0aW5nKGNhcmQpOworCQlyZXQgPSAwOwogCX0gZWxzZQotCQlyZXR1cm4gMTsKKwkJcmV0ID0gMTsKKworCS8qIGNoZWNrIENTIG5vbi1hdWRpbyBiaXQgYW5kIG11dGUgYWNjb3JkaW5nbHkgKi8KKwlpZiAoYXZzLmF2c19jc19pbmZvWzBdICYgMHgwMikKKwkJcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coMSk7IC8qIG11dGUgaWYgbm9uLWF1ZGlvICovCisJZWxzZQorCQlwczNhdl9hdWRpb19tdXRlX2FuYWxvZygwKTsKKworCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBTUERJRiBzdGF0dXMgYml0cyBjb250cm9scworICovCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfbWFza19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODsKKwl1aW5mby0+Y291bnQgPSAxOworCXJldHVybiAwOworfQorCisvKiBGSVhNRTogcHMzYXZfc2V0X2F1ZGlvX21vZGUoKSBhc3N1bWVzIG9ubHkgY29uc3VtZXIgbW9kZSAqLworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX2NtYXNrX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwltZW1zZXQodWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDB4ZmYsIDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfcG1hc2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwltZW1jcHkodWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIHBzM2F2X21vZGVfY3NfaW5mbywgOCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9kZWZhdWx0X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWlmIChtZW1jbXAocHMzYXZfbW9kZV9jc19pbmZvLCB1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1cywgOCkpIHsKKwkJbWVtY3B5KHBzM2F2X21vZGVfY3NfaW5mbywgdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDgpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGRpZl9jdGxzW10gPSB7CisJeworCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssQ09OX01BU0spLAorCQkuaW5mbyA9IHNuZF9wczNfc3BkaWZfbWFza19pbmZvLAorCQkuZ2V0ID0gc25kX3BzM19zcGRpZl9jbWFza19nZXQsCisJfSwKKwl7CisJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxQUk9fTUFTSyksCisJCS5pbmZvID0gc25kX3BzM19zcGRpZl9tYXNrX2luZm8sCisJCS5nZXQgPSBzbmRfcHMzX3NwZGlmX3BtYXNrX2dldCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxERUZBVUxUKSwKKwkJLmluZm8gPSBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbywKKwkJLmdldCA9IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9nZXQsCisJCS5wdXQgPSBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfcHV0LAorCX0sCit9OwogCiAKIHN0YXRpYyBpbnQgc25kX3BzM19tYXBfbW1pbyh2b2lkKQpAQCAtODQyLDcgKzkxNyw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF9wczNfZHJpdmVyX3Byb2JlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAJdTY0IGxwYXJfYWRkciwgbHBhcl9zaXplOwogCiAJQlVHX09OKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1BTM19MVjEpKTsKQEAgLTkwMyw2ICs5NzgsMTUgQEAKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+ZHJpdmVyLCAiUFMzIik7CiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPnNob3J0bmFtZSwgIlBTMyIpOwogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5sb25nbmFtZSwgIlBTMyBzb3VuZCIpOworCisJLyogY3JlYXRlIGNvbnRyb2wgZWxlbWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGRpZl9jdGxzKTsgaSsrKSB7CisJCXJldCA9IHNuZF9jdGxfYWRkKHRoZV9jYXJkLmNhcmQsCisJCQkJICBzbmRfY3RsX25ldzEoJnNwZGlmX2N0bHNbaV0sICZ0aGVfY2FyZCkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gY2xlYW5fY2FyZDsKKwl9CisKIAkvKiBjcmVhdGUgUENNIGRldmljZXMgaW5zdGFuY2UgKi8KIAkvKiBOT1RFOnRoaXMgZHJpdmVyIHdvcmtzIGFzc3VtaW5nIHBjbTpzdWJzdHJlYW0gPSAxOjEgKi8KIAlyZXQgPSBzbmRfcGNtX25ldyh0aGVfY2FyZC5jYXJkLApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3NuZF9wczMuaCBiL3NvdW5kL3BwYy9zbmRfcHMzLmgKaW5kZXggNGI3ZTZmYi4uMzI2ZmIyOSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczMuaAorKysgYi9zb3VuZC9wcGMvc25kX3BzMy5oCkBAIC01MSw2ICs1MSw3IEBACiAJdWludDMyX3QgYXZzX2F1ZGlvX3dpZHRoOwogCXVpbnQzMl90IGF2c19hdWRpb19mb3JtYXQ7IC8qIGZpeGVkICovCiAJdWludDMyX3QgYXZzX2F1ZGlvX3NvdXJjZTsgLyogZml4ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGF2c19jc19pbmZvWzhdOwogfTsKIC8qCiAgKiBQUzMgYXVkaW8gJ2NhcmQnIGluc3RhbmNlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jIGIvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYwppbmRleCA5OGEyZDU4Li5iMTk2NmU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jCisrKyBiL3NvdW5kL3NvYy9hdDMyL3BsYXlwYXFfd204NTEwLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCiAKIAotc3RhdGljIGNvbnN0IGNoYXIgKmludGVyY29uW11bM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0gewogCS8qIHNwZWFrZXIgY29ubmVjdGVkIHRvIFNQS09VVCAqLwogCXsiRXh0IFNwayIsIE5VTEwsICJTUEtPVVRQIn0sCiAJeyJFeHQgU3BrIiwgTlVMTCwgIlNQS09VVE4ifSwKQEAgLTMxMiw5ICszMTIsNiBAQAogCXsiTWljIEJpYXMiLCBOVUxMLCAiSW50IE1pYyJ9LAogCXsiTUlDTiIsIE5VTEwsICJNaWMgQmlhcyJ9LAogCXsiTUlDUCIsIE5VTEwsICJNaWMgQmlhcyJ9LAotCi0JLyogVGVybWluYXRvciAqLwotCXtOVUxMLCBOVUxMLCBOVUxMfSwKIH07CiAKIApAQCAtMzM0LDExICszMzEsOCBAQAogCS8qCiAJICogU2V0dXAgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzCiAJICovCi0JZm9yIChpID0gMDsgaW50ZXJjb25baV1bMF0gIT0gTlVMTDsgaSsrKSB7Ci0JCXNuZF9zb2NfZGFwbV9jb25uZWN0X2lucHV0KGNvZGVjLAotCQkJCQkgICBpbnRlcmNvbltpXVswXSwKLQkJCQkJICAgaW50ZXJjb25baV1bMV0sIGludGVyY29uW2ldWzJdKTsKLQl9CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKIAogCiAJLyogYWx3YXlzIGNvbm5lY3RlZCBwaW5zICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggMGEwNjNhOS4uODUzYjMzYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNDMsNiArNDMsNyBAQAogc3RydWN0IG9tYXBfbWNic3BfZGF0YSB7CiAJdW5zaWduZWQgaW50CQkJYnVzX2lkOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcJcmVnczsKKwl1bnNpZ25lZCBpbnQJCQlmbXQ7CiAJLyoKIAkgKiBGbGFncyBpbmRpY2F0aW5nIGlzIHRoZSBidXMgYWxyZWFkeSBhY3RpdmF0ZWQgYW5kIGNvbmZpZ3VyZWQgYnkKIAkgKiBhbm90aGVyIHN1YnN0cmVhbQpAQCAtMjAwLDYgKzIwMSw3IEBACiAJc3RydWN0IG9tYXBfbWNic3BfZGF0YSAqbWNic3BfZGF0YSA9IHRvX21jYnNwKGNwdV9kYWktPnByaXZhdGVfZGF0YSk7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqcmVncyA9ICZtY2JzcF9kYXRhLT5yZWdzOwogCWludCBkbWEsIGJ1c19pZCA9IG1jYnNwX2RhdGEtPmJ1c19pZCwgaWQgPSBjcHVfZGFpLT5pZDsKKwlpbnQgd2xlbjsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKQEAgLTI0NCwxOSArMjQ2LDI5IEBACiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgogCQkvKiBTZXQgd29yZCBsZW5ndGhzICovCisJCXdsZW4gPSAxNjsKIAkJcmVncy0+cmNyMgl8PSBSV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNik7CiAJCXJlZ3MtPnJjcjEJfD0gUldETEVOMShPTUFQX01DQlNQX1dPUkRfMTYpOwogCQlyZWdzLT54Y3IyCXw9IFhXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KTsKIAkJcmVncy0+eGNyMQl8PSBYV0RMRU4xKE9NQVBfTUNCU1BfV09SRF8xNik7Ci0JCS8qIFNldCBGUyBwZXJpb2QgYW5kIGxlbmd0aCBpbiB0ZXJtcyBvZiBiaXQgY2xvY2sgcGVyaW9kcyAqLwotCQlyZWdzLT5zcmdyMgl8PSBGUEVSKDE2ICogMiAtIDEpOwotCQlyZWdzLT5zcmdyMQl8PSBGV0lEKDE2IC0gMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFVuc3VwcG9ydGVkIFBDTSBmb3JtYXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogU2V0IEZTIHBlcmlvZCBhbmQgbGVuZ3RoIGluIHRlcm1zIG9mIGJpdCBjbG9jayBwZXJpb2RzICovCisJc3dpdGNoIChtY2JzcF9kYXRhLT5mbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlyZWdzLT5zcmdyMgl8PSBGUEVSKHdsZW4gKiAyIC0gMSk7CisJCXJlZ3MtPnNyZ3IxCXw9IEZXSUQod2xlbiAtIDEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlyZWdzLT5zcmdyMgl8PSBGUEVSKHdsZW4gKiAyIC0gMSk7CisJCXJlZ3MtPnNyZ3IxCXw9IEZXSUQoMCk7CisJCWJyZWFrOworCX0KKwogCW9tYXBfbWNic3BfY29uZmlnKGJ1c19pZCwgJm1jYnNwX2RhdGEtPnJlZ3MpOwogCW1jYnNwX2RhdGEtPmNvbmZpZ3VyZWQgPSAxOwogCkBAIC0yNzIsMTAgKzI4NCwxMiBAQAogewogCXN0cnVjdCBvbWFwX21jYnNwX2RhdGEgKm1jYnNwX2RhdGEgPSB0b19tY2JzcChjcHVfZGFpLT5wcml2YXRlX2RhdGEpOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgKnJlZ3MgPSAmbWNic3BfZGF0YS0+cmVnczsKKwl1bnNpZ25lZCBpbnQgdGVtcF9mbXQgPSBmbXQ7CiAKIAlpZiAobWNic3BfZGF0YS0+Y29uZmlndXJlZCkKIAkJcmV0dXJuIDA7CiAKKwltY2JzcF9kYXRhLT5mbXQgPSBmbXQ7CiAJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZigqcmVncykpOwogCS8qIEdlbmVyaWMgTWNCU1AgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KIAlyZWdzLT5zcGNyMgl8PSBYSU5UTSgzKSB8IEZSRUU7CkBAIC0yOTMsNiArMzA3LDggQEAKIAkJLyogMC1iaXQgZGF0YSBkZWxheSAqLwogCQlyZWdzLT5yY3IyICAgICAgfD0gUkRBVERMWSgwKTsKIAkJcmVncy0+eGNyMiAgICAgIHw9IFhEQVRETFkoMCk7CisJCS8qIEludmVydCBiaXQgY2xvY2sgYW5kIEZTIHBvbGFyaXR5IGNvbmZpZ3VyYXRpb24gZm9yIERTUF9BICovCisJCXRlbXBfZm10IF49IFNORF9TT0NfREFJRk1UX0lCX0lGOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBVbnN1cHBvcnRlZCBkYXRhIGZvcm1hdCAqLwpAQCAtMzE2LDcgKzMzMiw3IEBACiAJfQogCiAJLyogU2V0IGJpdCBjbG9jayAoQ0xLWC9DTEtSKSBhbmQgRlMgcG9sYXJpdGllcyAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwlzd2l0Y2ggKHRlbXBfZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgogCQkvKgogCQkgKiBOb3JtYWwgQkNMSyArIEZTLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCBlZmJkMGIzLi43MzUxZGI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtODMxLDcgKzgzMSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlhc29jX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImFzb2MiLCBOVUxMKTsKLQlpZiAoIUlTX0VSUihhc29jX2RlYnVnZnMpKQorCWlmICghSVNfRVJSKGFzb2NfZGVidWdmcykgJiYgYXNvY19kZWJ1Z2ZzKQogCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImRhcG1fcG9wX3RpbWUiLCAwNzQ0LCBhc29jX2RlYnVnZnMsCiAJCQkJICAgJnBvcF90aW1lKTsKIAllbHNlCg==